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