UpsEaton.h 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. //////////////////////////////////////////////////////////////////////////////
  2. ////// //////
  3. ////// 文 件: UpsEaton.cpp //////
  4. ////// 作 者: xt //////
  5. ////// 创建时间: 2012-05-08 10:37 //////
  6. ////// 说 明: Eaton UPS协议 //////
  7. ////// //////
  8. ////// 修改时间: //////
  9. ////// 修改说明: //////
  10. ////// //////
  11. //////////////////////////////////////////////////////////////////////////////
  12. #ifndef UPS_EATON_H
  13. #define UPS_EATON_H
  14. #pragma once
  15. #include "CommInterface.h"
  16. class CUpsEaton:public CCommInterface
  17. {
  18. public:
  19. #define UPS_EATON_SEND_MSG 32
  20. #define UPS_TYPE_LENGTH 10
  21. #define DEBUG_UPS_EATON_120 1
  22. #define UPS_EATON_MAX_BUF 256
  23. enum __ERRO_CODE_UPSEATON
  24. {
  25. ERR_CODE_UPS_EATON_COM_FAULT = 50201 , //3A3120KS设备串口通信故障
  26. ERR_CODE_UPS_EATON_COM_BUSY , //3A3120KS设备串口通信忙
  27. ERR_CODE_UPS_EATON_COM_READ_NO_DATA , //3A3120KS设备没有读到数据
  28. ERR_CODE_UPS_EATON_COM_READ_LEN_OVER , //3A3120KS设备读到数据长度超时限制
  29. ERR_CODE_UPS_EATON_COM_LRC_LOST , //3A3120KS设备lrc校验失败
  30. EER_CODE_UPS_EATON_COM_WRITE_DATA , //3A3120KS设备写串口错误
  31. EER_CODE_UPS_EATON_COM_REGNUM , //3A3120KS设备寄存器数
  32. ERR_CODE_UPS_EATON_COM_VARLEN , //3A3120KS设备变量长度非法
  33. ERR_CODE_UPS_EATON_COM_INVALIDRES , //3A3120KS设备无效应答
  34. };
  35. public:
  36. CUpsEaton(
  37. char szPath[MAX_PATH], // 程序所在路径
  38. char szIniName[MAX_PATH], // 配置文件名称
  39. int nCommPort, // 串行端口
  40. int nAddr, // 设备地址
  41. int nRate, // 波特率
  42. int nDataBit, // 数据位
  43. int nStopBit, // 停止位
  44. int nParity, // 校验位
  45. int nInterval // 时间间隔
  46. );
  47. virtual ~CUpsEaton(void);
  48. BOOL UpsEatonOpenComm(int nCommPort, int nAddr, int nRate, int nDataBit, int nStopBit, int nParity, int nInterval);
  49. int SendReadRequest(
  50. char szPath[MAX_PATH], // 程序所在路径
  51. char szIniName[MAX_PATH], // 配置文件名称
  52. int nCommPort, // 串行端口
  53. int nAddr, // 设备地址
  54. char szCmd[MAX_CMD], // 请求命令
  55. char szMsg[VAR_MSG], // 响应的值
  56. int nReversed1, // 预留整形参数1接口
  57. int nReversed2, // 预留整形参数2接口
  58. int nReversed3, // 预留整形参数3接口
  59. int nReversed4, // 预留整形参数4接口
  60. int nReversed5, // 预留整形参数5接口
  61. float fReversed1, // 预留float参数1接口
  62. float fReversed2, // 预留float参数2接口
  63. float fReversed3, // 预留float参数3接口
  64. char szReversed1[MAX_RESERVED1], // 预留字符数组参数1接口
  65. char szReversed2[MAX_RESERVED2], // 预留字符数组参数2接口
  66. char szReversed3[MAX_RESERVED3], // 预留字符数组参数3接口
  67. char szReversed4[MAX_RESERVED4], // 预留字符数组参数4接口
  68. char szReversed5[MAX_RESERVED5] // 预留字符数组参数5接口
  69. );
  70. private:
  71. HANDLE m_hSemComm;
  72. CRITICAL_SECTION m_csReadMsg;
  73. char m_szQ2Msg[UPS_EATON_MAX_BUF];
  74. char m_szWAMsg[UPS_EATON_MAX_BUF];
  75. protected:
  76. int GetDeviceParam(
  77. int nAddr,
  78. CCommProcess *pComm, // 串口对象指针
  79. char szSendMsg[UPS_EATON_SEND_MSG], // 发送Buffer
  80. char szCmd[MAX_CMD], // 命令
  81. char szMsg[VAR_MSG], // 接收Buffer
  82. int &nIndex, // 变量索引,针对接收Buffer而言
  83. int &nLen, // 变量长度
  84. char szType[TYPE_LENGTH] );
  85. int GetParFromIni(char szPath[MAX_PATH], //服务器程序所在目录
  86. char szIniName[MAX_PATH], //配置文件名
  87. char szCmd[MAX_CMD], //命令
  88. char szEatonSendMsg[MAX_CMD], //发送Buffer
  89. char nType[MAX_CMD],
  90. int &nIndex,
  91. int &nLen,
  92. int &startBit,
  93. int &endBit);
  94. int RequestStatus(
  95. int nAddr,
  96. CCommProcess *pComm, //串口对象指针
  97. const char chSendMsg[UPS_EATON_SEND_MSG] //发送Buffer
  98. );
  99. int ResponseStatus(
  100. int nAddr,
  101. CCommProcess *pComm, //串口对象指针
  102. char szCmd[MAX_CMD], // 命令
  103. char szMsg[VAR_MSG], // 接收Buffer
  104. int &nIndex, // 变量索引,针对接收Buffer而言
  105. int &nLen, // 变量长度
  106. char szType[TYPE_LENGTH] // 变量数据类型
  107. );
  108. int GetUpsEaton_Q2Msg(
  109. char szCmd[MAX_CMD], // 命令
  110. char szMsg[VAR_MSG], // 接收Buffer
  111. int &nIndex, // 变量索引,针对接收Buffer而言
  112. int &nLen, // 变量长度
  113. char szType[TYPE_LENGTH],
  114. int startBit,
  115. int endBit );
  116. int GetUpsEaton_WAMsg(
  117. char szCmd[MAX_CMD], // 命令
  118. char szMsg[VAR_MSG], // 接收Buffer
  119. int &nIndex, // 变量索引,针对接收Buffer而言
  120. int &nLen, // 变量长度
  121. char szType[TYPE_LENGTH],
  122. int startBit,
  123. int endBit );
  124. void SetUpsEaton_Q2Msg( char szCmd[MAX_CMD], char *pBuffer);
  125. void SetUpsEaton_WAMsg( char szCmd[MAX_CMD], char *pBuffer);
  126. void SimulationCommData();
  127. int StrLower(char *pSource, char *pDest);
  128. private:
  129. int m_address;
  130. BOOL m_dwOnlineTick;
  131. BOOL m_devOnline;
  132. };
  133. #endif