摘要:本文提出一种CAN总线发送机制,通过这种机制,网络上的所有节点能够获取统一的时钟,报文将基于时间触发的方式发送。此机制应用于现有CAN网络之后,能够有效避免总线竞争带来的报文延迟,提高CAN总线的传送实时性。
随着汽车上电子功能的增多,总线上节点数量也越来越多,总线负载率也随之增高。在负载率超过40%的基础上,如果不针对CAN网络进行任何优化,将会使很多节点发送的报文产生竞争,从而带来传送的延迟。本文提出一种改进方式,即选取网络中的某个节点,让其周期性地发送同步报文,其他节点收到这条报文之后,立刻进行时钟同步,通过这种方法,使网络上的所有节点获取公共时钟,再以公共时钟为基准,为每个节点分配自己的时间段,节点都只在属于自己的时间段内发送报文,不属于自己的时间段内不发送,这样每个节点在发送报文的时候都不会与其他节点产生竞争,需发送报文就立刻能够成功发送出去,不会产生延迟。这种发送方式不需要对硬件和网络拓扑做改动,适用于任何CAN总线网络,可以在不增加成本的基础上有效改善总线网络的实时性。
1 报文延迟的来源
CAN是一种基于事件触发的通信方式。所谓事件触发是指当任何一个节点有发送报文需求时,立刻就进行发送。但也可能其他的节点有发送需求,这时就会产生竞争,CAN国际标准ISO 11898规定了此时依靠报文的优先级来决定报文的发送顺序,这种机制保证了在产生竞争时,每条报文都能够被成功发送,但没法保证报文的实时性,优先级低的报文不能在需发送的时候立刻发送成功,会有等待而造成的延迟。基于事件触发的报文发送示意图如图1所示。
从图1可以看到,节点A、B、C、D在不同的时刻分别向总线上发送ID为5、7、3、6的报文。B节点发送优先级较低,虽然发送时间很早,但是由于总线竞争的原因导致其最终发送到总线上的时刻最靠后。这就是基于“事件触发”发送方式的缺陷,各个节点之间没有公共时钟,报文的发送不能统一进行协调,很多时候会由于多个节点同时发送报文造成总线竞争而产生延迟。
2 基于时间触发的CAN
提出一种以时间触发的CAN报文发送机制,时间触发的关键是要让所有的节点都能获取一个公共的时钟,CAN总线采取广播的方式发送报文,任何一个节点发送的报文都可以被其它节点所接收,并且发送节点发送完成和接收节点接收成功是同一个时刻,因此利用CAN总线的这种特点来实现基于时间触发。
选取网络上的任何一个节点发送同步报文,发送同步报文的节点称为同步节点。为了保证同步报文能够精确地按周期发送,同步报文的ID设置为0(优先级最高),同步报文的周期取所有周期报文的最大公约数。假设其他报文的周期分别为10 ms、20 ms、30 ms、50 ms,则同步报文的周期为300 ms。同步节点每间隔300 ms发送一次同步报文,其发送完该报文之后,立刻将自身计数器清0,其他节点收到同步报文之后也将自身计数器清0,这样就能够使网络上所有节点每隔300 ms实现一次时钟同步。基于时间触发的报文发送如图2所示。
从图2可以看出,时间轴上每间隔300 ms为一个同步时刻,所有节点都以同步时刻为基准发送报文。由于发送时刻都不冲突,因此报文能够在第一时间内被发送成功,避免了总线竞争,也就大大降低了报文延迟的可能。
3 总结
阐述CAN总线时间触发方面的一些思路,并尝试在汽车网络设计过程中进行一些有意义的理论实践,所提出的方法和措施都在工作中经过验证,实用性较强,对于提高汽车网络设计的实时性具有重要的参考作用。