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