馮國良
(西安鐵路職業技術學院, 電子信息學院, 陜西, 西安 710014)
隨著鐵路運輸技術的高速發展,對鐵路信號的聯鎖控制系統的安全性以及容錯性都提出了更高的要求。鐵路信號控制系統歷經機械聯鎖、機電聯鎖、電氣聯鎖之后已經發展到計算機聯鎖階段,計算機聯鎖作為新興技術其安全性直接關系到鐵路行車安全甚至是乘客的人身財產安全。因此,無論是硬件設備驅動的開發還是軟件系統的設計都需以系統穩定為前提,具備高效可行的容錯機制,確保為鐵路信號控制系統提供安全可靠的運行環境。
鐵路信號是列車運行與調度中的命令,是確保行車安全、提升運輸效率的基礎保障。計算機聯鎖系統是利用計算機技術實現的實時控制調度系統,在設計過程中,系統在設備結構上需要包括上位機、聯鎖機、指標機。在功能需求上需要包括硬件設備驅動確保數據的輸入輸出,軟件平臺要確保聯鎖計算以及數據同步,并且確保實時性。在非功能需求上主要是確保安全性、可靠性。
鑒于鐵路信號控制的特殊性,系統必須具備高實時性。Linux操作系統是支持定制裁剪的開源系統,可以有效管理系統資源并實現相關模塊動態加載,在嵌入式開發中具有廣泛應用。但由于Linux自身不是實時的操作系統,在任務調度、管理內存等方面無法滿足聯鎖控制系統的實時性要求,而RTLinux正是可實現實時需求的擴展,因此在Linux的中斷控制與內核之間增加一個RTLinux內核用以實現實時性要求。Linux接收到的控制信號先交RTLinux處理,Linux利用“sti”“cli”宏指令實現中斷的開與關,RTLinux進行了優化,采用S_STI、S_CLI,引入虛擬層,將中斷區分為Linux中斷和實時中斷,為實時任務提供最小延遲及最優先的處理器使用權[1]。
在計算機聯鎖系統中,硬件驅動是底層運行的基礎,它與軟件系統的協同需要依賴驅動程序將軟件系統指令準確傳輸至硬件。其中,CPU板的核心由A、B兩個模塊構成,為主從關系,主CPU實現同步控制。采用PC/104,網絡、串口以及USB口均互聯,如圖1所示。

圖1 CPU板邏輯示意圖
在此,CPU板與其他通信單元間采用FPGA和中斷操作實現數據交互,有數據輸出時首先從ISA總線傳遞至FPGA,經過分析后確定目標通信板并保存至RAM中,然后CPU利用中斷通知目標通信板發出;有數據到達時,通信板整理后同步傳送至CPU的FPGA,也保存在RAM中。因此,雙口RAM可以實現聯鎖主機的數據共享以及數據存儲,并注意實現寫操作、讀寫操作互斥。利用系統的內核函數_copy_from_user、_copy_to_user實現數據拷貝,利用讀寫鎖rw_lock實現互斥,應用程序在讀寫之間利用dpram_wait_unlock獲取操作權限,開始操作前dpram_lock實現加鎖,操作結束之后dpram_unlock進行鎖釋放[2]。
在聯鎖控制主機中,各個I/O通信板的結構基本一致,主控單元選擇2片XC6SLX9的FPGA,每片再擴展一個SRAM。A、B兩路獨立電源,FPGA不可以向網絡發送命令,主要實現CPUA、CPUB的數據傳輸。邏輯結構如圖2所示。

圖2 I/O通信板邏輯示意圖
對于驅動程序來說,I/O通信板實現數據交互的關鍵在于將映射地址中的數據進行讀取及發送,主要操作步驟如下。
(1) 寫操作:判斷總線是否空閑,空閑時選通通信板寫數,完成后設置結束標志后釋放總線,將地址進行重置[3]。
(2) 讀操作:收到數據后,為了A、B均可以收到數據,建立雙口RAM存儲區并同時發送,選通通信板后判斷數據是否有效,有效時檢測FPGA是否正在寫入此塊,設置PC/104讀標志為真,讀數完成之后設置標志位為假,釋放總線,將地址進行重置。
系統實際應用于鐵路時還需考慮環境因素,雨雪天氣及雷電都會對系統有所影響,因此,硬件芯片需要具備較好的防腐蝕防雷擊性能,對于采用的各類元器件結合工作環境、設備類別、元器件質量以及電應力比進行失效率計算,確保硬件部分安全,為軟件系統提供底層基礎支撐。
完成硬件設備驅動程序之后,結合計算機聯鎖系統的功能需求設計軟件系統的整體框架結構,將系統劃分為初始化處理模塊、聯鎖任務調度模塊、雙CPU控制模塊,整體結構如圖3所示。

圖3 計算機聯鎖軟件系統框架結構
(1) 初始化處理模塊主要實現上電之后軟硬件配置參數的初始化。軟件類初始化操作包括全局變量、數據區域等;硬件類初始化操作包括內存、信道、通信板、輸出信號等。參數類初始化操作包括系統配置文件、站場配置讀取、變量賦值等。
(2) 聯鎖任務調度模塊主要實現整個軟件的任務控制以及各個模塊的調度。判斷聯鎖周期是否開始或結束,實現雙CPU的數據同步,校正系統時鐘,監控CPU是否穩定。
(3) 雙CPU控制模塊主要實現雙CPU之間數據通信的邏輯控制、狀態管理。
3.2. 核心模塊實現
3.2.1 聯鎖任務調度模塊
聯鎖任務調度模塊是整個系統的核心,包括周期管理、任務調度2個部分。其中,周期管理主要是利用定時器判斷上一周期是否結束并設置新周期的開始標志。定時器每10 ms產生一次中斷,判斷調度周期是否達到,超時時長設置為250 ms,超時信號達到之后如果聯鎖機還未完成則需申請延長周期并記錄操作過程。
在初始化處理之后,根據配置文件確定主從CPU,并根據各自狀態執行聯鎖任務。首先,同步新周期,同步聯鎖運算的數據;其次,通過比較判斷數據的準確性,對每類數據處理之后,根據比較結果重置平臺數據狀態;最后,接收切換命令判斷是否切換,再將結果進行輸出。
3.2.2 雙CPU控制模塊
雙CPU控制模塊是“二乘二取二”邏輯中的“取二”,主要包括雙CPU的同步、比較以及狀態管理3個部分。
(1) 同步子模塊。在聯鎖任務周期內雙CPU為獨立處理運行的模塊,由于系統為實時系統,因此2個CPU在處理任務時的時間需保持一致性,任務中設立包括新周期開始、聯鎖輸入、結果輸出在內的多個同步點,利用CPU板中的雙口RAM傳遞至另一塊CPU。
(2) 比較子模塊。雙擊進行比較時,首先需確保序列號、時間戳一致,保證比較數據來自同一周期同一點。其次,對于不同類型的數據采用不同的策略。
① 對于輸入數據,當主從不一致時,若CRC校驗碼正確則以主CPU為準;若CRC碼錯誤,則轉至錯故障診斷模塊[5]。
② 對于輸出結果,主從必須一致,否則不輸出。不一致時轉至故障診斷模塊。
(3) 狀態管理子模塊。通過互相之間收發“心跳”消息實現狀態判斷,每過50 ms發送包含自身ID、時間戳等信息的心跳信號,若在200 ms內仍未接收到應答消息則判定對端CPU停止運行,標記故障位。
為了縮短計算機聯鎖系統的故障潛伏期,在采集數據之后利用同步控制器實現實時監測,雙機利用RTLinux的實時時鐘按照任務周期進行數據同步,在運算結果不一致時調用執行自檢程序以便過濾到瞬時故障,在聯機A、B經過運算獲取2*2結果之后,將最終一致的2結果送至執行主機,若比較結果一致則發送確認命令發送信號,否則給B發送重復計算信號,修改本機響應標志再次進行比較,如果超出預設次數仍不一致,則判斷可能產生故障[6]。
設置A為主控機,B為備用機,主機定時發送控制命令,備機與自身命令比較,一致時采用雙機熱備同步,若比較結果不一致并且備機命令多于主機,則代表主機出現故障,由備機發起切換,原來的主機轉為脫機狀態待查。為了避免由于備機脫機導致無機可換,設置全局變量work_cpu,每次比較之后均需讀取該全局變量,該變量為A則聯鎖主機向A傳遞并將B發送的進程封鎖。利用信號實現控制的切換,做到無縫銜接。
除了系統自身的雙CPU控制、容錯以及雙擊熱備切換,軟件系統還應注意網絡安全、數據安全,具備病毒查殺、預防惡意代碼植入等能力,通過防火墻策略+系統容災機制雙重保障聯鎖系統的軟件部分保障安穩可靠運行。另外,通過定期備份、應急機制、定期清理等措施保證系統性能以及數據完整。
為了驗證系統功能,在實驗室環境利用2臺工控機、1臺聯鎖主機、2臺交換機、控顯軟件搭建了測試平臺進行仿真測試,在2臺工控機上運行控顯軟件,在聯鎖主機上安裝本研究設計的計算機聯鎖系統,通過以太網接入交換機實現數據通信,并利用PCI監測每個CPU的數據通信情況[7],系統結構如圖4所示。

圖4 測試平臺框架
PCI與以太網連接之后,聯鎖系統每次進行同步任務時均會給監測程序發送信息,記錄聯鎖周期、輸入輸出數據、心跳信號等數據,并可計算同步數據耗時,測試結果如圖5所示,以此可證明基于RTLinux-Linux的計算機聯鎖軟件系統功能得到實現且系統穩定。




圖5 聯鎖測試結果
本文以鐵路信號計算機聯鎖系統作為應用背景,基于RTLinux-Linux內核設計了硬件設備驅動的移植與設計,并詳細設計了計算機聯鎖的軟件架構及核心模塊,實現了雙CPU控制、聯鎖同步、數據比較、狀態管理等功能,經過實驗平臺測試滿足鐵路信號聯鎖系統需求。但也存在一些不足之處,對于硬件芯片的防腐蝕、通信協議的抗擾動性能還需進一步測試以及擇優,另外對軟件系統的可擴展性、可維護性的評估還需深入探索。