__UL33.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355
  1. // __UL33.h: interface for the CUL33 class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX___UL33_H__D72D47C1_9842_4773_9D89_40B994130A9D__INCLUDED_)
  5. #define AFX___UL33_H__D72D47C1_9842_4773_9D89_40B994130A9D__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. //#define IS_USE_READMSG_CS 0 // 是否使用接收buffer临界保护
  10. #include "CommInterface.h"
  11. #include "CommProcess.h"
  12. class __CUL33 : public CCommInterface
  13. {
  14. #define DEBUG_UL33 1
  15. #define UL_VAR_MSG 255
  16. #define UL33_INFO_MSG 255 //INFO数据最长长度;
  17. #define UL33_SEND_MSG 32 //发送Buffer的最长长度;
  18. // UPS UL33 设备Dll错误代码定义
  19. enum __ERRO_CODE_DATAMATE3000
  20. {
  21. ERR_CODE_UL33_COM_FAULT = 50201 , //UL33设备串口通信故障
  22. ERR_CODE_UL33_COM_BUSY , //UL33设备串口通信忙
  23. ERR_CODE_UL33_COM_READ_NO_DATA , //UL33设备没有读到数据
  24. ERR_CODE_UL33_COM_READ_LEN_OVER , //UL33设备读到数据长度超时限制
  25. ERR_CODE_UL33_COM_CHKSUM_LOST , //UL33设备校验失败
  26. EER_CODE_UL33_COM_WRITE_DATA , //UL33设备写串口错误
  27. EER_CODE_UL33_COM_REGNUM , //UL33设备寄存器数
  28. ERR_CODE_UL33_COM_VARLEN , //UL33设备变量长度非法
  29. ERR_CODE_UL33_COM_INVALIDRES , //UL33设备无效应答
  30. };
  31. //UL33 设备DLL错误代码定义
  32. enum _ERRO_CODE_RTN
  33. {
  34. ERR_CODE_RTN_NATURAL = 0x00, // 正常
  35. ERR_CODE_RTN_VER_ERROR, // VER错误
  36. ERR_CODE_RTN_CHKSUM_ERROR, // CHECKSUM错
  37. ERR_CODE_RTN_LCHKSUM_ERROR, // LCHECKSUM
  38. ERR_CODE_RTN_CID_ERROR, // CID2无效
  39. ERR_CODE_RTN_COMMAND_FORMAT, // 命令格式错
  40. ERR_CODE_RTN_INVALID_DATA, // 无效数据
  41. ERR_CODE_RTN_INVALID_LIMIT =0x10, // 无效权限
  42. ERR_CODE_RTN_OPERATE_FAIL, // 操作失败
  43. ERR_CODE_RTN_EQUIT_FAIL, // 设备故障
  44. //ERR_CODE_RTN_KEEP, // 保留
  45. //ERR_CODE_RTN_WATCH, // 监控
  46. //ERR_CODE_RTN_ELECTICAL_SOURCE // 电源
  47. };
  48. //UL33 设备错误预留字节
  49. enum _ERROR_LENGTHSUM
  50. {
  51. ERR_LENGTH_SUM = 60220,
  52. ERR_CHEKSUM
  53. };
  54. //UL33 设备请求接收的协议格式
  55. typedef struct __RESPONSE_STRUCT
  56. {
  57. BYTE SOI; //起始标志位(7EH) 1
  58. BYTE VER; //通讯协议版本号 2
  59. BYTE ADR; //设备地址描述(1--254;0,255保留) 2
  60. BYTE CID1; //控制标示符(2AH) 2
  61. BYTE CID2; //信息类型 2
  62. WORD LENGTH; //内容长度 4
  63. BYTE szContent[UL33_INFO_MSG]; //协议内容
  64. WORD CHKSUM; //校验和码 4
  65. BYTE EOI; //结束码 0x0d(回车) 1
  66. }RESPONSE_STRUCT, *PRESPONSE_STRUCT;
  67. typedef struct __CHILD
  68. {
  69. BYTE bySoi; //起始标志位
  70. BYTE byVer[2]; //通讯协议版本号
  71. BYTE byAdr[2]; //设备地址描述
  72. BYTE byCid1[2]; //控制标识码
  73. BYTE byCid2[2]; //命令信息
  74. BYTE byLength[4]; //INFO字节长度
  75. BYTE byInfo[2];
  76. }CHILD, *pCHILD;
  77. //UL33 设备请求发送的协议命令格式
  78. typedef struct __REQUESTPARAM
  79. {
  80. CHILD RequestChild;
  81. BYTE byCheckSum[4]; //校验码
  82. BYTE byEoi; //结束码
  83. }REQUESTPARAM, *pREQUESTPARAM;
  84. public:
  85. __CUL33(
  86. char szPath[MAX_PATH], // 程序所在路径
  87. char szIniName[MAX_PATH], // 配置文件名称
  88. int nCommPort, // 串行端口
  89. int nAddr, // 设备地址
  90. int nRate, // 波特率
  91. int nDataBit, // 数据位
  92. int nStopBit, // 停止位
  93. int nParity, // 校验位
  94. int nInterval // 时间间隔
  95. );
  96. virtual ~__CUL33();
  97. public:
  98. UINT GetCheckSum(char *pBuf, char chDest[5], int len);
  99. int SendReadRequest(
  100. char szPath[MAX_PATH], // 程序所在路径
  101. char szIniName[MAX_PATH], // 配置文件名称
  102. int nCommPort, // 串行端口
  103. int nAddr, // 设备地址
  104. char szCmd[MAX_CMD], // 请求命令
  105. char szMsg[VAR_MSG], // 响应的值
  106. int nReversed1, // 预留整形参数1接口
  107. int nReversed2, // 预留整形参数2接口
  108. int nReversed3, // 预留整形参数3接口
  109. int nReversed4, // 预留整形参数4接口
  110. int nReversed5, // 预留整形参数5接口
  111. float fReversed1, // 预留float参数1接口
  112. float fReversed2, // 预留float参数2接口
  113. float fReversed3, // 预留float参数3接口
  114. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  115. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  116. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  117. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  118. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  119. );
  120. // 发送设置设备参数请求
  121. int SendSetReuest(
  122. char szPath[MAX_PATH], // 程序所在路径
  123. char szIniName[MAX_PATH], // 配置文件名称
  124. int nCommPort, // 串行端口
  125. int nAddr, // 设备地址
  126. char szCmd[MAX_CMD], // 请求命令
  127. char szRecvMsg[VAR_MSG], // 响应的值
  128. int nReversed1, // 预留整形参数1接口
  129. int nReversed2, // 预留整形参数2接口
  130. int nReversed3, // 预留整形参数3接口
  131. int nReversed4, // 预留整形参数4接口
  132. int nReversed5, // 预留整形参数5接口
  133. float fReversed1, // 预留float参数1接口
  134. float fReversed2, // 预留float参数2接口
  135. float fReversed3, // 预留float参数3接口
  136. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  137. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  138. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  139. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  140. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  141. );
  142. BOOL UpsULOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  143. protected:
  144. //.从机1;
  145. char m1_41Msg[UL_VAR_MSG];
  146. char m1_C0Msg[UL_VAR_MSG];
  147. char m1_C1Msg[UL_VAR_MSG];
  148. char m1_C2Msg[UL_VAR_MSG];
  149. char m1_C3Msg[UL_VAR_MSG];
  150. char m1_C4Msg[UL_VAR_MSG];
  151. char m1_43Msg[UL_VAR_MSG];
  152. char m1_44Msg[UL_VAR_MSG];
  153. char m1_C7Msg[UL_VAR_MSG];
  154. char m1_C8Msg[UL_VAR_MSG];
  155. //.从机2;
  156. char m2_41Msg[UL_VAR_MSG];
  157. char m2_C0Msg[UL_VAR_MSG];
  158. char m2_C1Msg[UL_VAR_MSG];
  159. char m2_C2Msg[UL_VAR_MSG];
  160. char m2_C3Msg[UL_VAR_MSG];
  161. char m2_C4Msg[UL_VAR_MSG];
  162. char m2_43Msg[UL_VAR_MSG];
  163. char m2_44Msg[UL_VAR_MSG];
  164. char m2_C7Msg[UL_VAR_MSG];
  165. char m2_C8Msg[UL_VAR_MSG];
  166. //.从机3;
  167. char m3_41Msg[UL_VAR_MSG];
  168. char m3_C0Msg[UL_VAR_MSG];
  169. char m3_C1Msg[UL_VAR_MSG];
  170. char m3_C2Msg[UL_VAR_MSG];
  171. char m3_C3Msg[UL_VAR_MSG];
  172. char m3_C4Msg[UL_VAR_MSG];
  173. char m3_43Msg[UL_VAR_MSG];
  174. char m3_44Msg[UL_VAR_MSG];
  175. char m3_C7Msg[UL_VAR_MSG];
  176. char m3_C8Msg[UL_VAR_MSG];
  177. //.从机4;
  178. char m4_41Msg[UL_VAR_MSG];
  179. char m4_C0Msg[UL_VAR_MSG];
  180. char m4_C1Msg[UL_VAR_MSG];
  181. char m4_C2Msg[UL_VAR_MSG];
  182. char m4_C3Msg[UL_VAR_MSG];
  183. char m4_C4Msg[UL_VAR_MSG];
  184. char m4_43Msg[UL_VAR_MSG];
  185. char m4_44Msg[UL_VAR_MSG];
  186. char m4_C7Msg[UL_VAR_MSG];
  187. char m4_C8Msg[UL_VAR_MSG];
  188. protected:
  189. int RequestReadStatus(
  190. int nAddr,
  191. CCommProcess *pComm,
  192. char szSendMsg[UL33_SEND_MSG],
  193. char szCode[MAX_CMD]
  194. );
  195. int ResponseReadStatus(
  196. CCommProcess *pComm,
  197. char szCmd[MAX_CMD],
  198. char szRecvMsg[VAR_MSG],
  199. int &nIndex,
  200. int &nLen,
  201. char szType[TYPE_LENGTH]
  202. );
  203. int RequestWriteStatus( char szUL33Msg[UL33_SEND_MSG] );
  204. int ResponseWriteStatus( char szUL33Msg[UL33_SEND_MSG] );
  205. int GetDeviceParam(
  206. int nAddr,
  207. CCommProcess *pComm, //串口对象指针
  208. char szSendMsg[UL33_SEND_MSG], //发送Buffer
  209. char szCmd[MAX_CMD], // 命令
  210. char szRecvMsg[VAR_MSG], // 接收Buffer
  211. int &nIndex, // 变量索引,针对接收Buffer而言
  212. int &nLen, // 变量长度
  213. char szType[TYPE_LENGTH], // 变量数据类型
  214. char szCode[MAX_CMD]
  215. );
  216. int GetULFromIni(
  217. char szPath[MAX_PATH], //服务器程序所在目录
  218. char szIniName[MAX_PATH], //配置文件名
  219. char szCmd[MAX_CMD], //命令
  220. char szSanTakSendMsg[MAX_CMD], //发送Buffer
  221. char nType[MAX_CMD],
  222. int &nIndex,
  223. int &nLen,
  224. char szCode[MAX_CMD]
  225. );
  226. int GetULQ41VarMsg( char szCmd[MAX_CMD], // 命令
  227. char szRecvMsg[VAR_MSG], // 接收Buffer
  228. int &nIndex, // 变量索引,针对接收Buffer而言
  229. int &nLen, // 变量长度
  230. char szType[TYPE_LENGTH]
  231. );
  232. int GetULQ43VarMsg( char szCmd[MAX_CMD], // 命令
  233. char szRecvMsg[VAR_MSG], // 接收Buffer
  234. int &nIndex, // 变量索引,针对接收Buffer而言
  235. int &nLen, // 变量长度
  236. char szType[TYPE_LENGTH]
  237. );
  238. int GetULQ44VarMsg( char szCmd[MAX_CMD], // 命令
  239. char szRecvMsg[VAR_MSG], // 接收Buffer
  240. int &nIndex, // 变量索引,针对接收Buffer而言
  241. int &nLen, // 变量长度
  242. char szType[TYPE_LENGTH]
  243. );
  244. int GetULQC0VarMsg( char szCmd[MAX_CMD], // 命令
  245. char szRecvMsg[VAR_MSG], // 接收Buffer
  246. int &nIndex, // 变量索引,针对接收Buffer而言
  247. int &nLen, // 变量长度
  248. char szType[TYPE_LENGTH]
  249. );
  250. int GetULQC1VarMsg( char szCmd[MAX_CMD], // 命令
  251. char szRecvMsg[VAR_MSG], // 接收Buffer
  252. int &nIndex, // 变量索引,针对接收Buffer而言
  253. int &nLen, // 变量长度
  254. char szType[TYPE_LENGTH]
  255. );
  256. int GetULQC2VarMsg( char szCmd[MAX_CMD], // 命令
  257. char szRecvMsg[VAR_MSG], // 接收Buffer
  258. int &nIndex, // 变量索引,针对接收Buffer而言
  259. int &nLen, // 变量长度
  260. char szType[TYPE_LENGTH]
  261. );
  262. int GetULQC3VarMsg( char szCmd[MAX_CMD], // 命令
  263. char szRecvMsg[VAR_MSG], // 接收Buffer
  264. int &nIndex, // 变量索引,针对接收Buffer而言
  265. int &nLen, // 变量长度
  266. char szType[TYPE_LENGTH]
  267. );
  268. int GetULQC4VarMsg( char szCmd[MAX_CMD], // 命令
  269. char szRecvMsg[VAR_MSG], // 接收Buffer
  270. int &nIndex, // 变量索引,针对接收Buffer而言
  271. int &nLen, // 变量长度
  272. char szType[TYPE_LENGTH]
  273. );
  274. int GetULQC7VarMsg( char szCmd[MAX_CMD], // 命令
  275. char szRecvMsg[VAR_MSG], // 接收Buffer
  276. int &nIndex, // 变量索引,针对接收Buffer而言
  277. int &nLen, // 变量长度
  278. char szType[TYPE_LENGTH]
  279. );
  280. int GetULQC8VarMsg( char szCmd[MAX_CMD], // 命令
  281. char szRecvMsg[VAR_MSG], // 接收Buffer
  282. int &nIndex, // 变量索引,针对接收Buffer而言
  283. int &nLen, // 变量长度
  284. char szType[TYPE_LENGTH]
  285. );
  286. WORD RtnCheck(char Msg[VAR_MSG],int len);
  287. void SetULQ41VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  288. void SetULQ43VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  289. void SetULQ44VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  290. void SetULQC0VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  291. void SetULQC1VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  292. void SetULQC2VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  293. void SetULQC3VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  294. void SetULQC4VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  295. void SetULQC7VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  296. void SetULQC8VarMsg( char szCmd[MAX_CMD], char *pBuffer);
  297. void SimulationCommData(void);
  298. private:
  299. HANDLE m_hSemComm;
  300. #if IS_USE_READMSG_CS
  301. CRITICAL_SECTION m_csReadMsg;
  302. #endif
  303. BOOL m_dwOnlineTick;
  304. BOOL m_devOnline;
  305. };
  306. #endif // !defined(AFX_UL33_H__D72D47C1_9842_4773_9D89_40B994130A9D__INCLUDED_)