張友兵 劉 嶺 崔俊鋒
列車運行過程中,車載設備應用軟件實時檢測故障情況,并將檢測到的故障存儲起來以備下載分析。故障記錄包括UTC時間、系統時間戳、報告故障的文件名、報告故障的行號、故障碼和字符串形式的故障描述等信息。
但CTCS-2級和CTCS-3級列控車載設備可能存在軟硬件故障,為此開發(fā)一種診斷維護終端。
診斷維護終端用于修改列控車載主機存儲的配置參數,查看配置參數的描述信息,檢查車載主機存儲的配置參數取值,審查或清除車載主機存儲的應用故障記錄。診斷維護終端是一個工作在PC機上的獨立軟件,通過USB-CAN轉換設備與車載主機進行通信。根據故障記錄的文件名和行號可以快速定位故障發(fā)生的位置,利用故障碼和字符串形式的描述信息可以直觀分析故障原因。
診斷維護終端采用通用軟件,以應對不同車型、用戶、需求等變化信息帶來的影響,而且便于軟件升級維護,提高了軟件通用性和可維護性,也提高了軟件與車型的適配性。
圖1為診斷維護終端的系統原理圖。診斷維護終端通過USB-CAN轉換設備與車載主機通信連接。用戶操作診斷維護終端,診斷維護終端響應用戶操作,并將用戶操作轉換成符合通信協議的數據發(fā)送給車載主機,車載主機接收數據并從數據中識別出用戶命令。
對于正確的用戶命令,車載主機根據具體命令內容執(zhí)行對應的響應,并將響應結果轉換成符合通信協議的數據發(fā)送給診斷維護終端;診斷維護終端接收數據并提取出車載主機的響應結果,將響應結果及時顯示在診斷維護終端的界面上供用戶查看。
對于錯誤的用戶命令,車載主機識別錯誤類型,回復具有針對性的提示信息,并將提示信息轉換成符合通信協議的數據發(fā)送給診斷維護終端;診斷維護終端接收數據,提取出車載主機的提示信息,顯示在診斷維護終端的界面上,及時提示用戶輸入命令有誤,指導用戶執(zhí)行正確的操作。
圖1 列控車載主機診斷維護終端
診斷維護終端軟件分為:通信層、邏輯處理層和顯示層三層。
3.1.1 通信層
通信層包含接收和發(fā)送數據模塊。接收數據模塊通過USB-CAN轉換設備從車載主機接收數據,傳給邏輯處理層的接收數據管理模塊。發(fā)送數據模塊從邏輯處理層的發(fā)送數據管理模塊獲取數據,通過USB-CAN轉換設備發(fā)送車載數據。
3.1.2 邏輯處理層
邏輯處理層包含如下模塊。
1.響應用戶操作模塊。接收用戶指令,并傳遞給發(fā)送數據管理模塊。
2.接收數據管理模塊。從通信層的接收數據模塊得到車載主機數據,提供給處理數據模塊進行解析和邏輯處理。
3.處理數據模塊。從接收數據管理模塊提供的車載主機數據中提取報文幀或空閑幀,對其進行數據類型檢查、數據長度檢查、時間戳檢查、CRC校驗等,如果檢查不通過,則置工作狀態(tài)為初始狀態(tài);從通過檢查的報文幀中提取有效數據,根據GBK編碼將有效數據轉換成可以顯示的字符串,提供給界面顯示數據管理模塊;使用通過檢查的空閑幀來判斷與車載主機的通信是否超時,如果超時則置工作狀態(tài)為初始化狀態(tài)。
4.保持通信連接模塊。與車載主機建立通信連接;當連接斷開時,主動與車載主機重新建立通信連接;連接正常時,當沒有指令需要發(fā)送給車載主機時,定時組建保持連接幀并傳遞給發(fā)送數據管理模塊,以保持與車載主機的通信連接。
5.發(fā)送數據管理模塊。從保持通信連接模塊得到需要發(fā)給車載主機的數據,從響應用戶操作模塊得到需要發(fā)給車載主機的用戶指令,調用通信層的發(fā)送數據模塊將數據發(fā)給車載主機,同時向界面顯示數據管理模塊提供需要界面顯示的用戶指令。
6.界面顯示數據管理模塊。從處理數據模塊獲取車載主機數據,從發(fā)送數據管理模塊獲取用戶指令,以時間先后順序依次顯示在診斷維護終端的界面上,便于用戶查看和指導用戶操作。
3.1.3 顯示層
顯示層包含界面顯示收發(fā)信息模塊和更新界面控件屬性模塊。界面顯示收發(fā)信息模塊,從邏輯處理層的界面顯示數據管理模塊獲取需要界面顯示的數據,并將數據依次顯示在界面上,供用戶查看交互過程或指導用戶執(zhí)行具體的操作。更新界面控件屬性模塊,負責響應用戶操作,并根據用戶操作設置診斷維護界面控件的使能屬性,保證用戶可以執(zhí)行什么操作和不可以執(zhí)行什么操作。
診斷維護終端與車載主機通信中使用了4種消息:請求幀、保持通信幀、報文幀和空閑幀。診斷維護終端使用請求幀與車載主機建立通信連接,并發(fā)送用戶指令;在通信連接建立后,在沒有用戶指令需要發(fā)送時,保持連接幀與車載主機正常的通信連接。車載主機使用空閑幀與診斷維護終端建立通信連接,當沒有數據需要發(fā)送時,使用空閑幀與診斷維護終端保持通信連接;通信連接建立并接收到用戶指令后,有數據需要發(fā)送時使用報文幀將數據發(fā)送給診斷維護終端。
診斷維護終端邏輯處理層的保持通信連接模塊采用狀態(tài)機的設計思想,包括初始狀態(tài)、等待啟動命令狀態(tài)、建立通信狀態(tài)和保持通信狀態(tài)。
1.初始狀態(tài):診斷維護終端剛啟動時,處于初始狀態(tài),初始化所有全局變量,清空發(fā)送和接收數據緩沖區(qū),并轉入等待啟動命令狀態(tài)。
2.等待啟動命令狀態(tài):診斷維護終端等待車載主機的啟動命令,如果沒有收到啟動命令,保持該狀態(tài)不變;如果收到啟動命令,則轉入建立通信狀態(tài);如果收到的數據存在數據類型錯誤、數據長度錯誤、時間戳錯誤、CRC校驗錯誤等情況時,轉入初始狀態(tài)。
3.建立通信狀態(tài):診斷維護終端向車載主機發(fā)送建立通信連接的請求幀,并等待車載主機回復通信連接成功的應答,如果收到則轉入保持通信狀態(tài),否則保持當前狀態(tài)不變;如果收到的數據存在數據類型錯誤、數據長度錯誤、時間戳錯誤、CRC校驗錯誤等情況時,轉入初始狀態(tài)。
4.保持通信狀態(tài):診斷維護終端從車載主機接收數據、解析數據,并在界面顯示車載主機的提示信息;響應用戶的操作并將用戶操作發(fā)送給車載主機;如果收到的數據存在數據類型錯誤、數據長度錯誤、時間戳錯誤、CRC校驗錯誤等情況時,轉入初始狀態(tài);如果在規(guī)定時間內沒有收到車載主機的任何有效數據,認為通信異常,也轉入初始狀態(tài)。保持通信連接模塊狀態(tài)機如圖2所示。
圖2 保持通信連接模塊狀態(tài)機
下載配置參數文件的過程:人工加載配置參數文件;診斷維護終端自動將配置參數文件分割為若干個請求幀;提取一條請求幀,將請求幀分割為若干個CAN幀,依次發(fā)送給車載主機;判斷是否存在尚未發(fā)送給車載主機的請求幀,如果存在則按上一步方法將請求幀發(fā)送出去,否則結束流程。下載配置參數文件過程如圖3所示。
圖3 下載配置參數文件過程
當用戶需要查看配置參數描述信息、修改制定的配置參數、下載應用故障記錄或清空車載設備存儲的應用故障記錄時,只需要在診斷維護終端界面輸入指定的指令并發(fā)送給車載主機,車載主機收到指令后向診斷維護終端回復對應的信息。
透傳用戶命令的一般流程:用戶在診斷維護終端界面輸入指令;診斷維護終端自動將輸入的指令組建成請求幀,并分割為若干個CAN幀,依次發(fā)送給車載主機。透傳用戶指令過程如圖4所示。
透傳用戶指令過程
用戶在診斷維護終端界面輸入指令,并發(fā)送給車載主機;車載主機收到后判斷用戶指令有效性,如果是無效的用戶指令,車載主機提示用戶輸入指令為無效;如果是有效的用戶指令,車載主機根據指令回復對應信息。診斷維護終端接收到車載主機的回復信息并顯示。該信息的流程為:診斷維護終端接收到車載主機發(fā)送的報文幀,對報文幀進行幀序號檢查、長度檢查、時間戳檢查和CRC校驗。如果通過以上檢查,將從報文幀中提取有效數據,根據GBK編碼將有效數據轉換成字符串,并在界面上顯示字符串。界面顯示車載主機回復信息過程如圖5所示。
顯示車載主機回復信息過程
GBK編碼是在GB2312-80標準基礎上的內碼擴展規(guī)范,使用了雙字節(jié)編碼方案,其編碼范圍從8140至FEFE(剔除xx7F),共23940個碼位,收錄了21003個漢字,完全兼容GB2312-80標準,支持 國 際 標 準 ISO/IEC10646-1 和 國 家 標 準GB13000-1中的全部中日韓漢字,并包含了BIG5編碼中的所有漢字。
在數據通信中,經常存在丟失、重復、亂序、亂碼等情況,診斷維護終端通過判斷時間戳是否向上增長、比較CRC校驗值是否一致、判斷應答幀序號是否向上連續(xù)、判斷數據長度是否是期望的長度等措施,解決數據通信中可能存在的問題。
用戶在診斷維護終端界面輸入指令,點擊發(fā)送按鈕,把用戶指令透傳給車載主機,由車載主機判斷用戶指令的有效性并做出響應。因此,當需要增加新的用戶指令時,診斷維護終端并不需要做大的修改,只需要車載主機增加對其響應。
用戶在診斷維護終端界面上輸入指令,點擊發(fā)送按鈕將指令發(fā)送給車載主機,發(fā)送出去的用戶指令顯示在交互窗口中。車載主機收到用戶指令并對指令進行有效性判斷,對于無效的用戶指令,車載主機回復指令無效,診斷維護終端在交互窗口中顯示指令無效的提示信息。對于有效的用戶指令,車載主機將根據指令內容回復指定的信息,且在診斷維護終端交互窗口中顯示。通過這種一問一答的方式,診斷維護終端指導用戶向車載主機發(fā)送正確的指令,對車載主機進行操作。
診斷維護終端一方面需要將交互的信息及時顯示在界面上,另一方面需要接收、處理和發(fā)送數據。如果將所有任務都放在UI線程中,有時會使界面卡死。因此,采用多線程的方法搭建軟件結構,設計UI和工作2個線程。UI線程負責更新界面顯示。工作線程負責接收數據、處理數據和發(fā)送數據。針對工作線程有信息需要界面顯示,由于這是工作線程和UI線程的跨線程操作,使用代理方法將工作線程的信息顯示在界面上?;驹瓌t就是工作線程負責所有的運算,UI線程負責純粹的界面更新。
本文介紹了一種用于列控車載設備的診斷維護終端,可以用于列控車載設備下載參數,還可以用于下載列控車載設備存儲的應用故障記錄,是列控車載設備日常運營維護、故障分析的重要工具。
[1] 中國鐵路總公司.CTCS-2/3級列控車載設備人機界面(DMI)顯示暫行規(guī)范[S].中國鐵路總公司,2014.
[2] 北京全路通信信號研究設計院有限公司.CTCS3-300T列控車載設備DMI司機操作手冊[S].北京全路通信信號研究設計院有限公司,2013.