ParadigmNxV260.h 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. #pragma once
  2. #include "comminterface.h"
  3. class ParadigmNxV260 :
  4. public CCommInterface
  5. {
  6. #define DEBUG_NxV260 1
  7. #define UL_VAR_MSG 255
  8. #define NxV260_INFO_MSG 255 //INFO数据最长长度;
  9. #define NxV260_SEND_MSG 32 //发送Buffer的最长长度;
  10. // UPS ParadigmNxV260 设备Dll错误代码定义
  11. enum __ERRO_CODE_ParadigmNxV260
  12. {
  13. ERR_CODE_ParadigmNxV260_COM_FAULT = 50201 , //ParadigmNxV260设备串口通信故障
  14. ERR_CODE_ParadigmNxV260_COM_BUSY , //ParadigmNxV260设备串口通信忙
  15. ERR_CODE_ParadigmNxV260_COM_READ_NO_DATA , //ParadigmNxV260设备没有读到数据
  16. ERR_CODE_ParadigmNxV260_COM_READ_LEN_OVER , //ParadigmNxV260设备读到数据长度超时限制
  17. ERR_CODE_ParadigmNxV260_COM_CHKSUM_LOST , //ParadigmNxV260设备校验失败
  18. EER_CODE_ParadigmNxV260_COM_WRITE_DATA , //ParadigmNxV260设备写串口错误
  19. EER_CODE_ParadigmNxV260_COM_REGNUM , //ParadigmNxV260设备寄存器数
  20. ERR_CODE_ParadigmNxV260_COM_VARLEN , //ParadigmNxV260设备变量长度非法
  21. ERR_CODE_ParadigmNxV260_COM_INVALIDRES , //ParadigmNxV260设备无效应答
  22. };
  23. //ParadigmNxV260 设备DLL错误代码定义
  24. enum _ERRO_CODE_RTN
  25. {
  26. ERR_CODE_RTN_NATURAL = 0x00, // 正常
  27. ERR_CODE_RTN_VER_ERROR, // VER错误
  28. ERR_CODE_RTN_CHKSUM_ERROR, // CHECKSUM错
  29. ERR_CODE_RTN_LCHKSUM_ERROR, // LCHECKSUM
  30. ERR_CODE_RTN_CID2_ERROR, // CID2无效
  31. ERR_CODE_RTN_COMMAND_FORMAT, // 命令格式错
  32. ERR_CODE_RTN_INVALID_DATA, // 无效数据
  33. ERR_CODE_RTN_INVALID_LIMIT =0x10 // 无效权限
  34. };
  35. //ParadigmNxV260 设备错误预留字节
  36. enum _ERROR_LENGTHSUM
  37. {
  38. ERR_LENGTH_SUM = 60220,
  39. ERR_CHEKSUM
  40. };
  41. //ParadigmNxV260 设备请求接收的协议格式
  42. typedef struct __RESPONSE_STRUCT
  43. {
  44. BYTE SOI; //起始标志位(7EH) 1
  45. BYTE VER; //通讯协议版本号 2
  46. BYTE ADR; //设备地址描述(1--254;0,255保留) 2
  47. BYTE CID1; //控制标示符(2AH) 2
  48. BYTE CID2; //信息类型 2
  49. WORD LENGTH; //内容长度 4
  50. BYTE szMsg[NxV260_INFO_MSG]; //协议内容
  51. WORD CHKSUM; //校验和码 4
  52. BYTE EOI; //结束码 0x0d(回车) 1
  53. }RESPONSE_STRUCT, *PRESPONSE_STRUCT;
  54. typedef struct __CHILD
  55. {
  56. BYTE bySoi; //起始标志位
  57. BYTE byVer[2]; //通讯协议版本号
  58. BYTE byAdr[2]; //设备地址描述
  59. BYTE byCid1[2]; //控制标识码
  60. BYTE byCid2[2]; //命令信息
  61. BYTE byLength[4]; //INFO字节长度
  62. //BYTE byInfo[2];
  63. }CHILD, *pCHILD;
  64. //ParadigmNxV260 设备请求发送的协议命令格式
  65. typedef struct __REQUESTPARAM
  66. {
  67. CHILD RequestChild;
  68. BYTE byCheckSum[4]; //校验码
  69. BYTE byEoi; //结束码
  70. }REQUESTPARAM, *pREQUESTPARAM;
  71. public:
  72. ParadigmNxV260(
  73. char szPath[MAX_PATH], // 程序所在路径
  74. char szIniName[MAX_PATH], // 配置文件名称
  75. int nCommPort, // 串行端口
  76. int nAddr, // 设备地址
  77. int nRate, // 波特率
  78. int nDataBit, // 数据位
  79. int nStopBit, // 停止位
  80. int nParity, // 校验位
  81. int nInterval // 时间间隔
  82. );
  83. virtual ~ParadigmNxV260();
  84. public:
  85. UINT GetCheckSum(char *pBuf, char chDest[5], int len);
  86. // 发送读取设备数据请求
  87. int SendReadRequest(
  88. char szPath[MAX_PATH], // 程序所在路径
  89. char szIniName[MAX_PATH], // 配置文件名称
  90. int nCommPort, // 串行端口
  91. int nAddr, // 设备地址
  92. char szCmd[MAX_CMD], // 请求命令
  93. char szMsg[VAR_MSG], // 响应的值
  94. int nReversed1, // 预留整形参数1接口
  95. int nReversed2, // 预留整形参数2接口
  96. int nReversed3, // 预留整形参数3接口
  97. int nReversed4, // 预留整形参数4接口
  98. int nReversed5, // 预留整形参数5接口
  99. float fReversed1, // 预留float参数1接口
  100. float fReversed2, // 预留float参数2接口
  101. float fReversed3, // 预留float参数3接口
  102. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  103. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  104. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  105. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  106. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  107. );
  108. // 发送设置设备参数请求
  109. int SendSetReuest(
  110. char szPath[MAX_PATH], // 程序所在路径
  111. char szIniName[MAX_PATH], // 配置文件名称
  112. int nCommPort, // 串行端口
  113. int nAddr, // 设备地址
  114. char szCmd[MAX_CMD], // 请求命令
  115. char szRecvMsg[VAR_MSG], // 响应的值
  116. int nReversed1, // 预留整形参数1接口
  117. int nReversed2, // 预留整形参数2接口
  118. int nReversed3, // 预留整形参数3接口
  119. int nReversed4, // 预留整形参数4接口
  120. int nReversed5, // 预留整形参数5接口
  121. float fReversed1, // 预留float参数1接口
  122. float fReversed2, // 预留float参数2接口
  123. float fReversed3, // 预留float参数3接口
  124. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  125. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  126. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  127. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  128. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  129. );
  130. BOOL NxV260OpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  131. protected:
  132. char m_szNxV260_41Msg[MAX_ADDR][UL_VAR_MSG];
  133. char m_szNxV260_E1Msg[MAX_ADDR][UL_VAR_MSG];
  134. char m_szNxV260_E2Msg[MAX_ADDR][UL_VAR_MSG];
  135. char m_szNxV260_E3Msg[MAX_ADDR][UL_VAR_MSG];
  136. char m_szNxV260_43Msg[MAX_ADDR][UL_VAR_MSG];
  137. char m_szNxV260_44Msg[MAX_ADDR][UL_VAR_MSG];
  138. protected:
  139. int RequestReadStatus(
  140. int nAddr,
  141. CCommProcess *pComm,
  142. char szSendCmd[10]
  143. );
  144. int ResponseReadStatus(
  145. int nAddr,
  146. CCommProcess *pComm,
  147. char szCmd[MAX_CMD],
  148. char szRecvMsg[VAR_MSG],
  149. int &nIndex,
  150. int &nLen,
  151. char szType[TYPE_LENGTH]
  152. );
  153. int RequestWriteStatus( char szMsg[NxV260_SEND_MSG] );
  154. int ResponseWriteStatus( char szMsg[NxV260_SEND_MSG] );
  155. int GetDeviceParam(
  156. int nAddr,
  157. CCommProcess *pComm, //串口对象指针
  158. char szSendCmd[10], //发送Buffer
  159. char szCmd[MAX_CMD], // 命令
  160. char szRecvMsg[VAR_MSG], // 接收Buffer
  161. int &nIndex, // 变量索引,针对接收Buffer而言
  162. int &nLen, // 变量长度
  163. char szType[TYPE_LENGTH] // 变量数据类型
  164. );
  165. int GetNxV260FromIni(
  166. char szPath[MAX_PATH], //服务器程序所在目录
  167. char szIniName[MAX_PATH], //配置文件名
  168. char szCmd[MAX_CMD], //命令
  169. char szSanTakSendMsg[MAX_CMD], //发送Buffer
  170. char nType[MAX_CMD],
  171. int &nIndex,
  172. int &nLen
  173. );
  174. int GetNxV260Q41VarMsg(
  175. int nAddr, // 设备地址
  176. char szCmd[MAX_CMD], // 命令
  177. char szRecvMsg[VAR_MSG], // 接收Buffer
  178. int &nIndex, // 变量索引,针对接收Buffer而言
  179. int &nLen, // 变量长度
  180. char szType[TYPE_LENGTH] // 变量数据类型
  181. );
  182. int GetNxV260QE1VarMsg(
  183. int nAddr, // 设备地址
  184. char szCmd[MAX_CMD], // 命令
  185. char szRecvMsg[VAR_MSG], // 接收Buffer
  186. int &nIndex, // 变量索引,针对接收Buffer而言
  187. int &nLen, // 变量长度
  188. char szType[TYPE_LENGTH] // 变量数据类型
  189. );
  190. int GetNxV260QE2VarMsg(
  191. int nAddr, // 设备地址
  192. char szCmd[MAX_CMD], // 命令
  193. char szRecvMsg[VAR_MSG], // 接收Buffer
  194. int &nIndex, // 变量索引,针对接收Buffer而言
  195. int &nLen, // 变量长度
  196. char szType[TYPE_LENGTH] // 变量数据类型
  197. );
  198. int GetNxV260QE3VarMsg(
  199. int nAddr, // 设备地址
  200. char szCmd[MAX_CMD], // 命令
  201. char szRecvMsg[VAR_MSG], // 接收Buffer
  202. int &nIndex, // 变量索引,针对接收Buffer而言
  203. int &nLen, // 变量长度
  204. char szType[TYPE_LENGTH] // 变量数据类型
  205. );
  206. int GetNxV260Q43VarMsg(
  207. int nAddr, // 设备地址
  208. char szCmd[MAX_CMD], // 命令
  209. char szRecvMsg[VAR_MSG], // 接收Buffer
  210. int &nIndex, // 变量索引,针对接收Buffer而言
  211. int &nLen, // 变量长度
  212. char szType[TYPE_LENGTH] // 变量数据类型
  213. );
  214. int GetNxV260Q44VarMsg(
  215. int nAddr, // 设备地址
  216. char szCmd[MAX_CMD], // 命令
  217. char szRecvMsg[VAR_MSG], // 接收Buffer
  218. int &nIndex, // 变量索引,针对接收Buffer而言
  219. int &nLen, // 变量长度
  220. char szType[TYPE_LENGTH] // 变量数据类型
  221. );
  222. WORD RtnCheck(char Msg[VAR_MSG],int len);
  223. void SetNxV260Q41VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  224. void SetNxV260QE1VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  225. void SetNxV260QE2VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  226. void SetNxV260QE3VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  227. void SetNxV260Q43VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  228. void SetNxV260Q44VarMsg( int nAddr, char szCmd[MAX_CMD], char *pBuffer);
  229. void SimulationCommData(void);
  230. private:
  231. HANDLE m_hSemComm;
  232. #if IS_USE_READMSG_CS
  233. CRITICAL_SECTION m_csReadMsg;
  234. #endif
  235. BOOL m_dwOnlineTick[MAX_ADDR];
  236. BOOL m_devOnline[MAX_ADDR];
  237. };