研发上位机报文分析

接收报文

1、接收报文
以读取机芯温度报文为例:AA 04 01 7C 00 2B EB AA
AA:命令头
04:从命令字0到校验的字节数;
01:命令字0;
7C:命令字1;
00:操作符;
2B:校验;
EB AA:命令尾

2、总结
1)上面报文中的粗体部分为固定不变的部分,操作符00代表读,01代表写;
2)接收报文重点关注命令字1和操作符;

3、示例代码

luCMD = uartCMDBuf[3];
luOperateCode = uartCMDBuf[4];
switch (luCMD)
{
	case IR_FEATURE_NUC_Avr_TIF:
	{
		if(luOperateCode == IR_OPERATE_READ)
		{
			lu8tmp = UserParameter->NUC_Avr_TIF;
			oparetSend(IR_FEATURE_NUC_Avr_TIF, &lu8tmp, 1);
		}
		else
		{
			UserParameter->NUC_Avr_TIF = uartCMDBuf[5];
			writeAvr_TIF(UserParameter->NUC_Avr_TIF);
			sndBuf_WrOpOk(IR_FEATURE_NUC_Avr_TIF);
		}
		break;
	}
}

返回报文

1、以返回机芯温度报文为例:55 06 7C 33 C6 0B 03 DE EB AA
55:命令头;
06:从命令字0到校验的字节数;
7C:命令字0;
33:操作符;
DE:校验;
EB AA:命令尾;

2、总结
1)上面报文中的粗体部分为固定不变的部分,需要特别注意的是
a) 返回报文没有命令字1,只有命令字0,命令字0为接收报文中的命令字1;
b) 返回报文中操作符固定为33;

2)返回报文重点关注命令字0和数据域;

3、示例代码

举例1

功能:通用返回报文;
特点:全部字节都是可以确定的(命令字只需要提取接收报文中的命令,然后填入返回报文就可以);

void sndBuf_WrOpOk(IR_FEATURE irFeather)
{
	u8 tmp[10];
	tmp[0] = FRAME_START_ACK;
	tmp[1] = 0x04;
	tmp[2] = irFeather;
	tmp[3] = 0x33;
	tmp[4] = CMD_CORRECT;
	tmp[5] = Get_DRC(tmp,tmp[1]);
	tmp[6] = 0xeb;
	tmp[7] = 0xaa;

	sndBufWr(tmp,(tmp[1]+4));
	if(uart_num==1)
	{
		uart_send_string((tmp[1]+4),sndBuf);
	}
	else
	{
		uart2_send_stringlens((tmp[1]+4),sndBuf);
	}
}

举例2

功能:返回机芯温度及温区;
特点:前4个字节是确定的(命令字只需要提取接收报文中的命令,然后填入返回报文就可以),后3个字节是确定的;

static void sndBuf_WrENVTemp(void)
{
	u16 ls16Temperature = 0;
	u8 tmp[10];
	if(UserParameter->WenChuan_type==0)
	{
		ls16Temperature=tmp116_function()*100;
	}
	else
	{
	     ls16Temperature=M117_Read()*100;
	}
	
	tmp[0] = FRAME_START_ACK;
	tmp[1] = 6;
	tmp[2] = IR_FEATURE_NS_TEMP_ENV;
	tmp[3] = 0x33;
	tmp[4] = ls16Temperature;
	tmp[5] = (ls16Temperature>>8);
	tmp[6] = get_temperature_range();
	tmp[7] = Get_DRC(tmp,6);
	tmp[8] = 0xeb;
	tmp[9] = 0xaa;
	sndBufWr(tmp,10);
	if(uart_num==1)
	{
		uart_send_string(10,sndBuf);
	}
	else
	{
		uart2_send_stringlens(10,sndBuf);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值