| 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);};
 |