SanTak_3A3120KS.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. /*
  2. 注:
  3. 1.该山特UPS 型号:3A3120KS;
  4. 2.该型号UPS序列号:110121-70420001;
  5. */
  6. #ifndef SANTAK3A3_H
  7. #define SANTAK3A3_H
  8. #pragma once
  9. #include "CommInterface.h"
  10. class CSanTak_3A3120KS:public CCommInterface
  11. {
  12. public:
  13. #define UPS_SANTAK_SEND_MSG 32
  14. #define UPS_TYPE_LENGTH 10
  15. #define DEBUG_SANTAK_120 1
  16. #define UPS_SANTAK_MAX_BUF 256
  17. enum __ERRO_CODE_UPSSANTAK
  18. {
  19. ERR_CODE_SANTAK_COM_FAULT = 50201 , //3A3120KS设备串口通信故障
  20. ERR_CODE_SANTAK_COM_BUSY , //3A3120KS设备串口通信忙
  21. ERR_CODE_SANTAK_COM_READ_NO_DATA , //3A3120KS设备没有读到数据
  22. ERR_CODE_SANTAK_COM_READ_LEN_OVER , //3A3120KS设备读到数据长度超时限制
  23. ERR_CODE_SANTAK_COM_LRC_LOST , //3A3120KS设备lrc校验失败
  24. EER_CODE_SANTAK_COM_WRITE_DATA , //3A3120KS设备写串口错误
  25. EER_CODE_SANTAK_COM_REGNUM , //3A3120KS设备寄存器数
  26. ERR_CODE_SANTAK_COM_VARLEN , //3A3120KS设备变量长度非法
  27. ERR_CODE_SANTAK_COM_INVALIDRES , //3A3120KS设备无效应答
  28. };
  29. typedef struct __REQUEST_STRUCT
  30. {
  31. BYTE chkSum[2];
  32. BYTE midBuf;
  33. BYTE addr[2];
  34. BYTE End;
  35. }REQUEST_STRUCT,*PREQUEST_STRUCT;
  36. typedef struct __RESPONSE_STRUCT
  37. {
  38. BYTE Start1;
  39. BYTE Start2;
  40. BYTE szContent[UPS_SANTAK_MAX_BUF];
  41. BYTE End;
  42. }RESPONSE_STRUCT,*PRESPONSE_STRUCT;
  43. public:
  44. CSanTak_3A3120KS(
  45. char szPath[MAX_PATH], // 程序所在路径
  46. char szIniName[MAX_PATH], // 配置文件名称
  47. int nCommPort, // 串行端口
  48. int nAddr, // 设备地址
  49. int nRate, // 波特率
  50. int nDataBit, // 数据位
  51. int nStopBit, // 停止位
  52. int nParity, // 校验位
  53. int nInterval // 时间间隔
  54. );
  55. virtual ~CSanTak_3A3120KS(void);
  56. BOOL SanTakSwOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  57. int SendReadRequest(
  58. char szPath[MAX_PATH], // 程序所在路径
  59. char szIniName[MAX_PATH], // 配置文件名称
  60. int nCommPort, // 串行端口
  61. int nAddr, // 设备地址
  62. char szCmd[MAX_CMD], // 请求命令
  63. char szMsg[VAR_MSG], // 响应的值
  64. int nReversed1, // 预留整形参数1接口
  65. int nReversed2, // 预留整形参数2接口
  66. int nReversed3, // 预留整形参数3接口
  67. int nReversed4, // 预留整形参数4接口
  68. int nReversed5, // 预留整形参数5接口
  69. float fReversed1, // 预留float参数1接口
  70. float fReversed2, // 预留float参数2接口
  71. float fReversed3, // 预留float参数3接口
  72. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  73. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  74. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  75. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  76. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  77. );
  78. // 发送设置设备参数请求
  79. int SendSetReuest(
  80. char szPath[MAX_PATH], // 程序所在路径
  81. char szIniName[MAX_PATH], // 配置文件名称
  82. int nCommPort, // 串行端口
  83. int nAddr, // 设备地址
  84. char szCmd[MAX_CMD], // 请求命令
  85. char szMsg[VAR_MSG], // 响应的值
  86. int nReversed1, // 预留整形参数1接口
  87. int nReversed2, // 预留整形参数2接口
  88. int nReversed3, // 预留整形参数3接口
  89. int nReversed4, // 预留整形参数4接口
  90. int nReversed5, // 预留整形参数5接口
  91. float fReversed1, // 预留float参数1接口
  92. float fReversed2, // 预留float参数2接口
  93. float fReversed3, // 预留float参数3接口
  94. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  95. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  96. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  97. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  98. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  99. );
  100. private:
  101. HANDLE m_hSemComm;
  102. CRITICAL_SECTION m_csReadMsg;
  103. char m_sz3A3120KS_Q2Msg[UPS_SANTAK_MAX_BUF];
  104. char m_sz3A3120KS_WAMsg[UPS_SANTAK_MAX_BUF];
  105. protected:
  106. int GetDeviceParam(
  107. int nAddr,
  108. CCommProcess *pComm, // 串口对象指针
  109. char szSendMsg[UPS_SANTAK_SEND_MSG], // 发送Buffer
  110. char szCmd[MAX_CMD], // 命令
  111. char szMsg[VAR_MSG], // 接收Buffer
  112. int &nIndex, // 变量索引,针对接收Buffer而言
  113. int &nLen, // 变量长度
  114. char szType[TYPE_LENGTH] );
  115. int SetDeviceParam(
  116. CCommProcess *pComm, // 串口对象指针
  117. int nAddr, // 设备地址
  118. char szSendMsg[UPS_SANTAK_SEND_MSG], // 发送Buffer
  119. char szCmd[MAX_CMD], // 命令
  120. char szMsg[VAR_MSG], // 接收Buffer
  121. int &nIndex, // 变量索引,针对接收Buffer而言
  122. int &nLen, // 变量长度
  123. char szType[TYPE_LENGTH] ); // 变量数据类型
  124. int GetParFromIni(char szPath[MAX_PATH], //服务器程序所在目录
  125. char szIniName[MAX_PATH], //配置文件名
  126. char szCmd[MAX_CMD], //命令
  127. char szSanTakSendMsg[MAX_CMD], //发送Buffer
  128. char nType[MAX_CMD],
  129. int &nIndex,
  130. int &nLen,
  131. int &startBit,
  132. int &endBit);
  133. int RequestStatus(
  134. int nAddr,
  135. CCommProcess *pComm, //串口对象指针
  136. const char chSendMsg[UPS_SANTAK_SEND_MSG] //发送Buffer
  137. );
  138. int ResponseStatus(
  139. int nAddr,
  140. CCommProcess *pComm, //串口对象指针
  141. char szCmd[MAX_CMD], // 命令
  142. char szMsg[VAR_MSG], // 接收Buffer
  143. int &nIndex, // 变量索引,针对接收Buffer而言
  144. int &nLen, // 变量长度
  145. char szType[TYPE_LENGTH] // 变量数据类型
  146. );
  147. int GetSanTak_Q2Msg(
  148. char szCmd[MAX_CMD], // 命令
  149. char szMsg[VAR_MSG], // 接收Buffer
  150. int &nIndex, // 变量索引,针对接收Buffer而言
  151. int &nLen, // 变量长度
  152. char szType[TYPE_LENGTH],
  153. int startBit,
  154. int endBit );
  155. int GetSanTak_WAMsg(
  156. char szCmd[MAX_CMD], // 命令
  157. char szMsg[VAR_MSG], // 接收Buffer
  158. int &nIndex, // 变量索引,针对接收Buffer而言
  159. int &nLen, // 变量长度
  160. char szType[TYPE_LENGTH],
  161. int startBit,
  162. int endBit );
  163. void SetSanTak3A3_Q2Msg( char szCmd[MAX_CMD], char *pBuffer);
  164. void SetSanTak3A3_WAMsg( char szCmd[MAX_CMD], char *pBuffer);
  165. void SimulationCommData();
  166. int WriteRequestStatus(
  167. char szCmd[MAX_CMD], // 命令
  168. CCommProcess *pComm, //串口对象指针
  169. char chSendMsg[UPS_SANTAK_SEND_MSG] //发送Buffer);
  170. );
  171. int WriteResponseStatus(
  172. CCommProcess *pComm, //串口对象指针
  173. int nAddr, // 设备地址
  174. char szCmd[MAX_CMD], // 命令
  175. char szMsg[VAR_MSG], // 接收Buffer
  176. int &nIndex, // 变量索引,针对接收Buffer而言
  177. int &nLen, // 变量长度
  178. char szType[TYPE_LENGTH] // 变量数据类型
  179. );
  180. int StrLower(char *pSource, char *pDest);
  181. private:
  182. int m_address;
  183. BOOL m_dwOnlineTick;
  184. BOOL m_devOnline;
  185. };
  186. #endif