一种面向离散数据流的可靠异步通信方法与流程

文档序号:11388741阅读:296来源:国知局
本发明涉及一种面向离散数据流的结构化及可靠通信方法,用于解决对串行离散数据流的可靠收发问题。
背景技术
:总线数据通信是工业控制系统和智能监控系统设计中不可避免的问题。以太网络的数据传输已有较为成熟的通信协议包括tcp/ip,udp等,但以字节为单位串行通信总线以及串行数据流通信还没有统一的标准,而其通信的灵活性以及高效性是以太网络无法媲美的,因此在实际系统的局部通信经常会涉及到此类通信方式。为了避免通信瞬时的高数据负载,通常此类通信的接收方均配置有缓冲区,更常用的是环形缓冲消息队列。由于通信过程中噪声等因素的影响,会造成通信数据的不可靠。技术实现要素:本发明主要面向离散数据流的可靠收发问题,提出了一种数据的结构化打包以及解析方法,能够高可靠性的解决两个通信站点间的离散数据流的收发问题。本发明的主要技术方案如下:本发明与现有技术相比的有益效果是:(1)本发明可以用于串行数据流的异步变长数据流的通信,接收方通过缓冲队列来完成数据流的接收,避免了通信发送方握手等待的计算资源开销和对通信接收方的实时响应的开销;(2)相对于现有技术接收到错误数据后即将已经接收到的所有数据丢弃,重启通信接收过程而言,本发明的接收方在提取和解析数据帧的过程中可以自动识别误帧,残帧,最大程度的提取缓冲队列中已经接收到的有效数据帧;(3)本发明从帧尾的识别开始从缓冲队列中提取有效帧数据的方法避免了数据帧的后半部分缺失以及误把后续相邻帧帧尾识别为前帧帧尾,造成误将有效帧作为无效帧丢弃的可能;(4)相对于现有技术,本发明在帧头帧尾的定义过程中采用组合码的形式,并考虑单字节码距的思路,拥有更好的抗干扰技术,同时也更好的避免了与待传输数据内容的冲突问题,降低了转义字符插入的平均概率,提高了通信的效率;(5)本发明可以实现变长数据帧的通信,不仅允许不同含义的帧数据可以拥有不同长度的帧数据,同时对于同样含义的帧数据,在同一次通信过程中发送方也可以发送不同长度的数据帧。从而增加了数据通信的灵活性。(6)本发明可以在数据帧提取过程中将噪声数据提出,并且可以自动检测队列中的有效数据帧。其可以被用于rs485,rs422和rs232的串行总线的通信过程以及fifo交换数据的解析问题。附图说明图1为本发明的解析数据帧处理过程示意图;其中:zt表示帧头,z表示0x5a,t表示0x54;data表示数据区;sum表示接收的校验和(由固定的0和接收的数据区算术和组成,在图1中分别用sum0和sum1表示);len表示接收的数据长度;zw表示帧尾,z表示0x5a,w表示0xfe。具体实施方式下面结合实例及附图1对本发明做详细说明。(1)定义数据的结构化协议:帧头数据区校验区数据长度帧尾发送顺序为从帧头到帧尾,其中:帧头至少包含2字节,每个字节至少包含4组以上采用不同数值的相邻位;数据区由1~166个有效字节构成,用于传输需要传输的数据;校验区包含2个字节,前面字节固定且与帧尾第一个字节不同,后面字节为校验码;数据长度由1个字节构成,表示数据区的字节的个数,帧尾至少包含2字节,每个字节至少包含4组以上采用不同数值的相邻位,并保证与帧头不同;为了将整个数据帧长度限制在256字节的范围内,数据区的长度定义为最少1个字节,最多166字节,增加转义字符后最多可达249字节。即数据区包含的所有数据最多为249字节,但实际的有效数据最多为166字节(剔除转义字符之后);数据长度包含有效数据和插入的转义字符,有效范围为1~249,其中有效数据最多166字节;例如:帧头由2字节构成,依次为0x5a,0x54(0x5a在前,0x54在后);数据区由1~166有效字节构成,用于传输需要传输的数据;校验区由2个字节,前面字节固定为0,后面字节为数据区所有字节的算术和,溢出位舍去;此字段也可采用其他校验方法,例如crc;数据长度由1个字节构成,表示数据区的字节的个数;帧尾由2字节构成,用0x5a,0xfe表示(0x5a在前,0xfe在后);(2)发送方按照上述定义的数据结构化协议对离散的数据流进行组帧,以查询或中断方式将整帧数据发出;由于数据的结构化协议将帧尾定义为整个数据帧中一个唯一的标识符(其它地方不能出现此标识),并以收到真正的帧尾作为收到一个完整数据帧的一个重要标志(收到真正帧尾和收到一个完整帧是在同一个时刻);为了防止数据区中也出现帧尾的标识符(0x5a,0xfe),数据的结构化协议定义,如果在数据区中出现连续的0x5a,0xfe(0x5a在先,0xfe在后)时,在前面插入一个转义字符’\x0’,即用0+0x5a+0xfe替换0x5a+0xfe。由于数据长度肯定大于0,所以在帧数据识别的过程中,真正的帧尾应为:一个非0数+0x5a+0xfe。在数据区引入转义功能后就不可能出现帧尾的特征组合;因此,具体的组帧步骤如下:(2.1)根据定义的数据结构化协议确定本次通信过程中的帧头(0x5a,0x54)及帧尾(0x5a,0xfe)以及数据区的有效字节个数(例如4),将离散数据流中的每个数据按顺序依次排列到帧头之后,若数据中出现与帧尾一致的数据,则在该数据前插入一个转义字符,直至数据区有效字节排列完毕;(2.2)根据数据区内的数据确定校验码,填写校验区;(2.3)根据数据区的有效字节个数、转义字符的个数计算数据长度并占用1个字节;(2.4)在数据长度之后排列(2.1)中确定的帧尾,得到一个数据帧。当所发送的数据中不含帧尾数据时,打包数据帧时不需要插入转义符,如要求发送4个数据如下:0x010x020x030x04按照本发明所述数据结构化协议组成发送帧如下:当所发送的数据中包含帧尾时,打包数据帧时需要插入转义符,如要求发送4个数据:0x10x5a0xfe0x4按本协议要求组成发送帧如下:其中用阴影标识的0x00即为插入的转义字符,它并不是有效的数据,接收方在接收后应将其删除,而只保留其它4个数据;长度因为插入转义字符,也由4增加到5,实际解析过程中,数据长度应从5中减去插入的转义字符个数,即5-1=4。(3)接收方以查询或中断方式将接收到的数据帧存入缓冲队列中,然后根据数据的结构化协议对缓冲队列中的数据帧进行提取和解析,从而获取数据帧中的有效数据,此过程必须识别一个完整合格帧,识别完整合格帧必须同时具备如下条件:a)收到合格的帧尾标识;b)收到帧头标识;c)校验码正确。具体的提取和解析步骤如下:(3.1)从缓冲队列头开始向后,遍历每个元素,直到找到一个数据帧帧尾;(3.2)从帧尾位置沿队列向前移动一个字节找到数据长度字段以及校验区;(3.3)根据数据长度计算出帧头所在的位置,并沿队列向前找到帧头位置的队列元素值,校验帧头的正确性,若正确,则转(3.4),否则将帧尾之前的所有数据作为错误数据进行处理,并从缓冲队列中删除,转步骤(3.5);(3.4)根据帧头的位置获取缓冲队列中紧随其后的数据区的数据,根据数据区的数据计算校验码,并与(3.2)中校验区中的校验码进行校核,若二者一致,则提取数据区内的有效数据及确定有效数据的长度,并将帧头至帧尾所有数据从缓冲队列中删除,完成本数据帧的提取;否则,将帧尾之前的所有数据作为错误数据进行处理,并从缓冲队列中删除,转步骤(3.5);上述提取数据区内的有效数据,由于引入转义字符后,发送的数据帧与转义前相比可能会出现两个变化,一是数据区里除有效的数据外,还可能存在转义字符’\x0’,因此,要求接收方需对数据区的转义字符进行剔除,即如果在数据区出现“0+0x5a+0xfe”,则用“0x5a+0xfe”代替。接收方确定有效数据长度时,由于引入转义字符后,数据长度字段的内容是有效数据的个数加上增加转义字符的个数,因此,计算数据有效长度时也应将转义的个数剔除。(3.5)判断缓冲队列是否为空,若不为空,则转步骤(3.1),否则处理结束。本发明未详细描述内容为本领域技术人员公知技术。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1