趙 貝,張雁勛,王晉斌,梁智勇
(中車大同電力機車有限公司,山西 大同 037038)
電力蓄電池牽引車(以下簡稱牽引車)是中車大同電力機車有限公司自主研發,用于段內調度地鐵列車[1]、牽引平板車運輸貨物等,也可兼顧列車救援。現階段機車顯示界面的設計還沒有一種較為快捷的導入數據流的方法,為實現顯示屏設計自主高效研發,大同機車廠提出以牽引車為起點,自主研發一套可快速導入變量的、完整的、可適用于所有車型的顯示屏系統,為設計及售后提供便利。
TCMS(微機網絡控制系統)包括DDU(司機顯示單元)、CCU(中央控制單元)、RIOM(遠程輸入輸出模塊)、TCU(牽引控制單元)GW(網關)等部分。車輛網采用MVB(多功能車輛)總線。
其中,CCU完成MVB網絡總線管理功能。RIOM負責采集現場信息和數據,同時驅動相應部件現場執行。DDU位于牽引車司機室操作臺,在車輛運行過程中顯示車輛狀態信息、故障信息和操作提示,同時完成地鐵車輛的運行控制。另外司機通過 DDU也可對車輛進行參數設置及功能測試。
牽引車顯示屏采用兩臺 12.1英寸的 PIXY INC-91,INC-91支持XGA方案(1024*768像素)。INC-91是基于移動微機的可視化系統,主要應用在惡劣的條件或戶外工業環境的移動平臺上。INC-91提供兩種不同類型的MVB接口: ESD(電氣短距離介質)和 EMD(電氣中距離介質),接口通信存儲器大小為 256KBit*16,可作為一個 16bit的字的端口進行存取。
開發環境:(1)界面框架:在 VMware Workstation虛擬機中,安裝fedora系統,搭建QT開發環境;(2)變量快速定義:SpringBoot后端開發框架,Bootstrap web前端開發框架。
編譯環境:Oracle VM VirtualBox軟件在Windows環境下虛擬Linux Debian操作系統。將開發好的程序放置到此虛擬機中進行編譯,生成的可執行文件即可在PIXY顯示屏中運行。
人機交互流程[2]如圖1所示。顯示屏上電后,系統讀取配置文件[3],判斷哪臺顯示屏為主屏,并讀取進入某些頁面所需的密碼等數據;實例主對話框,顯示主界面。系統可通過顯示屏底部按鍵進入到二級界面。

圖1 人機交互流程Fig.1 Human computer interaction process
(1)重寫控件
為方便各頁面調用,重寫按鈕、柱狀圖等控件。例如,柱狀圖控件繼承自 QWidget,重繪刻度、數字文本及顏色顯示區域。
(2)主對話框
自定義主對話框,主對話框繼承自 QDialog,實現端口導入及數據的刷新。其中,消息映射宏OnUpdatePage可以使相應界面響應界面更新的消息,并調用函數 OnUpdatePage(),實現實時刷新牽引車所需要顯示的圖標、數據、故障信息等。
(3)頁面跳轉
在程序中添加二級頁面,使用槽函數(slot)實現頁面的跳轉。
(4)界面繪制
添加各控件到界面,進行合理布局。
實現通信需同步端口數據變量(見圖1),而數據變量需先按一定格式定義,再一一初始化。變量定義強依賴于制定好的數據流 Excel文件,且工作量十分龐大。數據流文件定義了設備端口地址、偏移位、變量類型、變量名等。不同機車的數據流內容不盡相同。為提升開發效率,提高顯示屏系統框架的通用性,提高程序中變量定義的準確度,研究并開發了一種快速數據流變量提取工具,主要結構如圖2所示。

圖2 快速數據流變量提取系統結構Fig.2 Structure of variable extraction system for fast data flow
(1)在利用框架插件 Bootstrap web[4]開發的web界面上(即表示層)輸入所需參數(數據流文檔總頁數、所需提取變量所包含的頁面及數據流文件名等)。
(2)利用Ajax[5]交互式網頁開發技術將本機地址和參數傳給后臺controller控制層。
(3)后臺 controller控制層將封裝后的參數對象傳遞給service業務層進行處理。
(4)service業務層對提交的數據流文檔每個工作表的每一行進行遍歷,分析計算后得到每行數據所映射的顯示屏程序所需變量,例如提取數據流文檔中所有的變量類型和變量名,并對其賦初值。
(5)導出顯示屏程序所需變量的文件(Excel),如圖3所示,初始化變量需要配置變量類型、變量名及初始值。將所需行導入程序新建的變量類中,即完成了對變量的初始化。

圖3 提取初始化變量文件示意圖Fig.3 Schematic diagram of extracting initialization variable
該工具在降低人工提取變量出錯率的同時,大大提高了顯示屏程序開發效率,同時具有適用于所有車型的特點。
車輛網采用 MVB總線,用于整個車輛網內部的智能電子設備的互連,實現本車廂內部的數據交換[6]。蓄電池車MVB總線采用EMD傳輸,最多可支持32個設備。
通信線程的處理(如圖1)即DDU與其他設備的數據交互,需要調用MVB驅動函數來實現。MVB通信基本流程如圖4所示。

圖4 MVB通信流程圖Fig.4 MVB communication flow chart
(1)MVB初始化
在程序最開始調用初始化函數,自動完成MVB設備開啟、寄存器配置等工作。初始化完成后,會返回一個值,提示初始化狀態是否完成。
(2)端口配置
MVB初始化完成后,需在主程序Dialog類的構造函數程序中,按照MVB端口配置函數添加TCU、CCU等設備。mvb_AddPort()包括四個參數:端口已配好的地址、端口類型、源/宿端口及緩存區地址。
(3)啟動工作模式
MVB設備工作狀態函數 mvb_ChangeState()有三種狀態:停止狀態、配置狀態及工作狀態。此時,修改MVB設備為工作狀態。
(4)讀端口
添加設備后,還需讀取端口的變量。mvb_GetPort()包括兩個參數:端口地址及變量所在偏移位。下圖5中getBool等函數是類crrcMvb中根據讀端口函數及不同類型變量重新定義的函數,可用快速提取變量的方法,配置變量名、調用函數、變量所在端口等。或根據變量類型轉換成對應的調取變量函數等。

圖5 提取端口變量文件示意圖Fig.5 Schematic diagram of extracting port variable
(5)寫端口
DDU向其他設備發送數據,則需調用寫端口函數。mvb_PutPort()包括三個參數:設備地址、變量偏移位及變量名。
界面實時刷新線程和通信線程即保證了顯示界面數據的實時性。
程序完成后,需進行編譯(主要指令為 qmake→make clean→make),最終生成PIXY屏幕可執行文件。
在Linux系統下采用QT軟件完成了電力蓄電池牽引車顯示屏設計,實現了在車輛運行過程中實時顯示車輛信息和操作提示。蓄電池牽引車現已投入應用,良好穩定的界面設計為工作人員提供了便利,同時也為售后提供了快速便捷保障;易移植的顯示屏框架及變量快速導入的方法,也為大同機車廠后續自主化顯示屏研究提供了基礎。