1 串行通讯介绍
串行通讯是将数据分红若干二进制位(bit),然后经过一条线路或一个通讯信道,依照规则的规程逐位顺次进行传输,完成计算机与计算机或计算机与外部设备之间的通讯(数据交换)。串行通讯具有占用硬件资源少、可大起伏下降通讯线路本钱、简化通讯设备、运用灵敏、易保护等许多长处,在工业操控、电力通讯、智能仪表等范畴得到了广泛运用[1]。
EIA-RS232、EIA-RS485、电流环、CAN等串行通讯办法是通讯范畴中运用广泛的串行接口。EIA-RS232是全双工的通讯形式,可确保短间隔点对点的高速传输,EIA-RS485完成了较长间隔下的多点互联通讯。CAN归于现场总线的范畴,选用了多主机制,改进了在集散操控体系下的主从通讯形式[2]。跟着运用需求的复杂化,对串行通讯的功能、通讯功率的进步需求越来越显着。怎么拟定一套切实可行、简略易用,又能大起伏进步串行通讯功率的通讯协议;怎么在PC端、嵌入式体系端构建一个高效的串行数据处理的运用程序,是串行通讯协议中等候处理的问题。本文将以加油站信息办理体系为例,介绍串行通讯协议的拟定以及高效通讯数据处理的完成。
2 串行通讯协议的规划
2.1 体系整体结构
加油站信息办理体系的结构如图1所示,每台加油机为一个运用节点(即图1中的操控点),经过半双工RS-485总线衔接至通讯操控器,在RS-485网络中,通讯操控器为主机(Master),各加油机为从机(Slave),构成一个主从通讯的网络架构。在多种串行接口标准中,RS-485接口结构简略、通讯速率高、传输间隔远、运用传输线较少,长间隔通讯较经济,在集散式操控设备中得到了广泛运用。RS-485选用差分电平传输,只需2根信号线,即能够方便地添加操控节点数目[3]。
通讯操控器经过全双工RS-232总线与办理PC进行数据交互,办理PC和通讯操控器层面的数据交互,确保了实时性和高效性,选用互为主机的通讯办法,以此构成集散操控体系[4]。
2.2 通讯协议格局的界说
2.2.1 协议帧格局
(1)主机(Master)下发数据帧格局
开端标志数据(5AH+A5H)+长度(从指令字开端到校验和停止的字节数)+指令字HIGH+指令字LOW+机号+参数+一个字节校验和(从指令字开端到校验码前一个字节的逻辑“异或”和)。
(2)从机(Slave)上传数据帧格局
开端标志数据(9BH+B9H)+长度(从指令字开端到校验和停止的字节数)+指令字HIGH+指令字LOW+机号+参数+一个字节校验和(从指令字开端到校验码前一个字节的逻辑“异或”和)[5-6]。
2.2.2 协议帧解说
开端标志数据:选用1个字节或多字节作为帧开端标志,该部分的字节界说应尽量与帧数据的其他部分彻底不一样。接纳方在接纳数据时总是先寻觅帧头。帧头的排他性将有利于进步各通讯节点的接纳功率。
长度:应尽量选用短帧,以避免各种搅扰要素对通讯功率的影响。可依据实践运用状况,在“长度”后添加“长度反码”或“长度补码”等校验数据对长度进行更为严厉的校验。
指令字:依据实践通讯运用需求,可运用1~2字节的通讯指令字。
机号:该帧所需接纳方的地址识别号,可依据实践运用需求对其进行修正,如添加源地址、意图地址等。
参数:该帧的运用数据,针对不同的运用,考虑到数据的安全性,可对该部分的数据进行加密处理。
校验和:该帧的数据校验,可依据运用需求挑选不同的校验办法。
3 高效串行通讯办法的完成
3.1 PC端软件发送数据的处理机制
PC端的软件首要判别最高优先级的指令字是否需求发送,假如需求,则进入该指令字的发送流程;假如没有,接着判别次高档优先级的指令字是否需求发送,假如需求,则进入发送流程。依据指令字的优先级由高到低的次序顺次判别要发送的指令字,当没有通讯数据指令字发送时,PC端软件将发送轮询指令字。此外,在发送完一帧数据后,PC端软件会敞开接纳超时守时器T,假如PC端软件在超时时间内收到应对指令数据帧则进入相应数据处理流程,一起封闭接纳超时守时器T;假如体系守时时间内未收到应对指令数据帧,则从头发送该指令字的帧数据,并记载发送该指令字的次数,当发送指令字的帧超越10次未收到相应应对指令,即视为该指令字和操控点的通讯失利,将通讯流程从头调整到轮询指令字状况下。
3.2 PC端软件接纳数据的处理机制
在PC软件端的接纳程序部分,按字节来处理接纳到的每帧数据,而不是按帧来处理。为此,运用程序将串口的接纳中止的呼应字节阈值设为1,即当接纳缓冲区有多于1个数据便进入接纳数据处理流程。
当开端接纳一帧数据时,首要找到帧头,其次应依据接纳数据缓冲区中的有用数据长度和帧长度的联系来分类处理。由于Windows对串口的封装(开发渠道为VC++6.0),使得运用程序无法来设定软件,依据接纳数据缓冲区的数据阈值来呼应串行中止。所以在通讯进程中当PC发生串行中止时,应依据串行中止当时数据接纳缓冲区的有用数据长度来做分类处理[7]。
首要,把接纳缓冲区ReceBuffer[M]的数据取出来,放到待处理缓冲区DealBuffer[M]中(为了避免该帧数据还没有处理完毕,未处理的数据会被新来的数据覆盖掉,构成体系的数据丢掉)。其次,要确认接纳数据的帧头,办法便是逐字节查找,一般帧头在接纳缓冲区中呈现的方位有3种状况,如图2所示,每一个方格代表一个字节。
假如帧头便是接纳缓冲区的前两个字节(如图2(a)所示),则依照通讯协议顺次处理剩余的接纳缓冲区的有用数据。用全局变量表明接纳缓冲区处理进程S,正确接纳到2个帧头后P赋值为2。
假如帧头在接纳数据缓冲区的不接连字节内(如图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软件接纳端,选用逐字节处理的办法,经过设定全局变量来确认处理接纳数据帧的进程,细化了处理接纳数据的进程,确保了数据高效牢靠的传输。本体系现已运用在上海宝钢集团加油站信息办理体系中,试验成果证明,此协议的通讯数据精确、通讯功率高效牢靠、自适应能力强,具有在相关范畴推行的价值和含义。