Tmaster.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. #pragma once
  2. #include "CommInterface.h"
  3. #include "CommProcess.h"
  4. class CTmaster:public CCommInterface
  5. {
  6. #define MAX_CMD 10 // 命令的最长长度;
  7. #define CMD_RECVMSG 20 // CMD对应的数据内容的最大显示长度;
  8. /*#define VAR_MSG 500 //*/
  9. #define MAX_INFO 255 // INFO数据最长长度;
  10. #define _VAR_MSG 500 // ;
  11. #define ___DEBUG 1 //;
  12. // 设备Dll错误代码定义;
  13. enum __ERRO_CODE_TMASTER
  14. {
  15. ERR_CODE_AIRTMASTER_COM_FAULT = 50201 , // 约顿空调设备串口通信故障;
  16. ERR_CODE_AIRTMASTER_COM_BUSY , // 约顿空调设备串口通信忙;
  17. ERR_CODE_AIRTMASTER_COM_READ_NO_DATA , // 约顿空调设备没有读到数据;
  18. ERR_CODE_AIRTMASTER_COM_READ_LEN_OVER , // 约顿空调设备读到数据长度超时限制;
  19. ERR_CODE_AIRTMASTER_COM_LRC_LOST , // 约顿空调设备lrc校验失败;
  20. EER_CODE_AIRTMASTER_COM_WRITE_DATA , // 约顿空调设备写串口错误;
  21. EER_CODE_AIRTMASTER_COM_REGNUM , // 约顿空调设备寄存器数;
  22. ERR_CODE_AIRTMASTER_COM_VARLEN , // 约顿空调设备变量长度非法;
  23. ERR_CODE_AIRTMASTER_COM_INVALIDRES , // 约顿空调设备无效应答;
  24. };
  25. enum _ERROR_LENGTHSUM
  26. {
  27. ERR_LENGTH_SUM = 60220,
  28. ERR_CHEKSUM
  29. };
  30. // RTN错误代码定义
  31. enum _ERRO_CODE_RTN
  32. {
  33. ERR_CODE_RTN_NATURAL = 0x00, // 正常;
  34. ERR_CODE_RTN_VER_ERROR, // VER错误;
  35. ERR_CODE_RTN_CHKSUM_ERROR, // CHECKSUM错;
  36. ERR_CODE_RTN_LCHKSUM_ERROR, // LCHECKSUM;
  37. ERR_CODE_RTN_CID_ERROR, // CID2无效;
  38. ERR_CODE_RTN_COMMAND_FORMAT, // 命令格式错;
  39. ERR_CODE_RTN_INVALID_DATA, // 无效数据;
  40. };
  41. typedef struct __RCHILD
  42. {
  43. BYTE bySoi; // 起始标志位;
  44. BYTE byVer[2]; // 通讯协议版本号;
  45. BYTE byAdr[2]; // 设备地址描述;
  46. BYTE byCid1[2]; // 控制标识码;
  47. BYTE byCid2[2]; // 命令信息;
  48. BYTE byLength[4]; // INFO字节长度;
  49. }RCHILD, *pRCHILD;
  50. typedef struct __WCHILD
  51. {
  52. BYTE bySoi; // 起始标志位;
  53. BYTE byVer[2]; // 通讯协议版本号;
  54. BYTE byAdr[2]; // 设备地址描述;
  55. BYTE byCid1[2]; // 控制标识码;
  56. BYTE byCid2[2]; // 命令信息;
  57. BYTE byLength[4]; // INFO字节长度;
  58. BYTE byInfo[10]; // INFO内容(一般为2个byte);
  59. }WCHILD, *pWCHILD;
  60. // 设备请求发送数据;
  61. typedef struct __REQUESTPARAM
  62. {
  63. RCHILD RequestChild;
  64. BYTE byCheckSum[4]; // 校验码;
  65. BYTE byEoi; // 结束码;
  66. }REQUESTPARAM, *pREQUESTPARAM;
  67. // 设备请求接收数据;
  68. typedef struct __REPONSEPARAM
  69. {
  70. WCHILD ReposeChild;
  71. BYTE byContent[MAX_INFO]; // 数据内容;
  72. BYTE byCheckSum[4]; // 校验码;
  73. BYTE byEoi; // 结束码;
  74. }REPONSEPARAM, *pREPONSEPARAM;
  75. // 设备请求接收数据;
  76. typedef struct __WRITEPARAM
  77. {
  78. WCHILD ReposeChild;
  79. BYTE byCheckSum[4]; // 校验码;
  80. BYTE byEoi; // 结束码;
  81. }WRITEPARAM, *pWRITEPARAM;
  82. public:
  83. BOOL AirTmasterOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  84. CTmaster(
  85. char szPath[MAX_PATH], // 程序所在路径;
  86. char szIniName[MAX_PATH], // 配置文件名称;
  87. int nCommPort, // 串行端口;
  88. int nAddr, // 设备地址;
  89. int nRate, // 波特率;
  90. int nDataBit, // 数据位;
  91. int nStopBit, // 停止位;
  92. int nParity, // 校验位;
  93. int nInterval // 时间间隔;
  94. );
  95. virtual ~CTmaster();
  96. public:
  97. // 发送数据请求;
  98. int SendReadRequest(
  99. char szPath[MAX_PATH], // 程序所在路径;
  100. char szIniName[MAX_PATH], // 配置文件名称;
  101. int nCommPort, // 串行端口;
  102. int nAddr, // 设备地址;
  103. char szCmd[MAX_CMD], // 请求命令;
  104. char szRecvMsg[VAR_MSG], // 响应的值 ;
  105. int nReversed1, // 预留整形参数1接口;
  106. int nReversed2, // 预留整形参数2接口;
  107. int nReversed3, // 预留整形参数3接口;
  108. int nReversed4, // 预留整形参数4接口;
  109. int nReversed5, // 预留整形参数5接口;
  110. float fReversed1, // 预留float参数1接口;
  111. float fReversed2, // 预留float参数2接口;
  112. float fReversed3, // 预留float参数3接口;
  113. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口;
  114. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口;
  115. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口;
  116. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口;
  117. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口;
  118. );
  119. // 发送参数设置;
  120. int SendSetReuest(
  121. char szPath[MAX_PATH], // 程序所在路径 ;
  122. char szIniName[MAX_PATH], // 配置文件名称 ;
  123. int nCommPort, // 串行端口;
  124. int nAddr, // 设备地址;
  125. char szCmd[MAX_CMD], // 请求命令;
  126. char szSetMsg[VAR_MSG], // 写入设备里的值 ;
  127. int nReversed1, // 预留整形参数1接口;
  128. int nReversed2, // 预留整形参数2接口;
  129. int nReversed3, // 预留整形参数3接口;
  130. int nReversed4, // 预留整形参数4接口;
  131. int nReversed5, // 预留整形参数5接口;
  132. float fReversed1, // 预留float参数1接口;
  133. float fReversed2, // 预留float参数2接口;
  134. float fReversed3, // 预留float参数3接口;
  135. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口;
  136. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口;
  137. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口;
  138. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口;
  139. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口;
  140. );
  141. protected:
  142. char m_szE0Msg[MAX_ADDR][VAR_MSG];
  143. char m_szSend49Msg[MAX_ADDR][VAR_MSG];
  144. char m_szSend45Msg[MAX_ADDR][VAR_MSG];
  145. protected:
  146. int RequestReadStatus(int nAddr,CCommProcess *pComm,char szSendMsg[_VAR_MSG]);
  147. int ResponseReadStatus(
  148. CCommProcess *pComm,
  149. char szCmd[MAX_CMD],
  150. char szRecvMsg[VAR_MSG],
  151. int nAddr,
  152. int &nIndex,
  153. int &nLen,
  154. char szType[TYPE_LENGTH],
  155. int &startbit,
  156. int &endbit
  157. );
  158. int RequestWriteStatus( CCommProcess *pComm,int nAddr,char szCmd[MAX_CMD],char szSendMsg[VAR_MSG] ,char szSetMsg[VAR_MSG],char szLength[5], int &nCDT);
  159. int ResponseWriteStatus( CCommProcess *pComm,int nAddr);
  160. int GetDeviceParam(
  161. int nAddr,
  162. CCommProcess *pComm, //串口对象指针
  163. char szSendMsg[_VAR_MSG], //发送Buffer
  164. char szCmd[MAX_CMD], // 命令
  165. char szRecvMsg[VAR_MSG], // 接收Buffer
  166. int &nIndex, // 变量索引,针对接收Buffer而言
  167. int &nLen, // 变量长度
  168. char szType[TYPE_LENGTH], // 变量数据类型
  169. int &startbit,
  170. int &endbit
  171. );
  172. int SetDeviceParam(
  173. int nAddr,
  174. CCommProcess *pComm, //串口对象指针
  175. char szSendMsg[_VAR_MSG], //发送Buffer
  176. char szCmd[MAX_CMD], // 命令
  177. char szSetMsg[VAR_MSG], // 接收Buffer
  178. char szLength[5], // 变量索引,针对接收Buffer而言
  179. int &nCDTn // 变量长度
  180. );
  181. int GetULFromIni(
  182. char szPath[MAX_PATH], //服务器程序所在目录
  183. char szIniName[MAX_PATH], //配置文件名
  184. char szCmd[MAX_CMD], //命令
  185. char szSanTakSendMsg[MAX_CMD], //发送Buffer
  186. char nType[MAX_CMD],
  187. int &nIndex,
  188. int &nLen,
  189. int &startbit,
  190. int &endbit,
  191. char szLength[5],
  192. int &nCDT
  193. );
  194. int GetE0VarMsg(
  195. char szCmd[MAX_CMD], // 命令
  196. char szRecvMsg[VAR_MSG], // 接收Buffer
  197. int nAddr,
  198. int &nIndex, // 变量索引,针对接收Buffer而言
  199. int &nLen, // 变量长度
  200. char szType[TYPE_LENGTH],
  201. int &startbit,
  202. int &endbit
  203. );
  204. UINT GetCheckSum(char *pBuf, char chDest[5], int len);
  205. WORD RtnCheck(char Msg[VAR_MSG],int len);
  206. void SetE0VarMsg( int nAddr,char szCmd[MAX_CMD], char *pBuffer);
  207. // void Set49VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  208. // void Set45VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  209. // DEBUG测试数据;
  210. void SimulationCommData(void);
  211. private:
  212. HANDLE m_hSemComm;
  213. #if IS_USE_READMSG_CS
  214. CRITICAL_SECTION m_csReadMsg;
  215. #endif
  216. BOOL m_dwOnlineTick[MAX_ADDR];
  217. BOOL m_devOnline[MAX_ADDR];
  218. };