基于WDM的精確定時(shí)器及其在冗余技術(shù)中的應(yīng)用
摘 要: 現(xiàn)代軍用電子設(shè)備和某些控制系統(tǒng)對(duì)設(shè)備的可靠性要求越來(lái)越高。針對(duì)此情況利用設(shè)備冗余原理, 提出一種基于WDM 的精確定時(shí)器實(shí)現(xiàn)設(shè)備冗余的方法。利用此方法設(shè)計(jì)了雙冗余CAN 總線(xiàn)板卡及其在Windows XP 系統(tǒng)下的驅(qū)動(dòng)程序, 給出了部分驅(qū)動(dòng)實(shí)現(xiàn)細(xì)節(jié)和相關(guān)流程。結(jié)果表明該方法可成功實(shí)現(xiàn)雙CAN 接口卡在總線(xiàn)故障情況下的冗余切換,提高了設(shè)備可靠性。
本文引用地址:http://cafeforensic.com/article/149707.htm0 引 言
高可靠性是現(xiàn)代軍用電子設(shè)備和某些控制系統(tǒng)的首要需求。冗余技術(shù)是計(jì)算機(jī)系統(tǒng)可靠性設(shè)計(jì)中常采用的一種技術(shù), 是提高計(jì)算機(jī)系統(tǒng)可靠性的最有效方法之一。合理的冗余設(shè)計(jì)將大大提高系統(tǒng)的可靠性, 但同時(shí)也增加了系統(tǒng)的復(fù)雜度和設(shè)計(jì)的難度, 應(yīng)用冗余配置的系統(tǒng)還增加了用戶(hù)投資。因此, 如何對(duì)冗余設(shè)計(jì)進(jìn)行合理有效的設(shè)計(jì), 是值得深入研究的課題。
1:1 熱冗余也就是所謂的雙重化, 是其中一種有效的冗余方式, 但它并不是兩個(gè)部件簡(jiǎn)單的并聯(lián)運(yùn)行,而是需要硬件、軟件、通信等協(xié)同工作來(lái)實(shí)現(xiàn)。將互為冗余的兩個(gè)部件構(gòu)成一個(gè)有機(jī)的整體, 通常包括以下多個(gè)技術(shù)要點(diǎn): 信息同步技術(shù)、故障檢測(cè)技術(shù)、故障仲裁技術(shù)和切換技術(shù)、熱插拔技術(shù)和故障隔離技術(shù)等。
本文將WDM 的定時(shí)器功能應(yīng)用在冗余技術(shù)中,為系統(tǒng)的故障檢測(cè)和切換技術(shù)提供了一種解決方案, 并以雙冗余CAN 總線(xiàn)接口板為例測(cè)試本設(shè)計(jì)的可行性。
1 冗余技術(shù)
冗余技術(shù)有兩種方式: 工作冗余和后備冗余。工作冗余是對(duì)關(guān)鍵設(shè)備以雙重或三重的原則來(lái)重復(fù)配置, 這些設(shè)備同時(shí)處于工作運(yùn)行狀態(tài), 工作過(guò)程中若某一臺(tái)設(shè)備出現(xiàn)故障, 它會(huì)自動(dòng)脫離系統(tǒng), 但并不影響系統(tǒng)的正常工作。后備冗余方式是使一臺(tái)設(shè)備投入運(yùn)行, 另一臺(tái)冗余設(shè)備處于熱備用狀態(tài), 但不投入運(yùn)行, 在線(xiàn)運(yùn)行設(shè)備一旦出現(xiàn)故障, 后備設(shè)備立即投入運(yùn)行。常用的冗余系統(tǒng)按其結(jié)構(gòu)可分為并聯(lián)系統(tǒng)、備用系統(tǒng)和表決系統(tǒng)三種。最簡(jiǎn)單的冗余設(shè)計(jì)是并聯(lián)裝置, 其他方法還有串并聯(lián)或并串聯(lián)混合裝置和多數(shù)表決裝置等。當(dāng)某部分可靠性要求很高, 但目前的技術(shù)水平和方法很難滿(mǎn)足時(shí), 冗余技術(shù)可能成為惟一較好的設(shè)計(jì)方法。但是冗余設(shè)計(jì)往往使系統(tǒng)的體積、重量、費(fèi)用和復(fù)雜度均相應(yīng)增加。因此, 除了重要的關(guān)鍵設(shè)備, 對(duì)于一般產(chǎn)品不宜采用冗余技術(shù)。
冗余配置雖然增加系統(tǒng)的投資, 但它提高了整個(gè)用戶(hù)系統(tǒng)的平均無(wú)故障時(shí)間( MTBF) , 縮短了平均故障修復(fù)時(shí)間( MT TR) 。因此, 在重要場(chǎng)合的控制系統(tǒng)中, 冗余技術(shù)的采用可有效提高系統(tǒng)的可靠性。
一個(gè)冗余系統(tǒng)要工作通常是硬件與軟件的配合完成的。在硬件上需要有幾個(gè)相同的, 可獨(dú)立工作的設(shè)備。在軟件上來(lái)說(shuō), 就是在實(shí)現(xiàn)系統(tǒng)功能的同時(shí), 要有錯(cuò)誤檢測(cè)功能和動(dòng)態(tài)切換功能, 并且要在盡可能短的時(shí)間內(nèi)完成切換動(dòng)作。下面以雙CAN 總線(xiàn)接口卡為例,主要從軟件方面詳述本后備冗余設(shè)計(jì)的實(shí)現(xiàn)細(xì)節(jié)。
2 硬件設(shè)計(jì)
CAN 控制器采用Philips 的SJA1000, 工作于BasicCAN 模式或PeliCAN 模式下, PeliCAN 模式支持CAN 2. 0B 協(xié)議, 采用8 位地址/ 數(shù)據(jù)復(fù)用總線(xiàn)接口。
如圖1 所示, PCI 總線(xiàn)雙CAN 接口卡由2 片SJA1000 提供兩路獨(dú)立的CAN 接口, 每片芯片的8 位地址/ 數(shù)據(jù)總線(xiàn)和讀寫(xiě)控制信號(hào)、鎖存信號(hào)直接與PCI9052 相連。SJA1000 輸出信號(hào)經(jīng)過(guò)光耦到CAN 收發(fā)器PCA82C250, PCA82C250 供電電源為隔離電源,由隔離電源轉(zhuǎn)換模塊提供。CAN 總線(xiàn)的復(fù)位信號(hào)由FPGA 提供, CAN 控制器SJA1000 的中斷信號(hào)輸出到FPGA。
圖1 CAN 冗余模塊系統(tǒng)結(jié)構(gòu)圖。
3 軟件設(shè)計(jì)
3. 1 WDM 模式驅(qū)動(dòng)程序
在Window s XP 操作系統(tǒng)中, 運(yùn)行于用戶(hù)模式的應(yīng)用程序訪(fǎng)問(wèn)硬件資源是通過(guò)Win32 API 調(diào)用內(nèi)核模式的驅(qū)動(dòng)程序?qū)崿F(xiàn)的。這種內(nèi)核模式的驅(qū)動(dòng)程序就是WDM(Window s Driver Model) 驅(qū)動(dòng)程序, 它是微軟在Window s XP 操作系統(tǒng)中提出的新的驅(qū)動(dòng)程序模式, 支持即插即用、電源管理和I/ O 管理等功能。圖2 是Window s XP 的系統(tǒng)結(jié)構(gòu)。
如圖2 所示設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)的一個(gè)組成部分, 它由I/ O 管理器( I/ O Manager ) 管理和調(diào)動(dòng)。
I/ O管理器每收到一個(gè)來(lái)自用戶(hù)應(yīng)用程序的請(qǐng)求就創(chuàng)建一個(gè)I/ O 請(qǐng)求包( IRP) 的數(shù)據(jù)結(jié)構(gòu), 并將其作為參數(shù)傳遞給驅(qū)動(dòng)程序。驅(qū)動(dòng)程序通過(guò)識(shí)別IRP 中的物理設(shè)備對(duì)象( PDO) 來(lái)區(qū)別是發(fā)送給哪一個(gè)設(shè)備。IRP 結(jié)構(gòu)中存放請(qǐng)求的類(lèi)型、用戶(hù)緩沖區(qū)的首地址、用戶(hù)請(qǐng)求數(shù)據(jù)的長(zhǎng)度等信息。驅(qū)動(dòng)程序處理完這個(gè)請(qǐng)求后, 在該結(jié)構(gòu)中填入處理結(jié)果的有關(guān)信息, 調(diào)用IoCompleteRequeST 將其返回給I/ O 管理器, 用戶(hù)應(yīng)用程序的請(qǐng)求隨即返回。訪(fǎng)問(wèn)硬件時(shí), 驅(qū)動(dòng)程序通過(guò)調(diào)用硬件抽象層的函數(shù)實(shí)現(xiàn)。
圖2 Windows XP 系統(tǒng)結(jié)構(gòu)。
WDM 的開(kāi)發(fā)可采用DDK, DriverWorks 等開(kāi)發(fā)工具。以下重點(diǎn)描述在此WDM 驅(qū)動(dòng)實(shí)例中采用定時(shí)查詢(xún)實(shí)現(xiàn)CAN 總線(xiàn)冗余功能。
3. 2 驅(qū)動(dòng)冗余設(shè)計(jì)
本設(shè)計(jì)中, CAN 通路采用2 路冗余, 使得當(dāng)一個(gè)CAN 總線(xiàn)接口出現(xiàn)故障時(shí), 可以很方便地切換到另一個(gè)CAN 總線(xiàn)接口。
故障檢測(cè)在定時(shí)器中實(shí)現(xiàn)。在DriverWorks 中有兩種定時(shí)器對(duì)象, 即附屬于設(shè)備對(duì)象的1 Hz 定時(shí)器和KTimedCallback 類(lèi)定義的定時(shí)器, WDM 定時(shí)方法是通過(guò)它們實(shí)現(xiàn)的。KT imedCal lback 是KTimer 的派生類(lèi), KTimer 封裝了系統(tǒng)定時(shí)器, 構(gòu)成分發(fā)對(duì)象定時(shí)器類(lèi), 可用于同步目的。KT imedCal lback 類(lèi)包含了系統(tǒng)延時(shí)過(guò)程調(diào)用( DPC) 對(duì)象, 當(dāng)定時(shí)器超時(shí)后系統(tǒng)就調(diào)用DPC。KTimedCallback 的成員函數(shù)主要是Set 和SetPeriodic, Set 用于設(shè)置一次有效定時(shí)器參數(shù), SetPeriodie 設(shè)置周期性定時(shí)器參數(shù), Set 和SetPeriodic 在設(shè)置定時(shí)參數(shù)時(shí)同時(shí)啟動(dòng)定時(shí)器并建立與回調(diào)函數(shù)的關(guān)聯(lián),定時(shí)器超時(shí)后調(diào)用回調(diào)函數(shù)。
具體的切換工作放在DPC 中完成。DPC 為推遲過(guò)程調(diào)用, 一些操作不適合在ISR 中處理需放入限制較少的DPC 中, 如通知事件置標(biāo)記等等。DPC 是一個(gè)通用機(jī)制, 但通常都用在中斷處理中。在最普通的情況下, ISR 決定當(dāng)前請(qǐng)求的完成并請(qǐng)求一個(gè)DPC。之后,內(nèi)核在DISPATCH_LEVEL 級(jí)上調(diào)用這個(gè)DPC 例程。
因此DPC 中的代碼要比ISR 中的代碼有更少的限制。
特別是, DPC 例程可以調(diào)用像IoCompleteRequest 或Io StartNextPacket 這樣的例程, 在一個(gè)I/ O 操作的結(jié)尾處調(diào)用這些例程在邏輯上是必要的。圖3 描述了具體DPC 調(diào)用處理過(guò)程。
圖3 DPC 處理過(guò)程。
冗余切換查詢(xún)時(shí)間可以在設(shè)備屬性中添加切換時(shí)間周期項(xiàng), 通過(guò)修改設(shè)備屬性的方式在線(xiàn)修改, 修改后設(shè)備管理器自動(dòng)更新驅(qū)動(dòng)。
在雙CAN 冗余系統(tǒng)中, 較之硬件結(jié)構(gòu)而言, 軟件設(shè)計(jì)相對(duì)復(fù)雜得多, 其關(guān)鍵之處在于CAN 系統(tǒng)故障檢測(cè)及CAN 系統(tǒng)自動(dòng)切換。由于采用兩套完全獨(dú)立的傳輸介質(zhì)、總線(xiàn)驅(qū)動(dòng)器和總線(xiàn)控制器, 因此它們能分別獨(dú)立檢測(cè)到自己通道的故障, 比如CANH 與CANL 短路, CANH 或CANL 斷開(kāi)、CANH 與地短路、CANL 與電源短路、總線(xiàn)驅(qū)動(dòng)器損壞等。實(shí)際調(diào)試中發(fā)現(xiàn), 如果CANH 、CANL 斷開(kāi)或只有一個(gè)發(fā)送器在總線(xiàn)上, 均會(huì)造成發(fā)送/ 接收錯(cuò)誤計(jì)數(shù)器不斷增加到128, 使節(jié)點(diǎn)處于忽略錯(cuò)誤態(tài); 而CANH 與CANL 短路、CANH 與地短路或CAN L 與電源短路均會(huì)造成發(fā)送/ 接收錯(cuò)誤計(jì)數(shù)器不斷增加到256, 使節(jié)點(diǎn)處于總線(xiàn)脫離態(tài)。所以,通過(guò)節(jié)點(diǎn)狀態(tài)改變中斷子程序中調(diào)用CAN 冗余模塊,可以達(dá)到實(shí)現(xiàn)上述故障自動(dòng)檢測(cè)及CAN 系統(tǒng)自動(dòng)切換的目的。
3. 3 冗余測(cè)試
測(cè)試時(shí)采用一個(gè)有兩個(gè)通道CAN 分析儀分別連接本CAN 板的A, B 通道上, 在從A 通道連續(xù)發(fā)送數(shù)據(jù)至分析儀的過(guò)程中, 手動(dòng)斷開(kāi)此鏈接, 則備用通道B開(kāi)始工作, 切換成功。對(duì)冗余切換時(shí)間的測(cè)試可以通過(guò)比較發(fā)送端和接收端間數(shù)據(jù)量的差值來(lái)判斷。具體方法是在發(fā)送端以10 ms 為周期不停發(fā)送數(shù)據(jù)包, 正常情況下發(fā)送端的數(shù)據(jù)包數(shù)量與接收端的數(shù)據(jù)包數(shù)量是相等的。在切換動(dòng)作時(shí), 會(huì)有一些數(shù)據(jù)包被丟棄, 這時(shí)通過(guò)計(jì)算發(fā)送端與接收端數(shù)據(jù)包的差值乘以10 ms, 即為此次切換的切換時(shí)間。在本例中, 通過(guò)多次這樣的測(cè)試, 得出平均切換時(shí)間在30 ms 左右, 完全能滿(mǎn)足對(duì)計(jì)算機(jī)系統(tǒng)高可靠性的要求。
4 結(jié) 論
提出一種設(shè)備冗余的系統(tǒng)設(shè)計(jì)方法, 為系統(tǒng)的故障檢測(cè)和切換技術(shù)提供了一種解決方案。利用此方法設(shè)計(jì)了雙冗余CAN 總線(xiàn)板卡以及在Window s XP 系統(tǒng)下的WDM 驅(qū)動(dòng)。該模塊工作穩(wěn)定, 數(shù)據(jù)傳輸可靠, 冗余切換切實(shí)可行。并可依據(jù)實(shí)際使用要求在線(xiàn)修改定時(shí)查詢(xún)時(shí)間。這種冗余實(shí)現(xiàn)方法在提高設(shè)備可靠性方面具有一定的實(shí)用價(jià)值。
評(píng)論