复件 Daikin.h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. #ifndef DAIKIN_H
  2. #define DAIKIN_H
  3. #if _MSC_VER > 1000
  4. #pragma once
  5. #endif // _MSC_VER > 1000
  6. #define DEBUG_DAIKIN 1
  7. #include "CommInterface.h"
  8. class CDaiKin: public CCommInterface
  9. {
  10. #define DAIKIN_SEND_MSG 40
  11. #define SEND_INFO 20
  12. #define DK_TYPE_LENGTH 10
  13. #define CID2_LENGTH 3
  14. #define DAIKIN_RECEIVE_MSG 256
  15. /*发送控制设备命令*/
  16. typedef struct __HEADMES
  17. {
  18. BYTE Start;
  19. BYTE Version[2];
  20. BYTE Address[2];
  21. BYTE Cid1[2];
  22. BYTE Cid2[2];
  23. BYTE Lenth[4];
  24. }HEADMES, *pHEADMES;
  25. //写串口数据
  26. typedef struct __REQUEST_STRUCT
  27. {
  28. HEADMES headMes;
  29. BYTE chkSum[4];
  30. BYTE End;
  31. //BYTE szContext[VAR_MSG];
  32. }REQUEST_STRUCT,*PREQUEST_STRUCT;
  33. typedef struct __RESPONSE_STRUCT
  34. {
  35. HEADMES headMES;
  36. BYTE rtnMsg[200];
  37. BYTE chkSum[4];
  38. BYTE End;
  39. }RESPONSE_STRUCT,*PRESPONSE_STRUCT;
  40. //发送控制命令
  41. typedef struct _REQUESTSET_STRUCT
  42. {
  43. BYTE Sol; //起始标志位(7EH)
  44. BYTE Ver[2]; //通讯协议版本号
  45. BYTE Adr[2]; //设备地址描述(1--254;0,255保留)
  46. BYTE Cid1[2]; //控制标示符(2AH)
  47. BYTE Cid2[2]; //信息类型
  48. BYTE Length[4]; //内容长度
  49. char szInfo[2]; //协议内容
  50. BYTE Chksum[4]; //校验和码
  51. BYTE Eol; //结束码 0x0d(回车)
  52. }REQUESTSET_STRCUT, *PREQUESTSET_STRCUT;
  53. // UPS DataMate300 设备Dll错误代码定义
  54. enum __ERRO_CODE_DAIKIN
  55. {
  56. ERR_CODE_DAIKIN_COM_FAULT = 50201 , //DATAMATE3000设备串口通信故障
  57. ERR_CODE_DAIKIN_COM_BUSY , //DATAMATE3000设备串口通信忙
  58. ERR_CODE_DAIKIN_COM_READ_NO_DATA , //DATAMATE3000设备没有读到数据
  59. ERR_CODE_DAIKIN_COM_READ_LEN_OVER , //DATAMATE3000设备读到数据长度超时限制
  60. ERR_CODE_DAIKIN_COM_CHKSUM_LOST , //DATAMATE3000设备校验失败
  61. EER_CODE_DAIKIN_COM_WRITE_DATA , //DATAMATE3000设备写串口错误
  62. EER_CODE_DAIKIN_COM_REGNUM , //DATAMATE3000设备寄存器数
  63. ERR_CODE_DAIKIN_COM_VARLEN , //DATAMATE3000设备变量长度非法
  64. ERR_CODE_DAIKIN_COM_INVALIDRES , //DATAMATE3000设备无效应答
  65. };
  66. enum __ERRO_CID_RTN
  67. {
  68. ERR_CID_RTN_NORMAL = 0x00 , //正常
  69. ERR_CID_RTN_VAR , //VAR错误
  70. ERR_CID_RTN_CHKSUM , //CHKSUM错误
  71. ERR_CID_RTN_LCHKSUM , //LCHKSUM错误
  72. ERR_CID_RTN_CID2 , //CID2错误
  73. ERR_CID_RTN_FORMAT , //命令格式错误
  74. ERR_CID_RTN_INVALI_DATA , //无效的数据
  75. RRR_CODE_RTN_CHKSUM_ERROR , // CHECKSUM错
  76. ERR_CODE_RTN_CHKSUM_ERROR ,
  77. ERR_CODE_RTN_CHKSUM_RTN_ERROR ,
  78. };
  79. public:
  80. BOOL DaiKinOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  81. CDaiKin(
  82. char szPath[MAX_PATH], // 程序所在路径
  83. char szIniName[MAX_PATH], // 配置文件名称
  84. int nCommPort, // 串行端口
  85. int nAddr, // 设备地址
  86. int nRate, // 波特率
  87. int nDataBit, // 数据位
  88. int nStopBit, // 停止位
  89. int nParity, // 校验位
  90. int nInterval // 时间间隔
  91. );
  92. virtual ~CDaiKin();
  93. // 发送读取设备参数请求
  94. int SendReadRequest(
  95. char szPath[MAX_PATH], // 程序所在路径
  96. char szIniName[MAX_PATH], // 配置文件名称
  97. int nCommPort, // 串行端口
  98. int nAddr, // 设备地址
  99. char szCmd[MAX_CMD], // 请求命令
  100. char szMsg[VAR_MSG], // 响应的值
  101. int nReversed1, // 预留整形参数1接口
  102. int nReversed2, // 预留整形参数2接口
  103. int nReversed3, // 预留整形参数3接口
  104. int nReversed4, // 预留整形参数4接口
  105. int nReversed5, // 预留整形参数5接口
  106. float fReversed1, // 预留float参数1接口
  107. float fReversed2, // 预留float参数2接口
  108. float fReversed3, // 预留float参数3接口
  109. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  110. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  111. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  112. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  113. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  114. );
  115. // 发送设置设备参数请求
  116. int SendSetReuest(
  117. char szPath[MAX_PATH], // 程序所在路径
  118. char szIniName[MAX_PATH], // 配置文件名称
  119. int nCommPort, // 串行端口
  120. int nAddr, // 设备地址
  121. char szCmd[MAX_CMD], // 请求命令
  122. char szMsg[VAR_MSG], // 响应的值
  123. int nReversed1, // 预留整形参数1接口
  124. int nReversed2, // 预留整形参数2接口
  125. int nReversed3, // 预留整形参数3接口
  126. int nReversed4, // 预留整形参数4接口
  127. int nReversed5, // 预留整形参数5接口
  128. float fReversed1, // 预留float参数1接口
  129. float fReversed2, // 预留float参数2接口
  130. float fReversed3, // 预留float参数3接口
  131. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  132. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  133. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  134. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  135. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  136. );
  137. private:
  138. //读取配置文件
  139. int GetFromIni(
  140. char szPath[MAX_PATH], //服务器程序所在目录
  141. char szIniName[MAX_PATH], //配置文件名
  142. char szCmd[MAX_CMD], //命令
  143. char szCid2[CID2_LENGTH], //发送Buffer
  144. char szType[TYPE_LENGTH],
  145. int &nIndex,
  146. int &nLen,
  147. int &nStaBit,
  148. int &nEndBit
  149. );
  150. int RequestStatus(int Addr,
  151. char szCmd[MAX_CMD], // 命令
  152. CCommProcess *pComm, //串口对象指针
  153. char chSendMsg[DAIKIN_RECEIVE_MSG] //发送Buffer
  154. );
  155. int ResponseStatus(
  156. int nAddr, // 设备地址
  157. CCommProcess *pComm, //串口对象指针
  158. char szCmd[MAX_CMD], // 命令
  159. char szMsg[VAR_MSG], // 接收Buffer
  160. int &nIndex, // 变量索引,针对接收Buffer而言
  161. int &nLen, // 变量长度
  162. char szType[TYPE_LENGTH] // 变量数据类型
  163. );
  164. int WriteRequestStatus( int nAddr,
  165. char szCmd[MAX_CMD], // 命令
  166. CCommProcess *pComm, //串口对象指针
  167. char chSendMsg[DAIKIN_RECEIVE_MSG] //发送Buffer
  168. );
  169. int WriteResponseStatus( int nAddr,
  170. CCommProcess *pComm, //串口对象指针
  171. char szCmd[MAX_CMD], // 命令
  172. char szMsg[VAR_MSG], // 接收Buffer
  173. int &nIndex, // 变量索引,针对接收Buffer而言
  174. int &nLen, // 变量长度
  175. char szType[TYPE_LENGTH] // 变量数据类型
  176. );
  177. int RequestWrStatus(int nAddr, char szDaiKinSendMsg[DAIKIN_RECEIVE_MSG] );
  178. int ResponseWrStatus(int nAddr, char szDaiKinSendMsg[DAIKIN_RECEIVE_MSG] );
  179. int GetDeviceParam( int nAddr, // 设备地址
  180. CCommProcess *pComm, //串口对象指针
  181. char szSendMsg[DAIKIN_RECEIVE_MSG], //发送Buffer
  182. char szCmd[MAX_CMD], // 命令
  183. char szMsg[VAR_MSG], // 接收Buffer
  184. int &nIndex, // 变量索引,针对接收Buffer而言
  185. int &nLen, // 变量长度
  186. char szType[TYPE_LENGTH] ); // 变量数据类型
  187. int SetDeviceParam( int nAddr, // 设备地址
  188. CCommProcess *pComm, //串口对象指针
  189. char szSendMsg[DAIKIN_SEND_MSG], //发送Buffer
  190. char szCmd[MAX_CMD], // 命令
  191. char szMsg[VAR_MSG], // 接收Buffer
  192. int &nIndex, // 变量索引,针对接收Buffer而言
  193. int &nLen, // 变量长度
  194. char szType[TYPE_LENGTH] ); // 变量数据类型
  195. int GetDaiKin_42VarMsg( int nAddr, //设备地址
  196. char szCmd[MAX_CMD], // 命令
  197. char szMsg[VAR_MSG], // 接收Buffer
  198. int &nIndex, // 变量索引,针对接收Buffer而言
  199. int &nLen, // 变量长度
  200. char szType[TYPE_LENGTH],
  201. int startBit,
  202. int endBit ); // 变量数据类型
  203. int GetDaiKin_43VarMsg(
  204. int nAddr, // 设备地址
  205. char szCmd[MAX_CMD], // 命令
  206. char szMsg[VAR_MSG], // 接收Buffer
  207. int &nIndex, // 变量索引,针对接收Buffer而言
  208. int &nLen, // 变量长度
  209. char szType[TYPE_LENGTH],
  210. int startBit,
  211. int endBit ); // 变量数据类型
  212. int GetDaiKin_44VarMsg(
  213. int nAddr, // 设备地址
  214. char szCmd[MAX_CMD], // 命令
  215. char szMsg[VAR_MSG], // 接收Buffer
  216. int &nIndex, // 变量索引,针对接收Buffer而言
  217. int &nLen, // 变量长度
  218. char szType[TYPE_LENGTH],
  219. int startBit,
  220. int endBit ); // 变量数据类型
  221. //int GetDaiKin_45VarMsg(
  222. // int nAddr, // 设备地址
  223. // char szCmd[MAX_CMD], // 命令
  224. // char szMsg[VAR_MSG], // 接收Buffer
  225. // int &nIndex, // 变量索引,针对接收Buffer而言
  226. // int &nLen, // 变量长度
  227. // char szType[TYPE_LENGTH],
  228. // int startBit,
  229. // int endBit ); // 变量数据类型
  230. //int GetDaiKin_47VarMsg(
  231. // int nAddr, // 设备地址
  232. // char szCmd[MAX_CMD], // 命令
  233. // char szMsg[VAR_MSG], // 接收Buffer
  234. // int &nIndex, // 变量索引,针对接收Buffer而言
  235. // int &nLen, // 变量长度
  236. // char szType[TYPE_LENGTH],
  237. // int startBit,
  238. // int endBit ); // 变量数据类型
  239. void SetDaKin_42VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  240. void SetDaKin_43VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  241. void SetDaKin_44VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  242. //void SetDaKin_45VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  243. //void SetDaKin_47VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  244. WORD RtnCheck(char Msg[VAR_MSG]);
  245. void SimulationCommData(int nAddr);
  246. //WORD GetDataLength(const WORD wLENID, char chLength[4]);
  247. UINT GetCheckSum(char *pBuf, char chDest[5], int len);
  248. protected:
  249. private:
  250. HANDLE m_hSemComm;
  251. #if IS_USE_READMSG_CS
  252. CRITICAL_SECTION m_csReadMsg;
  253. #endif
  254. char m_szDaKin_42Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  255. char m_szDaKin_43Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  256. char m_szDaKin_44Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  257. //char m_szDaKin_45Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  258. //char m_szDaKin_47Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  259. BOOL m_dwOnlineTick[MAX_ADDR];
  260. BOOL m_devOnline[MAX_ADDR];
  261. };
  262. #endif