You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
6.8 KiB
C++

#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_