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