我们的串口程序,除了通用的,进行串口监听收发的简单工具,大多都和下位机有关,这就需要关心我们的通讯协议如何缓存,分析,以及通知界面。
我们先说一下通讯协议。通讯协议就是通讯双方共同遵循的一套规则,定义协议的原则是尽可能的简单以提高传输率,尽可能的具有安全性保证数据传输完整正确。基于这2点规则,我们一个通讯协议应该是这样的:头+数据长度+数据正文+校验
例如:
我们的项目中的第一个协议:F1 01 C1 29 8A 18 73 FF FF FFFF C9(实际数据没有空格)
这里我假设的一条数据,协议如下:
数据头: F1 01 C1
数据长度:8位
数据正文: 29 8A 18 73 FF FF FF FF
校验: C9
一般数据的校验,都会采用常用的方式,CRC16,CRC32,Xor。
有的数据安全要求高的,不允许丢包的,可能还要加入重发机制或是加入数据恢复算法。继续分析这个协议,其中的报头与发给下位机的命令相对应,比如这个F1指示的的命令的类型,01是与主机通信也就是收到命令的分机号,而C1代表主机上连接的前置机号,前置机上连接的是测温或测湿的传感器可以通过图来具体了解一下;
简单的说报头也就是对数据的一些说明,可以定位数据包含信息的内容,以及数据的地址信息。分析数据正文,数据正文中包含我的需要的测试数据,这些数据可以根据事先定义的公式进行解析比如上面的数据一共用到了4位最后的四位(FF FF FF FF)用来表示无数据前四位16进制值可以通过协议中的公式进行温度或适度的转换,而最后的校验位则是crc校验,通过计算得到,具体的计算方法我在之前也介绍过了。具体的实现请读者自己尝试吧。
原文:http://blog.csdn.net/hy6688_/article/details/19235733