趙 貝,張雁勛,王晉斌,梁智勇
(中車(chē)大同電力機(jī)車(chē)有限公司,山西 大同 037038)
電力蓄電池牽引車(chē)(以下簡(jiǎn)稱(chēng)牽引車(chē))是中車(chē)大同電力機(jī)車(chē)有限公司自主研發(fā),用于段內(nèi)調(diào)度地鐵列車(chē)[1]、牽引平板車(chē)運(yùn)輸貨物等,也可兼顧列車(chē)救援?,F(xiàn)階段機(jī)車(chē)顯示界面的設(shè)計(jì)還沒(méi)有一種較為快捷的導(dǎo)入數(shù)據(jù)流的方法,為實(shí)現(xiàn)顯示屏設(shè)計(jì)自主高效研發(fā),大同機(jī)車(chē)廠提出以牽引車(chē)為起點(diǎn),自主研發(fā)一套可快速導(dǎo)入變量的、完整的、可適用于所有車(chē)型的顯示屏系統(tǒng),為設(shè)計(jì)及售后提供便利。
TCMS(微機(jī)網(wǎng)絡(luò)控制系統(tǒng))包括DDU(司機(jī)顯示單元)、CCU(中央控制單元)、RIOM(遠(yuǎn)程輸入輸出模塊)、TCU(牽引控制單元)GW(網(wǎng)關(guān))等部分。車(chē)輛網(wǎng)采用MVB(多功能車(chē)輛)總線。
其中,CCU完成MVB網(wǎng)絡(luò)總線管理功能。RIOM負(fù)責(zé)采集現(xiàn)場(chǎng)信息和數(shù)據(jù),同時(shí)驅(qū)動(dòng)相應(yīng)部件現(xiàn)場(chǎng)執(zhí)行。DDU位于牽引車(chē)司機(jī)室操作臺(tái),在車(chē)輛運(yùn)行過(guò)程中顯示車(chē)輛狀態(tài)信息、故障信息和操作提示,同時(shí)完成地鐵車(chē)輛的運(yùn)行控制。另外司機(jī)通過(guò) DDU也可對(duì)車(chē)輛進(jìn)行參數(shù)設(shè)置及功能測(cè)試。
牽引車(chē)顯示屏采用兩臺(tái) 12.1英寸的 PIXY INC-91,INC-91支持XGA方案(1024*768像素)。INC-91是基于移動(dòng)微機(jī)的可視化系統(tǒng),主要應(yīng)用在惡劣的條件或戶(hù)外工業(yè)環(huán)境的移動(dòng)平臺(tái)上。INC-91提供兩種不同類(lèi)型的MVB接口: ESD(電氣短距離介質(zhì))和 EMD(電氣中距離介質(zhì)),接口通信存儲(chǔ)器大小為 256KBit*16,可作為一個(gè) 16bit的字的端口進(jìn)行存取。
開(kāi)發(fā)環(huán)境:(1)界面框架:在 VMware Workstation虛擬機(jī)中,安裝fedora系統(tǒng),搭建QT開(kāi)發(fā)環(huán)境;(2)變量快速定義:SpringBoot后端開(kāi)發(fā)框架,Bootstrap web前端開(kāi)發(fā)框架。
編譯環(huán)境:Oracle VM VirtualBox軟件在Windows環(huán)境下虛擬Linux Debian操作系統(tǒng)。將開(kāi)發(fā)好的程序放置到此虛擬機(jī)中進(jìn)行編譯,生成的可執(zhí)行文件即可在PIXY顯示屏中運(yùn)行。
人機(jī)交互流程[2]如圖1所示。顯示屏上電后,系統(tǒng)讀取配置文件[3],判斷哪臺(tái)顯示屏為主屏,并讀取進(jìn)入某些頁(yè)面所需的密碼等數(shù)據(jù);實(shí)例主對(duì)話(huà)框,顯示主界面。系統(tǒng)可通過(guò)顯示屏底部按鍵進(jìn)入到二級(jí)界面。
圖1 人機(jī)交互流程Fig.1 Human computer interaction process
(1)重寫(xiě)控件
為方便各頁(yè)面調(diào)用,重寫(xiě)按鈕、柱狀圖等控件。例如,柱狀圖控件繼承自 QWidget,重繪刻度、數(shù)字文本及顏色顯示區(qū)域。
(2)主對(duì)話(huà)框
自定義主對(duì)話(huà)框,主對(duì)話(huà)框繼承自 QDialog,實(shí)現(xiàn)端口導(dǎo)入及數(shù)據(jù)的刷新。其中,消息映射宏OnUpdatePage可以使相應(yīng)界面響應(yīng)界面更新的消息,并調(diào)用函數(shù) OnUpdatePage(),實(shí)現(xiàn)實(shí)時(shí)刷新?tīng)恳?chē)所需要顯示的圖標(biāo)、數(shù)據(jù)、故障信息等。
(3)頁(yè)面跳轉(zhuǎn)
在程序中添加二級(jí)頁(yè)面,使用槽函數(shù)(slot)實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)。
(4)界面繪制
添加各控件到界面,進(jìn)行合理布局。
實(shí)現(xiàn)通信需同步端口數(shù)據(jù)變量(見(jiàn)圖1),而數(shù)據(jù)變量需先按一定格式定義,再一一初始化。變量定義強(qiáng)依賴(lài)于制定好的數(shù)據(jù)流 Excel文件,且工作量十分龐大。數(shù)據(jù)流文件定義了設(shè)備端口地址、偏移位、變量類(lèi)型、變量名等。不同機(jī)車(chē)的數(shù)據(jù)流內(nèi)容不盡相同。為提升開(kāi)發(fā)效率,提高顯示屏系統(tǒng)框架的通用性,提高程序中變量定義的準(zhǔn)確度,研究并開(kāi)發(fā)了一種快速數(shù)據(jù)流變量提取工具,主要結(jié)構(gòu)如圖2所示。
圖2 快速數(shù)據(jù)流變量提取系統(tǒng)結(jié)構(gòu)Fig.2 Structure of variable extraction system for fast data flow
(1)在利用框架插件 Bootstrap web[4]開(kāi)發(fā)的web界面上(即表示層)輸入所需參數(shù)(數(shù)據(jù)流文檔總頁(yè)數(shù)、所需提取變量所包含的頁(yè)面及數(shù)據(jù)流文件名等)。
(2)利用Ajax[5]交互式網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)將本機(jī)地址和參數(shù)傳給后臺(tái)controller控制層。
(3)后臺(tái) controller控制層將封裝后的參數(shù)對(duì)象傳遞給service業(yè)務(wù)層進(jìn)行處理。
(4)service業(yè)務(wù)層對(duì)提交的數(shù)據(jù)流文檔每個(gè)工作表的每一行進(jìn)行遍歷,分析計(jì)算后得到每行數(shù)據(jù)所映射的顯示屏程序所需變量,例如提取數(shù)據(jù)流文檔中所有的變量類(lèi)型和變量名,并對(duì)其賦初值。
(5)導(dǎo)出顯示屏程序所需變量的文件(Excel),如圖3所示,初始化變量需要配置變量類(lèi)型、變量名及初始值。將所需行導(dǎo)入程序新建的變量類(lèi)中,即完成了對(duì)變量的初始化。
圖3 提取初始化變量文件示意圖Fig.3 Schematic diagram of extracting initialization variable
該工具在降低人工提取變量出錯(cuò)率的同時(shí),大大提高了顯示屏程序開(kāi)發(fā)效率,同時(shí)具有適用于所有車(chē)型的特點(diǎn)。
車(chē)輛網(wǎng)采用 MVB總線,用于整個(gè)車(chē)輛網(wǎng)內(nèi)部的智能電子設(shè)備的互連,實(shí)現(xiàn)本車(chē)廂內(nèi)部的數(shù)據(jù)交換[6]。蓄電池車(chē)MVB總線采用EMD傳輸,最多可支持32個(gè)設(shè)備。
通信線程的處理(如圖1)即DDU與其他設(shè)備的數(shù)據(jù)交互,需要調(diào)用MVB驅(qū)動(dòng)函數(shù)來(lái)實(shí)現(xiàn)。MVB通信基本流程如圖4所示。
圖4 MVB通信流程圖Fig.4 MVB communication flow chart
(1)MVB初始化
在程序最開(kāi)始調(diào)用初始化函數(shù),自動(dòng)完成MVB設(shè)備開(kāi)啟、寄存器配置等工作。初始化完成后,會(huì)返回一個(gè)值,提示初始化狀態(tài)是否完成。
(2)端口配置
MVB初始化完成后,需在主程序Dialog類(lèi)的構(gòu)造函數(shù)程序中,按照MVB端口配置函數(shù)添加TCU、CCU等設(shè)備。mvb_AddPort()包括四個(gè)參數(shù):端口已配好的地址、端口類(lèi)型、源/宿端口及緩存區(qū)地址。
(3)啟動(dòng)工作模式
MVB設(shè)備工作狀態(tài)函數(shù) mvb_ChangeState()有三種狀態(tài):停止?fàn)顟B(tài)、配置狀態(tài)及工作狀態(tài)。此時(shí),修改MVB設(shè)備為工作狀態(tài)。
(4)讀端口
添加設(shè)備后,還需讀取端口的變量。mvb_GetPort()包括兩個(gè)參數(shù):端口地址及變量所在偏移位。下圖5中g(shù)etBool等函數(shù)是類(lèi)crrcMvb中根據(jù)讀端口函數(shù)及不同類(lèi)型變量重新定義的函數(shù),可用快速提取變量的方法,配置變量名、調(diào)用函數(shù)、變量所在端口等。或根據(jù)變量類(lèi)型轉(zhuǎn)換成對(duì)應(yīng)的調(diào)取變量函數(shù)等。
圖5 提取端口變量文件示意圖Fig.5 Schematic diagram of extracting port variable
(5)寫(xiě)端口
DDU向其他設(shè)備發(fā)送數(shù)據(jù),則需調(diào)用寫(xiě)端口函數(shù)。mvb_PutPort()包括三個(gè)參數(shù):設(shè)備地址、變量偏移位及變量名。
界面實(shí)時(shí)刷新線程和通信線程即保證了顯示界面數(shù)據(jù)的實(shí)時(shí)性。
程序完成后,需進(jìn)行編譯(主要指令為 qmake→make clean→make),最終生成PIXY屏幕可執(zhí)行文件。
在Linux系統(tǒng)下采用QT軟件完成了電力蓄電池牽引車(chē)顯示屏設(shè)計(jì),實(shí)現(xiàn)了在車(chē)輛運(yùn)行過(guò)程中實(shí)時(shí)顯示車(chē)輛信息和操作提示。蓄電池牽引車(chē)現(xiàn)已投入應(yīng)用,良好穩(wěn)定的界面設(shè)計(jì)為工作人員提供了便利,同時(shí)也為售后提供了快速便捷保障;易移植的顯示屏框架及變量快速導(dǎo)入的方法,也為大同機(jī)車(chē)廠后續(xù)自主化顯示屏研究提供了基礎(chǔ)。