Daikin - 副本 (2).h 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  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 *szMsg, // 命令
  166. CCommProcess *pComm, //串口对象指针
  167. char *chSendMsg , //发送Buffer
  168. int &iSendLen
  169. );
  170. int WriteResponseStatus( int nAddr,
  171. CCommProcess *pComm, //串口对象指针
  172. char szCmd[MAX_CMD], // 命令
  173. char szMsg[VAR_MSG], // 接收Buffer
  174. int &nIndex, // 变量索引,针对接收Buffer而言
  175. int &nLen, // 变量长度
  176. char szType[TYPE_LENGTH] // 变量数据类型
  177. );
  178. int RequestWrStatus(int nAddr, char szDaiKinSendMsg[DAIKIN_RECEIVE_MSG] );
  179. int ResponseWrStatus(int nAddr, char szDaiKinSendMsg[DAIKIN_RECEIVE_MSG] );
  180. int GetDeviceParam( int nAddr, // 设备地址
  181. CCommProcess *pComm, //串口对象指针
  182. char szSendMsg[DAIKIN_RECEIVE_MSG], //发送Buffer
  183. char szCmd[MAX_CMD], // 命令
  184. char szMsg[VAR_MSG], // 接收Buffer
  185. int &nIndex, // 变量索引,针对接收Buffer而言
  186. int &nLen, // 变量长度
  187. char szType[TYPE_LENGTH] ); // 变量数据类型
  188. int SetDeviceParam( int nAddr, // 设备地址
  189. CCommProcess *pComm, //串口对象指针
  190. char szSendMsg[DAIKIN_SEND_MSG], //发送Buffer
  191. char szCmd[MAX_CMD], // 命令
  192. char szMsg[VAR_MSG], // 接收Buffer
  193. int &nIndex, // 变量索引,针对接收Buffer而言
  194. int &nLen, // 变量长度
  195. char szType[TYPE_LENGTH],
  196. int &iSendLen); // 变量数据类型
  197. int GetDaiKin_42VarMsg( int nAddr, //设备地址
  198. char szCmd[MAX_CMD], // 命令
  199. char szMsg[VAR_MSG], // 接收Buffer
  200. int &nIndex, // 变量索引,针对接收Buffer而言
  201. int &nLen, // 变量长度
  202. char szType[TYPE_LENGTH],
  203. int startBit,
  204. int endBit ); // 变量数据类型
  205. int GetDaiKin_43VarMsg(
  206. int nAddr, // 设备地址
  207. char szCmd[MAX_CMD], // 命令
  208. char szMsg[VAR_MSG], // 接收Buffer
  209. int &nIndex, // 变量索引,针对接收Buffer而言
  210. int &nLen, // 变量长度
  211. char szType[TYPE_LENGTH],
  212. int startBit,
  213. int endBit ); // 变量数据类型
  214. int GetDaiKin_44VarMsg(
  215. int nAddr, // 设备地址
  216. char szCmd[MAX_CMD], // 命令
  217. char szMsg[VAR_MSG], // 接收Buffer
  218. int &nIndex, // 变量索引,针对接收Buffer而言
  219. int &nLen, // 变量长度
  220. char szType[TYPE_LENGTH],
  221. int startBit,
  222. int endBit ); // 变量数据类型
  223. //int GetDaiKin_45VarMsg(
  224. // int nAddr, // 设备地址
  225. // char szCmd[MAX_CMD], // 命令
  226. // char szMsg[VAR_MSG], // 接收Buffer
  227. // int &nIndex, // 变量索引,针对接收Buffer而言
  228. // int &nLen, // 变量长度
  229. // char szType[TYPE_LENGTH],
  230. // int startBit,
  231. // int endBit ); // 变量数据类型
  232. //int GetDaiKin_47VarMsg(
  233. // int nAddr, // 设备地址
  234. // char szCmd[MAX_CMD], // 命令
  235. // char szMsg[VAR_MSG], // 接收Buffer
  236. // int &nIndex, // 变量索引,针对接收Buffer而言
  237. // int &nLen, // 变量长度
  238. // char szType[TYPE_LENGTH],
  239. // int startBit,
  240. // int endBit ); // 变量数据类型
  241. void SetDaKin_42VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  242. void SetDaKin_43VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  243. void SetDaKin_44VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  244. //void SetDaKin_45VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  245. //void SetDaKin_47VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  246. WORD RtnCheck(char Msg[VAR_MSG]);
  247. void lowcase2uppcase(BYTE &btSrc);
  248. void SimulationCommData(int nAddr);
  249. //WORD GetDataLength(const WORD wLENID, char chLength[4]);
  250. void GetCheckSum(char *pBuf, char chDest[5], int len);
  251. protected:
  252. private:
  253. HANDLE m_hSemComm;
  254. #if IS_USE_READMSG_CS
  255. CRITICAL_SECTION m_csReadMsg;
  256. #endif
  257. char m_szDaKin_42Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  258. char m_szDaKin_43Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  259. char m_szDaKin_44Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  260. //char m_szDaKin_45Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  261. //char m_szDaKin_47Msg[MAX_ADDR][DAIKIN_RECEIVE_MSG];
  262. BOOL m_dwOnlineTick[MAX_ADDR];
  263. BOOL m_devOnline[MAX_ADDR];
  264. };
  265. #endif