張 霞,張志杰,軒志偉
(中北大學(xué)信息與通信工程學(xué)院,山西 太原 030051)
責(zé)任編輯:薛 京
目前大多數(shù)數(shù)據(jù)采集系統(tǒng)都是在PC平臺(tái)下設(shè)計(jì)人機(jī)界面與采集設(shè)備進(jìn)行通信,這種系統(tǒng)存在戶(hù)外做實(shí)驗(yàn)不易于攜帶、成本高等缺點(diǎn),針對(duì)這一情況,本文設(shè)計(jì)了在ARM硬件平臺(tái)下的圖形用戶(hù)界面。
Linux操作系統(tǒng)具有開(kāi)源、穩(wěn)定且便于移植到嵌入式設(shè)備的優(yōu)點(diǎn),在Linux下設(shè)計(jì)人機(jī)交互界面的需求越來(lái)越多。嵌入式系統(tǒng)對(duì)圖形用戶(hù)界面的基本要求包括輕小、占用資源少、高性能、高可靠性以及可配置等特點(diǎn)[1]。本文提出了采用ARM為硬件平臺(tái)和嵌入式Linux系統(tǒng)為軟件平臺(tái),并在此基礎(chǔ)上采用Qt設(shè)計(jì)了一款實(shí)用、靈敏的圖形用戶(hù)界面。
數(shù)據(jù)采集系統(tǒng)的基本框圖如圖1所示。
本數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)總體由4個(gè)部分組成:
1)數(shù)據(jù)采集設(shè)備:被測(cè)信號(hào)經(jīng)過(guò)傳感器并通過(guò)模擬調(diào)理電路的放大、濾波等處理,得到的信號(hào)經(jīng)過(guò)數(shù)據(jù)采集卡轉(zhuǎn)換成數(shù)字信號(hào)并且存儲(chǔ)在數(shù)據(jù)采集設(shè)備中。
2)人機(jī)交互:在Linux平臺(tái)下使用Qt軟件設(shè)計(jì)界面,主要顯示的內(nèi)容有設(shè)置參數(shù)、參數(shù)回讀、數(shù)據(jù)讀取和波形顯示。這部分由ARM9開(kāi)發(fā)板及觸摸顯示面板完成。ARM9開(kāi)發(fā)板選用天塹公司的TQ2440,TQ2440開(kāi)發(fā)板采用的是 S3C2440AL的 CPU,板載 64 Mbyte SDRAM、256 Mbyte Nand Flash和2 Mbyte Nor Flash,板上集成4線電阻式觸摸屏接口,直接連接?xùn)|芝3.5 in(1 in=2.54 cm)電阻觸摸屏作為顯示控制面板。
3)USB通信:采用FIDI公司推出的FT245RL芯片,完成FT245芯片在ARM9平臺(tái)下Linux USB驅(qū)動(dòng)的設(shè)計(jì)和移植。
4)WiFi模塊:本系統(tǒng)采用WM001S WiFi模塊,集成微控制器(MCU)和IEEE802.11 b/g 2.4 GHz無(wú)線射頻收發(fā)芯片為一體。模塊部分的射頻電路已經(jīng)通過(guò)出廠校準(zhǔn)測(cè)試,客戶(hù)能夠根據(jù)自己的需求來(lái)設(shè)計(jì)接口電路和進(jìn)行二次開(kāi)發(fā)。WM001S模塊提供一種簡(jiǎn)單、低成本、可靠的WiFi網(wǎng)絡(luò)產(chǎn)品設(shè)計(jì)方案。本模塊內(nèi)置完整的TCP/IP協(xié)議棧,支持 TCP/UDP/ICMP/ARP/DHCP/DNS/HTTP協(xié)議,此外還支持基于超級(jí)命令的Socket編程接口。
本系統(tǒng)無(wú)線模塊作為服務(wù)器集成在數(shù)據(jù)采集設(shè)備中。兩者之間都是通過(guò)串口連接,操作簡(jiǎn)單方便。通過(guò)串口調(diào)試工具設(shè)置好無(wú)線模塊的參數(shù),包括網(wǎng)絡(luò)名稱(chēng)、IP地址、協(xié)議類(lèi)型、連接類(lèi)型及目的地址和端口等。
本系統(tǒng)采用嵌入式Linux作為操作系統(tǒng),在Linux平臺(tái)下編寫(xiě)驅(qū)動(dòng)程序和應(yīng)用程序,采用Qt設(shè)計(jì)人機(jī)交互界面。應(yīng)用程序的主要功能有,通過(guò)發(fā)送指令來(lái)控制數(shù)據(jù)采集設(shè)備的參數(shù),并且通過(guò)參數(shù)回讀功能來(lái)驗(yàn)證設(shè)備工作是否正常且參數(shù)設(shè)置是否成功。讀取采集設(shè)備中的數(shù)據(jù),存儲(chǔ)到二進(jìn)制文件中,再進(jìn)行讀取并且通過(guò)波形顯示出來(lái)。本系統(tǒng)的軟件結(jié)構(gòu)圖如圖2所示,軟件開(kāi)發(fā)主要有3個(gè)內(nèi)容:開(kāi)發(fā)工具和關(guān)鍵技術(shù)、USB驅(qū)動(dòng)程序的設(shè)計(jì)和應(yīng)用程序的設(shè)計(jì)。
圖2 數(shù)據(jù)采集系統(tǒng)軟件結(jié)構(gòu)圖
系統(tǒng)以Qt軟件為開(kāi)發(fā)平臺(tái),采用TCP協(xié)議實(shí)現(xiàn)Socket通信。
TCP是一種可靠的、面向連接、面向數(shù)據(jù)流的傳輸協(xié)議,為應(yīng)用程序提供可靠的通信連接,使一臺(tái)計(jì)算機(jī)發(fā)出的字節(jié)流無(wú)差錯(cuò)地發(fā)往網(wǎng)絡(luò)上的其他計(jì)算機(jī)。因此,對(duì)可靠性要求高的數(shù)據(jù)通信系統(tǒng)往往使用TCP協(xié)議傳輸數(shù)據(jù),但在正式收發(fā)數(shù)據(jù)前通信雙方必須建立連接[2]。
TCP協(xié)議的程序使用的是客戶(hù)端/服務(wù)器模式,在Qt中提供了QTcpSocket類(lèi)來(lái)編寫(xiě)客戶(hù)端程序,使用QTcpS-erver類(lèi)編寫(xiě)服務(wù)器端程序。在服務(wù)器端進(jìn)行端口的監(jiān)聽(tīng),一旦發(fā)現(xiàn)客戶(hù)端的連接請(qǐng)求,就會(huì)發(fā)出newConnection()信號(hào),可以關(guān)聯(lián)這個(gè)信號(hào)到槽函數(shù),進(jìn)行數(shù)據(jù)的發(fā)送。而在客戶(hù)端,一旦有數(shù)據(jù)到來(lái)就會(huì)發(fā)出readyRead()信號(hào),可以關(guān)聯(lián)此信號(hào),進(jìn)行數(shù)據(jù)的接收。本系統(tǒng)的應(yīng)用程序采用客戶(hù)端的模式編寫(xiě)[3]。
本次設(shè)計(jì)選用FTDI公司開(kāi)發(fā)的USB芯片F(xiàn)T245RL來(lái)連接ARM開(kāi)發(fā)板和數(shù)據(jù)采集設(shè)備,該芯片具有功能強(qiáng)大、體積微小、傳輸速度快、易于與微處理器接口等特點(diǎn)。由于FTDI公司沒(méi)有推出支持ARM的Linux USB驅(qū)動(dòng),因此必須先設(shè)計(jì)支持ARM和Linux的USB驅(qū)動(dòng)[4]。
USB驅(qū)動(dòng)屬于字符設(shè)備驅(qū)動(dòng),USB驅(qū)動(dòng)屬于字符設(shè)備驅(qū)動(dòng),通過(guò)module_init()函數(shù)進(jìn)入驅(qū)動(dòng)程序,完成初始化加載,注冊(cè)USB設(shè)備,申請(qǐng)USB設(shè)備標(biāo)示號(hào)等。不同廠商不同型號(hào)的USB芯片的VID和PID是不同的,通過(guò)VID和PID的值來(lái)識(shí)別設(shè)備。FT245RL芯片的VID=0x0403,PID=0x6001。
設(shè)計(jì)步驟如下:根據(jù)Linux的內(nèi)核源碼中的USB驅(qū)動(dòng)的框架程序“/drivers/usb/”下的 nousb-skeleton.c文件,來(lái)修改編寫(xiě)ft245的驅(qū)動(dòng)程序,修改好的驅(qū)動(dòng)文件ft245.c文件放在/drivers/char/目錄下;接下來(lái)通過(guò)修改同目錄下的“Kconfig”和“Makefile”文件,完成內(nèi)核源碼對(duì)ft245驅(qū)動(dòng)支持;在終端運(yùn)行#make menuconfig完成內(nèi)核配置,使用#make SUBDIR=drivers/char/modules,編譯出驅(qū)動(dòng)模塊。這時(shí)候可以在drivers/char/下找到ft245.ko文件;將其傳送給開(kāi)發(fā)板,使用insmod ft245.ko命令進(jìn)行動(dòng)態(tài)加載。這時(shí)便可進(jìn)行ARM和數(shù)據(jù)采集設(shè)備的通信。
本數(shù)據(jù)采集系統(tǒng)的應(yīng)用程序基于Linux平臺(tái),采用Qt的開(kāi)發(fā)環(huán)境Qt Creator完成開(kāi)發(fā),最后在已搭建好的開(kāi)發(fā)環(huán)境中編譯得到可執(zhí)行文件,并將其移植到制作好的根文件系統(tǒng)中,重新制作yaffs格式的文件系統(tǒng)鏡像后燒寫(xiě)到開(kāi)發(fā)板,即可運(yùn)行添加的應(yīng)用程序。
2.3.1 控制界面的設(shè)計(jì)
Qt/Embedded編程既可以圖形化編程,也可以以傳統(tǒng)代碼編程[5],本設(shè)計(jì)采用二者相結(jié)合的方式編程:通過(guò)派生自QWidget的QMainWindow的子類(lèi)化來(lái)實(shí)現(xiàn)主窗口的創(chuàng)建,再在工程中通過(guò)新建Qt Designer Form Class來(lái)實(shí)現(xiàn)“設(shè)置參數(shù)”和“參數(shù)回讀”兩個(gè)子窗口的創(chuàng)建;“波形顯示”窗口選用傳統(tǒng)的代碼編程完成坐標(biāo)和數(shù)據(jù)波形的繪制。通過(guò)Qt特有的信號(hào)與槽(signal/slots)機(jī)制實(shí)現(xiàn)在主窗口調(diào)用其他的子窗口。主窗口的設(shè)計(jì)如圖3所示,子窗口的設(shè)計(jì)如圖4所示。
圖3 主窗口界面(截圖)
圖4 子窗口界面(截圖)
2.3.2 后臺(tái)處理程序
后臺(tái)處理程序的內(nèi)容主要包括USB和WiFi兩部分,分別實(shí)現(xiàn)了設(shè)置參數(shù)、參數(shù)回讀、數(shù)據(jù)存儲(chǔ)和波形顯示的功能。
1)設(shè)置參數(shù):選擇性地對(duì)數(shù)據(jù)采集設(shè)備發(fā)送參數(shù)設(shè)置控制指令,這些指令包括采樣頻率、觸發(fā)電平、放大倍數(shù)、負(fù)延時(shí)點(diǎn)數(shù)和數(shù)據(jù)長(zhǎng)度。
USB部分程序中的主要函數(shù)如下:
無(wú)線部分程序中的主要函數(shù)如下:
2)參數(shù)回讀:通過(guò)對(duì)數(shù)據(jù)采集設(shè)備發(fā)送相應(yīng)的控制指令來(lái)讀取設(shè)備發(fā)送回來(lái)的數(shù)據(jù),通過(guò)ui->label->setText(tr(“相關(guān)參數(shù)”))語(yǔ)句,顯示到ui文件的標(biāo)簽Label中,從而可以判斷設(shè)備是否正常工作,且設(shè)置參數(shù)是否成功。
3)數(shù)據(jù)讀取:通過(guò)發(fā)送指令到數(shù)據(jù)采集設(shè)備,讀取設(shè)備發(fā)送回來(lái)的數(shù)據(jù)并且以二進(jìn)制形式存儲(chǔ)數(shù)據(jù)到文件中。在Qt中往文件中寫(xiě)數(shù)據(jù)使用QFile類(lèi)和QDataStream類(lèi),主要實(shí)現(xiàn)程序如下:
4)波形顯示:使用QPainter類(lèi)完成坐標(biāo)和數(shù)據(jù)波形的繪制。QPainter既可以繪制幾何圖形,又可以繪制像素映射、圖像和文字[6]。先在頭文件中聲明重繪事件函數(shù)、初始化界面函數(shù)和坐標(biāo)設(shè)定的函數(shù),再在draw.cpp文件中對(duì)這些函數(shù)進(jìn)行重定義,分別為:void Draw::paintEvent(QPaintEvent*e),void Draw::initInterface()和 void Draw::resizeEvent(QResizeEvent*e)。實(shí)現(xiàn)讀取二進(jìn)制文件中的數(shù)據(jù),并且繪制成波形的功能。
在開(kāi)發(fā)環(huán)境內(nèi)交叉編譯編寫(xiě)的應(yīng)用程序,得到可執(zhí)行的二進(jìn)制文件,將此文件植入制作的帶有Qt庫(kù)的文件系統(tǒng)中并進(jìn)行編譯,將裁剪、編譯過(guò)的內(nèi)核與該文件系統(tǒng)燒寫(xiě)到開(kāi)發(fā)板,即可實(shí)現(xiàn)應(yīng)用程序的發(fā)布。圖5為從300 m遠(yuǎn)處控制采集設(shè)備,讀取沖擊波壓力數(shù)據(jù)并在波形顯示這一子窗口顯示的波形。
圖5 運(yùn)行結(jié)果顯示(照片)
本設(shè)計(jì)能很好地實(shí)現(xiàn)人機(jī)交互功能,已經(jīng)不是傳統(tǒng)的PC機(jī)端上位機(jī)軟件,相比于筆記本,該系統(tǒng)體積小、重量輕、可便攜,當(dāng)通信受到限制時(shí),可調(diào)整通信距離,使無(wú)線傳輸性能達(dá)到最佳。實(shí)驗(yàn)證明,在室外空曠環(huán)境下,通信距離可達(dá)300 m,接收到的數(shù)據(jù)準(zhǔn)確率達(dá)100%,該數(shù)據(jù)采集系統(tǒng)穩(wěn)定可靠、切實(shí)可行、具有實(shí)際應(yīng)用價(jià)值。
[1]陳曦,劉增強(qiáng).基于Qt/Embedded嵌入式控制界面的設(shè)計(jì)[J].化工自動(dòng)化及儀表,2011,38(9):1131-1132.
[2]姚娟,張志杰.基于LabVIEW和TCP的數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)應(yīng)用,2012,38(7):72-74.
[3]鄭阿奇,陳超.Qt 4開(kāi)發(fā)實(shí)踐[M].北京:電子工業(yè)出版社,2011.
[4]曾強(qiáng),趙娟.基于FT245的Linux USB驅(qū)動(dòng)的設(shè)計(jì)[J].光電技術(shù)應(yīng)用,2011,26(1):70-73。
[5]吳迪.零基礎(chǔ)學(xué) Qt4編程[M].北京:北京航空航天大學(xué)出版社,2010.
[6]BLANCHETTE J,SUMMERFIELD M.C++GUI Qt 4編程[M].閆鋒欣,曾泉人,張志強(qiáng),譯.2版.北京:清華大學(xué)出版社,2010.