朱緒昌 羅云龍 胡延偉(蘭州交通大學(xué)電子與信息工程學(xué)院,甘肅 蘭州 730070)
?
基于QT的道岔轉(zhuǎn)轍機(jī)測(cè)試界面系統(tǒng)設(shè)計(jì)
朱緒昌 羅云龍 胡延偉
(蘭州交通大學(xué)電子與信息工程學(xué)院,甘肅 蘭州 730070)
摘 要:該設(shè)計(jì)提出了一種基于QT的便攜式道岔轉(zhuǎn)轍機(jī)測(cè)試儀界面系統(tǒng)的設(shè)計(jì)方案,完成了對(duì)窗口控件、鼠標(biāo)鍵盤響應(yīng)事件等模塊的設(shè)計(jì)和嵌入式Ubuntu系統(tǒng)下的程序移植。經(jīng)驗(yàn)證,系統(tǒng)界面具有配置靈活、人機(jī)界面友好的特點(diǎn),用戶可通過設(shè)置轉(zhuǎn)轍機(jī)類型、牽引轉(zhuǎn)轍機(jī)數(shù)量、保護(hù)時(shí)間等參數(shù),以呼叫應(yīng)答方式,實(shí)現(xiàn)該界面系統(tǒng)對(duì)轉(zhuǎn)轍機(jī)的實(shí)時(shí)狀態(tài)顯示、動(dòng)作過程中道岔控制電路有效數(shù)據(jù)曲線顯示等功能,達(dá)到預(yù)期效果。
關(guān)鍵詞:QT 界面系統(tǒng);狀態(tài)顯示;曲線顯示
本文在以嵌入式Ubuntu的ARM平臺(tái)上,利用Qt設(shè)計(jì)了一種與道岔控制電路驅(qū)采模塊相連接的上位機(jī)系統(tǒng),該系統(tǒng)界面具有運(yùn)行穩(wěn)定、配置靈活的特點(diǎn),主要包括用戶主頁界面、曲線界面等部分。在設(shè)置轉(zhuǎn)轍機(jī)類型、牽引轉(zhuǎn)轍機(jī)數(shù)量、保護(hù)時(shí)間等參數(shù)后,通過呼叫應(yīng)答方式,實(shí)現(xiàn)對(duì)多個(gè)轉(zhuǎn)轍機(jī)的操作及實(shí)時(shí)狀態(tài)查詢、動(dòng)作過程中道岔控制電路有效電流及功率曲線顯示。
該設(shè)計(jì)以Ubuntu為操作系統(tǒng),以SAMSUNG公司的S3C6410X為硬件平臺(tái)核心控制芯片。校驗(yàn)裝置以標(biāo)準(zhǔn)鍵盤、鼠標(biāo)作為輸入設(shè)備,7英寸800*600分辨率的彩色LCD作為終端現(xiàn)實(shí)屏幕.系統(tǒng)界面的開發(fā)工具是Qt-4.7.3,Qt相對(duì)于其他界面開發(fā)工具,具有跨平臺(tái)、面向?qū)ο蟆⒇S富的API等優(yōu)點(diǎn),界面調(diào)試可以在PC機(jī)上完成,大大提高了開發(fā)效率.該界面系統(tǒng)以RS232通信方式與驅(qū)采模塊連接,實(shí)現(xiàn)對(duì)轉(zhuǎn)轍機(jī)的操作與狀態(tài)、數(shù)據(jù)采集。
QT中并沒有特定的串口控制類,本設(shè)計(jì)通過第三方qextserialport類實(shí)現(xiàn)讀寫操作。QextSerialBase類繼承自QIODevice類,它提供了操作串口所必需的一些變量和函數(shù)等,而Posix_QextSerialPort均繼承自QextSerialBase類,并類添加了Linux平臺(tái)下操作串口的一些功能。在本設(shè)計(jì)中使用Posix_QextSerialPort類對(duì)象mycom定義串口,包括串口讀寫方式、波特率、數(shù)據(jù)位、數(shù)據(jù)流控制等串口設(shè)置。
本設(shè)計(jì)采用信號(hào)與槽函數(shù)關(guān)聯(lián)方式實(shí)現(xiàn)讀串口緩沖區(qū)數(shù)據(jù),實(shí)現(xiàn)讀寫操作。其方法為設(shè)置定時(shí)器,固定時(shí)間間隔后讀取緩沖區(qū)數(shù)據(jù)。相關(guān)代碼如下:
connect(readTimer,SIGNAL(timeout()),this,SLOT(readMyCom()));
讀操作槽函數(shù)中,讀取串口緩沖區(qū)的所有數(shù)據(jù)給臨時(shí)變量temp,再對(duì)臨時(shí)變量temp進(jìn)行處理,根據(jù)已定義的數(shù)據(jù)幀格式采集轉(zhuǎn)轍機(jī)狀態(tài)信息與轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)。其讀槽函數(shù)實(shí)現(xiàn)代碼如下:
QByteArray temp = myCom->readAll();
寫操作槽函數(shù)中,以ASCII碼形式將行編輯框中的數(shù)據(jù)寫入串口。其讀槽函數(shù)實(shí)現(xiàn)代碼如下:
QByteArraysenddata;
mycom->write(senddata);
本設(shè)計(jì)中通過串口讀寫操作,建立界面系統(tǒng)與轉(zhuǎn)轍機(jī)驅(qū)采模塊的通信,其通信幀主要分為狀態(tài)幀與動(dòng)作數(shù)據(jù)幀。界面系統(tǒng)向轉(zhuǎn)轍機(jī)驅(qū)采模塊發(fā)送狀態(tài)/動(dòng)作數(shù)據(jù)查詢幀,當(dāng)轉(zhuǎn)轍機(jī)驅(qū)采模塊接收到狀態(tài)/動(dòng)作數(shù)據(jù)查詢幀后采集轉(zhuǎn)轍機(jī)狀態(tài)/動(dòng)作數(shù)據(jù),并以返回轉(zhuǎn)轍機(jī)狀態(tài)/動(dòng)作數(shù)據(jù)數(shù)據(jù)幀。
該界面系統(tǒng)主要包括2個(gè)部分:主頁界面、曲線界面。系統(tǒng)開機(jī)后進(jìn)入系統(tǒng)初始化狀態(tài)即主頁界面,完成默認(rèn)選擇。由主頁界面可通過按鍵選擇可進(jìn)入曲線界面,由曲線界面可返回主頁界面,從而實(shí)現(xiàn)界面系統(tǒng)界面之間切換,便于完成對(duì)各界面的操作。
3.1主頁界面的設(shè)計(jì)與實(shí)現(xiàn)
根據(jù)需求,主頁界面主要包括界面系統(tǒng)的配置選擇部分、轉(zhuǎn)轍機(jī)狀態(tài)顯示部分和控制部分。界面系統(tǒng)的配置選擇部分包括轉(zhuǎn)轍機(jī)機(jī)型選擇、牽引轉(zhuǎn)轍機(jī)數(shù)量選擇和保護(hù)時(shí)間選擇,并且配置選定后將同步到曲線界面。
3.1.1狀態(tài)顯示部分
QT提供QPainter類繪制從簡(jiǎn)單的直線到像餅圖和弦這樣的復(fù)雜形狀。它也可以繪制排列的文本和像素映射。通常,它在一個(gè)“自然的”坐標(biāo)系統(tǒng)中繪制,但是它也可以在視和世界轉(zhuǎn)換中做到這些。使用QPainter繪制圖形時(shí),首先使用QPainter類構(gòu)造繪圖工具,然后定義繪制線、輪廓和文本顏色等,最后設(shè)置所畫圖形參數(shù)再結(jié)束繪制。
QT提供paintEvent(QPaintEvent*)函數(shù)實(shí)現(xiàn)圖形的重繪,其實(shí)現(xiàn)方法如下:
this->repaint();
界面系統(tǒng)與轉(zhuǎn)轍機(jī)驅(qū)采模塊通信過程中,界面系統(tǒng)會(huì)向轉(zhuǎn)轍機(jī)驅(qū)采模塊發(fā)送狀態(tài)查詢數(shù)據(jù)幀,轉(zhuǎn)轍機(jī)驅(qū)采模塊接收到該數(shù)據(jù)幀后處理接收到的數(shù)據(jù)幀,然后由驅(qū)采模塊采集轉(zhuǎn)轍機(jī)狀態(tài)數(shù)據(jù)并返回轉(zhuǎn)轍機(jī)狀態(tài)數(shù)據(jù)。界面顯示系統(tǒng)接收到返回的狀態(tài)數(shù)據(jù)幀后進(jìn)行處理并實(shí)現(xiàn)圖形重繪以顯示轉(zhuǎn)轍機(jī)狀態(tài)。
3.1.2轉(zhuǎn)轍機(jī)控制部分
本設(shè)計(jì)采用信號(hào)與槽函數(shù)關(guān)聯(lián)方式實(shí)現(xiàn)發(fā)送定操、反操和急停命令。在發(fā)送轉(zhuǎn)轍機(jī)操作命令前需關(guān)閉狀態(tài)數(shù)據(jù)幀的發(fā)送,點(diǎn)擊對(duì)應(yīng)的操作按鍵。點(diǎn)擊觸發(fā)后,槽函數(shù)實(shí)現(xiàn)發(fā)送對(duì)應(yīng)的操作命令幀。其槽函數(shù)重要代碼為:
timer_wucao->stop();
t i m e r _ f a n c a o _ d e l a y - > s t a r t (DELAY);
第一行代碼需停止轉(zhuǎn)轍機(jī)狀態(tài)查詢幀發(fā)送;第二行開啟發(fā)送反操命令幀定時(shí)器。由于操作多臺(tái)轉(zhuǎn)轍機(jī),故需要設(shè)定各臺(tái)轉(zhuǎn)轍機(jī)反操操作間隔時(shí)間DELAY,以便在完成所操轉(zhuǎn)轍機(jī)后間隔時(shí)間DELAY后操作下一臺(tái)所操轉(zhuǎn)轍機(jī)。其定時(shí)器槽函數(shù)重要代碼如下:
QStringbuf_fancao=”FB FB 31 00 00 00 00 A6 00 00 00 00 00 00 00 00 FC FC”;
com_sendcommand.send_datas(buf_ fancao);
代碼第一行是發(fā)送反操操作數(shù)據(jù)幀;第二行是調(diào)用串口通信發(fā)送函數(shù)發(fā)送該數(shù)據(jù)幀。在發(fā)送轉(zhuǎn)轍機(jī)操作數(shù)據(jù)后,繼續(xù)發(fā)送狀態(tài)數(shù)據(jù)幀的發(fā)送,驅(qū)采模塊對(duì)接收到的數(shù)據(jù)幀進(jìn)行處理,轉(zhuǎn)轍機(jī)進(jìn)行動(dòng)作,并由轉(zhuǎn)轍機(jī)驅(qū)采模塊采集轉(zhuǎn)轍機(jī)狀態(tài)反饋給界面系統(tǒng)進(jìn)行狀態(tài)顯示。
3.2曲線界面
本設(shè)計(jì)中曲線界面用于顯示轉(zhuǎn)轍機(jī)動(dòng)作過程中有效電流曲線、電壓曲線和功率曲線。在轉(zhuǎn)轍機(jī)動(dòng)作后,上位機(jī)發(fā)送要數(shù)據(jù)命令幀,轉(zhuǎn)轍機(jī)驅(qū)采模塊接收到命令后返回轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)??筛鶕?jù)需求,選擇所需曲線類型并顯示。
QWt是一個(gè)基于Qt的擴(kuò)展類庫,包含了大量用于工程開發(fā)編程的GUI部件和輔助工具。除了二維繪圖控件類外,它還提供了諸如刻度,滑塊,轉(zhuǎn)盤等控件類供開發(fā)使用。本設(shè)計(jì)中首先實(shí)例化一個(gè)QwtPlot,設(shè)置x軸坐標(biāo)軸及其顯示范圍、y軸標(biāo)軸及其顯示范圍其相關(guān)代碼如下:
u i - > q w t P l o t - > s e t A x i s S c a l e (QwtPlot::xBottom, 0, CURVE_DATAS);
u i - > q w t P l o t - > s e t A x i s S c a l e (QwtPlot::yLeft, 0, 300);
代碼第一行設(shè)置了所畫曲線X坐標(biāo)軸的原點(diǎn)及坐標(biāo)軸顯示范圍參數(shù);代碼第二行設(shè)置了所畫曲線Y軸坐標(biāo)軸的原點(diǎn)及坐標(biāo)軸顯示范圍參數(shù)。
在設(shè)置完坐標(biāo)軸后,需設(shè)置畫布背景,也可添加滾輪縮放功能、鼠標(biāo)拖動(dòng)功能、添加網(wǎng)格等。在設(shè)置好曲線顯示坐標(biāo)軸及環(huán)境后,通過界面系統(tǒng)和轉(zhuǎn)轍機(jī)驅(qū)采模塊采集轉(zhuǎn)轍機(jī)有效動(dòng)作數(shù)據(jù)并顯示,以采集轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)。
在曲線顯示界面設(shè)置有click()觸發(fā)信號(hào)與相關(guān)槽函數(shù)的要對(duì)應(yīng)轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)的按鍵,當(dāng)按下對(duì)應(yīng)按鍵后,觸發(fā)對(duì)應(yīng)的槽函數(shù),相關(guān)代碼如下:
QStringbuf_a_datas=”FB FB 32 00 00 00 00 00 00 00 00 00 00 00 00 00 FC FC”;
com_sendcommand.send_datas(buf_ a_datas);
代碼第一行為要轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)幀;第二行是調(diào)用串口通信發(fā)送函數(shù)發(fā)送該數(shù)據(jù)幀。轉(zhuǎn)轍機(jī)驅(qū)采模塊接收該數(shù)據(jù)幀,采集轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)并反饋給界面系統(tǒng)。界面系統(tǒng)接收到轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù)并顯示,曲線顯示相關(guān)代碼如下:
double *x=new double[CURVE_ DATAS];
double *y=new double[CURVE_ DATAS];
curve->setSamples(x, y, CURVE_ DATAS);
ui->qwtPlot->replot();
曲線界面設(shè)置有對(duì)應(yīng)動(dòng)作要數(shù)據(jù)按鍵,當(dāng)轉(zhuǎn)轍機(jī)動(dòng)作完成后,可根據(jù)需求點(diǎn)擊要數(shù)據(jù)按鍵。轉(zhuǎn)轍機(jī)驅(qū)采模塊采集轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù),并將數(shù)據(jù)傳送至曲線界面直觀顯示。
該界面系統(tǒng)采用ubuntu操作系統(tǒng),具有很好的移植性,同時(shí)也具有很好的便攜性,方便供平時(shí)轉(zhuǎn)轍機(jī)的測(cè)試維修使用。其功能能夠即時(shí)顯示道岔的定位、反位、四開等狀態(tài),同時(shí)可以通過與轉(zhuǎn)轍機(jī)驅(qū)采模塊相連接以觸屏按鍵方式實(shí)現(xiàn)對(duì)轉(zhuǎn)轍機(jī)定操、反操等驅(qū)動(dòng)功能的操控。界面系統(tǒng)可以曲線形式顯示所需轉(zhuǎn)轍機(jī)動(dòng)作數(shù)據(jù),可對(duì)轉(zhuǎn)轍機(jī)性能進(jìn)行判斷,為道岔的維修提供依據(jù)。
參考文獻(xiàn)
[1]李宇麗.基于ARM的嵌入式Linux系統(tǒng)的研究及應(yīng)用[D].西安電子科技大學(xué),2007.
[2]譚永鋒.嵌入式Linux移植與應(yīng)用程序開發(fā)[D].長(zhǎng)安大學(xué),2007.
[3]李艷民.基于Qt跨平臺(tái)的人機(jī)交互界面的研究和應(yīng)用[D].重慶大學(xué),2007.
[4]張春艷.基于Qt的嵌入式圖形用戶界面研究與實(shí)現(xiàn)[D].大連海事大學(xué),2008.
基金項(xiàng)目:中國鐵路總公司科技研究開發(fā)計(jì)劃課題(合同編號(hào):2014X008-D)
中圖分類號(hào):U213
文獻(xiàn)標(biāo)識(shí)碼:A