UPS_NXL.h 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. //////////////////////////////////////////////////////////////////////////////
  2. ////// //////
  3. ////// 作 者: Wangjianfeng; //////
  4. ////// 创建时间: 2011-02-26 ; //////
  5. ////// 说 明: EmersonUPS NXL协议 ; //////
  6. ////// //////
  7. ////// 修改时间: 2011-02-26 ; //////
  8. ////// 修改说明: 无; //////
  9. ////// //////
  10. //////////////////////////////////////////////////////////////////////////////
  11. //////////////////////////////////////////////////////////////////////////////
  12. #ifndef __UPS_NXL__
  13. #define __UPS_NXL__
  14. #pragma once
  15. #include "CommProcess.h"
  16. #include "CommInterface.h"
  17. class CUPS_NXL :public CCommInterface
  18. {
  19. #define DEBUG_UPSNXL 0 //.1.调试开关;
  20. #define MAX_CID 2 //.+.最大的CID2长度;
  21. #define VAR_MSG_LENGTH 255 //.2.数组数据长度;
  22. #define SEND_MSG_LENGTH 32 //.3.发送数据的最大长度;
  23. #define RECE_MSG_LENGTH 255 //.4.接收数据的最大长度;
  24. //.RTN返回码意义;
  25. enum ___EEROR_CODE_RTN
  26. {
  27. RTN_NORMAL = 0x00, //.1.正常;
  28. RTN_VER_ERRROR, //.2.VER(版本)错误;
  29. RTN_CHKSUM_ERROR, //.3.校验码错误;
  30. RTN_LCHKSUM_EEROR, //.4.长度校验码错误;
  31. RTN_CID2_INVALID, //.5.CDI2无效;
  32. RTN_COMMAND_FORMAT_EEROR, //.6.命令格式错误;
  33. RTN_INVALID_DATA, //.7.无效数据;
  34. RTN_INVALID_LIMIT =0x10 //.8.无效权限;
  35. };
  36. enum __ERRO_CODE_COMM
  37. {
  38. ERR_CODE_COM_FAULT = 50201 , //.1.设备串口通信故障;
  39. ERR_CODE_COM_BUSY , //.2.设备串口通信忙;
  40. ERR_CODE_COM_READ_NO_DATA , //.3.设备没有读到数据;
  41. ERR_CODE_COM_READ_LEN_OVER , //.4.设备读到数据长度超时限制;
  42. ERR_CODE_COM_LRC_LOST , //.5.设备lrc校验失败;
  43. EER_CODE_COM_WRITE_DATA , //.6.设备写串口错误;
  44. EER_CODE_COM_REGNUM , //.7.设备寄存器数;
  45. ERR_CODE_COM_VARLEN , //.8.设备变量长度非法;
  46. ERR_CODE_COM_INVALIDRES , //.9.设备无效应答;
  47. };
  48. typedef struct __HEAD_SOI_
  49. {
  50. BYTE Soi ;
  51. BYTE Ver[2];
  52. BYTE Adr[2];
  53. BYTE Cid1[2];
  54. }__soi;
  55. typedef struct __END_EOI
  56. {
  57. BYTE ChkSum[4];
  58. BYTE Eoi;
  59. }__eoi;
  60. //.请求设备;
  61. typedef struct __REQUSE_READ_
  62. {
  63. __soi heads;
  64. BYTE Cid2[2];
  65. BYTE Length[4];
  66. __eoi endof;
  67. }__request_read;
  68. //.设备响应;
  69. typedef struct __RESPONES_READ_
  70. {
  71. __soi heads;
  72. BYTE Rtn[2];
  73. BYTE Length[4];
  74. BYTE Info[RECE_MSG_LENGTH];
  75. __eoi endof;
  76. }__respones_read;
  77. public:
  78. CUPS_NXL(
  79. char szPath[MAX_PATH], //.1. 程序所在路径;
  80. char szIniName[MAX_PATH], //.2. 配置文件名称;
  81. int iCommPort, //.3. 串行端口;
  82. int iAddr, //.4. 设备地址;
  83. int iRate, //.5. 波特率;
  84. int iDataBit, //.6. 数据位;
  85. int iStopBit, //.7. 停止位;
  86. int iParity, //.8. 校验位;
  87. int iInterval //.9. 时间间隔;
  88. );
  89. virtual ~CUPS_NXL()
  90. {
  91. #if IS_USE_READMSG_CS
  92. DeleteCriticalSection(&m_csReadMsg);
  93. #endif
  94. MTVERIFY(CloseHandle(m_hSemComm));
  95. CloseComm();
  96. };
  97. private:
  98. HANDLE m_hSemComm; //.串口读写事件对象;
  99. #if IS_USE_READMSG_CS
  100. CRITICAL_SECTION m_csReadMsg; //.临界值;
  101. #endif
  102. BOOL m_dwOnlineTick[MAX_ADDR]; //.1.在线标号;
  103. BOOL m_devOnline[MAX_ADDR]; //.2.设备是否在线;
  104. protected:
  105. char m_szNXL_42HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.1.获取模拟量量化数据(定点数);
  106. char m_szNXL_43HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.2.获取开关量输入状态 ;
  107. char m_szNXL_44HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.3.获取告警量输入状态 ;
  108. char m_szNXL_E0HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.4.获取系统模拟量量化数据(定点数,厂家自定义模拟量 1);
  109. char m_szNXL_E1HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.5.获取自定义模拟量量化数据1(定点数);
  110. char m_szNXL_E2HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.6.获取自定义模拟量量化数据2(定点数);
  111. char m_szNXL_E3HMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.7.获取自定义模拟量量化数据3(定点数);
  112. char m_szNXL_ECHMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.8.获取自定义告警量 ;
  113. char m_szNXL_EEHMsg[MAX_ADDR][RECE_MSG_LENGTH]; //.9.获取系统设置参数数据(厂家自定义帧) ;
  114. public:
  115. //.发送请求设备数据;
  116. int SendReadRequest(
  117. char szPath[MAX_PATH], // 1.程序所在路径;
  118. char szIniName[MAX_PATH], // 2.配置文件名称 ;
  119. int nCommPort, // 3.串行端口;
  120. int nAddr, // 4.设备地址;
  121. char szCmd[MAX_CMD], // 5.请求命令;
  122. char szMsg[VAR_MSG], // 6.响应的值 ;
  123. int nReversed1, // 7.预留整形参数1接口;
  124. int nReversed2, // 8.预留整形参数2接口;
  125. int nReversed3, // 9.预留整形参数3接口;
  126. int nReversed4, // 10.预留整形参数4接口;
  127. int nReversed5, // 11.预留整形参数5接口;
  128. float fReversed1, // 12.预留float参数1接口;
  129. float fReversed2, // 13.预留float参数2接口;
  130. float fReversed3, // 14.预留float参数3接口;
  131. char szReversed1[MAX_RESERVED1], // 15.预留字符数组参数1接口;
  132. char szReversed2[MAX_RESERVED2], // 16.预留字符数组参数2接口;
  133. char szReversed3[MAX_RESERVED3], // 17.预留字符数组参数3接口;
  134. char szReversed4[MAX_RESERVED4], // 18.预留字符数组参数4接口;
  135. char szReversed5[MAX_RESERVED5] // 19.预留字符数组参数5接口;
  136. );
  137. //.发送设置设备参数请求;
  138. int SendSetReuest(
  139. char szPath[MAX_PATH], // 1.程序所在路径;
  140. char szIniName[MAX_PATH], // 2.配置文件名称 ;
  141. int nCommPort, // 3.串行端口;
  142. int nAddr, // 4.设备地址;
  143. char szCmd[MAX_CMD], // 5.请求命令;
  144. char szRecvMsg[VAR_MSG], // 6.响应的值;
  145. int nReversed1, // 7.预留整形参数1接口;
  146. int nReversed2, // 8.预留整形参数2接口;
  147. int nReversed3, // 9.预留整形参数3接口;
  148. int nReversed4, // 10.预留整形参数4接口;
  149. int nReversed5, // 11.预留整形参数5接口;
  150. float fReversed1, // 12.预留float参数1接口;
  151. float fReversed2, // 13.预留float参数2接口;
  152. float fReversed3, // 14.预留float参数3接口;
  153. char szReversed1[MAX_RESERVED1], // 15.预留字符数组参数1接口;
  154. char szReversed2[MAX_RESERVED2], // 16.预留字符数组参数2接口;
  155. char szReversed3[MAX_RESERVED3], // 17.预留字符数组参数3接口;
  156. char szReversed4[MAX_RESERVED4], // 18.预留字符数组参数4接口;
  157. char szReversed5[MAX_RESERVED5] // 19.预留字符数组参数5接口;
  158. );
  159. //.打开串口;
  160. BOOL NxlOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  161. //.获取ini文件分键信息;
  162. int GetNXL_ini_info(
  163. char szPath[MAX_PATH], //.1.服务器程序所在目录;
  164. char szIniName[MAX_PATH], //.2.配置文件名;
  165. char szCmd[MAX_CMD], //.3.命令;
  166. char szCID2[MAX_CID], //.4.CID2;
  167. char nType[MAX_CMD], //.5.数据类型;
  168. int &nIndex, //.6.索引;
  169. int &nLen //.7.截取长度;
  170. );
  171. protected:
  172. int GetEquipmentParamter(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID]); //.0.获取设备传进的请求信息;
  173. int Request_ReadStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID]); //.1.向设备发送请求命令;
  174. int Response_ReadStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.2.接收请求设备响应数据;
  175. protected:
  176. int SetEquipmentParamter(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD],char szCID2[MAX_CID],char szRecvMsg[RECE_MSG_LENGTH]);//.0.获取设备传进的设置信息;
  177. int Request_WirteStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.1.向设备发送设置命令;
  178. int Respones_WirteStatus(CCommProcess *pCom,int iAddr,char szCmd[MAX_CMD]); //.2.接收设置设备的响应数据;
  179. protected:
  180. int Get_NXL_42_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  181. int Get_NXL_43_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  182. int Get_NXL_44_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  183. int Get_NXL_E0_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  184. int Get_NXL_E1_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  185. int Get_NXL_E2_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  186. int Get_NXL_E3_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  187. int Get_NXL_EC_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  188. int Get_NXL_EE_VarMsg(int iAddr,char szCmd[MAX_CMD],char szRecvMsg[RECE_MSG_LENGTH],int &iIndex,int &iLen,char szTy[TYPE_LENGTH]);
  189. protected:
  190. int Set_NXL_42_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  191. int Set_NXL_43_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  192. int Set_NXL_44_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  193. int Set_NXL_E0_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  194. int Set_NXL_E1_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  195. int Set_NXL_E2_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  196. int Set_NXL_E3_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  197. int Set_NXL_EC_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  198. int Set_NXL_EE_VarMsg(int iAddr,char szCmd[MAX_CMD],char *szRecvMsg);
  199. protected:
  200. int RtnCheck(char szRecvMsg[RECE_MSG_LENGTH]);
  201. int NxlGetCheckSum(char *SendMsg,BYTE *szRecvCheck,int iMsgLen);
  202. BOOL Check_RecvMsgCheckSum(char *RecvMsg,int iMsgLen);
  203. BOOL LengthCheck(char szRecvMsg[RECE_MSG_LENGTH]);
  204. };
  205. #endif