#ifndef _CDCFrameCkCmdFrame_ #define _CDCFrameCkCmdFrame_ //数据注入指令从控发送数据协议 #pragma once //#include "framelib/basetype.h" //#include "framelib/DataInject.h" #pragma pack(1) typedef struct struProtocalDataInject_DC { UINT8 DCtype; //吊舱类型 union { struct { UINT8 SwitchCmd; //开关指令 INT16 param1; //参数1 INT16 param2; //参数2 UINT8 reserve[9]; //保留 }DC_13Ins;//13所吊舱控制指令 struct { BYTE param; //参数 BYTE param2; //参数 BYTE param3; //参数 BYTE param4; //参数 BYTE param5; //参数 BYTE param6; //参数 BYTE param7; //参数 BYTE param8; //参数 BYTE param9; //参数 BYTE param10; //参数 BYTE param11; //参数 BYTE param12; //参数 BYTE param13; //参数 BYTE param14; //参数 }DC_WHTJ; //天进吊舱控制指令 BYTE DataIn[14];//14个字节 }; }ProtocalDataInject_DC; typedef struct struDataInject_DC { UINT8 DCtype; //吊舱类型 union { struct { UINT8 SwitchCmd; //开关指令 double param1; //参数1 double param2; //参数2 UINT8 reserve[9]; //保留 }DC_13Ins;//13所吊舱控制指令 struct { BYTE param; //参数 BYTE param2; //参数 BYTE param3; //参数 BYTE param4; //参数 BYTE param5; //参数 BYTE param6; //参数 BYTE param7; //参数 BYTE param8; //参数 BYTE param9; //参数 BYTE param10; //参数 BYTE param11; //参数 BYTE param12; //参数 BYTE param13; //参数 BYTE param14; //参数 }DC_WHTJ;//天进吊舱控制指令 BYTE DC_Data[14];//14个字节 }; }DataInject_DC; //数据注入指令从控发送数据帧---13所吊舱 typedef struct struDCFrameCkCmd { UINT8 FrameHead[2]; //帧头EB 90 UINT8 fcode; //数据注入指令码 ProtocalDataInject_DC protocalDataInject_DC; UINT16 crc16; //校验位 }DCFrameCkCmd; #pragma pack() //数据结构体 typedef struct struDCFrameCkCmdData { UINT8 fcode; //数据注入指令码 DataInject_DC dataInject_DC; UINT16 crc16; //校验位 }DCFrameCkCmdData; #pragma pack() class CDCFrameCkCmdFrame : public CFrameAbstract { public: DCFrameCkCmdData Data; public: CDCFrameCkCmdFrame() { //具体数据长度 _tcscpy(Name, _T("DateInject_CK_DC"));//数据注入 从控 吊舱 FrameLength = 20; HeadLength = 2; Head[0] = 0xEB; Head[1] = 0x90; memcpy(Addr(), Head, HeadLength);//把Head的第一位到HeadLength位的值赋值给Addr() CheckLength = 2; CheckPos = FrameLength - 2; FrameType = ftFKu; memset(&Data,0,sizeof(DCFrameCkCmdData));//将Data中的数据全都初始化为0 } virtual ~CDCFrameCkCmdFrame(){} virtual void Encode() { DCFrameCkCmd *pBuff = (DCFrameCkCmd*) Addr(); pBuff->fcode = Data.fcode; pBuff->protocalDataInject_DC.DCtype = Data.dataInject_DC.DCtype; switch(Data.dataInject_DC.DCtype) { case 0x01: pBuff->protocalDataInject_DC.DC_13Ins.SwitchCmd = Data.dataInject_DC.DC_13Ins.SwitchCmd; pBuff->protocalDataInject_DC.DC_13Ins.param1 = Data.dataInject_DC.DC_13Ins.param1; pBuff->protocalDataInject_DC.DC_13Ins.param2 = Data.dataInject_DC.DC_13Ins.param2; memset(&(pBuff->protocalDataInject_DC.DC_13Ins.reserve),0,sizeof(pBuff->protocalDataInject_DC.DC_13Ins.reserve)); break; case 0x02: pBuff->protocalDataInject_DC.DC_WHTJ.param = Data.dataInject_DC.DC_WHTJ.param; pBuff->protocalDataInject_DC.DC_WHTJ.param2 = Data.dataInject_DC.DC_WHTJ.param2; pBuff->protocalDataInject_DC.DC_WHTJ.param3 = Data.dataInject_DC.DC_WHTJ.param3; pBuff->protocalDataInject_DC.DC_WHTJ.param4 = Data.dataInject_DC.DC_WHTJ.param4; pBuff->protocalDataInject_DC.DC_WHTJ.param5 = Data.dataInject_DC.DC_WHTJ.param5; pBuff->protocalDataInject_DC.DC_WHTJ.param6 = Data.dataInject_DC.DC_WHTJ.param6; pBuff->protocalDataInject_DC.DC_WHTJ.param7 = Data.dataInject_DC.DC_WHTJ.param7; pBuff->protocalDataInject_DC.DC_WHTJ.param8 = Data.dataInject_DC.DC_WHTJ.param8; pBuff->protocalDataInject_DC.DC_WHTJ.param9 = Data.dataInject_DC.DC_WHTJ.param9; pBuff->protocalDataInject_DC.DC_WHTJ.param10 = Data.dataInject_DC.DC_WHTJ.param10; pBuff->protocalDataInject_DC.DC_WHTJ.param11 = Data.dataInject_DC.DC_WHTJ.param11; pBuff->protocalDataInject_DC.DC_WHTJ.param12 = Data.dataInject_DC.DC_WHTJ.param12; pBuff->protocalDataInject_DC.DC_WHTJ.param13 = Data.dataInject_DC.DC_WHTJ.param13; pBuff->protocalDataInject_DC.DC_WHTJ.param14 = Data.dataInject_DC.DC_WHTJ.param14; break; default: break; } /* switch(Data.fcode) { case 0x70: if(Data.details.DataZ70.DCtype == 0x01){ EncodeUZ70( &( pBuff->details ),&( Data.details )); } if(Data.details.DataZ70_TJDC.DCTpye == 0x02){ EncodeUZ70_TJDC( &( pBuff->details ),&( Data.details )); } break; default: break; } */ } virtual void Decode() { DCFrameCkCmd *pBuff = (DCFrameCkCmd*) Addr(); Data.fcode = pBuff->fcode; Data.dataInject_DC.DCtype = pBuff->protocalDataInject_DC.DCtype; switch(pBuff->protocalDataInject_DC.DCtype) { case 0x01: Data.dataInject_DC.DC_13Ins.SwitchCmd = pBuff->protocalDataInject_DC.DC_13Ins.SwitchCmd; Data.dataInject_DC.DC_13Ins.param1 = pBuff->protocalDataInject_DC.DC_13Ins.param1; Data.dataInject_DC.DC_13Ins.param2 = pBuff->protocalDataInject_DC.DC_13Ins.param2; memset(&(Data.dataInject_DC.DC_13Ins.reserve),0,sizeof(Data.dataInject_DC.DC_13Ins.reserve)); break; case 0x02: Data.dataInject_DC.DC_WHTJ.param = pBuff->protocalDataInject_DC.DC_WHTJ.param; Data.dataInject_DC.DC_WHTJ.param2 = pBuff->protocalDataInject_DC.DC_WHTJ.param2; Data.dataInject_DC.DC_WHTJ.param3 = pBuff->protocalDataInject_DC.DC_WHTJ.param3; Data.dataInject_DC.DC_WHTJ.param4 = pBuff->protocalDataInject_DC.DC_WHTJ.param4; Data.dataInject_DC.DC_WHTJ.param5 = pBuff->protocalDataInject_DC.DC_WHTJ.param5; Data.dataInject_DC.DC_WHTJ.param6 = pBuff->protocalDataInject_DC.DC_WHTJ.param6; Data.dataInject_DC.DC_WHTJ.param7 = pBuff->protocalDataInject_DC.DC_WHTJ.param7; Data.dataInject_DC.DC_WHTJ.param8 = pBuff->protocalDataInject_DC.DC_WHTJ.param8; Data.dataInject_DC.DC_WHTJ.param9 = pBuff->protocalDataInject_DC.DC_WHTJ.param9; Data.dataInject_DC.DC_WHTJ.param10 = pBuff->protocalDataInject_DC.DC_WHTJ.param10; Data.dataInject_DC.DC_WHTJ.param11 = pBuff->protocalDataInject_DC.DC_WHTJ.param11; Data.dataInject_DC.DC_WHTJ.param12 = pBuff->protocalDataInject_DC.DC_WHTJ.param12; Data.dataInject_DC.DC_WHTJ.param13 = pBuff->protocalDataInject_DC.DC_WHTJ.param13; Data.dataInject_DC.DC_WHTJ.param14 = pBuff->protocalDataInject_DC.DC_WHTJ.param14; break; default: break; } Data.crc16 = pBuff->crc16; } //void Phrase(const BYTE* Src, const UINT32 Count) //{ //} virtual struCHECK CheckCRC(BYTE* const p) { //return MakeCheckSum_WuHanTJDC(p,31); return MakeCheckCRC(p+2,16); } }; #endif//_CDCFrameCkCmdFrame_