当前位置:首页 > 通信技术 > 通信技术
[导读]摘要:为解决串口通信中的数据传输容易出错、可靠性差、安全性不高且容错能力低等问题,设计并实现了一种基于状态机的串口通信协议,并将此协议应用到称重仪表的上位机通信中。本文介绍了串口通信协议的数据包格式以

摘要:为解决串口通信中的数据传输容易出错、可靠性差、安全性不高且容错能力低等问题,设计并实现了一种基于状态机串口通信协议,并将此协议应用到称重仪表的上位机通信中。本文介绍了串口通信协议的数据包格式以及其通信状态机,并给出了协议实现的部分示例代码及算法流程图。在数据包格式定义中通过设置起始标志、数据长度、校验、结束标志等字段,保证数据传输的正确性;并在数据包接收过程中引入状态机方法,简化编程模型的同时,提高了通信过程的可靠性、安全性以及数据传输的容错能力。

关键词:状态机;串口;通信协议;ATmega168;线程

串行通信接口(如RS232、RS485等)作为计算机与单片机交互数据的主要接口,广泛用于各类仪器仪表、工业监测及自动控制领域中。通信协议是需要通信的双方所达成的一种约定,它对包括数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题作出统一规定,在双方的通信中必须共同遵守。在实际应用系统中,如果缺少一个严格、合理、规范的串口通信协议,将无法保证数据传输的正确性及通信的可靠性。因此,文中提出一种基于状态机串口通信协议的设计方法:通过合理地设置数据包格式来保证了数据传输的正确性:引入了状态机方法,简化了协议的实现难度,提高了通信的可靠性,同时使通信过程具有较高的容错能力。

1 定义数据包格式

串口通信中最小的的信息单元是数据帧。一个数据帧通常包括起始位、数据位、结束位,另外还可以包含用于检测传输错误的“奇偶校验位”,每个数据帧中传输的数据位可以有5、6、7、8或9个。

实际通信过程中,数据的发送是一帧一帧地进行,当被传输的数据超过一帧时(例如浮点型数据),如果没有对数据帧进行必要的打包,发送出去的数据将会很难被数据接收方解释与分析,进而造成数据传输混乱与错误。因此,在一般应用中有必要将数据帧组装成数据包再发送。为了保证数据传输的正确性,将数据包定义为如图1所示。

1)起始标志表示开始接收一个新的数据包,本协议中规定为0x55。

2)数据长度命令和附加数据共占的字节数。设置此字段,可方便接收方识别数据包的长度并能够准确地接收数据包。

3)命令用来说明数据包的用途。

4)附加数据 当命令不同时,含义不同。例如,当命令表示数据包的用途为质量时,附加数据用来保存质量数据。

5)校验是对命令字段与附加数据字段的所有字节数据的异或校验。

6)结束标志表示该数据包结束,本协议中规定为0x56。

另外,在多机通信中,数据包中还应增加源地址与设备地址等字段。这里主要介绍上位机与下位机之间的通信,因此无需设置源地址与设备地址等字段。

2 通信状态机

2.1 状态机简介

状态机由事物所处的状态及引发状态变化的外部事件两部分组成。在软件编程中,事物所处的状态可以描述为某个程序片断或函数,而引发状态变化的处部条件可以理解为条件判断语句,当条件为真时,事物的状态发生变化。事物发生变化前的状态称为现态,变化后的状态称为次态,程序中可以通过不同的数字对不同的状态进行编号。现态到次态的变化可以通过状态变量值的改变来描述。

本协议中需要传输的基本信息单元是数据包,数据包一般包含多个数据帧。实际传输过程中,数据的传输通常是一帧一帧地进行,数据包是被拆分成若干帧数据后再进行传输,数据接受方也是分帧接受一个数据包。数据接受方在解释与分析数据包时可能存在两个问题:

1)识别并接收完整的数据包

对于数据接收方,一个数据包是分若干批到来,在识别包头与包尾时,也就是帧同步问题,具体编程时存在难度,特别对于已接收部分与未接收部分以及数据接收的进度及状态的处理。

2)数据传输时的容错能力

数据传输过程中已经出现错误时,系统应该具有摆脱错误状态,恢复到正常状态的能力。例如,当一个数据包只传输完一部分时,因为未知故障,下一个数据包就开始传输,系统应该能识别出传输错误,抛弃前一个出错的数据包,并且能正确接收下一个数据包。实际编程时处理这种问题难度较大,结果很可能会出现将第一个数据包的前一部分与第二个数据包的前一部分拼装成一个新的数据包的情况,这就损失了两个数据包,最严重的结果可能是系统无法从错误中恢复,这就严重降低了系统的安全性与可靠性。

为解决上面提出的两个问题,本协议引入了状态机。在状态机中,状态的变化依赖于外部触发条件,当条件满足时,状态将发生变化。本协议中将数据包接收的各个阶段定义为不同的状态,将接收一帧新的数据或数据处理的结果作为外部触发条件,从而达到状态改变的目的,最终完成一个数据包的接收与校验。

2.2 串口通信状态图

串口通信协议中,发送数据包时一般不需引入状态机,这主要是为提高发送速率和简化编程模型而考虑的。本协议中主要针对数据接收过程建立状态机。数据接收状态图如图2所示。

串口通信的数据接收过程如下:当未开始接收数据包或发现数据传输出错时,系统进入空闲状态;当数接收到数据包0x55(起始标志)时,变为收到起始标志状态,如果收到的数据不为0x55,系统继续保持空闲状态;进入收到起始标志状态后,新接收到的任何数据将被当作数据包中命令与附加数据的总字节数(记为LEN),系统进入收到数据长度状态;继续接收新的数据,直至接到新收到的数据总字节数达到LEN +2,进入检验结束标志状态;这时可以检验结束标志是否为0x56,如果是,说明传输正确,否则传输出错,出错后应查找接收缓冲区中本数据包的起始标志后有无其它起始标志,如果没有发现起始标志,系统应进入空闲状态,否则应直接进入接收到起始标志状态,这样可提高系统容错能力,方便系统从错误中恢复。检验结柬标志正确后,进入数据校验状态;校验结果如果正确,数据包接收完成,否则说明传输出错,系统进入空闲状态。

3 协议实现

下位机采用ATMEL公司的AVR系列单片机ATmega168作为其核心控制单元;上位机软件采用Delphi 7.0编写,Delphi 7.0是Borland公司开发的基于Windows平台的面向对象的快速应用程序开发工具。本协议上位机程序采用Delphi开发,主要考虑到Delphi易于实现多线程编程。另外,Delphi开发程序的简单、高效,也是上位机软件选择其作为开发工具的重要原因。

串口通信协议包括发送与接收两部分。在本系统中,下位机负责发送数据,上位机负责接收数据,而另一种情况:下位机接收、上位机发送,其处理方法与前面一种相似。因此,这里仅介绍下位机发送数据、上位机负责接收数据的实现。

下位机串口通信发送程序由于不考虑状态机,实现较为简单,其示例代码如下:

上位机软件中,当接收到数据时,串口控件会触发一个事件,在事件处理代码中应及时将收到的数据存入接收冲区,同时不应该把串口通信协议接收部分的代码放置在此事件中,否则后面到来的数据可能因为前面先到的数据没有及时处理完毕而被冲掉,导致数据丢失。因此,在上位机软件运行时,应该启动一个Windows线程,用于不断检测接收缓冲区是否为空,不为空时则对缓冲中的数据进行处理,创建一个名为TBufferThread的线程类:

线程类创建好后,应具体编写TBufferThread线程类成员函数Execute的处理过程,其算法流程图如图3所示。

依据流程图,编写代码如下:


数据包的接收进度依据于状态指示变量sp。当数据接收顺利时,sp的变化将会引导完成一个数据包的接收过程,这样处理可以简化编程的模型,使协议易于实现;数据包接收过程中,一旦发现数据传输出错,立即将sp置为0(空闲状态),也就是状态复位,使系统进入准备接收下一个数据包的状态,这样可提高通信过程的可靠性及容错能力。

为检验测试串通信协议的合理性及可靠性,将其应用到某称重仪表的上位机通信中,其上位机程序主界面如图4所示。程序主界面的点阵字体显示的是由下位机传送的质量数据,而正中间显示的是由下位机上传的A/D数据形成的曲线,最下方显示的是对接收的数据处理的状态指示。经过大量测试表明,本串口通信协议设计合理,可靠性较高。

4 结论

文中主要介绍串口通信协议的设计与实现,其中包括数据包格式的定义、通信状态机的设计以及协议的实现,并将此协议应用到某称重仪表的上位机通信中。串口通信中引入状态机方法,便于解决帧同步问题,使协议易于实现,同时增加了系统的稳定性与可靠性。因此,可广泛用于各类仪器仪表、工业控制领域中,具有一定的实用价值。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

在嵌入式系统与底层软件开发中,C语言的枚举类型(enum)因其强大的语义表达能力,成为状态机设计和位域操作的核心工具。本文将从底层原理出发,解析枚举类型在状态机实现中的优化策略,并探讨其与位域(bit-field)的协同...

关键字: C语言 嵌入式系统 状态机

在当今数字化时代,5G 通信技术以前所未有的速度改变着我们的生活,从高速的数据传输到实时的物联网应用,5G 的影响力无处不在。然而,在这一系列令人瞩目的技术背后,有一个常常被忽视却至关重要的角色 —— 晶振。它如同幕后的...

关键字: 通信 数据传输 晶振

在当今数字化时代,汽车不再仅仅是一种交通工具,更是一个移动的智能空间。随着人们对汽车电子设备依赖程度的不断提高,车内 USB 接口的重要性也日益凸显。从最初单纯为手机充电,到如今支持数据传输、连接各种智能设备,USB 接...

关键字: 接口 数据传输 汽车供电

上海 2025年6月23日 /美通社/ -- 近期,黑芝麻智能分享了其如何通过零拷贝共享内存技术,解决车载多域间大数据传输的延迟与资源消耗问题。核心技术包括全局内存管理单元和dmabuf机制优化,显著降低CPU负载与D...

关键字: 内存 数据传输 大数据 BUF

从通信原理的角度看,缓存机制是通过在通信链路的关键节点存储数据副本,以空间换时间的核心优化策略。它通过减少冗余数据传输、降低延迟和提升系统吞吐量。

关键字: 缓存机制 数据传输

在SIP终端在同一个函数中同时作为主叫方和被叫方的情况。即在RequestINVITE函数中,这个SIP终端需要能够构造INVITE请求(作为主叫方),同时还需要处理作为被叫方时的各种响应,比如发送100 Trying、...

关键字: INVITE 状态机

本文深入介绍GMSL™技术,重点说明用于视频数据传输的像素模式和隧道模式之间的差异。文章将阐明这两种模式之间的主要区别,并探讨成功实施需要注意的具体事项。

关键字: 数据传输 像素模式 隧道模式

在人工智能(AI)技术迅猛发展的当下,边缘 AI 已成为行业瞩目的焦点。边缘 AI 旨在将 AI 的能力拓展至网络边缘设备,实现实时数据处理与决策,避免了数据传输至云端带来的延迟与带宽限制等问题。而在边缘 AI 系统中,...

关键字: 人工智能 边缘 AI 数据传输

是德科技(NYSE: KEYS )宣布推出 AI Insight Brokers, 扩展其是德科技Vision网络数据包代理(NPBs)方案。这些增强型NPB旨在提高AI驱动的网络安全操作的性能,例如威胁检测、事件响应和...

关键字: AI 数据包 数据库

火电厂作为主要能源供应单位 ,其环保措施的实施和效果评估显得尤为重要 。为提高火电厂环保电价的考核效率 和准确性 ,研究并开发了一套智能感知预警系统 ,该系统通过实时监测火电厂数据传输链路中软硬件运行状态 , 结合大数据...

关键字: 环保 数据传输 智能感知 预警
关闭