CSM315ProtocolEx.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #pragma once
  2. #include <CSM315Protocol.h>
  3. //帧总体结构
  4. struct StFrame
  5. {
  6. BYTE fheader[5]; //帧头:字符型 5字节“qknet”(71 6B 6E 65 74)
  7. BYTE protocode; //协议码:此版本协议码为0x02H.
  8. BYTE dataversion; //数据版本:此版本号由道岔缺口厂家提供给监测厂家。若监测接收到的数据版本类型和厂家提供的不一致,则不处理接收的数据。
  9. BYTE ftype; //帧类型:0x0FH表示心跳帧,0x8FH表示数据帧。
  10. DWORD datalen; //数据长度
  11. LPVOID lpdata; //数据
  12. DWORD ftail; //帧尾:填充4个字节的0xFF。
  13. //新增一些维护型字段
  14. FRAME_KIND e_frmKind;
  15. StFrame()
  16. {
  17. memset(this, 0, sizeof(StFrame));
  18. memcpy_s(fheader, 5, FRAME_HEADER_315, 5);
  19. protocode = PROTOCAL_CODE;
  20. dataversion = PROTOCAL_DATAVERSION;
  21. ftail = FRAME_TAIL_315;
  22. e_frmKind = GENERAL;
  23. }
  24. };
  25. //基础命令数据结构,所有数据命令都包含该格式,解析数据时可用此结构判断命令类型,然后再用相应数据结构解析
  26. typedef struct
  27. {
  28. BYTE cmdid; //请求命令的命令码
  29. }StDataBasic;
  30. class CCSM315ProtocolEx : public CCSM315Protocol
  31. {
  32. public:
  33. //static BOOL Parse(StFrame&, LPVOID, int, int dir = 1);//解析 JHD->微机监测数据包(JHD就是站机端)
  34. //buf指向数据内容 len数据内容的长度 返回data 和 最新位置的buf LPVOID*只是为了方便返回最新位置
  35. static string ParseDataFrm(StFrame& data, LPVOID* buf, int len, int dir);
  36. static string ToString(LPVOID, int, int dir = 1);
  37. static string GetOptDirDesc(int direct);
  38. //采集类型
  39. static string GetAcqTypeDesc(int acqtype);
  40. //报警类型
  41. static string GetAlarmTypeDesc(int alarmID);
  42. //曲线类型
  43. static string GetCurveTypeDesc(int curvetype);
  44. public:
  45. //返回月份的天数
  46. static int GetDaysOfMonth(int y, int m);
  47. //时间有效
  48. static bool IsValid(const SYSTEMTIME& sDT);
  49. //时间差
  50. static int CalcTimePassSecond(SYSTEMTIME* stLast, SYSTEMTIME* stNow = NULL, BOOL bReturnOriginalVal = FALSE);
  51. public:
  52. //释放内存,dir: 数据包方向 0-微机监测->JHD 1-JHD->微机监测
  53. static BOOL Release(StFrame& data, int dir);
  54. };