赵雅文,周美娇,吴俊鹏
(上海理工大学光电信息与计算机工程学院,上海 200093)
目前国内外主流调度算法大致分为3 种:①静态调度算法,如固定优先级算法(Fixed Priority Schedule Algorithm,FPA)[5];②动态调度算法,如最早截止期优先算法(Earli⁃est-Deadline-First,EDF)[6]和最小松弛优先算 法(Least-Laxity-First,LLF)[7];③混合调度算法(Mixed Traffic Sched⁃uler,MTS)[8]。根据报文调度过程中的不同要求,可选择合适的算法进行调度。
以上文献中关于报文响应时间的研究为本文分析CAN FD 报文的最坏响应时间奠定了一定基础,但均未将具体的调度算法应用到CAN FD 总线网络中进行验证,以对比不同调度算法的优劣。本文采用固定优先级算法和最早截止期优先算法对CAN FD 总线报文进行调度研究,通过CANoe 仿真平台搭建仿真模型,对两种算法进行仿真对比实验。实验结果表明,最早截止期优先算法对报文的优先级分配更加灵活,在低速传输情况下,报文可以实现全部传输。
CAN FD 总线是一种基于CAN2.0 协议,且与CAN 共享物理层的现场总线,遵循ISO/OSI 网络标准模型。其弥补了CAN 总线通信速率低的缺点,同时具有基于事件触发、采用短帧格式、遵循非破坏性逐位仲裁规则等特点。CAN FD 总线采用载波监听多路访问/冲突避免(Carrier Sense Multiple Access with Collision Avoidance,CSMA/CA)的媒体访问方式,还可以设置多种拓扑结构,目前在汽车行业应用最多的是总线型拓扑结构。
CAN FD 总线具有3 种报文帧格式,即数据帧、出错帧和超载帧,按照标识符长度又可分为标准帧和扩展帧。CAN FD 数据帧相较于CAN 数据帧新增了扩展数据长度位(EDL 位)、比特率开关位(BRS 位)和错误状态指示位(ESI位),同时采用了新的DLC 编码方式与CRC 算法(CRC 场可扩展至17、21、26 位)。CAN FD 总线以非常高的安全水平支持分布式实时控制,在新一代汽车应用中发挥着重要作用[9]。本文基于具有29 位标识符的扩展数据帧进行研究,CAN FD 扩展数据帧格式如图1 所示。
Fig.1 CAN FD extends data frames图1 CAN FD 扩展数据帧
不归零(No Return Zero,NRZ)是目前使用较为广泛的一种编码方式,CAN FD 总线便是采用该种编码方式。此外,为避免总线连续接收到相同的比特位而造成收发双方无法同步,在NRZ 编码时会使用位填充方法对帧起始与CRC 分隔符之间进行编码,即当发送的比特流中有连续5位极性相同的比特位出现时,便会在第5 位后插入1 个极性相反的填充进行界定,以预防突发错误,保证接收方有足够时间进行同步。
CAN FD 总线在CRC 序列中采用新的位填充规则[10],即在固定位置插入填充位。具体填充方法为:首先在CRC序列第1 位之前的固定位置填充1 位,然后在CRC 序列每4位后插入1 个填充位,填充位的极性与前1 位相反。接收器在接收到比特流时,应主动将填充位从比特流中丢弃以进行CRC 校验。如果填充位具有与其前1 位相同的极性,则应检测出填充错误。CAN FD 总线中CRC 序列的固定填充位数等于CAN 总线所产生的最大填充位数。
在总线通信过程中,需要对报文标识符进行编码设计以保证CAN FD 总线通信的实时性,该步骤是应用层协议与应用系统设计的重要内容之一。报文标识符的作用主要体现在两方面:一是在接收时过滤报文,二是定义报文分配优先级,用于总线竞争。CAN FD 报文标识符的编码设计需遵循以下原则[11]:①每个报文的标识符是唯一的;②预留的节点设备应能满足总线上的最大节点个数,报文空间也要能容纳相应节点内的报文个数;③编码方式应简单实用;④编码后的标识符能够与应用层协议相兼容;⑤优先级越高的报文标识符值越小;⑥遵从CAN2.0A 和CAN2.0B 规范,7 个最高位必须不能全都是1。
本文研究对象是具有29 位标识符的扩展CAN FD 数据帧,分别对扩展帧的高11 位以及低18 位进行编码配置(见图2),具体方案设计如下:
基于对亚洲航线邮轮通关相关的现状分析、政策及制度总结、模型构建以及归纳整理,给出以下七点我国航线邮轮运营便利化建议如下:
Fig.2 CAN FD identifier encoding图2 CAN FD 标识符编码
首先,对可变优先级的高11 位标识符进行配置。预留最高两位标识符用于判断报文类型,同时要满足高7 位不能全为1 的设计规则。本文假设00 表示强实时报文,01 表示弱实时报文,10 表示非实时报文。第26 至18 位用于表示报文的优先级提升段,根据报文的截止时间采用动态编码方式进行配置。
其次,标识符的第17 至13 位用于表示节点号,第12 至9 位用于表示报文号,余下6 位用于表示目的地址,最后3位作为保留位,至此完成标识符编码。
由于多个节点的存在,单路CAN FD 总线在报文传输过程中遇到节点同时访问总线时,会不可避免地发生冲突。此时报文传输需要根据自身优先级竞争总线,获得总线使用权,因此会导致报文延迟传送。CAN FD 总线的报文传输延时主要受4 个方面影响:报文帧、控制器、软件与媒体访问[12]。由于控制器和软件造成的延时微乎其微,可以不用在报文响应时间中体现,因此本文主要分析帧延时与媒体访问延时。
帧延时即报文的传输延迟,是一种由信息串行化导致的延时,时延长度由帧长度和总线传输速率决定,其中帧延时=帧长度/波特率[13]。这种延时在传输少量报文时对报文的最坏响应时间影响最大。媒体访问延时分为两种情况,一是总线在使用中且仍要被占用的时间,另一种是总线被高优先级报文占用,低优先级报文等待释放的时间,即排队延迟。
对于扩展帧格式的CAN FD 报文,其最坏情况响应时间主要针对传输时遇到位填充的场景。最坏情况下即按照位填充的规则,每4 位后填充1 位,直至CRC 分隔符。长度为p 个字节的报文帧的最坏响应时间为:
其中,τcan为CAN 总线的位传输速率,τfd为CAN FD 总线的位传输速率。
固定优先级调度算法(Fixed Priority Scheduling,FPS)由静态调度算法演变而来[14],是总线调度时经常用到的一种算法。该算法根据报文周期或截止期,在报文调度前分配好优先级,保证按照优先级进行调度。应用较多的固定优先级算法为单调速率算法(Rate Monotonic Scheduling,RMS)[15]和截止期单调算法(Deadline Monotonic Schedul⁃ing,DMS)[16]两种,具有额外开销小和实现简单的优点,但存在对事件触发的报文处理不灵活、容错能力差的缺点[17]。
最早截止期优先调度算法(Earliest-Deadline-First,EDF)根据报文的绝对截止时间动态分配优先级,绝对截止时间越小则分配优先级越高,该算法目前较为常用[18]。EDF 调度算法在报文调度时能实时计算报文优先级,满足系统对信息传递的实时性要求。
EDF 是一种动态抢占式调度算法[19],其报文优先级计算方式是对报文截止时间进行编码,采用不同编码方式得出的计算结果会有所不同,通常采用以下平均分区编码方式。
对于一组报文{m1,m2,m3,…,mn},假设它们的相对截止时间从小到大依次排列为{d1,d2,d3,…,dmax},以报文的最大相对截止时间dmax为上限将时间轴均分成k段,则每段区间长为dmax/k。平均分区情况如图3 所示。
Fig.3 Schematic diagram of mean zoning图3 平均分区示意图
本文采用实验对比分析CAN FD 网络在FPS 算法和EDF 算法下的调度效果。通过CANoe 软件搭建CAN FD 网络模型[20],由4 个节点组成,分别为电池管理节点(BCM)、网关节点(Gateway)、仪表节点(IPC)以及开关节点(Switch),均在1 条CAN FD 总线上,具体如图4 所示。
Fig.4 CAN FD system network planning图4 CAN FD 系统网络规划
各个节点根据功能不同共传递15 个报文。电池管理节点包含3 个电池状态报文,均为周期性报文。网关节点包含前后左右车门状态4 个报文以及车灯、车速2 个周期性报文。仪表节点包含引擎转速、温度、油量以及引擎错误状态4 个周期性报文。在仿真周期性报文时只考虑其最坏相应传输时间,开关节点只收发开和关2 个非周期性报文。所有周期性报文数据长度均设置为8 字节,非周期性报文数据长度为1 字节。具体报文参数如表1 所示。
根据报文参数构造仿真数据库中的报文与信号,编写CAPL(CAN Access Programming Language)脚本,在传输速率为250Kbit/s 和500Kbit/s 的情况下分别进行仿真实验。FPS 算法下报文实际传输结果如表2 所示,EDF 算法下报文实际传输结果如表3 所示。
从表2、表3 结果可以看出,当采用FPS 算法进行调度时,Vehicle 类报文由于事先分配的报文优先级较低,在优先级仲裁获取总线访问权时一直失败,无法占用CAN FD总线,最终导致发送失败,错过报文截止期。而当采用EDF调度算法时,所有报文都可以被合理地安排优先级,可占用总线且均能在截止期前正确发出,满足了报文的实时性要求。电池管理节点与仪表节点报文传送结果与实时显示如图5 所示,网关节点与开关节点报文传送结果如图6所示。
Table 1 Message parameters表1 报文参数单位:ms
Table 2 Message transmission results of FPS algorithm表2 FPS 算法下报文传输结果
Table 3 Message transmission results of EDF algorithm表3 EDF 算法下报文传输结果
Fig.5 Message scheduling results of BCM and IPC图5 电池管理节点与仪表节点报文调度结果
Fig.6 Message scheduling results of Gateway and Switch图6 网关节点与开关节点报文结果
由图中可知,在CAN FD 总线系统中,相较于静态调度算法FPS,采用动态调度算法EDF 进行调度时灵活性更高,能够使报文在截止期前发出,保证报文传送实时性。
本文以CAN FD 总线传输理论为基础,分析了报文传输时的最坏响应时间。通过CANoe 仿真平台,分别对FPS算法和EDF 算法在波特率为250Kbit/s 和500Kbit/s 的情况下进行多次仿真实验。结果显示,采用FPS 算法时15 个报文最佳情况下只能正常传送8 个(53%),而采用EDF 算法可以确保15 个报文100%传输。相较于FPS 算法,EDF 算法在报文优先级分配时更加灵活有效,能够避免因错过报文截止期而无法进行调度的情况。此外,CAN FD 总线因具有数据传输速率快、总线利用率高等优点,非常适合当今智能汽车产业需传输大量信号的要求。然而,本文仿真实验是建立在比较理想的条件上,缺乏硬件节点的实际验证,今后需加深该方面研究。