CAN控制系统的时延分析及混合算法

2020-05-18 11:08张庭芳黄海林郭劲林
计算机工程 2020年5期
关键词:报文时延总线

张庭芳,黄海林,郭劲林,曹 铭

(南昌大学 机电工程学院,南昌 330031)

0 概述

由于控制器局域网络(Controller Area Network,CAN)总线具有较高的可靠性和较低的价格优势,使其成为目前汽车上应用最多的总线。现代汽车的控制系统是通过总线技术将微控制器、传感器和执行器连接起来而组成的网络控制系统[1]。这种网络控制系统具有结构分散化、硬件数量少、布线简单、诊断方便的优点,但是网络的引入会给系统带来不必要的时延,使得系统性能降低,甚至使系统不稳定[2]。因此,有必要对CAN总线网络控制系统的时延进行深入的理论研究,以保证CAN控制系统工作的实时性和稳定性。文献[3]提出基于时域Smith预测器的反馈控制律的算法,并且计算提出的反馈控制律的反馈增益,最后通过两个实例验证了该算法的有效性。文献[4]通过对CAN控制系统时延分析,推导出保证系统稳定的总时延和采样周期的关系式,并采取已有的TTCAN协议进行了仿真验证。文献[5]提出了安全性、可靠性等5种多维非功能属性集成的优化算法,提高了目标优化率。上述文献都没考虑到总线协议自身的局限性。

为提高CAN消息的实时性,目前研究人员已提出了静态的调度算法,如文献[6-7]的速率单调(RM)算法,但该算法的CPU利用率不高;另有研究人员提出了动态调度算法,如文献[8-9]的最早截止期优先(EDF)算法,然而该算法任务频繁切换会带来不必要的开销,并且负载太大时调度性能急剧下降。文献[10-11]提出一种动态优先级分配方法虽然能使低优先级消息尽快被执行,但增加了高优先级消息的延迟,并且没有很好地解决消息的碰撞问题。文献[12]提出一种用相邻节点传递消息的方法,消息在相邻节点发送接收,虽然避免了消息的碰撞,但没考虑多节点竞争总线和多节点接收消息的情况,缺乏灵活性,不具有现实意义。

TTCAN协议是在CAN基础上制定的时间触发协议。该协议采用时分复用的原理来离线分配各种消息的时间窗,达到有序发送消息的目的,增强了消息的实时性。但该方法无法和CAN节点设备兼容,并且如果要新增消息,需重新离线设计时间窗,灵活性较差。文献[13-15]研究的共享时钟算法是通过在软件层面上实现时间触发的CAN通信,但主节点需频繁地发送时标消息来对从节点时钟同步,对时标消息的抗干扰性要求很高并且额外增加了通信成本。本文对消息在CAN控制系统中产生的时延问题进行了分析,并结合文献[15]改进的共享时钟算法(TTC-SC3)和文献[16]动态ID序列算法的思想,提出一种共享ID序列(Shared ID Sequence,SIDS)的混合算法。

1 时延分析

1.1 CAN控制系统时延组成

汽车的CAN控制系统由传感器、控制器和执行器组成。端到端时延组成如图1所示。

图1 网络传输时延组成

时延由以下4个部分组成:

1)消息的生成时间Tsour

在源节点上对生成的信号处理打包成消息的时间,主要包括信息采集、信息处理和信息编码打包时间。这部分时延主要和软硬件性能有关,通常认为是定常或者忽略不计的[17]。

2)消息的排队时间Tw

从报文开始排队到获得总线控制权的时延,与所采取的协议有关。

3)消息在总线上的传输时间Tc

消息的传输时间有2个部分,一个是和数据帧大小、通信波特率有关,另一个是和节点距离、电信号在传输媒介的传播速度有关,由于传播速度很快(电磁波是光速的0.3倍),并且节点之间的距离很小,此传输时间忽略不计。

4)目标节点上的处理时间Tobj

目标节点上的处理时间是处理器将接收到的报文进行解析,将数字量转为模拟量所耗费的时间。这和控制器软硬件的性能有关,通常认为是定常或者是忽略不计的。

因此,CAN上的传输延迟为:

Tdelay=Tsour+Tw+Tc+Tobj

(1)

为便于分析,Tsour、Tobj忽略不计,所以式(1)可改为:

Tdelay=Tw+Tc

(2)

从式(2)可知,排队时间Tw是由CAN协议引起的,Tc是由报文长度和总线通信速率决定的,在报文发送过程中是定值,CAN总线通信的不确定性主要体现在排队等待时间Tw上。

1.2 消息的排队时间Tw

Tw的不确定性主要是因为多节点消息同时竞争总线引起的,当多个消息竞争总线时,优先级高的消息抢占优先级低的消息,使低优先级消息排队等待时间过长,有资料表明当事件率达到60%~70%时,优先级低的节点消息将得不到保证,整个系统是不可靠的[18],而且优先级高的消息也会被优先级低的消息阻塞。为便于理解,通过下面例子对此加以说明。

在500 kb/s的CAN网络中,有节点A、B、C、D、E、F,其中,节点A发送消息m1,节点B发送消息m2,节点C发送消息m3,节点D发送消息m4,节点E发送消息m5,节点F发送消息m6,m1优先级最高,m6优先级最低。上述消息满足下列条件:

1)所有消息第一次发送时间都在0时刻;

2)所有报文都是数据帧格式,单帧传送;

3)没有错误帧;

4)m1的消息为T1,其他报文周期都为T,且T/2=T1;

5)满足可调度性。

如图2所示,所有消息都在0时刻开始竞争总线,由于消息m1的优先级最高,m1在k1时刻获得总线控制权传输消息。剩下的消息则一直监听总线,等待总线空闲。在k2时m1消息传输完毕,剩下的5个消息竞争总线,由于m2的优先级最高,m2获得总线控制权传输消息,以此类推,直到k6时刻,到了m1周期T1,消息m1第二次发送,但是此时消息m5正在传输,m1被低优先级消息阻塞,等到m5消息传输完毕在k7时刻m1才能传输。消息m1传输完毕后在k8时刻消息m6开始传输。至此,第一个周期T内的消息仲裁完毕,直到第二个周期T到来,新一轮仲裁开始,仲裁过程和第一个周期T的类似。仲裁过程既发生优先级高的消息抢占优先级低的消息,又发生优先级高的消息被优先级低的消息阻塞。

图2 不同周期消息发送时序示意图

Fig.2 Schematic diagram of message sending timing in different periods

由以上例子可知,假设消息m1,m2,…,mi,…,mn满足可调度性,i越小优先级越高,当消息同时竞争总线时Tw包含以下3种情况:

1)最高优先级消息m1被低优先级消息阻塞的延迟。

2)中优先级消息mi(i≠1且i≠n)被高优先级消息抢占的延迟或被低优先级消息阻塞的延迟。

3)最低优先级消息mn被高优先级抢占的延迟。

又由文献[19-21]可知,消息mi被低优先级阻塞的延迟为:

(3)

其中,l(m)是所有优先级低于消息mi的集合。被高优先级消息抢占总线造成的延迟为:

(4)

其中,hp(m)为所有优先级高于m的消息的集合,Ji为消息的抖动时间,τbit为位传输时间。

式(3)与式(4)之和便是最大的等待时间Tw,即:

(5)

1.3 消息的传输时间Tc

CAN总线采用位填充技术来减少消息帧在传输过程的出错。在CAN消息帧中,从帧起始到CRC界定符之前都以位填充的方式进行编码。当发送器在发送位流中检测到5个相同的显性位或者隐性位时,自动插入一个补码位,例如11111 0000 1111 0000,位填充后变成11111 0 0000 1 1111 0 0000 1。因此,在标准帧中参与位填充的长度为:

L=34+8×DLC

(6)

由式(6)可知,在标准帧中最大位填充数为:

(7)

又由式(7)可知,在标准帧中最大传输时间为:

(8)

扩展帧中最大传输时间为:

(9)

其中,DLC为字节数,τbit为位传输时间。

由式(8)和式(9)可知,消息的传输时间Tc是由数据帧的长度和通信速率决定的,在已知通信速率的CAN中传输的数据越多,Tc越大。由式(5)可知Tw非常复杂,这也是引起CAN总线消息的不确定性的原因,并且对于低优先级消息来说这部分延迟更为严重。因此,应深入研究Tw以降低或者消除这部分延迟。

2 共享ID序列混合算法

2.1 TTC-SC3算法

共享时钟算法(Shared Clock,SC)是作为一个软件平台角度来实现节点间消息的通信,像TTCAN一样采用时分多址(TDMA)协议,但不需要相应的硬件支持。而文献[15]改进的共享时钟算法(TTC-SC3)在共享时钟算法上作了稍微改动。在TTC-SC3算法中,允许多个从节点在一个时标间隔内应答。每次主节点发送一个时标消息时,消息中也会发送一个ID(与共享时钟算法相同)。与共享时钟算法不同,这是一个“组ID”,而不是一个ID,并且如果一个特定的组中有多个从节点,组中的所有从节点都将同时作出应答。CAN控制器自行处理任何消息的碰撞。主节点在传输下一条时标消息之前,检查从节点是否已作出了应答,如假设有4个节点消息在CAN总线上进行通信,通信模式如图3所示。

图3 TTC-SC3算法中主从节点的通信模式

Fig.3 Communication mode of master and slave nodes in TTC-SC3 algorithm

此算法是通过主节点不断地发送一个时标消息来对从节点进行时钟同步,对本地时钟的鲁棒性要求很高,并且从节点不断发送应答消息给主节点来达到错误检测的功能,如文献[15]所述,当其中一个从节点发生错误导致不断地重传消息时,将会使一系列低优先级消息的从节点无法访问总线,显然会造成大量数据丢失,导致网络不稳定。

2.2 动态ID序列算法

文献[16]研究的动态ID序列算法的核心思想是在参加通信的节点中离线预设好一个消息ID序列,如图4所示,每个节点都按照消息序列和发送周期来发送消息。该算法最大的优点是不需要频繁地发送时标消息来对各个节点同步,但为了动态更新节点中消息ID序列,算法需要每个节点接收总线上的全部消息,这对节点中CPU的负担是很大的。

图4 CPU中ID序列

Fig.4 ID sequence in CPU

2.3 共享ID序列混合算法原理

本文结合TTC-SC3算法和动态ID序列算法的思想,提出了一种共享ID序列(SIDS)混合算法,该算法能有效地将消息发送时刻错开,避免消息之间的碰撞,消除了时延Tw,从而提高消息传输的实时性。算法流程如图5所示。

该算法首先在主节点中预设好ID序列(ID序列根据优先级从左至右降序排列),当程序启动时,主节点(此节点消息优先级设置为最高级别)把预设的ID序列像TTC-SC3算法一样以广播的方式发送给各个从节点(一个节点可能既是发送节点又是接收节点,称为从节点)。从节点根据接收到的ID序列CPU会产生一个中断响应,判断本节点消息ID是否是下一个要发送的ID,接着判断是否到了发送周期,如果是,则各个从节点按ID序列顺序把消息发送给接收节点和主节点,否则直接退出程序。显然,当各个消息按ID发送时,它们之间的延迟为消息的传输时间Tc,根据式(8)和式(9)计算得出,在500 Kb/s的通信速率中,标准帧中一帧的传输时间范围为Tc∈[94 μs,270 μs],扩展帧一帧的传输时间范围为Tc∈[134 μs,320 μs]。值得注意的是,各个从节点的消息也要发送给主节点,类似TTC-SC3算法,从节点发送应答消息给主节点,即主节点会接收所有从节点产生的消息。如果主节点没在下一个周期到来之前收到消息,说明数据包丢失,则代表接收节点的数据包同样丢失,主节点报错计数,当达到设定的阈值(该阈值根据消息的重要程度设置)后,主节点的CPU会以中断响应的方式在ID序列中检索相应的出错ID并删除它,接着生成一个全新的ID序列以广播的方式发送给各个从节点,开始新一轮通信。当有新的节点加入时,总线的消息传输完成,该节点立即控制总线(临时生成第二高优先级伪ID方式抢占总线,真正ID写入数据场),发送消息给接收节点和主节点,主节点提取此消息的真正ID重新排列ID序列,把此更新后的ID序列以广播方式发给各个从节点(包括新加入的节点),开始新一轮通信。

2.4 算法实例说明

本文通过实例来更清晰地说明此算法。假设节点A有消息m1,节点B有消息m2,节点C有消息m3,节点D有消息m4,节点E有消息m5,节点F有消息m6。m1优先级最高,m6优先级最低,m1、m2的周期为10 ms,m3、m4的周期都为20 ms,m5、m6周期都为30 ms。刚开始在CAN中进行通信的节点有节点A、B、C、D、F,各节点消息通信如图6所示。

图6 各节点消息通信情况

从图6可知,刚开始主节点在0时刻发送ID序列给各个节点。在t1时刻,各个从节点收到ID序列,CPU产生中断响应,进入图5所示的程序判断后(为方便分析,忽略CPU中断和处理的时间),因为是在各个消息的第一周期,所以节点A、B、C、D、F中的消息按ID序列有序发送到接收节点和主节点,相邻优先级节点消息之间的最小延迟为上一个消息的传输时间大小。传输完各节点消息后,经过一段总线空闲到了10 ms时刻,到了节点A、B的消息周期,按ID序列发送消息m1、m2,由于节点C、D消息周期为20 ms,节点F消息周期为30 ms,所以节点C、D、F不发送消息,在t2时刻就完成消息传输。经过一段总线空闲后到了20 ms时刻,到了节点A、B、C、D的消息周期,根据ID序列发送消息,由于没到节点F的消息周期,节点F不发送消息,在t3完成消息传输。经过一段总线空闲到了30 ms时刻,节点A、B发送消息,在t4时刻E节点加入总线,按前面所述方法立即控制总线发送消息m5给接收节点和主节点,主节点提取此消息的ID在节点重新排列ID,发送新的ID序列给节点A、B、C、D、E、F,各节点再通过周期判断是否发送消息,在t5时刻,只有节点F到了发送周期,发送消息。在t7时刻,主节点没收到节点F的消息m6,主节点报错,删除此消息ID(错误阈值设置为1,这个根据消息重要程度设定)并重新排列ID序列,发送给节点A、B、C、D、E、F,所以最后进行通信的消息有m1、m2、m3、m4、m5,开始新一轮通信。

由本文算法可知,主节点不需要频繁地发送时标消息对各个从节点时钟同步,只需一开始发送预设好的ID序列和更新后的ID序列给各个从节点,对于报错的节点消息用删除ID的方法屏蔽,相比文献[16]方法只需一个主节点接收总线上所有的消息,节约了CPU软硬件资源。明显可以看出,SIDS混合算法通过融合TTC-SC3算法和动态ID序列算法的优点,弱化了它们各自的缺陷。

3 仿真实验结果与分析

3.1 仿真模型

CANoe是德国VECTOR公司为总线开发推出的一款集建模、仿真、测试与诊断等功能于一体的软件。首先在CANoe中的CANdb++ Editor写好有关的DBC文件,各参数如表1所示,其中,通信速率为500 Kb/s。建立包括主从节点的8节点仿真模型,如图7所示。其中,Main_Node是主节点,New_Node_1到New_Node_6是发送节点,Receive_Node是接收节点。

表1 各消息的参数

图7 CAN网络中节点仿真模型

3.2 结果分析

在Trace窗口可以看到相关报文数据,各消息的报文数据如图8~图13所示。由各个消息的ID可知,总共占3个字节长度,根据式(9),主节点通过总线发送给各个从节点的最大传输时间是170 μs,假设主节点的消息从0.100 000 s开始发送,如图8所示,从节点接收的时间为0.100 152 s,即从消息发出到被接收的延迟为152 μs,小于170 μs,是合理的。接着各个从节点按ID序列发送,由于m1的优先级最高,m6的优先级最低,消息m1先发送,m1字节数为2,所以最大传输时间是150 μs,消息m1被接收的时间为0.100 288 s,即延迟为136 μs,小于150 μs,是合理的。因为消息的字节数都设置为2,传输时间都为136 μs,从图8~图13各个消息被接收时间可知,消息之间的延迟都约为136 μs,与理论符合。

图8 m1报文数据

图9 m2报文数据

图10 m3报文数据

图11 m4报文数据

图12 m5报文数据

图13 m6报文数据

4 结束语

CAN总线是目前汽车上应用最普遍的总线,对CAN总线研究有实际意义。本文通过CAN控制系统的时延分析可知,消息的延迟主要体现在排队等待时间Tw和Tc上,而忽略排队等待时间Tw。本文结合TTC-SC3算法和动态ID序列算法,提出一种SIDS混合算法,该算法可有效避免消息的碰撞,消除消息的Tw时延,提高消息的实时性和稳定性。最终通过CANoe软件建立的仿真模型验证了该算法的有效性。

猜你喜欢
报文时延总线
基于J1939 协议多包报文的时序研究及应用
CTCS-2级报文数据管理需求分析和实现
5G承载网部署满足uRLLC业务时延要求的研究
浅析反驳类报文要点
基于GCC-nearest时延估计的室内声源定位
一种基于CAN总线的误码测试方法
FRFT在水声信道时延频移联合估计中的应用
简化的基于时延线性拟合的宽带测向算法
ATS与列车通信报文分析
CAN总线并发通信时下位机应用软件设计