CAN总线网络的实时性研究和改进
目前有很多文献关于CAN协议的改进,基本都是局限于周期型消息的处理,但是在实际工业现场有很多诸如报警、故障等突发型消息,这些都是事件型消息,都未能有效处理。基于此,本文兼顾周期型和事件型消息,以CAN 2.0B扩展帧格式为例,通过重新定义ID字段的含义来解决带宽分配不均的问题。这种重新定义的帧并未改变扩展帧的格式,所以能与其他CAN系统兼容,如图3所示。扩展格式帧的ID字段被重新定义为3个部分:类间优先级域(1b)、类内优先级域(8b)、内容标示域(20b)。本文引用地址:https://www.eepw.com.cn/article/155170.htm
图3中,类间优先级域为1 b,在实际应用中将0分给事件型消息,使其具有最高优先级,将1分给周期型消息;类内优先级域为8 b,用于标示同种类型消息的优先级大小,数值越小,优先级越高;内容标识符域为20 b,可以根据实际的需要对其进行定义,在类间优先级和类内优先级大小都一样的情况少,也可进一步起到辅助仲裁的作用。
2 动态优先级调度算法
CAN总线的特点之一就是多主发送,各个站点在任何时候都可以随机发送数据,如果在某一个时刻有2个或都2个以上的站点要发送数据,就要通过非破坏性仲裁机制进行仲裁来竞争总线的使用权,标识符数值小的站点即优先级较高的站点可以获得总线使用权,竞争失败的站点则需等待下次重新竞争,当网络负载较大时,优先级较低的站点很可能在多次竞争中失败,从而数据不能及时发送,或有时发送产生冲突有时顺利发送,造成发送延时的不确定性,这就是带宽分配不均所造成的。为了解决随着网络负载增加所造成的带宽分配不均,本文提出了动态优先级算法。动态优先级算法是一种随着时间推移动态改变各个站点优先级的算法,与原有的静态分配优先级算法相比,该算法可使每个站点均等地竞争总线的使用权,即能够均等地分配带宽,从而保证消息的实时传输。方法如下:初始情况下各个站点均有事先分配好的优先级,在不发生冲突的情况下,按原有优先级来完成数据的传送。当发生冲突之后,高优先级站点可以顺利完成数据发送,为了能让竞争失败的站点在下次竞争中成功的概率变大,可以将竞争失败的站点提高一个优先等级参加下次竞争,即使失败了若干次,这时该站点的优先级也很高了,竞争胜出的概率会很大。但是需要注意的是优先级较低的站点在提高优先级的情况下获得总线使用权并顺利完成数据发送之后,需要将优先级降低为初始优先级,以保证网络的正常运行。
如果把CAN总线上要发送数据的站点看成一个队列,某个节点j在队列的位置可表示为:
Pj=P0-f(n)
式中:Pj为节点j某时刻在队列中的位置,即节点在此时刻的优先级;P0为节点j在队列中的初始位置,即初始优先级。图3中类内优先级分配了8位,当优先级最低时,P0=28-1=255;f(n)为优先级晋升项,为关于竞争失败次数n的函数,可取正比例函数、指数函数等。在本文中取的为正比例函数,即f(n)=kn,k为系数项,决定着晋升优先级的快慢程度,一般取为CAN系统中节点的个数。由此可得:
Pj=28-1-kn=255-kn
采用该算法还可以避免当节点优先级提高之后出现2个或2个以上优先级相同的情况,例如,在某个网络中节点个数为5,即k=5,所以Pj=255-5n,则各站点初始及晋升之后优先级如表1所示。
评论