舰船电站控制系统的双CPU混成式故障检测技术
2021-06-08卢月李维波李巍李齐孙万峰
卢月,李维波,李巍,李齐,孙万峰
武汉理工大学 自动化学院,湖北 武汉 430070
0 引 言
电站是现代舰船的重要组成部分,其可靠性和稳定性将直接影响舰船电力系统的生命力。双CPU冗余技术作为提高系统可靠性的有效手段之一,已广泛应用于舰船电站的控制系统。在双CPU冗余系统的不同工作模式中,目前应用最为广泛的是相对简单、高效的热备冗余模式[1-2],其工作方式是2个CPU同时上电运行,并且双方实时进行信息交互。在正常工况下,主CPU承担输出任务,备用CPU仅接收不输出,同时监控主CPU是否正常,以便及时发现故障并迅速切换。由热备冗余的工作原理可知,故障检测是双CPU热备冗余系统可靠性的重要保证,只有及时地检查出故障,才能达到冗余容错的目的。
为此,吕聪等[3]采用了看门狗设计,即主CPU通过串口通信,每隔一个周期向从CPU发送喂狗信号,如果从CPU在一定时间内未收到喂狗信号,则立即将整个主CPU复位。徐一凤等[4]采用了主/从CPU之间的心跳检测,即周期性互发心跳值,如果主CPU没有收到从CPU的心跳信号,则主CPU仍然正常运行;如果从CPU没有收到主CPU的心跳信号,则将从CPU切换为主CPU。邹见效[5]结合PUSH和PULL心跳检测模式改进了心跳检测算法,即如果从CPU在一个时间周期内收到主CPU的心跳信号,则进入下一个定时周期;如果没有收到,则立刻对主CPU进行检测,判断其是否失效;如果在下一个周期内仍未收到主CPU的响应信息和心跳信息,则可以判定主CPU失效。以上3种方法均基于主CPU故障检测的角度出发,而没有考虑硬件问题。在实际工作中,当2个CPU之间的通信线路出现故障时,则有可能被误判为主CPU故障,即在主CPU还正常工作时,从CPU也开始执行任务,从而出现“双主机现象”。
为了避免这种情况,张军永等[6]采用了双冗余心跳检测机制,即2个CPU之间通过2根信号线来检测故障状态,因为2根信号线同时出现故障的概率很低,所以仅有1根信号线出现心跳故障时,即判定为该信号线故障;只有当2根信号线均出现故障时,才判定为CPU故障。虽然该方法在一定程度上避免了“双主机现象”,但其增加了1根信号线,就相当于增加了系统架构的复杂度和维修量,以及投入成本。
综上所述,目前的故障检测方法主要集中于CPU能否通过通信线路正常地发送监控CPU所需要的信息,以及研究如何避免通信线路故障对CPU故障判断的影响。对于双CPU冗余系统来说,2个CPU之间的正常通信并不能代表整个冗余系统工作正常,CPU能否正常地接收、发出指令与CPU本身是否正常一样重要。因此,为了对双CPU冗余系统进行故障检测,本文拟提出一种双CPU冗余通信架构下的混成式故障检测方法,通过将网络故障检测法和第三方监控心跳法集成一体,形成混成式故障检测机制,以提高CPU故障检测的速度与精确性,从而提高舰船电站控制系统的可靠性,并更好地适应舰船电站设备多、工况繁杂等情况。
1 双CPU冗余系统架构设计
双CPU冗余通信系统的整体架构如图1所示,由2个CPU通过互冗余方式组成,每个CPU均通过一路以太网与集控台进行双向通信,完成分/合闸、报警故障等重要指令的上传功能,同时这2个CPU之间也通过以太网进行信息交互。由于控制器与集控台之间的距离较远,所以控制器(底层)与集控台(顶层)之间也采用以太网进行数据通信。以太网采用光作为介质,抗干扰能力强、传递数据多、传输速度快,可以保证高速数据传输信号的可靠性[7-8]。
图1中的2个CPU都经由1路控制器局域网络(controller area network, CAN )与底层设备进行双向通信,且这2路CAN都在一条CAN总线上。由于CAN是一种可以有效支持分布式控制或实时控制的串行通信网络,所以在众多子节点的情况下,CAN总线具有很大的优势,它能够完成通信数据的成帧处理、位填充、数据块编码、优先级判别、CRC校验等工作。由于其报文采用短帧结构,所以传输时间短,不易受到环境干扰,具有较高的可靠性。同时,CAN总线采用了多主控制,即所有的单元都可以发送消息,根据单元的标识符比较,即可实现优先级高的发送消息,其他设备接收消息,而不用区分主/从设备,以便在总线上添加其他CAN单元;在电气负载允许的情况下,可以添加多个CAN单元模块[9-10]。
由于舰船电站控制系统底层控制器的数量众多,需要采集、发送大量的输入/输出(I/O)指令信号和状态信号,所以本文将采用基于I2C总线的I/O端口扩展芯片来实现数字量信号集成化。2个CPU分别通过2路普通I/O口模拟的I2C总线信号与I/O扩展芯片相连,再经由扩展芯片与底层设备相连[11]。
在正常情况下,2个CPU都可以接收指令和数据,但只有1个CPU可以发出指令,另一个处于备份状态,参与故障检测并随时准备故障切换。
2 双CPU冗余系统的故障检测原理
为了提高舰船电站控制系统的可靠性,通信系统应具备一定的容错能力。一旦出现故障,通信系统应准确地检测、定位故障并进行实时处理,所以通信系统需要一种稳定、可靠的故障检测方案。为此,本文拟提出混成式故障检测方法,即将网络故障检测和第三方监控心跳集成一体的新型检测方法。
2.1 网络故障检测法
网络故障检测法可以对双CPU热备冗余系统进行定时、全面的检查,以确保整个冗余系统(包括CPU、通信线和外设)都正常运行。所谓网络故障检测法,即将系统中的CPU、外设等均视为节点,将通信总线视为连接各个节点的线,这样就可以将图1中的系统架构抽象化为一个网络,如图2所示,其中:CPU1,CPU2为主节点a,b;外设集控台和底层设备为子节点c,d;λ1a,λ1b分别为集控台与CPU1,CPU2之间的以太网连线;λ2为2个CPU之间的以太网连线;λ3a,λ3b分别为底层设备与CPU1,CPU2之间的CAN连线;λ4a,λ4b分别为底层设备与CPU1,CPU2之间的I2C连线。
图 2 双CPU冗余系统的网络图Fig.2 Network diagram of dual CPU redundant system
设定节点状态为0时表示节点正常,为1时则表示节点故障。连线λ的状态同理,可以根据与其相连的两端节点通信是否正常来判断,例如,CPU1通过以太网向集控台发送信号,如果连续2个周期未收到回复,则a与c之间的连线λ1a状态为1。为便于理解,本文采用a,b,c,d,λ1a,λ1b,λ2,λ3a,λ3b,λ4a,λ4b分别表示4个节点和其间连线的运行状态,因此,各个节点状态的计算公式为
由式(1)~式(4)可知,如果与一个节点相连的所有连线状态λ均为1,即故障,则可判定该节点故障。根据网络故障检测法的原理,CPU与所有外设通信的过程实际上就是连线状态检测的过程,当通信结束之后,通信线路和各个节点的状态都得以更新,所以该方法兼具全面性和便捷性。
2.2 第三方监控心跳法
由于网络故障检测法是系统、全面的检测,所以需占用一定的时间成本,如果检测过于频繁,则将影响系统通信的时效性,因此,该方法适用于系统的定期检查,而不是实时故障检测。CPU作为舰船电站控制系统的重要设备,如果仅依靠网络故障检测法,则可能无法及时检测故障,这对于系统来说是致命的设计缺陷,因此,还需要采用一种专门为CPU进行故障检测的第三方监控心跳法。
传统的心跳检测法采用了单一线路进行故障检测,所以会出现“双主机现象”,而第三方监控心跳法可以解决这一问题。在不改变现有通信系统架构的前提下,仅需引入系统中的第三方设备——与2个CPU均相连的集控台,即可形成双重心跳检测保障机制,如图3所示。
图 3 第三方监控的心跳检测示意图Fig.3 Heartbeat detection diagram of third party monitoring
由图3可知,主/从CPU之间仅有1路心跳检测,当主CPU向从CPU发送心跳信号的同时,也会向集控台同步心跳状态,包括心跳信息和更新时间。如果从CPU在规定时间内未收到心跳信息,则将主动向集控台查询,以确定主CPU是否故障;如果确定是主CPU故障,则立即切换;如果不是,则标记通信线路故障。由于第三方查询的加入,实现了多点、多重检测,以避免因依靠单一通信线路而误判的CPU故障,从而提高了故障判断的精准度。与传统的心跳检测方法相比,第三方监控心跳法在正常情况下的故障监测时间并未延长,仅在未收到主CPU心跳信息时,多了一项查询时间;由于该检测周期很短,所以对系统通信的实时性并无影响。
3 双CPU冗余系统故障检测的工程实现
2种故障检测方法均利用定时器产生中断的方式进行周期性检查,其中网络故障检测法的检测周期大于第三方监控心跳法。当系统上电初始化之后,应先利用网络检测法进行上电检查,以确保系统可以正常运行,然后再进入主循环。
3.1 网络故障检测法的工程实现
由网络故障检测法的原理可知,通过分析所有通信线的连线状态λ,即可掌握CPU和所有外设的工作状态,其故障检测过程分为3类,简述如下:
1) 通信线故障检测。
CPU通过与其相连的总线向外设发送数据,如果在2个周期内收到正确的应答,则将该总线对应的连线状态λ设为0,即表示该通信线正常。如果在2个周期内未收到应答或应答不正确,则将其连线状态λ设为1,其检测流程如图4所示。
2) CPU故障检测。
CPU依次通过与其相连的总线向外设发送数据,如果在2个周期内均通信失败,即未收到正确的应答,则表明该CPU故障,应将其对应的节点状态设为1。
3) 外设故障检测。
图 4 通信线检测的流程图Fig.4 Flow chart of communication thread detection
如果2个CPU都收不到任何与该外设相连的总线数据,则表明该外设故障,应将其对应的节点状态设为1;如果只是无法通过总线接收数据,则表明该总线故障,应将该总线对应的连线状态λ设为1。
因此,通过综合通信线、CPU和外设的故障检测结果,即可准确定位故障部件,从而及时切换并部署维修。
3.2 第三方监控心跳法的工程实现
相较于传统的心跳检测法,第三方监控心跳法在软件流程上多了主CPU向第三方发送心跳信息和从CPU向第三方查询心跳信息的过程,其检测过程如图5所示。
图 5 第三方监控的心跳检测流程图Fig.5 Flow chart of third-party monitoring heartbeat detection
上电之后,主CPU在每个周期都会向从CPU发送特定的数据,即心跳信号;与此同时,主CPU也会向集控台同步心跳信息,包括发送内容和发送时间。如果从CPU定期接收到正确的数据,则继续保持备机状态;如果从CPU连续2个心跳周期没有收到数据或收到错误的主CPU数据,则从CPU将主动查询集控台中的主CPU心跳同步信息。如果查询到主CPU的同步信息正常,则判定为2个CPU之间的通信线故障;若查询到主CPU最近一次的同步时间大于1个心跳周期,则将主CPU进行复位,同时从CPU获得控制权,开始承担系统的主CPU任务。对于复位后的主CPU,将采用网络故障检测法进行评估判断,如果其仍处于故障状态,则立即更换;如果可以正常工作,则处于备机状态。
4 工程验证与推广应用
图 6 双CPU主板的原理框图Fig.6 Principle block diagram of dual CPU main board
4.1 通信装置介绍
本文通信装置所采用的CPU芯片为STM32 F417ZGT6,这是一款由ST公司发行的基于ARM Cortex-M4内核的32位处理器,其最大的优势是配置了硬件FPU单元和DSP指令集,且其主频频率高达168 MHz;该芯片拥有15个通信接口,其中包括3个SPI,2个CAN以及3个I2C接口。本通信装置的CAN和以太网均外接了隔离芯片,且以太网采用了4芯接插件。
本通信装置包括5块PCB板,分别为2块独立的CPU主板、1块DI板和2块DO板,其中CPU主板上配置了通信模块、复位模块、电源模块和存储模块,如图6所示。由于2块CPU主板都需要外接相同的DI/DO板,所以采用了便于装拆和维修的双层物理架构,如图7所示。
除了双CPU主板之外,其他3块板卡也采用了上下双层物理结构,且置于主板上方。这5块PCB板均封装于一个金属箱内,如图8所示,该金属箱具有很好的密闭性,可以避免该器件在舰船的潮湿环境中失效。
基于硬件电路,应按照现场装置的实际运行要求编写主程序,并依据故障检测软件的设计思路编写故障检测子程序。主程序为基本的装置初始化,DI/DO的开入/开出和对外通信,同时通过设置周期性中断,从而在中断服务函数中完成装置的定时故障检测与判断。本通信装置程序的重要技术参数如下:以太网通信周期为2 ms/次;CAN通信周期为10 ms/次;由于第三方监控心跳检测是通过以太网进行通信,所以其故障检测周期与以太网的通信周期一致;考虑到网络故障检测法需占用一定的通信时间,参考CAN通信周期,将其设置为20 ms/次,以避免影响通信的时效性。
图 8 通信装置的实物图Fig.8 Physical diagram of communication device
4.2 工程验证
为了验证本文冗余系统的可靠性,即能否及时发现故障并进行处理,本文将人为制造故障并实时监测系统的运行情况。根据系统的设计需求,其故障检测的技术指标如表1所示。
表 1 故障检测指标Table 1 Fault detection indexes
本文搭建了如图9所示的简易测试平台,即2个CPU均通过1路CAN与电脑相连,而电脑通过CANMonitor软件对CAN通信进行监测。由于本系统的核心是双CPU冗余,所以本文将在系统上电运行一段时间之后,人为对处于正常工作状态的主CPU进行复位,并根据CAN通信的监测结果来判断CAN通信是否受到了影响。如果CAN通信未受到影响且持续通信,则表明该系统可以及时切换故障CPU。
图 9 CAN通信系统的实物图和测试结果Fig.9 Physical diagram of CAN communication system and its test results
通过修改CAN通信的相关程序,将主CPU的CAN帧ID设为0x06,从CPU设为0x92。上电之后,主CPU发送02 04 08 16 32 64 B1 B6的8位数据,从CPU处于监测状态;如果从CPU接替工作,则发送A5 5A 05 82 00 03 00 01的8字节数据。由图9(b)的测试结果可知,在主CPU发送了一段时间的数据之后,从CPU接替了其工作,从而保证了主CPU故障之后的CAN通信不中断。
在现有的故障检测方法中,双冗余心跳检测法可以在一定程度上避免“双主机现象”,为了验证本文所提出的混成式故障检测法的优势,将开展故障检测能力对比。在相同的装置中分别下载2套检测程序,且2种故障检测的周期一致。通过模拟不同工况下的故障,对2种检测方法进行多次测试,其对比结果如表2所示。由于双冗余心跳检测法只能检测出CPU之间通信的以太网线故障,所以未计算其平均故障响应时间。从表2中可以看出,混成式故障检测法更为完善,准确性相对较高,且故障响应时间也表现尚可。
表 2 故障检测结果Table 2 Results of fault detection
5 结 语
针对双CPU冗余系统的故障问题,本文提出了网络故障检测法和第三方监控心跳法相结合的混成式故障检测机制。在没有增加硬件的情况下,第三方监控心跳法实现了双重心跳检测保障,从而避免了“双主机现象”,这对于舰船特殊的环境条件而言很有优势。通过将2种不同特点的故障检测方式相结合,就构成了一个比较完备的故障检测体系,其工程验证结果也表明了该故障体系的精确度与全面性。