一個 DLL, (涉及STL, AT, SerialPort, 集中器協議)很不錯喔!


#pragma warning(disable:4231)
#pragma warning(disable:4273)
#pragma warning(disable:4786)

#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

//電量結構
class dlValue
{
public:
 dlValue(){}
 char time[20];//時間
 char meterCode[30];//電錶號
 char zdl[20];//總電量(千瓦時)
 char fdl[20];//峯電量(千瓦時)
 char gdl[20];//谷電量(千瓦時)
 char jdl[20];//尖電量(千瓦時)
 char pdl[20];//平電量(千瓦時)
public:
 BOOL operator < (const dlValue &c) const {return TRUE;}
 BOOL operator == (const dlValue &c) const {return TRUE;}
};

//費率設置結構
class setFeeRate
{
public:
 setFeeRate(){}
 char mark[3];//費率標誌 01---代表峯, 02---代表谷,03---代表尖, 04---代表平.
 char time[20];//時間 hh:mm:ss-hh:mm:ss (開始時間-結束時間)
public:
 BOOL operator < (const setFeeRate &c) const {return TRUE;}
 BOOL operator == (const setFeeRate &c) const {return TRUE;} 
};

//--輸入參數ca:
struct commArg
{
 char port[10];//端口號 例如:1   2等
 char baudRate[10];//波特率  例如:9600 2400等
 char telCode[30];//電話號碼 例如 02423974200 等
 char ip[25];//ip:port 例如:192.168.1.1:8080
} ;

//--輸出參數rtn:
struct centerParam
{
 char meterNum[5];// 電錶個數
 char centerTime[20];// 集中器當前時間 yyyy-mm-dd hh:mm:ss
 char freezeIt[20];// 凍結時間 dd hh:mm:ss(dd爲日期,hh爲小時,mm爲分鐘,ss爲秒)
} ;

//顯示實例化模板類
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 //導出類
{
 public:
  FUGEN();
  ~FUGEN();
//////////////////////////////////////////////////////////////////輔助函數
 private:

  //1獲得記錄個數
  int GetCounts();

  //2確認端口
  BOOL ConfigureComPort();

  //3在庫中查詢表號,存在返回序號; 並將所有表號存入m_allCode;
  int SearchAndGet(char * meterCode);
    
//////////////////////////////////////////////////////////////////功能函數
 public:  

  //1連接
  int connect (struct commArg* ca);

  //2斷開
  int close (char* com);

  //3抄表號(某一個集中器所包含的集抄電錶的表號)
  int meterCode (pchVct* rtn, char* jzq);

  //4點名實時抄表(集中器上的某一個電錶的讀數)
  int realTimeMeter (dlValue* rtn,char* jzq,char* meterCode);

  //5連續抄表(連續抄出當時或與當時最近的凍結電量)
  int continueMeter (structVctDL* rtn,char* jzq, pchVct* metercodeset);

  //6每月上報日電量(每月給電力營銷系統的上報電量)
  int freezeValue (structVctDL* rtn,char* jzq, pchVct* metercodeset);

  //7抄集中器基本參數(電錶個數、集中器時間、上報日等基本參數)
  int centerArg (struct centerParam* rtn,char* jzq);

  //8廣播校時
  int publicTime (char* jzq);

  //9設置每月上報日
  int freezeTime (char* jzq,char* freezeIt);

  //10時段費率設置(峯、谷、尖、平四個時段的設置)
  int feeRate (char* jzq, structVctFeeRate* argFeeRate);

  //11增加表號
  int addMeterCode (char* jzq,char* meterNum);

  //12修改表號
  int modifyMeterCode (char* jzq, char* oldNum, char* newNum);

  //13刪除表號
  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;   //設備控制塊結構
};

#endif //_MY_SERIAL_PORT_H_

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章