⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 builddata.cpp

📁 串口收发工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -