王红亮,田帅帅
(中北大学仪器科学与动态测试教育部重点实验室,电子测试技术国家重点实验室,山西太原 030051)
随着CAN总线在工业控制领域的广泛应用,CAN总线网络中的节点数目越来越多,通信距离越来越长,这对CAN总线的通信可靠性提出了更高的要求[1]。目前在提高CAN总线测试系统可靠性的诸多措施中,冗余是一种行之有效的手段[2]。此前对CAN总线的冗余大多只是对总线的冗余,包括热冗余和冷冗余两种方式,能在一定程度上减少恶劣工作环境对CAN总线工作的影响[3-5]。但是若网络中作用最为关键的主节点出现故障,则整个网络将陷于瘫痪状态。本文针对此问题,提出了一种基于节点冗余的CAN总线网络双冗余方法。
在传统的冗余技术中,基本上都只对总线进行了冗余设计。主要方式包括冷冗余与热冗余两种方式。热冗余方式是指使用两条总线电缆,每个节点内部使用两个总线驱动器,但只有一个总线控制器。当节点发送时,总线控制器通过两个总线驱动器同时向两条总线发送相同的报文。在接收过程中,判断电路自动选择两条总线中的一个并将其中的报文送入总线控制器。冷冗余是指当节点发送时,总线控制器通过两个总线驱动器同时向两条总线发送相同的报文。在接收时,单片机通过门控电路将一个CAN发送器的信号输入CAN控制器进行接收。冷冗余功耗较低但实时性差,在高速传输时不易保证数据传输的速率和正确性。热冗余虽然有较好的实时性,但功耗相对较大。在目前已查到的资料中,大部分冗余设计都是单纯的冷冗余或者热冗余。也有采用冷冗余和热冗余结合的双冗余设计方式。具体方法详见参考文献[3]。但无论是热冗余还是冷冗余,都只能在总线层面对系统进行冗余设计。当网络中的主节点出现故障时,则这种冗余方式无法发挥任何作用,整个网络的可靠性无法得到保证,因此其适用范围也受到了一定限制。
本节将首先对原有的冗余方法与本文所设计的基于节点冗余的的双冗余方法进行比较,然后针对本文所提出的新方法进行介绍。
图1 已有的CAN总线双冗余网络Fig.1 Double CAN-bus redundancy network of foregone
图2 基于节点冗余的CAN总线双冗余网络Fig.2 Double Redundancy CAN-bus Network Based on node Redundancy
如图1所示,在已有的CAN总线双冗余网络中,一般由一个主节点以及若干个从节点组成,这种CAN总线网络对总线进行了冗余设计,可以选用两条总线都使用的热冗余方式,也可选用故障状态切换总线的冷冗余方式,由一个主节点来控制所有从节点来完成数据交换。本文所设计的基于节点冗余的CAN总线双冗余网络如图2所示,其创新点在于在对网络进行了总线冗余的基础上同时对CAN网络中作用最为重要的主节点进行了冗余设计。若系统默认的主节点出现故障时,系统能在很短的时间内检测到其出现故障,自动启用备份主节点,而在默认主节点恢复正常工作时,重新将网络主控权交还给默认主节点。同时采用节点冗余和总线冗余的CAN总线网络无疑大大增强了系统的可靠性。
本CAN网络由默认主节点、备份主节点以及若干功能节点构成。每个节点由内嵌CAN控制器的微控制器、多路模拟开关及两个CAN收发器组成,每个CAN收发器都各连到一路总线上。微控制器的I/O口控制多路模拟开关来选通总线0或者总线1。正常状态下默认主节点控制总线,只有在默认主节点出现故障时备份主节点才发挥主节点作用来主控总线,两个主节点通过判断它们之间的数据交换指令来实施当前主控节点的切换。
为了验证本方法的正确性,需要首先对节点间通信的帧格式进行定义,其次设置一定的通信方法,然后再在硬件上实现,通过监视工具和计算机来查看网络数据交换情况来验证本方法的可行性。
3.2.1 帧格式定义
由于本系统节点数目较少,故数据帧采用11位报文标识符。通过使用设置标识符来确定该帧的优先级。通过ID号的高5位的数据类型代码可以区分节点间通信的8种基本功能;每个CAN节点都有一个地址号,来区分不同的节点。本协议规定的部分报文ID号如表1所示。
表1 本协议中的一些报文ID号Tab.1 Some message ID numbers of the protocal
3.2.2 节点间通信方法
系统上电时默认主节点为主控节点。主节点以25 ms为周期循环向备份主节点发送同步帧与状态请求帧,备份主节点收到后回应状态信息帧;主节点以25 ms为周期循环向各功能节点发送同步帧与数据请求帧,功能节点收到后向主节点回应状态信息帧与数据信息帧。
若当前总线出现故障时,就进行总线切换。在时间T1内默认主节点与备份主节点都没有收到其它节点发送的数据,就切换到备用总线上。功能节点在时间T2内没有收到其它节点发送的数据,就切换到备用总线上。跳转等待时间T1与T2分别为50 ms和100 ms。
若主节点出现故障时,备份主节点若在T1内未能收到状态请求帧,则由第0路总线切换到第1路总线上。切换总线后若在5 s内仍未收到主节点发送的状态请求帧,则发挥主节点作用,在第1路总线上向功能节点发送同步帧以及数据请求帧。若能收到功能节点发送的数据信息帧,则证明主节点发生故障,回到第0路总线上,发挥主节点作用。如果回到第0路总线上后 T1内无法与功能节点1正常通信,则证明此时总线发生故障,自动跳转到第1路总线上。当默认主节点恢复正常后,备份主节点回到备用状态。
整个网络设计完成后,为了验证本方法是否能够正常实现,故使用周立功公司的 USBCAN-Ⅱ型接口卡进行网络测试。为了能用较少的数据量达到验证本协议的目的,本系统测试时只采用默认主节点、备份主节点及功能节点1组成网络。
在此通过模拟实际工程应用中可能出现的两种通信故障来验证本协议的可行性,模拟的故障包括总线故障及主节点故障。网络测试的步骤如下:
1)系统上电后工作在第0路总线上,首先断开默认主节点的第0路总线,观察此时网络通信数据,如图3所示。然后重新接通默认主节点的第0路总线,断开第1路总线,观察数据,如图4所示。
2)系统在正常工作时突然给默认主节点下电,观察此时网络通信数据,如图5所示。然后重新给默认主节点上电,观察数据,如图6所示。
图3 工作时断开主节点0号总线Fig.3 Cut off the NO.0 bus of the main node when the syetem at work
图4 接通主节点0号总线,断开主节点 1号总线Fig.4 Turn-on the NO.0 bus of the main node,and cut off the NO.1 bus of the main node
图5 工作时给主节点下电Fig.5 Cut the power of main node when the system at work
图6 重新给主节点上电Fig.6 Turn-on the power of the main node again
图3 —图6中的时间标识的单位为0.1 ms。由图3可以看到,系统工作在第0路总线上时,网络中所有节点都能有序地进行数据交换。在断开第0路总线后,经过时间间隔 0x3127e0-0x3125e7=0x1f9=505×0.1 ms=50.5 ms后,默认主节点与备份主节点自动切换到第1路总线上通信。而功能节点1向默认主节点回发状态信息帧的时间间隔为0x3129de-0x3125ed=3f1=100.9 ms。
图4所示在重新接通主节点第0路总线,断开默认主节点第1路总线后,所有节点自动切换到第0路总线通信,切换时间可按上文方法得到,分别为50.5 ms与100.8 ms。
图5所示在工作时给默认主节点下电,备份主节点自动切换总线后,开始工作的时间间隔为0x4263154-0x4256d94=0xc3c0=5.0112 s。在第1路总线与功能节点1进行一次数据交换后,立即回到第0路进行数据交换。功能节点1回应的数据信息帧ID号由0x298变为0x299。
图6所示在重新给默认主节点上电后,可以从功能节点1回应的数据信息帧的ID号可以看出:总线主控权迅速回到主节点手中,备用主节点回到备用状态。
测试结果表明:基于节点冗余的双冗余方法不仅能实现原有的双冗余方法的总线冗余功能,还实现了节点冗余功能,本方法的正确性得到了验证。
本文提出的基于节点冗余的CAN总线双冗余方法对网络中每个节点进行了总线冗余,同时为网络中最为重要的主节点进行了节点冗余。系统在工作时,如果总线出现故障,系统中所有节点均能自动切换到备用总线上工作;如果主节点出现故障,备份主节点则自启动,发挥主节点的作用。当主节点恢复正常时,备份主节点则能自行回到备份状态。将基于节点冗余的双冗余方法进行测试后,测试结果表明:基于节点冗余的双冗余方法能同时实现节点冗余和总线冗余,大大提高了系统的可靠性,但是系统的故障转换时间的误差需要进一步降低。
[1]郭晓松,王振业,于传强,等.基于 CAN总线的容错冗余技术研究[J].计算机测量与控制,2009,17(1):60-63.GUO Xiaosong,WANG Zhenye,YU Chuanqiang,et al.Research of thef ault tolerant redundant technology based on CAN bus[J].Computer Measurement&Control,2009,17(1):60-63.
[2]孙立辉,原亮.基于CAN总线的双机冗余系统设计方法[J].单片机与嵌入式系统应用,2002(9):33-35.SUN Lihui,YUAN Liang.Design of twin-MCU redundancy system based on CAN bus[J].Microcontrollers&Embedded Systems,2002(9):33-35.
[3]禹春来,许化龙,刘根旺,等.CAN总线冗余方法研究[J].测控技术,2003,22(10):28-31.YU Chunlai,XU Hualong,LIU Genwang,et al.Research of the redundant methods of CAN[J].Measurement&Control Technology,2003,22(10):28-31.
[4]陈尧,孙汉旭,贾庆轩,等.空间机器人冷热双冗余CAN总线系统的研制[J].电子技术应用,2008,34(2):83-88.CHEN Yao,SUN HanXu,JIA QingXuan,et al.The implementation of a dual-redundaney CAN bus system for space robot[J].Application of Electronic Technique,2008,34(2):83-88.
[5]冯源,向桂林,李军.基于 C8051的冗余CAN总线智能节点设计[J].航空计算技术,2008,38(5):107-110.FENG Yuan,XIANG Guilin,LI Jun.Design of intelligent node in redundancy CAN bus based on C8051[J].Aeronautical Computing Technique,2008,38(5):107-110.