#include "stdafx.h"
#include <string>
#include <vector>
using namespace std;
#include "SerialPort.h"
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport)
#define EXPIMP_TEMPLATE
#else
#define DLL_API __declspec(dllimport)
#define EXPIMP_TEMPLATE extern
#endif
//電量結(jié)構(gòu)
class dlValue
{
public:
dlValue(){}
char time[20];//時(shí)間
char meterCode[30];//電表號(hào)
char zdl[20];//總電量(千瓦時(shí))
char fdl[20];//峰電量(千瓦時(shí))
char gdl[20];//谷電量(千瓦時(shí))
char jdl[20];//尖電量(千瓦時(shí))
char pdl[20];//平電量(千瓦時(shí))
public:
BOOL operator < (const dlValue &c) const {return TRUE;}
BOOL operator == (const dlValue &c) const {return TRUE;}
};
//費(fèi)率設(shè)置結(jié)構(gòu)
class setFeeRate
{
public:
setFeeRate(){}
char mark[3];//費(fèi)率標(biāo)志 01---代表峰, 02---代表谷,03---代表尖, 04---代表平.
char time[20];//時(shí)間 hh:mm:ss-hh:mm:ss (開始時(shí)間-結(jié)束時(shí)間)
public:
BOOL operator < (const setFeeRate &c) const {return TRUE;}
BOOL operator == (const setFeeRate &c) const {return TRUE;}
};
//--輸入?yún)?shù)ca:
struct commArg
{
char port[10];//端口號(hào) 例如:1 2等
char baudRate[10];//波特率 例如:9600 2400等
char telCode[30];//電話號(hào)碼 例如 02423974200 等
char ip[25];//ip:port 例如:192.168.1.1:8080
} ;
//--輸出參數(shù)rtn:
struct centerParam
{
char meterNum[5];// 電表個(gè)數(shù)
char centerTime[20];// 集中器當(dāng)前時(shí)間 yyyy-mm-dd hh:mm:ss
char freezeIt[20];// 凍結(jié)時(shí)間 dd hh:mm:ss(dd為日期,hh為小時(shí),mm為分鐘,ss為秒)
} ;
//顯示實(shí)例化模板類
EXPIMP_TEMPLATE template class DLL_API std::vector<string>;
EXPIMP_TEMPLATE template class DLL_API std::vector<dlValue>;
EXPIMP_TEMPLATE template class DLL_API std::vector<setFeeRate>;
typedef std::vector<string> pchVct;
typedef std::vector<dlValue> structVctDL;
typedef std::vector<setFeeRate> structVctFeeRate;
class AFX_EXT_CLASS FUGEN //導(dǎo)出類
{
public:
FUGEN();
~FUGEN();
//////////////////////////////////////////////////////////////////輔助函數(shù)
private:
//1獲得記錄個(gè)數(shù)
int GetCounts();
//2確認(rèn)端口
BOOL ConfigureComPort();
//3在庫中查詢表號(hào),存在返回序號(hào); 并將所有表號(hào)存入m_allCode;
int SearchAndGet(char * meterCode);
//////////////////////////////////////////////////////////////////功能函數(shù)
public:
//1連接
int connect (struct commArg* ca);
//2斷開
int close (char* com);
//3抄表號(hào)(某一個(gè)集中器所包含的集抄電表的表號(hào))
int meterCode (pchVct* rtn, char* jzq);
//4點(diǎn)名實(shí)時(shí)抄表(集中器上的某一個(gè)電表的讀數(shù))
int realTimeMeter (dlValue* rtn,char* jzq,char* meterCode);
//5連續(xù)抄表(連續(xù)抄出當(dāng)時(shí)或與當(dāng)時(shí)最近的凍結(jié)電量)
int continueMeter (structVctDL* rtn,char* jzq, pchVct* metercodeset);
//6每月上報(bào)日電量(每月給電力營銷系統(tǒng)的上報(bào)電量)
int freezeValue (structVctDL* rtn,char* jzq, pchVct* metercodeset);
//7抄集中器基本參數(shù)(電表個(gè)數(shù)、集中器時(shí)間、上報(bào)日等基本參數(shù))
int centerArg (struct centerParam* rtn,char* jzq);
//8廣播校時(shí)
int publicTime (char* jzq);
//9設(shè)置每月上報(bào)日
int freezeTime (char* jzq,char* freezeIt);
//10時(shí)段費(fèi)率設(shè)置(峰、谷、尖、平四個(gè)時(shí)段的設(shè)置)
int feeRate (char* jzq, structVctFeeRate* argFeeRate);
//11增加表號(hào)
int addMeterCode (char* jzq,char* meterNum);
//12修改表號(hào)
int modifyMeterCode (char* jzq, char* oldNum, char* newNum);
//13刪除表號(hào)
int delMeterCode (char* jzq, char* meterNum);
private:
CSerialPort* m_pComm;//端口
pchVct m_allCode;
int retW;
int retR;
int commandLen;
char command[256];
char respond[256];
};
// SerialPort.h: interface for the CSerialPort class.
//
//////////////////////////////////////////////////////////////////////
#ifndef _MY_SERIAL_PORT_H_
#define _MY_SERIAL_PORT_H_
class AFX_EXT_CLASS CSerialPort
{
public:
CSerialPort();
virtual ~CSerialPort();
public:
BOOL OpenPort(TCHAR* strPort, int nBaud);
VOID ClosePort();
int InBufferCount(VOID);
DWORD ReadBytes(PBYTE buffer, DWORD dwByteRead);
DWORD WriteBytes(const char * buffer, DWORD dwByteWrite);
public:
BOOL m_bOpened;
HANDLE m_hCommDev; //設(shè)備控制塊結(jié)構(gòu)
};
#endif //_MY_SERIAL_PORT_H_