📄 builddata.cpp
字号:
// BuildData.cpp: implementation of the CBuildData class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "maintain.h"
#include "BuildData.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
#include "public.h"
#include "manager.h"
static int nRequestFDK = 1,nRequest0420 = 1,nRequestModbus =1,nRequestJdxj = 1;
extern bool bSmsFlag;
CBuildData::CBuildData()
{
memset(&pMsu,0,sizeof(pMsu));
memset(&pDcu,0,sizeof(pDcu));
memset(&pAcu,0,sizeof(pMsu));
memset(&pSms,0,sizeof(pSms));
memset(&pGroupStation,0,sizeof(GROUPSTATION));
//设置一些初始值
nGuiyueType = GY_DF0420;
nGroupNo = 1;
nAddrNo = 1;
modbus.start_addr = 0;
modbus.yccount = 1;
modbus.yxcount = 1;
}
CBuildData::~CBuildData()
{
}
//组帧 nIndex为组帧类型,返回组帧后的数据长度
//nIndex 1-对钟 2-遥控选择 3-遥控执行 4-遥控取消 5-遥调 6-一般查询
int CBuildData::BuildDataFrame(int nIndex, BYTE* buf)
{
CTime t;
int len;
if (bSmsFlag) //sms
{
if (nIndex == SMS_CALL) {
len = 8;
buf[0] = SOH;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x10;
buf[4] = 0x05;
buf[5] = 0x00;
buf[6] = LOBYTE(CManager::Crc16Parity(&buf[1],5));
buf[7] = HIBYTE(CManager::Crc16Parity(&buf[1],5));
}
if(nIndex == SMS_SET)
{
len = 8+sizeof(SMS_SETUP);
buf[0] = SOH;
buf[1] = LOBYTE(sizeof(SMS_SETUP));
buf[2] = HIBYTE(sizeof(SMS_SETUP));
buf[3] = 0x10;
buf[4] = 0x04;
buf[5] = 0x00;
memcpy(&buf[6],&pSms,sizeof(SMS_SETUP));
buf[sizeof(SMS_SETUP)+6] = LOBYTE(CManager::Crc16Parity(&buf[1],5+sizeof(SMS_SETUP)));
buf[sizeof(SMS_SETUP)+7] = HIBYTE(CManager::Crc16Parity(&buf[1],5+sizeof(SMS_SETUP)));
}
if (nIndex == SMS_RESET)
{
len = 8;
buf[0] = SOH;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x10;
buf[4] = 0x02;
buf[5] = 0x00;
buf[6] = LOBYTE(CManager::Crc16Parity(&buf[1],5));
buf[7] = HIBYTE(CManager::Crc16Parity(&buf[1],5));
}
return len;
}
if(nGuiyueType == GY_CDT)//cdt
{
buf[0] = 0xEB;
buf[1] = 0x90;
buf[2] = 0xEB;
buf[3] = 0x90;
buf[4] = 0xEB;
buf[5] = 0x90;
switch(nIndex)
{
case QUERY_CLOCK://对钟
len = 24;
buf[6] = 0x71;
buf[7] = 0x7A;
buf[8] = 0x02;
buf[9] = 0x01;
buf[10] = 0x01;
buf[11] = CManager::CdtParity(&buf[6]);
buf[12] = 0xEE;
buf[13] = 0x00;//毫秒低,不取
buf[14] = 0x00;//毫秒高,不取
t = CTime::GetCurrentTime();
buf[15] = t.GetSecond();
buf[16] = t.GetMinute();
buf[17] = CManager::CdtParity(&buf[12]);
buf[18] = 0xEE;
buf[19] = t.GetHour();
buf[20] = t.GetDay();
buf[21] = t.GetMonth();
buf[22] = t.GetYear()-2000;
buf[23] = CManager::CdtParity(&buf[18]);
break;
case QUERY_YK_SELECT://yk选择
len = 30;
buf[6] = 0x71;
buf[7] = 0x61;
buf[8] = 0x03;
buf[9] = 0x01;
buf[10] = 0x01;
buf[11] = CManager::CdtParity(&buf[6]);
ykaction = (ykaction==0)?0xCC:0x33;
buf[12] = 0xE0;
buf[13] = (BYTE)ykaction;
buf[14] = (BYTE)ykno;
buf[15] = (BYTE)ykaction;
buf[16] = (BYTE)ykno;
buf[17] = CManager::CdtParity(&buf[12]);
buf[18] = 0xE0;
buf[19] = (BYTE)ykaction;
buf[20] = (BYTE)ykno;
buf[21] = (BYTE)ykaction;
buf[22] = (BYTE)ykno;
buf[23] = CManager::CdtParity(&buf[18]);
buf[24] = 0xE0;
buf[25] = (BYTE)ykaction;
buf[26] = (BYTE)ykno;
buf[27] = (BYTE)ykaction;
buf[28] = (BYTE)ykno;
buf[29] = CManager::CdtParity(&buf[24]);
break;
case QUERY_YK_EXECUTE://yk执行
len = 30;
buf[6] = 0x71;
buf[7] = 0xC2;
buf[8] = 0x03;
buf[9] = 0x01;
buf[10] = 0x01;
buf[11] = CManager::CdtParity(&buf[6]);
buf[12] = 0xE2;
buf[13] = 0xAA;
buf[14] = (BYTE)ykno;
buf[15] = 0xAA;;
buf[16] = (BYTE)ykno;
buf[17] = CManager::CdtParity(&buf[12]);
buf[18] = 0xE2;
buf[19] = 0xAA;
buf[20] = (BYTE)ykno;
buf[21] = 0xAA;
buf[22] = (BYTE)ykno;
buf[23] = CManager::CdtParity(&buf[18]);
buf[24] = 0xE2;
buf[25] = 0xAA;
buf[26] = (BYTE)ykno;
buf[27] = 0xAA;
buf[28] = (BYTE)ykno;
buf[29] = CManager::CdtParity(&buf[24]);
break;
case QUERY_YK_CANCEL://yk取消
len = 30;
buf[6] = 0x71;
buf[7] = 0xB3;
buf[8] = 0x03;
buf[9] = 0x01;
buf[10] = 0x01;
buf[11] = CManager::CdtParity(&buf[6]);
buf[12] = 0xE3;
buf[13] = 0x55;
buf[14] = (BYTE)ykno;
buf[15] = 0x55;
buf[16] = (BYTE)ykno;
buf[17] = CManager::CdtParity(&buf[12]);
buf[18] = 0xE3;
buf[19] = 0x55;
buf[20] = (BYTE)ykno;
buf[21] = 0x55;
buf[22] = (BYTE)ykno;
buf[23] = CManager::CdtParity(&buf[18]);
buf[24] = 0xE3;
buf[25] = 0x55;
buf[26] = (BYTE)ykno;
buf[27] = 0x55;
buf[28] = (BYTE)ykno;
buf[29] = CManager::CdtParity(&buf[24]);
break;
case QUERY_YT://yt
len = 30;
buf[6] = 0x71;
buf[7] = 0xE9;
buf[8] = 0x03;
buf[9] = 0x01;
buf[10] = 0x01;
buf[11] = CManager::CdtParity(&buf[6]);
buf[12] = 0xE9;
buf[13] = LOBYTE(ytvalue);
buf[14] = HIBYTE(ytvalue);
buf[15] = LOBYTE(ytvalue);
buf[16] = HIBYTE(ytvalue);
buf[17] = CManager::CdtParity(&buf[12]);
buf[18] = 0xE9;
buf[19] = LOBYTE(ytvalue);
buf[20] = HIBYTE(ytvalue);
buf[21] = LOBYTE(ytvalue);
buf[22] = HIBYTE(ytvalue);
buf[23] = CManager::CdtParity(&buf[18]);
buf[24] = 0xE9;
buf[25] = LOBYTE(ytvalue);
buf[26] = HIBYTE(ytvalue);
buf[27] = LOBYTE(ytvalue);
buf[28] = HIBYTE(ytvalue);
buf[29] = CManager::CdtParity(&buf[24]);
break;
default:
break;
}
}
if(nGuiyueType == GY_FDK)//fdk
{
buf[0] = SOH;
switch(nIndex)
{
case QUERY_CLOCK://对钟
len = 17;
buf[1] = 0x09;
buf[2] = 0x00;
buf[3] = 0x10;
buf[4] = 0x02;
buf[5] = 0x00;
t = CTime::GetCurrentTime();
buf[6] = LOBYTE(t.GetYear());
buf[7] = HIBYTE(t.GetYear());
buf[8] = t.GetMonth();
buf[9] = t.GetDay();
buf[10] = t.GetHour();
buf[11] = t.GetMinute();
buf[12] = t.GetSecond();
buf[13] = 0x00;
buf[14] = 0x00;
buf[15] = LOBYTE(CManager::Crc16Parity(&buf[1],14));
buf[16] = HIBYTE(CManager::Crc16Parity(&buf[1],14));
break;
case QUERY_YK_SELECT://yk选择
len = 11;
buf[1] = 0x03;
buf[2] = 0x00;
buf[3] = 0x08;
buf[4] = 0x01;
buf[5] = 0x00;
buf[6] = LOBYTE(ykno);
buf[7] = HIBYTE(ykno);
buf[8] = (BYTE)ykaction;
buf[9] = LOBYTE(CManager::Crc16Parity(&buf[1],8));
buf[10] =HIBYTE(CManager::Crc16Parity(&buf[1],8));
break;
case QUERY_YK_EXECUTE://yk执行
len = 8;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x08;
buf[4] = 0x04;
buf[5] = 0x00;
buf[6] = LOBYTE(CManager::Crc16Parity(&buf[1],5));
buf[7] = HIBYTE(CManager::Crc16Parity(&buf[1],5));
break;
case QUERY_YK_CANCEL://yk取消
len = 8;
buf[1] = 0x00;
buf[2] = 0x00;
buf[3] = 0x08;
buf[4] = 0x05;
buf[5] = 0x00;
buf[6] = LOBYTE(CManager::Crc16Parity(&buf[1],5));
buf[7] = HIBYTE(CManager::Crc16Parity(&buf[1],5));
break;
case QUERY_YT://yt
len = 11;
buf[1] = 0x03;
buf[2] = 0x00;
buf[3] = 0x08;
buf[4] = 0x10;
buf[5] = 0x00;
buf[6] = LOBYTE(ytvalue);
buf[7] = HIBYTE(ytvalue);
buf[8] = 0x00;
buf[9] = LOBYTE(CManager::Crc16Parity(&buf[1],8));
buf[10] = HIBYTE(CManager::Crc16Parity(&buf[1],8));
break;
case QUERY_YCYXSOE://FDK -- YC YX SOE
switch(nRequestFDK)
{
case 1://YC
len = 12;
buf[1] = 0x04;
buf[2] = 0x00;
buf[3] = 0x02;
buf[4] = 0x01;
buf[5] = 0x00;
buf[6] = 0x00;
buf[7] = 0x00;
buf[8] = 37;//186召唤时遥测个数为37 ;
buf[9] = 0x00;
buf[10] = LOBYTE(CManager::Crc16Parity(&buf[1],9));
buf[11] = HIBYTE(CManager::Crc16Parity(&buf[1],9));
nRequestFDK = 2;
break;
case 2://YX
len = 12;
buf[1] = 0x04;
buf[2] = 0x00;
buf[3] = 0x03;
buf[4] = 0x03;
buf[5] = 0x00;
buf[6] = 0x00;
buf[7] = 0x00;
buf[8] = 64;//186召唤时遥信个数为64;
buf[9] = 0x00;
buf[10] = LOBYTE(CManager::Crc16Parity(&buf[1],9));
buf[11] = HIBYTE(CManager::Crc16Parity(&buf[1],9));
nRequestFDK = 3;
break;
case 3://SOE
len = 9;
buf[1] = 0x01;
buf[2] = 0x00;
buf[3] = 0x05;
buf[4] = 0x05;
buf[5] = 0x00;
buf[6] = 0x00;
buf[7] = LOBYTE(CManager::Crc16Parity(&buf[1],6));
buf[8] = HIBYTE(CManager::Crc16Parity(&buf[1],6));
nRequestFDK = 1;
break;
default:
break;
}
break;
default:
break;
}
}
if(nGuiyueType == GY_DF0420)//0420
{
int i;
buf[0] = HEAD_DF0420;
switch(nIndex)
{
case PARA_UPLOAD_MSU://MSU参数上装
case PARA_UPLOAD_DCU://DCU参数上装
case PARA_UPLOAD_ACU://ACU参数上装
len = 11;
buf[1] = (BYTE)nGroupNo;
buf[2] = (BYTE)nAddrNo;
buf[3] = 0x02;
buf[4] = 0x00;
buf[5] = 0x21;
buf[6] = 0x00;
buf[7] = 0x00;
buf[8] = 0x00;
buf[9] = LOBYTE(CManager::Crc16Parity(&buf[1],8));
buf[10] = HIBYTE(CManager::Crc16Parity(&buf[1],8));
break;
case PARA_UPLOAD_ALARMER://报警控制器参数上装
len = 11;
buf[1] = 8;
buf[2] = 1;
buf[3] = 0x02;
buf[4] = 0x00;
buf[5] = 0x21;
buf[6] = 0x00;
buf[7] = 0x00;
buf[8] = 0x00;
buf[9] = LOBYTE(CManager::Crc16Parity(&buf[1],8));
buf[10] = HIBYTE(CManager::Crc16Parity(&buf[1],8));
break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -