- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
基于WDM的精确定时器及其在冗余技术中的应用
摘要:现代军用电子设备和某些控制系统对设备的可靠性要求越来越高。针对此情况利用设备冗余原理,提出一种基于WDM的精确定时器实现设备冗余的方法。利用此方法设计了双冗余CAN总线板卡及其在WindowsXP系统下的驱动程序,给出了部分驱动实现细节和相关流程。结果表明该方法可成功实现双CAN接口卡在总线故障情况下的冗余切换,提高了设备可靠性。
0 引言
高可靠性是现代军用电子设备和某些控制系统的首要需求。冗余技术是计算机系统可靠性设计中常采用的一种技术,是提高计算机系统可靠性的最有效方法之一。合理的冗余设计将大大提高系统的可靠性,但同时也增加了系统的复杂度和设计的难度,应用冗余配置的系统还增加了用户投资。因此,如何对冗余设计进行合理有效的设计,是值得深入研究的课题。
1:1热冗余也就是所谓的双重化,是其中一种有效的冗余方式,但它并不是两个部件简单的并联运行,而是需要硬件、软件、通信等协同工作来实现。将互为冗余的两个部件构成一个有机的整体,通常包括以下多个技术要点:信息同步技术、故障检测技术、故障仲裁技术和切换技术、热插拔技术和故障隔离技术等。
本文将WDM的定时器功能应用在冗余技术中,为系统的故障检测和切换技术提供了一种解决方案,并以双冗余CAN总线接口板为例测试本设计的可行性。
1 冗余技术
冗余技术有两种方式:工作冗余和后备冗余。工作冗余是对关键设备以双重或三重的原则来重复配置,这些设备同时处于工作运行状态,工作过程中若某一台设备出现故障,它会自动脱离系统,但并不影响系统的正常工作。后备冗余方式是使一台设备投入运行,另一台冗余设备处于热备用状态,但不投入运行,在线运行设备一旦出现故障,后备设备立即投入运行。常用的冗余系统按其结构可分为并联系统、备用系统和表决系统三种。最简单的冗余设计是并联装置,其他方法还有串并联或并串联混合装置和多数表决装置等。当某部分可靠性要求很高,但目前的技术水平和方法很难满足时,冗余技术可能成为惟一较好的设计方法。但是冗余设计往往使系统的体积、重量、费用和复杂度均相应增加。因此,除了重要的关键设备,对于一般产品不宜采用冗余技术。
冗余配置虽然增加系统的投资,但它提高了整个用户系统的平均无故障时间(MTBF),缩短了平均故障修复时间(MTTR)。因此,在重要场合的控制系统中,冗余技术的采用可有效提高系统的可靠性。
一个冗余系统要工作通常是硬件与软件的配合完成的。在硬件上需要有几个相同的,可独立工作的设备。在软件上来说,就是在实现系统功能的同时,要有错误检测功能和动态切换功能,并且要在尽可能短的时间内完成切换动作。下面以双CAN总线接口卡为例,主要从软件方面详述本后备冗余设计的实现细节。
2 硬件设计
CAN控制器采用Philips的SJA1000,工作于BasicCAN模式或PeliCAN模式下,PeliCAN模式支持CAN2.0B协议,采用8位地址/数据复用总线接口。
如图1所示,PCI总线双CAN接口卡由2片SJA1000提供两路独立的CAN接口,每片芯片的8位地址/数据总线和读写控制信号、锁存信号直接与PCI9052相连。SJA1000输出信号经过光耦到CAN收发器PCA82C250,PCA82C250供电电源为隔离电源,由隔离电源转换模块提供。CAN总线的复位信号由FPGA提供,CAN控制器SJA1000的中断信号输出到FPGA。
图1 CAN冗余模块系统结构图
3 软件设计
3.1 WDM模式驱动程序
在WindowsXP操作系统中,运行于用户模式的应用程序访问硬件资源是通过Win32API调用内核模式的驱动程序实现的。这种内核模式的驱动程序就是WDM(WindowsDriverModel)驱动程序,它是微软在WindowsXP操作系统中提出的新的驱动程序模式,支持即插即用、电源管理和I/O管理等功能。图2是WindowsXP的系统结构。
如图2所示设备驱动程序是操作系统的一个组成部分,它由I/O管理器(I/OManager)管理和调动。
I/O管理器每收到一个来自用户应用程序的请求就创建一个I/O请求包(IRP)的数据结构,并将其作为参数传递给驱动程序。驱动程序通过识别IRP中的物理设备对象(PDO)来区别是发送给哪一个设备。IRP结构中存放请求的类型、用户缓冲区的首地址、用户请求数据的长度等信息。驱动程序处理完这个请求后,在该结构中填入处理结果的有关信息,调用IoCompleteRequeST将其返回给I/O管理器,用户应用程序的请求随即返回。访问硬件时,驱动程序通过调用硬件抽象层的函数实现。
图2 WindowsXP系统结构
WDM的开发可采用DDK,DriverWorks等开发工具。以下重点描述在此WDM驱动实例中采用定时查询实现CAN总线冗余功能。
3.2 驱动冗余设计
本设计中,CAN通路采用2路冗余,使得当一个CAN总线接口出现故障时,可以很方便地切换到另一个CAN总线接口。
故障检测在定时器中实现。在DriverWorks中有两种定时器对象,即附属于设备对象的1Hz定时器和KTimedCallback类定义的定时器,WDM定时方法是通过它们实现的。KTimedCallback是KTimer的派生类,KTimer封装了系统定时器,构成分发对象定时器类,可用于同步目的。KTimedCallback类包含了系统延时过程调用(DPC)对象,当定时器超时后系统就调用DPC。KTimedCallback的成员函数主要是Set和SetPeriodic,Set用于设置一次有效定时器参数,SetPeriodie设置周期性定时器参数,Set和SetPeriodic在设置定时参数时同时启动定时器并建立与回调函数的关联,定时器超时后调用回调函数。
具体的切换工作放在DPC中完成。DPC为推迟过程调用,一些操作不适合在ISR中处理需放入限制较少的DPC中,如通知事件置标记等等。DPC是一个通用机制,但通常都用在中断处理中。在最普通的情况下,ISR决定当前请求的完成并请求一个DPC。之后,内核在DISPATCH_LEVEL级上调用这个DPC例程。
因此DPC中的代码要比ISR中的代码有更少的限制。
特别是,DPC例程可以调用像IoCompleteRequest或IoStartNextPacket这样的例程,在一个I/O操作的结尾处调用这些例程在逻辑上是必要的。图3描述了具体DPC调用处理过程。
图3 DPC处理过程
冗余切换查询时间可以在设备属性中添加切换时间周期项,通过修改设备属性的方式在线修改,修改后设备管理器自动更新驱动。
在双CAN冗余系统中,较之硬件结构而言,软件设计相对复杂得多,其关键之处在于CAN系统故障检测及CAN系统自动切换。由于采用两套完全独立的传输介质、总线驱动器和总线控制器,因此它们能分别独立检测到自己通道的故障,比如CANH与CANL短路,CANH或CANL断开、CANH与地短路、CANL与电源短路、总线驱动器损坏等。实际调试中发现,如果CANH、CANL断开或只有一个发送器在总线上,均会造成发送/接收错误计数器不断增加到128,使节点处于忽略错误态;而CANH与CANL短路、CANH与地短路或CANL与电源短路均会造成发送/接收错误计数器不断增加到256,使节点处于总线脱离态。所以,通过节点状态改变中断子程序中调用CAN冗余模块,可以达到实现上述故障自动检测及CAN系统自动切换的目的。
3.3 冗余测试
测试时采用一个有两个通道CAN分析仪分别连接本CAN板的A,B通道上,在从A通道连续发送数据至分析仪的过程中,手动断开此链接,则备用通道B开始工作,切换成功。对冗余切换时间的测试可以通过比较发送端和接收端间数据量的差值来判断。具体方法是在发送端以10ms为周期不停发送数据包,正常情况下发送端的数据包数量与接收端的数据包数量是相等的。在切换动作时,会有一些数据包被丢弃,这时通过计算发送端与接收端数据包的差值乘以10ms,即为此次切换的切换时间。在本例中,通过多次这样的测试,得出平均切换时间在30ms左右,完全能满足对计算机系统高可靠性的要求。
4 结论
提出一种设备冗余的系统设计方法,为系统的故障检测和切换技术提供了一种解决方案。利用此方法设计了双冗余CAN总线板卡以及在WindowsXP系统下的WDM驱动。该模块工作稳定,数据传输可靠,冗余切换切实可行。并可依据实际使用要求在线修改定时查询时间。这种冗余实现方法在提高设备可靠性方面具有一定的实用价值。
作者:王维兴 相晖 来源:现代电子技术