一种高效的串行通信协议的制定及实现
如果帧头在接收数据缓冲区的不连续字节内(如图2(b)所示),应把从第2个帧头开始的有效数据移到第1个帧头后,如图3所示,使得待处理缓冲区的数据形成连续的一帧数据来继续下一步的处理。
如果帧头分散在两个数据帧中(如图2(c)所示),即PC响应串行中断第1次接收到第1个帧头,第2次响应或者第n次响应串行中断接收到第2个帧头。当接收到第1个帧头后,S赋值为1。当下次响应串行中断时,判断S的值,如果是1,表示第1个帧头已经找到,开始在接收到的帧数据中寻找第2个帧头;如果找到,S赋值为2,并把从第2个帧头开始的有效数据移到第1个帧头后,使待处理缓冲区的数据形成连续的一帧数据来处理。
判断命令字是否为协议中规定的合法命令字。如果是,将根据命令字所对应的长度来判断该帧数据的合法性,因为在制定通信协议时,规定了特定命令字所对应的数据长度,这两点约束条件可以保证接收数据的合法性,从而提高了系统的稳定性。如果命令字和其对应的长度值合法则将S赋值为3,进入下一步的数据处理步骤。
最后,关闭发送定时器,防止处理的过程中有新的接收数据影响处理有效数据的过程。处理完毕,打开发送定时器,根据处理过程中标志位的改变情况继续与控制点进行相应的数据通信。在处理接收数据的步骤中,如果任何一个步骤出现非法数据,则清空ReceBuffer[M]和DealBuffer[M],认为该帧数据传输出错,丢弃该帧数据,并初始化接收变量,重新设定接收超时定时器,接收下一次通信数据。
本文通过完整的串行通信协议的设计,在PC软件发送端始终处于通信状态,能以很快的速度响应系统协议规定的命令字及其数据的发送。同时,在PC软件接收端,采用逐字节处理的方式,通过设定全局变量来确定处理接收数据帧的步骤,细化了处理接收数据的过程,保证了数据高效可靠的传输。本系统已经应用在上海宝钢集团加油站信息管理系统中,实验结果证明,此协议的通信数据准确、通信效率高效可靠、自适应能力强,具有在相关领域推广的价值和意义。
- 基于GPRS的SOCKET通信的应用研究(01-15)
- 基于未知上位机串行通信波特率检测(05-08)
- 串行通信技术在DNC通信系统中的应用 (07-13)
- 基于单片机应用系统的串行通信设计(06-11)
- 在DNC通信系统中串行通信技术的应用(03-11)
- 基于Verilog HDL语言的CAN总线控制器设计及验证(07-01)
