BatteryAdu2000.h 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. #ifndef __HBATTERYADU200__
  2. #define __HBATTERYADU200__
  3. /*************************************************
  4. /* Copyright (C), 2010-2012,StoneU. Co., Ltd.
  5. /* File name: BatteryAdu2000.h
  6. /* Author: Zero.t
  7. /* Version: Ver1.0.0.1
  8. /* Date: 2011-1-17
  9. /* Description: ADU2000协议;
  10. /* Others: ###;
  11. /* Function List: ###
  12. /* History:
  13. 1.Date: 2012-10-22
  14. Author: Zero.t
  15. Modification: 优化函数;
  16. /* 测试通过,OK;
  17. *************************************************/
  18. #pragma once
  19. #include "comminterface.h"
  20. class CBatteryAdu2000 :
  21. public CCommInterface
  22. {
  23. public:
  24. #define ADU_SEND_MSG 32
  25. #define ADU_TYPE_LENGTH 10
  26. #define DEBUG_ADU 1
  27. #define ADU_MAX_BUF 500
  28. enum __ERRO_CODE_BATTERYADU2000
  29. {
  30. ERR_CODE_ADU_COM_FAULT = 50201 , //Battery电池检测设备串口通信故障
  31. ERR_CODE_ADU_COM_BUSY , //Battery电池检测设备串口通信忙
  32. ERR_CODE_ADU_COM_READ_NO_DATA , //Battery电池检测设备没有读到数据
  33. ERR_CODE_ADU_COM_READ_LEN_OVER , //Battery电池检测设备读到数据长度超时限制
  34. ERR_CODE_ADU_COM_LRC_LOST , //Battery电池检测设备lrc校验失败
  35. EER_CODE_ADU_COM_WRITE_DATA , //Battery电池检测设备写串口错误
  36. EER_CODE_ADU_COM_REGNUM , //Battery电池检测设备寄存器数
  37. ERR_CODE_ADU_COM_VARLEN , //Battery电池检测设备变量长度非法
  38. ERR_CODE_ADU_COM_INVALIDRES , //Battery电池检测设备无效应答
  39. };
  40. enum _ERRO_CODE_RTN
  41. {
  42. ERR_CODE_RTN_NATURAL = 00, // 正常
  43. ERR_CODE_RTN_VER_ERROR, // VER错误
  44. ERR_CODE_RTN_CHKSUM_ERROR, // CHECKSUM错
  45. ERR_CODE_RTN_LCHKSUM_ERROR, // LCHECKSUM
  46. ERR_CODE_RTN_CID_ERROR, // CID2无效
  47. ERR_CODE_RTN_COMMAND_FORMAT, // 命令格式错
  48. ERR_CODE_RTN_INVALID_DATA, // 无效数据
  49. ERR_CODE_RTN_OTHER_ERROR // 其他
  50. };
  51. /*共享头信息*/
  52. typedef struct __HEADMES
  53. {
  54. BYTE Start; //头SOI;
  55. BYTE Version[2]; //版本号;
  56. BYTE Address[2]; //地址;
  57. BYTE Cid1[2]; //
  58. BYTE Cid2[2]; //
  59. BYTE Lenth[4]; //长度;
  60. }HEADMES, *pHEADMES;
  61. //写串口数据缓存结构
  62. typedef struct __REQUEST_STRUCT
  63. {
  64. HEADMES headMes; //头信息;
  65. BYTE GroupInfo[2] ; //命令检索信息;
  66. BYTE chkSum[4]; //校验;
  67. BYTE End; //尾EOI
  68. }REQUEST_STRUCT,*PREQUEST_STRUCT;
  69. //写串口数据缓存结构
  70. typedef struct __WREQUEST_STRUCT
  71. {
  72. HEADMES headMes; //头信息;
  73. BYTE GroupInfo[6] ; //命令检索信息;
  74. BYTE chkSum[4]; //校验;
  75. BYTE End; //尾EOI
  76. }WREQUEST_STRUCT,*WPREQUEST_STRUCT;
  77. //读串口数据缓存结构
  78. typedef struct __RESPONSE_STRUCT
  79. {
  80. HEADMES headMES;
  81. BYTE rtnMsg[500];
  82. BYTE chkSum[4];
  83. BYTE End;
  84. }RESPONSE_STRUCT,*PRESPONSE_STRUCT;
  85. //协议数据包;
  86. typedef struct _REQUESTSET_STRUCT
  87. {
  88. BYTE Sol; //起始标志位(7EH)
  89. BYTE Ver[2]; //通讯协议版本号
  90. BYTE Adr[2]; //设备地址描述(1--254;0,255保留)
  91. BYTE Cid1[2]; //控制标示符(2AH)
  92. BYTE Cid2[2]; //信息类型
  93. BYTE Length[4]; //内容长度
  94. char szInfo[500]; //协议内容
  95. BYTE Chksum[4]; //校验和码
  96. BYTE Eol; //结束码 0x0d(回车)
  97. }REQUESTSET_STRCUT, *PREQUESTSET_STRCUT;
  98. public:
  99. CBatteryAdu2000(char *szPath,char *szIniName,int nCommPort,int nAddr,int nRate,int nDataBit,int nStopBit,int nParity,int nInterval );
  100. virtual ~CBatteryAdu2000(void);
  101. BOOL AduOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  102. // 发送读请求;
  103. int SendReadRequest(
  104. char *szPath, // 程序所在路径
  105. char *szIniName, // 配置文件名称
  106. int nCommPort, // 串行端口
  107. int nAddr, // 设备地址
  108. char *szCmd, // 请求命令
  109. char *szMsg, // 响应的值
  110. int nReversed1, // 预留整形参数1接口
  111. int nReversed2, // 预留整形参数2接口
  112. int nReversed3, // 预留整形参数3接口
  113. int nReversed4, // 预留整形参数4接口
  114. int nReversed5, // 预留整形参数5接口
  115. float fReversed1, // 预留float参数1接口
  116. float fReversed2, // 预留float参数2接口
  117. float fReversed3, // 预留float参数3接口
  118. char *szReversed1, // 预留字符数组参数1接口
  119. char *szReversed2, // 预留字符数组参数2接口
  120. char *szReversed3, // 预留字符数组参数3接口
  121. char *szReversed4, // 预留字符数组参数4接口
  122. char *szReversed5 // 预留字符数组参数5接口
  123. );
  124. // 发送写设置;
  125. int SendSetReuest(
  126. char *szPath, // 程序所在路径
  127. char *szIniName, // 配置文件名称
  128. int nCommPort, // 串行端口
  129. int nAddr, // 设备地址
  130. char *szCmd, // 请求命令
  131. char *szMsg, // 响应的值
  132. int nReversed1, // 预留整形参数1接口
  133. int nReversed2, // 预留整形参数2接口
  134. int nReversed3, // 预留整形参数3接口
  135. int nReversed4, // 预留整形参数4接口
  136. int nReversed5, // 预留整形参数5接口
  137. float fReversed1, // 预留float参数1接口
  138. float fReversed2, // 预留float参数2接口
  139. float fReversed3, // 预留float参数3接口
  140. char *szReversed1, // 预留字符数组参数1接口
  141. char *szReversed2, // 预留字符数组参数2接口
  142. char *szReversed3, // 预留字符数组参数3接口
  143. char *szReversed4, // 预留字符数组参数4接口
  144. char *szReversed5 // 预留字符数组参数5接口
  145. );
  146. private:
  147. HANDLE m_hSemComm;
  148. #if IS_USE_READMSG_CS
  149. CRITICAL_SECTION m_csReadMsg;
  150. #endif
  151. protected:
  152. int GetIniInfo( char *szPath,char *szIniName,char *szCmd,char *IniSendCMD,int &IniSendlen,char *szDataType,int &nIndex,int &nLen, int &iSBit, int &iEBit);
  153. int GetDeviceParam( int nAddr,CCommProcess *pComm,char *szCmd,char *IniSendCMD,const int &IniSendlen);
  154. int Send_ReadDeviceData(int nAddr,CCommProcess *pComm,char *szCmd, const char *IniSendCMD,const int &IniSendlen);
  155. int Recv_ReadDeviceData(int nAddr,CCommProcess *pComm,char *szCmd);
  156. //*********************************************************************************************************************
  157. int SetDeviceParam( int nAddr,CCommProcess *pComm,char *szCmd,char *szSetMsg,char *szRecvMsg,char *IniSendCMD, const int &IniSendlen) ; //,const int &nIndex, const int &nlen, char *szDataType);
  158. int Send_WriteDeviceData(int naddr, CCommProcess *pComm, char *szCmd, char *szSetMsg, char *IniSendCMD, const int &IniSendlen );
  159. int Recv_WriteDeviceData(int nAddr, CCommProcess *pComm, char *szCmd, char *szRecvMsg );
  160. //*********************************************************************************************************************
  161. int GetAdu_CommandFFVarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &iSBit, int &iEBit, char *szDataType);
  162. int GetAdu_Command81VarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &iSBit, int &iEBit, char *szDataType);
  163. int GetAdu_CommandResetVarMsg(int nAddr,char *szCmd, char *szRecvMsg, int &nIndex,int &nLen, int &SBit, int &EBit, char *szDataType);
  164. void SetAduCommandFFVarMsg( int nAddr,char *szCmd, char *pBuffer);
  165. void SetAduCommand81VarMsg( int nAddr,char *szCmd, char *pBuffer);
  166. void SetAduCommandResetVarMsg( int nAddr,char *szCmd, char *pBuffer);
  167. WORD RtnCheck(char Msg[VAR_MSG]);
  168. void SimulationCommData(int nAddr);
  169. BYTE GetLengthSum(BYTE szChar[]);
  170. int LengthCheck(char szSendMsg[],int nReadLen);
  171. BOOL ValiateLength(char szChar[]);
  172. UINT GetCheckSum(char *pBuf, char chDest[5], int len);
  173. private:
  174. char m_Adu_FFMsg[MAX_ADDR][ADU_MAX_BUF];
  175. char m_Adu_81Msg[MAX_ADDR][ADU_MAX_BUF];
  176. BOOL m_dwOnlineTick[MAX_ADDR];
  177. BOOL m_devOnline[MAX_ADDR];
  178. };
  179. #endif