陆 琦,郝 波,周学勋
(中车株洲电力机车研究所有限公司, 湖南 株洲 412001)
列车通信网络主要用于列车控制、状态监视、故障诊断、车载信息服务及视频监控等方面的数据传输,是保证列车行车安全与提升轨道交通服务质量水平的重要系统之一[1]。在机箱式结构列车通信网络系统中,主控板通过背板总线和IO子板进行数据交互,实现数据的收集、分析、处理以及控制指令发送的功能[2];其作为整个系统的“大脑”,存在单点失效隐患,一旦发生故障,会引起整个系统失效甚至瘫痪,严重影响行车安全,因此可采用冗余主控板架构来提高系统的可靠性。两块主控板互相监测对方的状态,一旦工作中的主控板发生故障,备用主控板就能立刻接管整个系统的工作,实现快速无缝的切换[3-4]。虽然冗余主控板的架构可用来提高系统的可靠性,但如果冗余主控板之间缺乏一种合理的竞争以及切换机制的约束,反而会导致系统控制的混乱。因此,需要设计一种快速可靠的机制来保障系统运行的正确性和可靠性[5-6]。
目前比较常规的切换方法是两个互为冗余的处理器通过相应的协议进行互相监视,比如监视对方的心跳和状态等[7]。但这种方法有一定的弊端:CPU的任务受资源占用和调度优先级的影响,监视程序有失效的风险;实时性不强,如需要进行主备切换,切换时间过长,可能会出现短暂的系统紊乱现象。为了提高冗余系统的可靠性,本文提出一种基于可编程逻辑器件(complex programmable logic device,CPLD)实现主控冗余切换的机制,并进行了相关的通信协议和切换状态机的设计。由于CPLD具有可并行操作的特点,相比CPU,其可实现异常情况下更快速的主控切换,实时性大幅提高,且平稳的冗余切换机制不会带来错误切换、频繁切换等问题,提高了系统的可靠性。
冗余主控板架构如图1所示,两块主控板被分别插在机箱背板的不同槽位,并通过背板上硬线实现两块主控板CPLD的交叉连接。
图1 主控板冗余示意图Fig.1 Schematic diagram of main control redundancy
通过4根硬线可进行冗余主控板之间的全双工通信,一个主控板的输出是另一个主控板的输入,具体如表1所示。
表1 信号说明Tab.1 Signal description
在冗余主控板之间设计一种通信协议,可将自身的状态信息传送给对方;对方主控板可接收此状态信息,并与自身的状态信息进行比较。上电初始化时,可抉择出性能更好的主控板对系统进行控制;运行过程中,可判断当前工作的主控板是否出现故障,若有故障,则需进行切换,由备用主控板接管系统。主控板的故障大致有以下几种类型:CPU启动异常、CPU生命信号异常和CPLD生命信号异常等。另外,也可根据实际需要,主动进行切换主控板的操作。图2示出主控板冗余切换逻辑。
图2 主控板冗余切逻辑Fig.2 Redundant logic of main control board
下面对整个主备切换过程进行简单的逻辑梳理和说明:
(1)主控板初始化争主。两块主控板同时启动,若初始化状态都正常,则取槽位号小的主控板为工作主控板,槽位号大的为备用主控板;若槽位号小的主控板初始化状态异常,则取槽位号大且状态正常的主控板为工作主控板。
(2)工作主控板切主。工作主控板在运行过程中一旦状态异常,则随即转入错误状态,放弃对整个系统的控制,并将自身状态信息发送至备用主控板;即使之后状态正常,其也只能先转为备用主控板。
(3)备用主控板升主。当备用主控板获知工作主控板状态异常后,若自身状态正常,则立即由备用状态转为工作状态,接管整个系统。
冗余主控板之间状态信息的传输。采用类似串行外设接口(serial peripheral interface,SPI)的通信方式[8],通信数据帧结构(图3)包括帧头、槽位号、CPLD生命信号、主备状态和CRC校验[9],具体如下:
图3 通信数据帧格式Fig.3 Communication data frame format
(1)帧头,字节长度为8 bit,用于实现数据帧的同步与识别。
(2)槽位号,字节长度为6 bit,为主控板槽位信息,同等条件下槽位号小的主控板优先。
(3)生命信号,字节长度为7 bit,为CPLD生命信号。
(4)主备状态,字节长度为3 bit,包括初始化状态、工作主状态、备用主状态、错误状态等信息。
(5)CRC校验,字节长度为8 bit,用于数据校验。
冗余主控板之间的通信时序如图4所示。其中,一根线传输时钟信号(clk_out),另一根线传输数据信号(d_out);交叉连接之后,一块主控板输出的时钟和数据信号能输入另一块主控板并被采集。发送数据时,在时钟的下降沿发送有效的数据;接收数据时,确保在时钟的上升沿能采集到正确的有效数据[10]。数据以帧为单位被周期性地发送,传输周期可根据应用需求进行调整,从而实现快速无缝地切换。
图4 通信时序示意图Fig.4 Schematic diagram of communication sequences
两块主控板的切换机制非常重要,错误切换、频繁切换、过慢切换都会导致系统错误,降低系统的安全性和可靠性。主备切换机制由CPLD内所设计的状态机实现[11-12]。根据冗余主控板的竞争和切换条件,将整个状态机流转流程按以下几种情况分别进行阐述。
初始化分两种情况:上电启动初始化和软复位启动初始化。
当两块主控板上电启动时,其同时处于初始化状态。若启动状态都正常,取槽位号小的主控板为工作主控板,槽位号大的为备用主控板。若某个主控板启动状态异常,则进入故障状态,另外一块正常启动的主控板为工作主控板。
某主控板软复位重启时,初始化成功后则需判断对方主控板状态:若对方已是工作主控板,则进入备用主控板状态;若对方状态异常,则升为工作主控板;若对方刚好也处于初始化状态,则参照上电启动进行判断。
初始化状态机流转流程如图5所示,具体如下:
图5 初始化状态流转示意图Fig.5 Schematic diagram of the initialization state flow
(1)IDLE(初始化状态)。上电或软件复位重启时,主控板处于初始化状态,不进行控制和数据处理。若启动正常,进入CPU_ON状态;否则,则进入CPU_DOWN状态。
(2)CPU_DOWN(CPU初始化异常状态)。该状态下,主控板被置为错误状态,并将此状态信息发送至对方主控板;若之后CPU恢复正常,再转入CPU_ON状态。
(3)CPU_ON(CPU初始化正常状态)。该状态下,若收到对方主控板发送的数据,则进入COMP状态;若长时间未获取对方主控板的状态信息,则认为对方主控板未插入或未正常工作,于是进入MASTER状态。
(4)COMP(比较状态)。该状态下,系统首先通过帧头和CRC校验信息判断所接收的数据帧是否正确,若正确,则获取对方的槽位号、CPLD生命信号及主备状态等信息,并与自身状态信息进行比较。自身槽位号小,则优先级高,如果对方已是工作主控板状态,则进入备用主控板状态(SLAVE);否则,进入工作主控板状态(MASTER)。若自身槽位号大,则优先级低,当且仅当对方主控板的状态为错误时,才进入MASTER状态;否则,进入SLAVE状态。
若接收的数据帧不正确,为防止出现多主的情况,暂时还是会进入SLAVE状态,等待下一帧数据的到来,但会产生中断告知处理器,两个主控板之间的通信不可信,无法抉择出工作主控板;若之后多次接收到的数据帧都不正确,则需通知上层应用检查硬件状态。
(5)SLAVE状态。该状态下,备用主控板一直监测自身以及工作主控板的状态信息;若工作主控板有异常情况,则需要进行升主操作。
(6)MASTER状态。该状态下,工作主控板接管整个系统的工作且需实时监测自身的状态;若有异常,则要进行切主操作。
主控板处于备用主控板状态时,需实时监测自身以及工作主控板的状态信息。若工作主控板有异常但自身正常,则需要进行升主操作。备用主控板的状态机流转流程如图6所示,具体如下:
图6 备用主控板状态流转示意Fig.6 Schematic diagram of the slave state flow
(1)SLAVE状态。当监测到SLAVE异常时,进入ERROR状态,并将此故障状态信息发送至工作主控板;若长时间未获取工作主控板的状态信息,则认为工作主控板已掉电或异常,进入MASTER状态;接收到工作主控板发送的数据后,进入工作主控板状态信息获取(COMP1)状态,获取工作主控板的状态信息。
(2)COMP1状态。该状态下,首先通过帧头和CRC校验判断所接收的帧是否正确,若正确,则获取工作主控板的状态信息。当工作主控板的状态为错误时,进入MASTER状态;否则,进入SLAVE状态。若接收的数据帧不正确,为防止出现多主的情况,暂时还是会进入SLAVE状态,等待下一帧数据的到来,但是会产生中断告知处理器,所接收到的数据帧不可信。若之后多次接收到的数据帧都不正确,则需通知上层应用检查硬件状态。
(3)MASTER状态。该状态下,备用主控板作为工作主控板接管整个系统的工作。
(4)ERROR状态。该状态下,需将“状态异常”信息告知工作主控板;当状态恢复正常后,随即进入SLAVE状态。
主控板为工作主控板状态时,接管整个系统的工作。此时主设备需实时监测自身的状态,且需接受应用的切主指令,若自身状态有异常或接收到切主指令,则要进行切主操作。主状态流转流程如图7所示,具体如下:
图7 主状态流转示意图Fig.7 Schematic diagram of the master state flow
(1)MASTER状态。该状态下,主控板接管整个系统的工作,当自身状态异常时,进入ERROR状态,并将此故障状态发送至备用主控板;当应用出现切换指令时,进入切换状态(SWITCH),并判断备用主控板是否符合升主条件。
(2)SWITCH状态。该状态下,应判断SLAVE状态,若其正常,则进入切主状态(SW_S);若异常,则进入保持主状态(HOLD_MASTER)。
(3)HOLD_MASTER状态。在得到应用软件切主指令后,发现SLAVE状态异常,不满足切换条件,需维持主状态,且告知应用不具备切主条件,随即进入MASTER状态。
(4)SW_S状态。在得到应用软件的切主指令后,发现备用主控板状态正常,满足切主条件,在切换成功后随即进入SLAVE状态。
(5)SLAVE状态。此时工作主控板完成切主,处于SLAVE状态,并监测新的工作主控板的状态信息。
(6)ERROR状态。此状态下,主控板自身状态异常且需通知备用主控板;当自身状态恢复正常后,随即进入SLAVE状态。
由于数据帧的通信周期为亚毫秒级别,因此系统能快速地获取、比较两块主控板的状态信息,并在主控板故障时迅速实现冗余主控板的切换,做到无缝切换[8]。以上机制保证了上电初始状态下主设备的正确竞争以及故障或应用切换条件下的有序安全的切换,大大提高了整个系统的安全性和可靠性。
功能仿真可以用来检查设计行为的正确性,一般通过编写测试平台(testbench)来实现。测试平台是给待验证的设计添加激励,并且通过仿真工具来观察输出响应是否符合设计要求[13]。为验证上述切换机制的有效性和正确性,本文针对上述状态机编写测试平台,并采用ModelSim仿真工具对切换过程中常见的几种情况进行了功能仿真[14]。
上电,两块主控板都正常启动,槽位号小的主控板经过状态对比后升级为工作主控板,槽位号大的主控板经过状态对比后进入备用主控板状态,如图8和图9所示。
图8 槽位号小的主控板启动仿真Fig.8 Start-up simulation of the main control board with small slot number
图9 槽位号大的主控板启动仿真Fig.9 Start-up simulation of the main control board with large slot number
主控板处于备用状态,不断地监视工作主控板的状态。若工作主控板状态正常,则保持备用主控板状态不变;若工作主控板状态异常而备用主控板自身状态正常,则备用主控板升级为工作主控板,如图10和图11所示。
图10 工作主控板状态正常仿真Fig.10 Simulation as the status of the working main control board is normal
图11 工作主控板状态异常仿真Fig.11 Simulation as the status of the working main control board is abnormal
当主控板处于工作主控板状态,若应用使能切主指令,则其会进行切主判断:若备用主控板状态正常,则进行正常切主;若备用主控板状态不正常,则通知系统“应用切主条件不满足”,继续保持工作主状态,如图12和图13所示。
图12 正常切主仿真Fig.12 Simulation of normal switching of the working main control board
图13 切主条件不满足仿真Fig.13 Simulation as switching condition of the working main control board are not met
在实验室中,取一个机箱,插入2块功能正常的主控板并分别标识为A主控板(简称“A板”)和B主控板(简称“B板”),其中A板槽位号小。经测试,背板硬线连接正常。正常运行时,A板为工作主控板,B板为备用主控板。针对本文提出的主控冗余及切换机制,主要进行上电启动、故障切换和应用切主实验,并记录实验结果。
主控板面板配有工作主控板指示灯,若主控板为工作主控板,则灯亮;若主控板为备用主控板,则灯灭。
(1)正常启动试验
试验时,对插入互为冗余的A板和B板的机箱进行多次上下电启动,观察现象,要求“A板由于槽位号小而优先级高,每次都竞争为工作主控板”。试验结果显示,每次启动完成后,都是A板指示灯亮(指示为工作主控板),符合设计要求。
(2)异常启动试验
试验时,将A板在启动过程中卡滞,B板正常启动,要求“虽然A板槽位号小,但启动异常;B板优先级低,正常启动后监测到A板异常,也会竞争为工作主控板”。试验结果显示,每次启动完成后,都是B板上指示灯亮,符合设计要求。
该测试分为以下步骤:
(1)对正常运行的机箱,中止A板生命信号,要求“A板状态异常,丧失主控资格;备用B板自身状态正常,一旦监测到A板状态异常,B板则立即升级为工作主控板”。试验结果显示,中止A板生命信号后,A板立即发生切主动作,同时B板升级为工作主控板,符合设计要求。
(2)将B板升级为工作主控板,恢复A板的生命信号,要求“虽然A板状态恢复正常,但只要B板状态正常,A板也只会先进入备用主控板状态,不会发生频繁切主的情况”。试验结果显示,B板没有发生切主动作,符合设计要求。
(3)中止B板生命信号,要求“A板虽然状态恢复正常,但只在B板状态异常情况下才会进入工作主控板状态,不会发生错误切主的情况”。试验结果显示,中止生命信号后,B板立即发生切主动作,同时A板升级为工作主控板,符合设计要求。
多次重复上述故障切主试验过程,结果显示,工作主控板没有出现错误切换、频繁切换现象。
该测试过程如下:
(1)对正常运行的机箱,在A板上输入切主指令,要求“A板能响应切主指令且观测到B板状态正常后会切主进入备用主控板状态,同时B板升级为工作主控板”。试验结果显示,A板得到切主指令后,立即完成切主任务,同时B板升级为工作主控板,符合设计要求。
(2)若B板升为工作主控板,中止A板的生命信号,同时在B板上输入切主指令,要求“B板响应切主指令,观测到A板状态异常,不会切主进入备用主控板状态,但保持为工作主控板”。试验结果显示,B板并没有发生切主动作,且产生中断并通知系统“应用切主条件不满足”,符合设计要求。
(3)恢复A板生命信号,同时在B板上输入切主指令,要求“B板响应切主指令且观测到A板状态恢复正常后,B板进入备用主控板状态,A板升级为工作主控板”。试验结果显示,B板立即完成切主,且A板升级为工作主控板。
经实验室测试,采用本机制后,异常工况下主控切换时间为亚毫秒级,相比既往系统数十毫秒的切换时间,实时性大幅提升。综上可知,本机制不仅可实现更快速的主控切换,而且平稳的冗余切换机制不会带来错误切换、频繁切换等问题,也提高了系统的可靠性。
目前,此冗余机制已在城市轨道交通领域进行小批量应用且运行效果良好。
本文提出一种快速、可靠的主控冗余及切换机制,其通过CPLD实现,机箱内的两块冗余主控板通过背板通信协议来实现互相监测。仿真和应用结果显示,采用该机制后,当系统主控板发生故障时,备用主控板能实现无缝切换,且再没出现以往常见的多主、错误抢主、切换不及时等故障现象,大大提高了系统的安全性和可靠性。
后续还可通过配置对所设计的切换机制进行故障模式注入,以适配不同应用场景需求,同时记录主控切换原因并形成诊断日志,进一步提高可移植性和可诊断性。