首页 理论教育双机热备程序设计实例

双机热备程序设计实例

【摘要】:双机热备可有效提高系统的可靠性,保证系统的连续稳定工作。双机热备的可靠实现需要两个控制卡协同工作,共同实现。本系统中的两个控制卡工作于主从模式的双机热备状态中,实现过程涉及控制卡的主从身份识别,工作中两个控制卡间的状态监测、数据同步,故障情况下的故障处理,以及故障修复后的数据恢复等方面。

双机热备可有效提高系统的可靠性,保证系统的连续稳定工作。双机热备的可靠实现需要两个控制卡协同工作,共同实现。本系统中的两个控制卡工作于主从模式的双机热备状态中,实现过程涉及控制卡的主从身份识别,工作中两个控制卡间的状态监测、数据同步,故障情况下的故障处理,以及故障修复后的数据恢复等方面。

1.控制卡主从身份识别

主从配置的两个控制卡必须保证在任一时刻、任何情况下都只有一个主控制卡与一个从控制卡,所以必须在所有可能的情况下对控制卡的主从身份做出识别或限定。这些情况包括:单控制卡上电运行时如何判定为主控制卡,两个控制卡同时上电运行时主从身份的竞争与识别,死机控制卡重启后判定为从控制卡。控制卡的主从身份以RS触发器输出端的0/1状态为判定依据,检测到RS触发器输出端为1的控制卡为主控制卡,检测到RS触发器输出端为0的控制卡为从控制卡。

2.状态监测与故障切换

处于热备状态的两个控制卡必须不断地监测对方控制卡的工作状态,以便在对方控制卡故障时能够及时发现并做出故障处理。

状态监测所采用的检测方法已经在双机冗余电路的设计中介绍过,控制卡通过将自身的D触发器输出端清0,然后等待对方控制卡发来信号使该D触发器输出端置1来判断对方控制卡的正常工作。同时,通过发送信号使对方控制卡上的D触发器输出端置1来向对方控制卡表明自己正常工作。

控制卡间的状态监测采用类似心跳检测的一种周期检测的方式实现。同时,为保证检测结果的准确性,只有在两个连续周期的检测结果相同时才会采纳该检测结果。为避免误检测情况的发生,又将一个检测周期分为前半周期与后半周期,如果前半周期检测到对方控制卡工作正常则不进行后半周期的检测,如果前半周期检测到对方控制卡出现故障,则在后半周期继续执行检测,并以后半周期的检测结果为准。周期内检测结果判定见表11-4。控制卡工作状态判定见表11-5。

表11-4 周期内检测结果判定

978-7-111-55649-7-Chapter11-18.jpg

注:X表示无须进行后半周期的检测。

表11-5 控制卡工作状态判定

978-7-111-55649-7-Chapter11-19.jpg

在检测过程中,对自身D触发器执行先检测,再清0的操作顺序,如果对方控制卡发送的置1信号出现在检测与清0操作之间,将导致无法检测到此置1操作,也就是说本次检测结果为故障,误检测情况由此产生。如果两个控制卡的检测周期相同,这种误检测情况将持续出现,最后必然会错误地认为对方控制卡出现故障。相同周期下连续误检测情况分析如图11-15所示。

978-7-111-55649-7-Chapter11-20.jpg(www.chuimin.cn)

图11-15 相同周期下连续误检测情况分析

为了避免连续误检测情况的发生,必须使两个控制卡的检测周期不同。并且,基于如下考虑:尽可能不增加主控制卡的负担,并且在主控制卡故障时,希望从控制卡可以较快发现主控制卡的故障并接管主控制卡的工作,所以决定缩短从控制卡的检测周期,加速其对主控制卡的检测。在本系统的设计中,从控制卡的检测周期为380ms,主控制卡的检测周期T为400ms。

由于故障的随机性,故障出现的时刻与检测点间的时间也是随机的,导致从故障出现到检测到故障的时间是一个有确定上下限的范围,该范围为1.5T~2.5T。以从控制卡出现故障到主控制卡检测到此故障为例,需要的时间是600~1000ms。

两个控制卡工作于主从方式的热备模式下,内置完全相同的程序,但只有主控制卡可以向测控板卡发送命令,进行控制输出。在程序中,主从控制卡通过一个标志变量MasterFlag来标示主从身份,从而控制程序的执行。当从控制卡检测到主控制出现故障时,只需将MasterFlag置1就可实现由从控制卡到主控制卡的身份切换,从而可以在程序中执行主控制卡的功能。

在从控制卡检测到主控制卡故障后,不但要进行身份切换,接管主控制卡的工作,还要向上位机进行故障报告。当主控制卡检测到从控制卡故障时,仅需要向上位机进行故障报告。故障报告通过以太网通信模块实现。

3.控制卡间的数据同步

处于热备状态的两个控制卡不但要不断地监测对方的工作状态,还要保证两个数据卡间数据的一致性,以保证在主控制卡故障时,从控制卡可以准确无误地接管主控制卡的工作并保证整个系统的连续运行。

要保证两个控制卡间数据的一致性,要求两个控制卡间必须进行数据同步操作。数据的一致性包括测控板卡采样数据的一致、控制算法的一致,以及运算结果的一致。下载到两个控制卡的控制算法信息是一致的,在保证测控板卡采样数据一致且同步运算的情况下,就可以做到运算结果一致。所以两个控制卡间需要就测控板卡的采样信息和运算周期做一定的同步处理。

关于测控板卡采样信息的同步,由于只有主控制卡可以向测控板卡发送数据索要命令,从控制卡不可以主动向测控板卡索要采样信息。但是在与测控板卡进行通信时,可以利用CAN通信的组播功能实现主从控制卡同步接收来自测控板卡的采样数据,这样就可以做到采样数据的同步。

两个控制卡的晶振虽然差别不大,但不可能完全一致,在经过一段较长时间的运行后,系统内部的时间计数可能有很大的差别,所以通过单纯地设定相同的运算周期,并不能保证两个控制卡间运算的同步。在本设计中从控制卡的控制算法运算不再由自身的时间管理模块触发,而是主控制卡触发,以保证主从控制卡间控制算法运算的同步。主控制卡在完成测控板卡采样数据索要工作后,会通过CAN通信告知从控制卡进行控制算法的运算操作。

除了正常工作过程中要进行数据同步外,死机控制卡重启后,正常运行的主控制卡必须要及时帮助重启的从控制卡进行数据恢复和同步,以保证两者间数据的一致性。此情况下需要同步的信息主要是控制算法中与时间或运算次数密切相关的信息,以及一些时序控制回路中的时间信息。如PID模块的运算结果,PID的运算结果是前面多次运算的一个累积结果,并不是单次运算就可得出的;时序控制回路中的延时开关,其开关动作的触发由控制算法的时间决定。

在正常运行的主控制卡监测到死机的从控制卡重启后,主控制卡会主动要求与从控制卡进行信息同步,并且同步操作在主控制卡执行完控制算法的运算操作后执行。部分信息的同步操作要求在一个周期内完成,否则同步操作就失去了意义,同步的信息甚至是错误的。部分信息允许分多个周期完成同步操作。部分信息要求在一个周期内完成同步操作,但并不要求在开始的第一个周期完成同步。如信息A和B关系紧密,需要在一个周期内完成同步操作,信息C和D关系密切,也需要在一个周期内完成同步操作。此时却并不一定要在一个周期内共同完成A、B、C和D的同步,可以将A和B的同步操作放在这个周期,将C和D的同步操作放到下个周期执行,只要保证具有捆绑关系的信息能够在一个周期内完成同步即可。

主控制卡肩负着系统的控制任务,主从控制卡间的数据恢复与同步操作会占用主控制卡的时间,增加主控制卡上微控制器的负担。为了保证主控制卡的正常运行,不过多地增加主控制卡的负担,需要将待同步的数据合理分组并提前将数据准备好,以便主从控制卡间的同步操作可以快速完成。