葉 楠,劉懷芝,鹿 旭
(1.中船重工鵬力(南京)大氣海洋信息系統(tǒng)有限公司,江蘇 南京,210000; 2.中船重工鵬力(南京)新能源科技有限公司,江蘇 南京,210000)
隨著居民生活水平的提高和氣象意識(shí)的增強(qiáng),近年來(lái)自動(dòng)氣象站得到了大力的發(fā)展。目前的自動(dòng)氣象站可自動(dòng)地實(shí)現(xiàn)地面氣象觀測(cè)、氣象數(shù)據(jù)存儲(chǔ)和觀測(cè)數(shù)據(jù)發(fā)送等功能。自動(dòng)氣象站需要可視化的人機(jī)界面,既能將氣象數(shù)據(jù)傳輸給上級(jí)服務(wù)器,也能通過(guò)本地人機(jī)界面查看、控制自動(dòng)氣象站。因此可視化的液晶顯示控制模塊對(duì)于自動(dòng)氣象站是非常重要的。
目前國(guó)內(nèi)外一般采用PC作為自動(dòng)氣象站的顯示控制模塊,利用VC、LabVIEW等軟件設(shè)計(jì)顯示控制軟件,通常選用UART、TCP/IP、USB等協(xié)議進(jìn)行數(shù)據(jù)/命令的傳輸[1-2]。自動(dòng)氣象站顯示控制模塊技術(shù)發(fā)展得很快,但同時(shí)也發(fā)現(xiàn)了很多問(wèn)題。傳統(tǒng)的硬件資源過(guò)于浪費(fèi),接口不夠統(tǒng)一,現(xiàn)場(chǎng)布置過(guò)于繁瑣,人機(jī)交互不夠簡(jiǎn)單方便等,因此需要對(duì)傳統(tǒng)的顯示控制模塊進(jìn)行升級(jí)和改造[3]。
本文設(shè)計(jì)了一種基于ARM9的自動(dòng)氣象站控制模塊。采用ARM9內(nèi)核的AT91SAM9G35-CU芯片結(jié)合含觸摸板的TFT-LCD液晶屏構(gòu)成控制模塊的硬件平臺(tái)。為滿足自動(dòng)氣象站控制模塊多任務(wù)處理和人機(jī)操作直觀方便的需求,采用經(jīng)過(guò)裁剪的嵌入式Linux操作系統(tǒng)作為軟件平臺(tái),并通過(guò)Qt圖形開(kāi)發(fā)軟件設(shè)計(jì)人機(jī)交互界面的應(yīng)用程序,移植到自動(dòng)氣象站控制模塊軟件平臺(tái)中。本文所設(shè)計(jì)的自動(dòng)氣象站控制模塊,既能滿足傳統(tǒng)氣象站的多任務(wù)需求,又提供了現(xiàn)場(chǎng)查看、控制的功能,節(jié)省了硬件資源,體現(xiàn)了嵌入式設(shè)備的價(jià)值[4]。
基于自動(dòng)氣象站控制模塊的功能需求以及人機(jī)交互界面美觀方便的需求,采用Atmel公司的AT91SAM9G35-CU芯片作為MCU。以此MCU為核心,設(shè)計(jì)了電源電路、RTC時(shí)鐘電路、LCD接口電路、觸摸屏接口電路、背光接口電路、USB接口電路、SD卡接口電路、SPI接口電路、RS232接口電路、RJ45接口電路、RS485接口電路等,如圖1所示。
圖1 硬件總體框圖
AT91SAM9G35-CU芯片主頻達(dá)400 MHz,外設(shè)豐富,包含2個(gè)USB接口、4個(gè)UART接口、1個(gè)485接口、1個(gè)LCD、2個(gè)SPI接口、3個(gè)IIC接口、1個(gè)IIS接口、一個(gè)SD卡接口、1個(gè)RJ45接口。其16 KB指令高速緩存和16 KB數(shù)據(jù)高速緩存可為現(xiàn)有的程序和數(shù)據(jù)提供零時(shí)間等待響應(yīng),以確保對(duì)關(guān)鍵指令和數(shù)據(jù)的無(wú)延遲存取,并且EMC性能較好。
LCD模塊采用奇美G070Y2-L01工業(yè)液晶屏,包含觸摸板。該液晶顯示屏分辨率為800×480,通過(guò)LVDS信號(hào)輸出與AT91SAM9G35-CU芯片相連接。AT91SAM9G35-CU芯片內(nèi)置LCD控制模塊,無(wú)需外接LCD控制芯片。因液晶屏為L(zhǎng)VDS信號(hào)輸出,AT91SAM9G35-CU芯片引腳為T(mén)TL電平,需外接LVDS與TTL轉(zhuǎn)換電路。LCD屏與AT91SAM9G35-CU芯片接口如圖2所示。
圖2 LCD屏接口電路
G070Y2-L01工業(yè)液晶屏攜帶觸摸板。觸摸板引出4根觸摸線,分別為X+、X-、Y+、Y-。由于AT91SAM9G35-CU芯片內(nèi)置A/D采樣電路,可通過(guò)編寫(xiě)驅(qū)動(dòng)程序?qū)?根觸摸線輸出的電壓信號(hào)轉(zhuǎn)換為觸點(diǎn)位置信息。同時(shí)液晶屏連接了背光接口,通過(guò)對(duì)AT91SAM9G35-CU芯片IO口的高低電平的控制,來(lái)實(shí)現(xiàn)控制背光開(kāi)關(guān)的功能,本設(shè)計(jì)中控制PC20口的高低電平,程序控制1 min后自動(dòng)關(guān)背光,待下次觸摸再開(kāi)啟。觸摸板電路和背光控制電路如圖3所示。
圖3 觸摸板和背光電路
2.1.1軟件平臺(tái)的選擇
目前,嵌入式操作系統(tǒng)種類繁多,比較主流的有Windows CE、μC/OS、嵌入式Linux、VxWorks等。表1對(duì)幾種常用的嵌入式操作系統(tǒng)參數(shù)進(jìn)行了簡(jiǎn)單的對(duì)比。
表1 主流嵌入式操作系統(tǒng)比較
從表1中可以看出,一方面嵌入式Linux系統(tǒng)與Windows CE和VxWorks相比,Linux代碼是開(kāi)放的,并且成本比較低。另一方面,μC/OS-II雖然小巧,但是它支持的外設(shè)比較少,嵌入式Linux系統(tǒng)與之相比就強(qiáng)大了很多。Linux系統(tǒng)具有功能強(qiáng)大的內(nèi)核、處理能力高效穩(wěn)定,支持很多的硬件設(shè)備,驅(qū)動(dòng)資源豐富,大大降低了項(xiàng)目開(kāi)發(fā)的周期;它的內(nèi)核具有可裁剪性,可以根據(jù)不同的項(xiàng)目定制不同的內(nèi)核,靈活性很強(qiáng)。同時(shí),作為氣象信息數(shù)據(jù)采集,采集頻率為每秒1次,實(shí)時(shí)性要求相對(duì)不高,嵌入式Linux系統(tǒng)可以滿足。綜合起來(lái),本設(shè)計(jì)選擇了嵌入式Linux操作系統(tǒng)作為其軟件平臺(tái)[5-6]。
2.1.2嵌入式Linux系統(tǒng)的裁剪和移植
一般來(lái)說(shuō),向硬件平臺(tái)中移植嵌入式Linux操作系統(tǒng)主要有以下幾個(gè)步驟: BootLoader的裁剪和移植、內(nèi)核的裁剪和移植、文件系統(tǒng)的裁剪和移植。在本設(shè)計(jì)中所采用的Altem公司的AT91系列芯片需在BootLoader移植前增加AT91bootstrap的移植。
(1)AT91bootstrap的移植
Altem公司生產(chǎn)的芯片在移植嵌入式操作系統(tǒng)Linux的過(guò)程中,第一步需移植其自身提供的bootstrap,其內(nèi)容包含AT91系列芯片主要硬件的初始化功能。
(2)BootLoader的移植
U-Boot是目前為止功能最多、靈活性最好的BootLoader,通過(guò)交叉編譯后代碼尺寸都比較小,一般只有100~200 KB。U-Boot緊隨AT91bootstrap移植入控制模塊的Flash中,主要完成系統(tǒng)啟動(dòng)過(guò)程中的各種配置任務(wù),建立合適的環(huán)境以便調(diào)用內(nèi)核。
(3)內(nèi)核的裁剪和移植
如今通用版本的Linux內(nèi)核里面包含了很多的驅(qū)動(dòng)程序,資源特別豐富,因此占用的內(nèi)存資源也很大。由于Linux系統(tǒng)具有可裁剪性,因此可對(duì)Linux內(nèi)核進(jìn)行修改,裁剪一些不必要的驅(qū)動(dòng)程序,選用適合自動(dòng)氣象站控制模塊的必要的驅(qū)動(dòng)程序,從而配置出適合資源有限的嵌入式設(shè)備的嵌入式Linux內(nèi)核。本設(shè)計(jì)中通過(guò)make menuconfig命令進(jìn)入可視化的內(nèi)核配置界面,在內(nèi)核中添加LCD驅(qū)動(dòng)、觸摸屏驅(qū)動(dòng)、AD采樣驅(qū)動(dòng)等,以滿足自動(dòng)氣象站控制模塊所需要的功能要求。配置好內(nèi)核后緊隨U-Boot移植到控制模塊的Flash中。
(4)文件系統(tǒng)的制作和移植
Linux文件系統(tǒng)的主要作用是保存系統(tǒng)文件和應(yīng)用文件,在嵌入式系統(tǒng)啟動(dòng)后進(jìn)行掛載,是整個(gè)嵌入式Linux系統(tǒng)的重要組成部分。本設(shè)計(jì)中采用最新的UBIFS文件系統(tǒng)。該文件系統(tǒng)可有效地解決JFSS2、YAFFS2等文件系統(tǒng)內(nèi)存消耗大、損益均衡能力差、過(guò)渡損益等問(wèn)題。制作UBIFS系統(tǒng)需用到mtd-utils、zlib、lzo、e2fsprogs等源碼,經(jīng)一系列編譯、安裝后生成可用的UBIFS系統(tǒng),然后在內(nèi)核之后移植到自動(dòng)氣象站控制模塊的Flash中。
2.2.1Qt/Embedded的移植
Qt/Embedded作為面向嵌入式系統(tǒng)圖形用戶界面的應(yīng)用程序開(kāi)發(fā)框架,其庫(kù)采用C++封裝,完全面向?qū)ο?,可移植性好,界面設(shè)計(jì)美觀,功能齊全,因此本設(shè)計(jì)采用Qt/Embedded作為應(yīng)用程序開(kāi)發(fā)平臺(tái)[7-8]。
本設(shè)計(jì)中的應(yīng)用程序開(kāi)發(fā)是在PC中的Qt Creator軟件下開(kāi)發(fā)完成的。為了使通過(guò)交叉編譯產(chǎn)生的Qt應(yīng)用程序二進(jìn)制文件能夠在自動(dòng)氣象站控制模塊中運(yùn)行,需要向上節(jié)提到的UBIFS文件系統(tǒng)中移植Qt/Embedded庫(kù)。通過(guò)Linux編譯器交叉編譯Qt/Embedded的源代碼,生成以自動(dòng)氣象站控制模塊為目標(biāo)代碼的Qt/Embedded庫(kù),移植入文件系統(tǒng)中usr/路徑下[9]。
2.2.2用戶UI設(shè)計(jì)
自動(dòng)氣象站控制模塊的人機(jī)交互界面是在Qt Creator開(kāi)發(fā)環(huán)境下完成的。Qt Creator包括項(xiàng)目生成向?qū)?、高?jí)的C++代碼編輯器、瀏覽文件及類的工具,集成了Qt Designer、Qt Assistant、Qt Linguist、圖形化的GDB調(diào)試前端,集成了qmake構(gòu)建工具等。通過(guò)Qt Designer可視化布局和格式構(gòu)建器可配置生成美觀簡(jiǎn)潔的人機(jī)交互界面。本方案中設(shè)計(jì)的人機(jī)交互界面功能如圖4所示。
圖4 人機(jī)交互界面功能
在本設(shè)計(jì)中,通過(guò)Qt Designer設(shè)計(jì)器,選擇Widgets對(duì)話框,通過(guò)拖拉Push button、List View、Test Edit、Label等部件以及外部控件,構(gòu)成自動(dòng)氣象站控制模塊人工交互界面。
構(gòu)建窗體界面的基本圖形后,需要將這些圖形按鈕與應(yīng)用程序結(jié)合起來(lái)。Qt中提供了信號(hào)與槽的機(jī)制。 Qt Designer設(shè)計(jì)器所支持的信號(hào)與槽機(jī)制提供了對(duì)象間的通信機(jī)制,使得人機(jī)交互功能可以得到迅速的響應(yīng)。當(dāng)用戶點(diǎn)擊剛剛添加的菜單按鈕時(shí),程序就會(huì)立刻跳轉(zhuǎn)到與該按鈕所連接的程序段上。在本設(shè)計(jì)中大量使用了信號(hào)與槽的機(jī)制,例如:
connect(pushbutton6,SIGNAL(clicked()),this,SLOT(pushbutton6_clicked()));
其中pushbutton6代表所點(diǎn)擊按鈕的編號(hào),SIGNAL(clicked())表示執(zhí)行動(dòng)作為點(diǎn)擊,SLOT(pushbutton6_clicked())代表需要去執(zhí)行的槽函數(shù)。
利用AT91SAM9G35-CU芯片具有高效處理速度和豐富片上資源的特性,由Qt Designer所生成的用戶UI界面簡(jiǎn)潔美觀,響應(yīng)速度快,易操作,既可實(shí)時(shí)觀察數(shù)據(jù),又可輸入命令改變自動(dòng)氣象站控制模塊的運(yùn)行參數(shù)。如圖5所示,點(diǎn)擊液晶屏最下方的菜單欄上的相應(yīng)功能按鈕,就可切換到相應(yīng)的功能界面,完成所需的顯示和控制功能。
圖5 實(shí)時(shí)數(shù)據(jù)顯示界面
2.2.3多線程的應(yīng)用程序設(shè)計(jì)
自動(dòng)氣象站本身的功能中需要完成數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸和人工交互等多種功能,控制模塊作為自動(dòng)氣象站的核心部件就要在應(yīng)用程序的設(shè)計(jì)中同時(shí)兼顧不同功能的正常運(yùn)轉(zhuǎn)和數(shù)據(jù)的共享操作。
本文的自動(dòng)氣象站控制模塊應(yīng)用程序設(shè)計(jì)中,采用QThread線程類,建立多線程的處理機(jī)制,使得控制模塊可以快速響應(yīng)不同的任務(wù)。在設(shè)計(jì)的過(guò)程中也兼顧了數(shù)據(jù)的獨(dú)立和共享,使得整個(gè)控制模塊運(yùn)行穩(wěn)定,操作快捷。系統(tǒng)軟件整體工作流程如圖6所示。
圖6 系統(tǒng)軟件整體工作流程
應(yīng)用程序由main函數(shù)進(jìn)入,開(kāi)啟Mainwindow線程。Mainwindow線程首先進(jìn)行人機(jī)界面的配置工作,生成人機(jī)交互界面,然后陸續(xù)開(kāi)啟數(shù)據(jù)采集、數(shù)據(jù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)傳輸?shù)认嚓P(guān)線程。各個(gè)任務(wù)之間數(shù)據(jù)可獨(dú)有可共享,保證系統(tǒng)穩(wěn)定運(yùn)行。同時(shí)Mainwindow線程中包含大量與按鈕綁定的槽函數(shù),可隨時(shí)響應(yīng)用戶的人工交互指令,高效便捷。部分程序如下:
fStarData = new KStarData(this);
fStarData->start();
//衛(wèi)星發(fā)送模塊完成.
ShowLineMessage("衛(wèi)星發(fā)送模塊完成." );
fDataRS485 = newDataRS485(this);
fDataRS485->start();
//數(shù)據(jù)采集模塊完成
fDataSend = new ComDataSend(this);
fDataSend->start();
//串口數(shù)據(jù)上傳模塊完成
fSocketClient = new SocketClient(this);
fSocketClient->start();
fServer = new Server(this);
fServer->start();
//socket通信模塊完成
fFileBackup = new FileBackup(this);
fFileBackup->start();
//數(shù)據(jù)備份模塊完成
本設(shè)計(jì)應(yīng)用于由中船重工鵬力(南京)大氣海洋信息系統(tǒng)有限公司開(kāi)發(fā)的DZB7型自動(dòng)氣象站中進(jìn)行測(cè)試??刂颇K通過(guò)AD采樣接口接入風(fēng)速風(fēng)向傳感器、溫濕度傳感器、雨量傳感器,通過(guò)RS232接口接入氣壓傳感器、衛(wèi)星通信模塊、GPRS通信模塊等。
通過(guò)相關(guān)環(huán)境試驗(yàn)(包含EMC試驗(yàn)、高低溫試驗(yàn)、正弦振動(dòng)試驗(yàn)、Ka鹽霧試驗(yàn)等)后,設(shè)備可實(shí)時(shí)顯示當(dāng)前的氣象數(shù)據(jù),人工交互功能響應(yīng)迅速,數(shù)據(jù)采集、處理、儲(chǔ)存、傳輸?shù)裙δ苓\(yùn)轉(zhuǎn)正常。
試驗(yàn)結(jié)果表明,本文所設(shè)計(jì)的基于ARM9的自動(dòng)氣象站控制模塊功能完善、運(yùn)行可靠、操作便捷,達(dá)到了設(shè)計(jì)的預(yù)期目標(biāo)。
本文介紹了基于ARM9的自動(dòng)氣象站控制模塊設(shè)計(jì)方法及流程,包括硬件電路設(shè)計(jì)、系統(tǒng)操作平臺(tái)設(shè)計(jì)以及應(yīng)用程序的設(shè)計(jì)等。選用AT91SAM9G35-CU芯片結(jié)合G070Y2-L01工業(yè)液晶屏硬件設(shè)計(jì),可以提供更復(fù)雜、多彩、靈活的顯示任務(wù)。將嵌入式Linux系統(tǒng)和基于Qt設(shè)計(jì)的UI界面、應(yīng)用程序同時(shí)移植到AT91SAM9G35-CU芯片中,實(shí)現(xiàn)多任務(wù)處理、多界面顯示、簡(jiǎn)單快捷的人工交互功能,完全適應(yīng)自動(dòng)氣象站多變的任務(wù)需求,能承擔(dān)更加靈活、美觀的液晶顯示任務(wù),是嵌入式設(shè)備的主流發(fā)展方向。
參考文獻(xiàn)
[1] 解偉.基于STM32的自動(dòng)氣象站控制模塊設(shè)計(jì) [J].電子測(cè)量技術(shù),2014,37(7):107-110.
[2] 劉艷中,呂玉嫦.一種新型自動(dòng)氣象站觸控屏交互式系統(tǒng)設(shè)計(jì)[J].電子測(cè)量技術(shù),2016,39(7):145-148.
[3] 戴軍建,張傳勝.基于STM32的人機(jī)接口設(shè)計(jì)與實(shí)現(xiàn) [J].長(zhǎng)春工業(yè)大學(xué)學(xué)報(bào),2012,33(6):673-675.
[4] 周欣.多功能自動(dòng)氣象站控制與管理系統(tǒng) [J].電子測(cè)量與儀器學(xué)報(bào),2011,25(4):5-8.
[5] 李秀娟,張曉東.嵌入式系統(tǒng)設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2013.
[6] 趙成.嵌入式系統(tǒng)應(yīng)用基礎(chǔ)[M].北京:國(guó)防工業(yè)出版社,2012.
[7] 任善全,呂強(qiáng),錢(qián)培德.一個(gè)基于Qt/Embedded的嵌入式Linux應(yīng)用程序的實(shí)現(xiàn) [J].計(jì)算機(jī)應(yīng)用于軟件,2006,23(2):105-107.
[8] 吳子平,徐愛(ài)鈞.基于Qt/Embedded的嵌入式GUI的研究與構(gòu)建 [J].電腦開(kāi)發(fā)與應(yīng)用,2012,25(1):13-16.
[9] 吳燕燕,賀鋒濤.基于ARM9平臺(tái)上Qt/Embedded的移植與開(kāi)發(fā) [J].液晶與顯示,2013,28(2):261-265.