【摘 要】設(shè)計(jì)一種基于Linux Qt平臺(tái)的國(guó)內(nèi)某型地鐵人機(jī)界面方案,綜合考慮列車運(yùn)行的環(huán)境,系統(tǒng)采用性能優(yōu)越的X86架構(gòu)作為硬件平臺(tái)、穩(wěn)定性強(qiáng)的Linux系統(tǒng)作為軟件平臺(tái),在此基礎(chǔ)上利用開源的圖形界面庫Qt開發(fā)界面程序。通過在硬件平臺(tái)上的實(shí)際應(yīng)用,驗(yàn)證了方案的可靠性與穩(wěn)定性。
【關(guān)鍵詞】人機(jī)界面,Qt,x86架構(gòu),Linux系統(tǒng)
一、引言
車輛人機(jī)界面(Human Machine Interface,HMI)是列車網(wǎng)絡(luò)控制與監(jiān)控系統(tǒng)的一個(gè)重要組成部分,是列車駕駛員和維護(hù)人員操作列車的窗口。它不同于傳統(tǒng)司機(jī)室以模擬儀表和指示燈為主的顯示方式[1],這種基于平板顯示器和微機(jī)結(jié)合構(gòu)成的智能終端,具有信息顯示、參數(shù)設(shè)定、功能測(cè)試和數(shù)據(jù)轉(zhuǎn)存等功能,它為駕駛?cè)藛T實(shí)現(xiàn)對(duì)車輛各子系統(tǒng)狀態(tài)的實(shí)時(shí)監(jiān)測(cè)與控制,提供了一個(gè)更加友好、簡(jiǎn)潔、標(biāo)準(zhǔn)化的界面。
基于上述原因,本文提出了一種城市地鐵車輛的人機(jī)界面設(shè)計(jì)方案,方案采用Intel X86處理器作為硬件平臺(tái),以嵌入式Linux系統(tǒng)作為軟件平臺(tái),在此基礎(chǔ)上采用開源的圖形界面庫Qt開發(fā)HMI應(yīng)用程序。通過在硬件平臺(tái)上的實(shí)際應(yīng)用,驗(yàn)證了方案的可靠性與穩(wěn)定性。
二、系統(tǒng)方案
(一)硬件平臺(tái)的選擇
當(dāng)下的硬件平臺(tái)主要有x86架構(gòu)和ARM架構(gòu)兩種選擇。ARM架構(gòu)的硬件平臺(tái)相較于x86架構(gòu),具有功耗低的特點(diǎn),但在硬件資源方面,x86架構(gòu)具有明顯的優(yōu)勢(shì)[2],列車對(duì)功耗的要求并不像手機(jī)等移動(dòng)設(shè)備那么苛刻,反而在人機(jī)界面的性能方面要求比較高,因此X86架構(gòu)的硬件平臺(tái)更適合做車載人機(jī)界面的開發(fā)。另外,行車過程中復(fù)雜的電磁環(huán)境和強(qiáng)烈的機(jī)械振動(dòng),要求顯示器硬件有很好的電磁兼容性和抗振能力,有比較大的存儲(chǔ)能力。綜合上述因素,選擇了基于Intel X86平臺(tái)的PIXY INC90系列顯示屏作為硬件平臺(tái)。
(二)軟件平臺(tái)的選擇
Linux操作系統(tǒng)完全沿襲了Unix系統(tǒng)的架構(gòu),在網(wǎng)絡(luò)通信方面的效率和功能都很突出[3];Linux是開源的操作系統(tǒng),設(shè)計(jì)者可以根據(jù)自己的開發(fā)需求在此系統(tǒng)上進(jìn)行二次開發(fā),且免費(fèi)使用;列車人機(jī)界面可使用的硬件資源相對(duì)較少并且要求上電時(shí)間短,綜合上述因素此處操作系統(tǒng)選擇了嵌人式Linux。
(三)編程語言的選擇
Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面庫,由挪威TroUTeeh公司出品,它支持絕大部分類Unix系統(tǒng)和Windows平臺(tái),擁有良好的跨平臺(tái)特性[4]。Qt/Embedded Linux,為嵌入式系統(tǒng)的開發(fā)人員搭建了一套完善的窗口系統(tǒng)和開發(fā)平臺(tái)。 Qt還提供了一種稱為signal/slot(信號(hào)/槽)的機(jī)制替代了一般Gui庫中所使用的回調(diào)函數(shù)機(jī)制。
三、開發(fā)環(huán)境搭建
硬件平臺(tái)選擇PIXY INC-90顯示器,顯示器搭載Linux操作系統(tǒng),以O(shè)racle VM VirtualBox和Qt creater作為軟件仿真、編譯和開發(fā)平臺(tái),開發(fā)的應(yīng)用程序經(jīng)過交叉編譯生成可執(zhí)行文件后,通過Win Scp軟件導(dǎo)入顯示器,再用SSH服務(wù)軟件遠(yuǎn)程控制顯示屏,執(zhí)行目標(biāo)程序[5]。
四、人機(jī)界面設(shè)計(jì)
(一)設(shè)計(jì)流程
控制電源DC110V接通后,兩個(gè)司機(jī)室的HMI同時(shí)開啟。激活端司機(jī)室的HMI正常顯示,非激活端司機(jī)室的HMI顯示黑屏,主顯示界面根據(jù)用戶操作需求分為運(yùn)行模式與檢修模式,運(yùn)行模式主要面對(duì)司機(jī),檢修模式主要面對(duì)檢修技術(shù)人員,運(yùn)行模式切換至檢修模式需輸入密碼。設(shè)計(jì)流程如圖1所示。
(二) 界面繪制實(shí)現(xiàn)
總程序采取順序執(zhí)行的方式,在參數(shù)初始化之前,首先執(zhí)行MVB通訊模塊、亮度傳感器檢測(cè),以及判斷串口配置文件是否讀取成功程序,若成功,則進(jìn)行參數(shù)初始化,若失敗,則彈出故障提示界面,提示駕駛員或維護(hù)人員按故障提示進(jìn)行操作。部分檢測(cè)程序代碼如下:
if (engine->init(0x12, 5) != PIXYMVB_OK) //判斷MVB通訊模塊是否正常
{ FaultReason = 1; //故障原因?yàn)?
showFaultHintScreen(JudgeFaultReason); //失敗,根據(jù)故障原因,顯示故障提示界面
}
QFileInfo fileInfo(“/dev/ttyUSB_SC”); //讀取顯示器亮度硬件配置文件
if (!fileInfo.exists()) //判斷硬件是否存在
{FaultReason =2; //故障原因?yàn)?
showFaultHintScreen(JudgeFaultReason); //失敗,顯示故障提示界面
}
圖1 設(shè)計(jì)流程圖
1.信號(hào)/槽(signal/slot)機(jī)制
本文提出的人機(jī)界面設(shè)計(jì)方案采用多級(jí)界面呈現(xiàn)的形式,界面之間的切換通過信號(hào)/槽機(jī)制實(shí)現(xiàn),切換功能實(shí)現(xiàn)部分代碼如下:
Class QPushButton; //定義按鍵類
QPushButton* Button; //聲明一個(gè)按鍵指針
Button –>setGeometry(x,y,width,height); //定義按鍵的坐標(biāo)、長(zhǎng)寬參數(shù)
Button->setText(QString); //設(shè)置按鍵顯示文本
Private signals:
Void SwitchScreen(); //聲明切換界面的信號(hào)
Private slots:
Void JumpToTargetScreen(); //聲明跳轉(zhuǎn)槽函數(shù)
Connect(Button,released(),this, SwitchScreen ()); //按鍵被點(diǎn)擊且松開時(shí),觸發(fā)信號(hào)
Connect(screen, SwitchScreen (),this, JumpToTargetScreen ()); //信號(hào)調(diào)用槽函數(shù),實(shí)現(xiàn)跳轉(zhuǎn)到目標(biāo)界面
2.靜態(tài)界面繪制
顯示器啟動(dòng)后進(jìn)入主顯示界面,主界面主要分為三部分:最上端的頁眉,最下端的頁腳,以及顯示區(qū)域最大,位于中部的顯示畫面。其中,頁眉、頁腳的顯示內(nèi)容基本固定,不因界面切換而改變;顯示界面的內(nèi)容會(huì)隨界面切換而變化。
頁眉繪制的部分代碼如下:
class Controller : public QWidget //繼承自Qt基礎(chǔ)類 QWidget
Controller::init()
{
topHeader = new PTopHeader(this); //在內(nèi)存中new一個(gè)空間
topHeader->setGeometry(x,y,width,height);//設(shè)置坐標(biāo)、長(zhǎng)寬參數(shù)
topHeader->show();//初始化為顯示狀態(tài)
}
頁眉顯示車號(hào)、畫面號(hào)及時(shí)間信息,在進(jìn)行頁面切換時(shí),保持頁眉一直處于Show()狀態(tài);顯示畫面主要包括車輛當(dāng)前站,終點(diǎn)站,速度,網(wǎng)壓以及子系統(tǒng)狀態(tài)。
(三)MVB通信
MVB是用于在一個(gè)固定編組的幾個(gè)車輛內(nèi)連接各種可編程設(shè)備的車輛總線。顯示器作為車輛總線的一個(gè)子系統(tǒng),通過MVB總線實(shí)現(xiàn)同VCU的通信,通訊程序部分代碼如下:
Void GetCommData() //獲取宿端口數(shù)據(jù)
Map.insert(); //把端口地址和獲取的數(shù)據(jù)作為鍵值對(duì)插入容器中
void GetOnePortData( wantPortAddress); //通過端口地址讀取容器中的數(shù)據(jù)用于顯示
五、結(jié)束語
結(jié)合公司的實(shí)際項(xiàng)目,本文設(shè)計(jì)了一種城市地鐵車輛的人機(jī)界面方案。本文對(duì)軟硬件的選擇及系統(tǒng)平臺(tái)的搭建等方面進(jìn)行了闡述,并且著重描述了軟件系統(tǒng)的開發(fā)流程。以PIXY INC-90系列顯示器為應(yīng)用平臺(tái),利用功能強(qiáng)大的開源圖形庫Qt進(jìn)行系統(tǒng)開發(fā)設(shè)計(jì),最終實(shí)現(xiàn)了地鐵列車人機(jī)界面系統(tǒng)。通過在顯示器上實(shí)際應(yīng)用,驗(yàn)證了本文方案的可靠與穩(wěn)定。
參考文獻(xiàn)
[1] 客金坤,梅櫻,郭紅衛(wèi),等.基于圖形化編程語言的列車人機(jī)界面設(shè)計(jì)[J].都市快軌交通,2011,24(1).
[2] 任亞飛,唐濤.基于嵌入式Linux的列控系統(tǒng)車載人機(jī)界面的實(shí)現(xiàn)[J].鐵路計(jì)算機(jī)應(yīng)用,2005,14(12).
[3] 楊志偉,曾艷姍.基于Linux的ACM在線評(píng)測(cè)系統(tǒng)研究[J].計(jì)算機(jī)與現(xiàn)代化,2010(6).
[4] Jasmin Blanchette, Mark Summerfield. C++ GUI Programming with Qt 4, 2nd edition. 2008.8
[5] 劉超,周紀(jì)超,張紅星. 基于Linux Qt的列車人機(jī)界面設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)與現(xiàn)代化。2013,4.