李 倩,王曙光,張立鵬,張奕男
(卡斯柯信號有限公司,上海 200071)
軌道交通信號系統需要配備在線診斷系統,以對系統中各設備的運行狀態進行診斷,對一些運行參數進行收集[1]。當設備出現問題時,在線診斷系統所記錄的信息就成為分析或復盤的重要依據。在線診斷系統的開發通常與各個品牌的設備上的下位機軟件開發同步進行[2]。而不同品牌的設備通常使用不同的通信協議及解析方法,如果其通信協議更新了,那么與之對應的在線診斷系統需要重新開發,相關的解析方法和實現也需要同步進行修改。而同一品牌的設備在進行迭代更新的過程中,有可能增加或刪除通信協議的內容,從而導致在線診斷系統也要進行更新,不斷迭代。如此一來,在線診斷系統的開發工作既耗時又費力,而且系統靈活性也被降低。
現有在線診斷系統主要是面向設備本身的解決方案。王琦等人[3]提出一套用于記錄和分析軌道交通車輛運行及故障數據的在線診斷系統,該系統通過多功能車輛總線(MVB,Multifunction Vehicle Bus)接口、無線局域網(WLAN,Wireless Local Area Network)等方式獲取車輛的運行狀態信息。張雯柏等人[4]搭建了快速實現鐵路信號集中監測、智能分析與故障診斷的腳本編制系統。孟曉升[5]針對CTCS2-200H 型列控車載設備,提出了采用無線傳輸及專家智能診斷技術,對設備故障進行定位與分析。
本文結合各診斷系統的共性[6],采用XML 文件協議配置的方法,設計了基于協議配置的通用在線診斷系統,實現對軌道交通信號系統中各設備的診斷。該系統具有較高的靈活性,能夠減少故障診斷的迭代次數,節省了人力成本,有效保障軌道交通信號系統的正常運行[7]。
在線診斷系統與設備之間的通信一般采用雙網冗余通信(紅網和藍網)[8],傳輸層采用用戶數據報協議(UDP,User Datagram Protocol)[9]。在線診斷系統的網絡結構如圖1 所示。

圖1 在線診斷系統網絡結構
本文在多個在線診斷系統共性分析的基礎上,將不同品牌設備的報文協議進行歸納和總結,同時結合軌道交通系統設備的特點,設計了基于協議配置的通用在線診斷系統(簡稱:通用在線診斷系統)。
在線診斷系統的架構如圖2 所示,分為3 層:數據展現層、數據控制層、數據接收層。(1)數據控制層包括協議配置模塊、配置文件處理模塊、數據解析模塊;(2)數據接收層包括數據接收與存儲模塊;(3)數據展現層包括個性化顯示模塊。在線診斷系統的通用性通過數據控制層來實現,以更加靈活地適用于不同產品的設備。因此,數據控制層的設計是通用在線診斷系統的關鍵技術。

圖2 通用在線診斷系統架構
在協議配置模塊中,用戶可以根據實際需求進行個性化配置。配置時,用戶需依據本文系統與設備的下位機之間的通信協議進行配置。配置文件包括幀類型配置文件(Frame.xml)、幀格式配置文件(Format.xml)、枚舉文件(Enumerate.xml),具體如下。
(1)幀類型配置文件:配置通信協議中所有幀的幀類型及其屬性,定義幀的名稱、最大長度等。
(2)幀格式配置文件:配置各個幀類型所包括的字段(可以是全部字段,也可以是部分字段)的屬性,在屬性中對字段(和下位機的關鍵變量相對應)的名稱、起始字節、長度,在界面中所占頁數、行數、列數,以及限制屬性等進行定義。
(3)枚舉文件:配置某些字段值的宏定義或具體含義。例如,當某字段的值為0 時,表示燈滅;值為1 時,表示燈亮。
通用在線診斷系統使用XML 文件來定義這3 種配置文件。幀類型和幀格式是一對一的關系,即一種幀類型對應一種幀格式,那么配置n個幀類型就要配置n個幀格式。幀格式和枚舉類型是一對多的關系,即1 個幀格式可以對應1 個或m個枚舉類型。幀類型、幀格式和枚舉類型的對應關系如圖3 所示。如果通信協議的內容較簡單,通用在線診斷系統支持通過人工配置或界面來修改字段屬性。如果通信協議的內容較長,通用在線診斷系統支持通過Excel文件的形式修改字段屬性,然后使用轉換工具將Excel 文件轉換成系統可讀取的XML 文件。

圖3 幀類型、幀格式和枚舉文件的對應關系
配置文件處理模塊讀取配置文件Frame.xml、Format.xml、Enumerate.xml,并分別放到3 個類對象創建的實例中。幀類型類對象定義了幀類型的ID、幀名稱、幀長度等成員變量。幀格式類對象定義了幀格式的ID、對應的幀名稱、字段名稱、數據類型、字段的開始字節、字段所占的位數(需要按位顯示時)、字段所占字節長度、字段在界面上顯示的頁號、字段在界面上顯示的列號、字段在界面上顯示的行號等成員變量。枚舉文件類對象定義枚舉文件的ID、枚舉類型的名稱、枚舉值等成員變量。3 個類對象相互關聯后保存在Analyse Service。通用在線診斷系統所有的報文解析都基于Analyselyse Service進行處理。
通用在線診斷系統啟動時先獲取要接收的報文的幀類型,然后開啟相應數量的線程來處理數據。其中,幀類型既可以通過用戶交互來獲得,也可以從配置文件中得到。當選擇某種幀類型時,系統會獲取對應的所有幀格式和枚舉類型,存放到AnalyseService 創建的類對象。AnalyseService 為每個線程創建一個類對象。
通用在線診斷系統收到下位機發送的報文后,會根據幀類型來自動匹配不同的線程。當前線程對收到的報文進行一致性判斷,當且僅當報文的循環冗余校驗(CRC,Cyclic Redundancy Check)碼、長度、幀類型等一致時,才會將其加入對應的線程消息隊列。在加入線程消息隊列前,當前線程會將報文的消息頭(冗余層、信號層等)、消息尾(CRC碼等)過濾,并將過濾后的報文加入線程消息隊列。通用在線診斷系統對報文的解析過程如圖4 所示。在多線程任務中,為了保證數據的安全性和一致性,消息隊列需要進行加鎖處理。

圖4 通用在線診斷系統對報文的解析過程
通用在線診斷系統從線程消息隊列中取出數據,并對AnalyseService的數組FormatArray 進行賦值。FormatArray 定義了幀類型、界面顯示的幀名稱、字段名稱、每個字段的起始字節數、每個字段的格式、每個字段在界面中顯示的頁、每個字段在界面中顯示的行、每個字段在界面中顯示的列數,以及當字段為數值時,其值范圍的最大值和最小值等。通用在線診斷系統依次讀取每個數據包中的數據,并存儲至字符串AnalysedReturnResult,同時根據字段類型和字段值范圍,對相應的字段值進行判斷。如果當前字段值在范圍之外,通用在線診斷系統使用Map 類型的變量對該字段進行標記。
為了保證數據的正確性與可靠性,數據接收模塊采用Select 模式來接收數據。Select 模式采用多路復用的機制,一個進程可以監視一個或多個描述符(SocketID),將這些描述符放到一個表中。當檢測到表中的某個描述符讀就緒時,就立即返回并告訴內核去讀取報文,故可以非阻塞地接收一個或多個系統設備周期性發出的網絡報文。
本文系統將數據持久化存儲到本地硬盤上,并把壓縮后的數據保存到日志文件。因為在線診斷系統需要記錄大量的數據,所以通用在線診斷系統解決了以下問題。
(1)在線診斷系統接收網絡數據量大。設備中的下位機周期性地(最短周期為100 ms)發送報文,且發送的數據量大,這會引起數據丟失、文件損壞等問題,因此下位機發出每個數據包時,都使用Deflate 算法進行數據壓縮[10]。通用在線診斷系統收到下位機發送的報文后,先采用Inflate 算法進行解壓,解析完成后再使用Deflate 算法對數據進行壓縮,然后保存為日志文件存儲到本地。這種處理方式不僅減輕了網絡通信的傳輸壓力,提高了傳輸效率,而且節省了本地硬盤的存儲空間。
(2)在線診斷系統本地存儲報文數據量大。由于在線診斷系統需要長期無間斷地在地鐵現場運行,以記錄設備信息。因此,通用在線診斷系統采用定期刪除存儲數據的策略,根據現場具體情況和設備的需要,設置定期策略,例如每天1:00(24 h 制)刪除一個月以前的數據。
當收到下位機設備發送的報文,且經過2.3 節的數據處理后,通用在線診斷系統根據用戶選擇的頁數m_page 和幀類型m_frame 進入顯示模塊。在這個模塊中,通用在線診斷系統調用AnalyseService 類的DoAnalyse 函數。此函數根據當前數據包報文中的數值來設置當前頁m_page 各行各列的字段值。與之對應的是數組FormatArray的各個變量值,然后DoAnalyse 返回字符串AnalysedReturnResult。當AnalysedReturnResult 不為空時,個性化顯示模塊將字符串的內容顯示到通用在線診斷系統的界面上。個性化顯示模塊處理流程如圖5 所示。其中,個性化顯示模塊支持界面的頁、行、列等屬性的選擇和修改,以及對部分字段顯示項的設置(配置文件Format.xml 只配置相應位置的字段),以使字段顯示到相應的位置。

圖5 個性化顯示模塊處理流程
通用在線診斷系統應用場景有兩大類。
(1)地鐵現場。目前,通用在線診斷系統已隨列車自動控制系統產品被廣泛應用于多個地鐵項目中,如上海某地鐵線、北京某地鐵線等。當通用在線診斷系統運行在工控機時,會隨著工控機的啟動而自動運行,并根據地鐵現場的需要,按所配置的通信協議來接收指定幀類型的報文。通用在線診斷系統的運行界面如圖6所示,能夠清晰地顯示系統中各設備的運行情況。當發生故障時,工作人員只需要拷貝相關運行日志文件,使用通用在線診斷系統來分析問題。其中,通用在線診斷系統的分析方法是根據故障時間段,鎖定相關數據文件,根據關鍵變量進行搜索,查找相關聯的關鍵變量值的變化,協助工作人員查找故障原因。

圖6 通用在線診斷系統運行界面
(2)系統研發或測試。該應用場景的主要用戶是研發或測試人員。由于下位機軟件不方便打印更多的日志,通用在線診斷系統可以使研發或測試人員方便地對系統運行時各字段值(關鍵變量)進行診斷與分析,以輔助開發或測試,提高了工作效率。
通用在線診斷系統在運行前需要配置通信協議。幀類型、幀格式、枚舉文件這3 種配置文件的配置可以通過系統來進行(配置界面如圖7~圖9 所示),也可以通過XML 文件進行配置,或者在Excel 中配置好后轉換成XML 文件。

圖7 幀類型配置界面

圖8 幀格式文件配置界面

圖9 枚舉類型文件配置界面
基于協議配置的通用在線診斷系統實現了對不同設備的在線診斷,節省了開發時間,提高了開發效率,保障了開發質量,減少系統及相關產品的迭代次數,降低了開發成本。同時,通用在線診斷系統也有效地分析與診斷軌道交通信號系統設備的運行狀態,為設備故障時的分析與復盤提供了依據,大大提高了維護保障效率與故障處理速度護保障效率與故障處理速度[11]。目前,基于協議配置的通用在線診斷系統已在上海、北京等多個地鐵現場穩定運行,不足之處是還未實現批量搜索功能。下一步,將從固定日期的數據文件中根據關鍵字,批量生成符合用戶條件的分析報告等方向進行研究。