DIY编程器网

标题: 一种基于协议的提高RS-485总线实时性的设计方案 [打印本页]

作者: admin    时间: 2015-4-27 23:34
标题: 一种基于协议的提高RS-485总线实时性的设计方案
0 引言
         
          RS-485总线具有结构简单、成本低廉、通信速率高、传输距离远等诸多优点,因而被广泛应用于工厂自动化、工业控制、安全监控等领域。RS-485一般采用半双工的通信方式,即在整个网络中任一时刻只能有一个节点处于发送状态并向总线发送数据,如果有两个或两个以上节点同时向总线发送数据,将会导致所有发送的数据发送失败,即所谓的总线冲突。
         
        为了避免总线冲突,整个RS-485通信系统一般由一个主节点、多个从节点组成。数据通信一般采用主节点轮询各个从节点的方式。各个从节点有自己的通信地址,只有主节点轮询帧中的地址信息与自己的地址相同时,此从节点才会进行应答,其他从节点则忽略此帧,不做任何处理。这种传统的主从调度方式虽然不会引起总线冲突,但是也存在着一些局限性。从节点需要发送数据必须等到主节点轮询到自身,系统的通信效率较低,总线的利用率也较低。每个从节点在一个轮询周期中只有一次发送数据的机会,有实时性要求的信息得不到及时发送,系统的实时性较差。
         
        为了提高RS-485通信系统的实时性,目前国内外已进行了一些研究工作,大多采用对RS-485进行软硬件改造使其具有多主结构的方法,使得从节点能够随机发送数据。提出的实现方法是将RS-485接口芯片的数据接收引脚通过一反相器接到CPU的外部中断引脚,用触发中断的方式判断总线上是否有数据传输,同时结合定时器中断判断总线是否空闲;如果总线空闲就获得总线控制权发送数据,然后用监听自己发送数据的方法判断是否发生总线冲突,如果发生冲突,则随机延时一段时间,再重新侦听发送的方法也与之类似。这些方法一般需要额外的硬件资源,需要对原设备进行硬件改造;方法中提到的碰撞处理一般都采用CSMA/CD的随机退避算法,实现较为复杂,而且时间不可预计,不能保证实时性要求。
         
        本文提出一种基于协议的新方法,该方法不需要改造硬件、不需要额外占用资源,只需要对软件作简单的修改就能升级RS-485通信系统,提高从节点自主发送数据的能力,从而提高系统的通信效率和实时性。
         
        1 工作原理
         
        通信系统仍旧采用一个主节点、多个从节点的结构,主节点每次在轮询完一个从节点以后,留出一段空隙时间给从节点按需主动上传信息。从节点如果有实时性要求的信息需要上传,除了在主节点轮询到自身时可以上传,在空隙时也能上传。首先规定从节点在空隙上传数据的先后顺序,即上传机会的获取机制,一种方法是按优先级分配时间片,从节点只能在获取了规定的发送机会时利用空隙上传数据。如果在一个空隙中,有多个从节点需要上传数据,从节点需要在等待属于自己的发送机会时侦听总线的状态,如果侦听到总线上已经有其他节点进行了数据传输,则从节点必须放弃这次空隙上传的机会,等待下次空隙。
         
        通过理论分析可以比较本文提出的新方法与传统的轮询方式的实时性。一个传输单元由1位起始位、8位数据位、1位校验位、1位停止位组成,一个传输单元的传输时间称为字节时间Tbyte,波特率为baudrate,则:
         
         
        设主节点发送的轮询帧长度为Lmaster,从节点回复的数据帧长度固定为Lslave,从节点数量为N,假设所有从节点都正常,去除收发状态切换、帧间隔、程序处理等时间影响,则一个轮询周期Tcycle理想的理论值为:
         
         
        若采用本文提出的新方法,假设从节点的有实时性要求的信息平均需x(0xN-1)次空隙才能够获取总线,则响应时间Tresponse′平均值为:
         
         
        当x=N-1时,响应时间Tresponse′最大值为:
         
         
        采用新方法的实时数据平均响应时间更短,系统的实时性更好。
         
        由式(3)与式(6)可知,采用新方法的响应时间在最差情况下比传统轮询方式的最差情况的响应时间更长,大约为其2倍。综合上述分析,新方法与传统方法的实时性由平均所需空隙次数x决定,新方法适用于各从节点的有实时性要求的信息产生的时间比较离散,碰撞较少的场合。
          2 软件实现
         
        与传统轮询方式相比,新方法的软件实现的主要不同是从节点空隙时间的处理。其主要包括两部分,一部分为总线状态侦听,一部分为空隙中发送机会的获取判断,流程图如图1所示。总线状态侦听的具体实现方法有许多种,可以使用串口中断来侦测总线是否有数据传输,不需要额外使用其他资源。串口在完整接收完一个字节数据后会产生一个中断,所以如果从节点在等待自己的时段时产生了串口接收中断,则表明总线上有数据传输,总线为忙碌状态。
         
         
         
        3 实验与分析
         
        本文针对上述方法进行了实验测试。实验环境为:
         
        1个主节点、16个从节点、波特率为1200b/s、从节点固定帧长度。有实时性要求的紧急数据采用随机产生的方式,产生的时间间隔为1~2min.对每个从节点从紧急事件产生到获取总线的时间进行计时,得到紧急事件的响应时间,持续运行1h,然后每个从节点对各自的所有响应时间求平均值。从节点帧长度为25B的紧急事件平均响应时间如图2所示。其中,实线指示采用上述新方法的测试结果,虚线指示采用传统轮询方式的测试结果。由图可见,采用新方法的所有从节点的平均响应时间在500ms以内,而采用传统轮询方法从节点平均响应时间都大于1500ms,较大的甚至大于3000ms,新方法大大提高了系统的实时性。
         
         
        从节点帧长度为155B的紧急事件平均响应时间如图3所示,从图中可以得到同样的结论。
         
         
        4 结语
         
        本文提出一种基于协议的提高RS-485实时性的设计方案,通过理论分析和实验验证表明:在从节点实时性信息整体产生间隔大于一个轮询周期的情况下,响应时间最大可以缩短为传统轮询方式响应时间的1/N(N为从节点数量)。该方案非常适用于像气体数据采集这样的数据量大、数据变化缓慢、突变数据实时性要求高的场合。而且采用该方案不需要额外资源、不需要改造硬件,只需要进行简单的程序修改即可实现现有系统的升级,简单实用,具有广阔的应用前景。




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2