基于A(yíng)RM/Linux的燃料電池溫度監控系統GUI設計
燃料電池(fuel cell)是一種新型綠色能源技術(shù),是把燃料和氧化劑中的化學(xué)能直接轉化成電能的裝置。燃料電池與一般干電池的不同點(diǎn)是:只要保持燃料供應,電池就會(huì )不斷提供電能,而且電池反應的最終產(chǎn)物是水,不會(huì )對環(huán)境造成任何污染,以碳氫化合物作燃料時(shí),反應產(chǎn)物僅增加少量二氧化碳[1]。
燃料電池電堆的溫度分布對燃料電池的安全與壽命有重要影響,尤其是在采用質(zhì)子交換膜的車(chē)用燃料電池中,溫度不僅影響到催化劑的活性,而且還直接影響到質(zhì)子交換膜的含水性,因此對其溫度的控制有很高的要求。為了在研究過(guò)程中對其溫度變化進(jìn)行實(shí)時(shí)監控,本文基于A(yíng)RM/Linux構建了一個(gè)燃料電池溫度監控系統。
1 系統結構
本監控系統整體結構如圖1所示。
溫控系統采用ARM微處理器S3C2410作為嵌入式微處理器。將經(jīng)過(guò)編譯的嵌入式Linux2.6內核及Qt/E庫移植到ARM上,溫控系統的GUI控制界面運行于LCD上。
溫控器以freescale公司MC9S12DG128B單片機為控制核心,采用熱電阻作為溫度傳感器,將溫度信號轉化為模擬量的電信號,再經(jīng)過(guò)放大電路及壓頻變換(V/F變換)后,變?yōu)閿底至康碾娦盘栞斎肟刂破?,?shí)現控制算法??刂破鬏敵龅腜WM信號經(jīng)過(guò)光電隔離后直接控制固態(tài)繼電器,從而控制熱風(fēng)嘴加熱器對控制對象進(jìn)行加熱操作,實(shí)現溫度控制。
Web Server單元采用移植基于Linux的Boa服務(wù)器,通過(guò)CGI(公共網(wǎng)關(guān)接口)實(shí)現遠程用戶(hù)與系統間的交互。
數據庫單元采用SQLite數據庫,Qt為數據庫訪(fǎng)問(wèn)提供的QtSql模塊實(shí)現了數據庫與Qt應用程序的無(wú)縫鏈接,同時(shí)為開(kāi)發(fā)人員提供了一套與具體所用數據庫無(wú)關(guān)的調用接口。
GUI控制界面采用Qt Designer設計系統的控制界面,利用Qt的信號/槽(signals/slots)機制實(shí)現界面對下位機的控制。
2 各部分設計方法
本文重點(diǎn)研究監控系統GUI界面、數據庫及遠程監控的設計與開(kāi)發(fā),主要詳細了介紹GUI界面、數據庫以及Web Server的設計,對于溫控器的設計本文不作重點(diǎn)介紹。
2.1 GUI界面及Qt程序設計
2.1.1 Qt的移植
本系統的構建是通過(guò)編譯Qt4的庫到開(kāi)發(fā)板來(lái)實(shí)現的,首先應對源碼進(jìn)行配置編譯,使庫添加對底層驅動(dòng)的支持。設置環(huán)境變量如下[2]:
Export PATH= /usr/local/arm/3.3.2/bin:$PATH
Export QTDIR=$PWD
Export QTEDIR=$QTDIR
Export LD_LIBRARY_PATH=$QTDIR/lib:$ LD_LIBRARY_PATH
配置Qt使其支持數據庫、網(wǎng)絡(luò )、觸摸屏等驅動(dòng),將編譯后的Qt目錄下的lib文件夾下的庫文件加入根文件系統。
為了方便用戶(hù)操作,本系統應支持中文字體顯示。為此,一方面將編譯后的Qt/Embedeed的/lib/font目錄下的字體庫文件添加到根文件系統中,為了節省資源,可以只選擇比較常用的一兩種字體庫;另一方面由于程序中默認的字體不支持中文,故在程序中需指定一種中文字體,方法是在程序的main函數中添加如下語(yǔ)句:
QTextCodec::setCodecForTr(QTextcodec::codecForName('gb18030'));
2.1.2 程序界面開(kāi)發(fā)
根據功能需求分析,設計構建了監控系統的層次化GUI界面結構圖[3],如圖2所示。
從圖2中可以看出,子菜單主要分成兩部分:一部分是溫控界面的主要控制菜單,其中主要包括溫度的設定、工作模式的設定、通信控制按鈕、和溫度顯示部分;另一部分主要完成歷史數據的顯示,通過(guò)選擇特定的通道和時(shí)間區間,可以在顯示區顯示溫度的變化曲線(xiàn),為此需要在程序中構建一個(gè)數據庫文件用來(lái)存放歷史數據,這部分會(huì )在后面詳細介紹。
首先使用設計器創(chuàng )建界面的對話(huà)框,在對話(huà)框中添加組件,如:添加按鈕以調用其他類(lèi)來(lái)實(shí)現界面的控制,添加LCDNumber控件來(lái)模擬顯示溫度,添加下拉菜單來(lái)進(jìn)行不同通道的選擇等。連接組件的SIGNAL/SLOT以響應事件,修改控件屬性,合理調整布局。保存GUI界面為T(mén)emperature.ui,根據設計器保存的界面文件(ui文件)使用uic命令生成.h頭文件。
在Qt下,使用多重繼承的方式設計我們自己的界面類(lèi),這需要從標準的QTabWidget類(lèi)和Qt設計器生成的界面類(lèi)繼承,如圖3所示。
在界面類(lèi)MytemperWid中,定義GUI界面所需要的槽函數,如:定義Displaynumber()函數用于顯示接收到的數據,定義Connect_serial()和Disconnect_serial()分別用于連接和斷開(kāi)端口,定義CreatSqliteDB()用于創(chuàng )建數據庫等。
MytemperWid類(lèi)的程序片段如下:
class MytemperWid:public QTabWidget,public Ui::Temperature
{ Q_OBJECT
public:
Mytempwid(QWidget *parent =0);
public slots:
void Displaynumber(); //接收并顯示溫度信息
void Connect_serial(); //連接端口
void Disconnect_serial(); //斷開(kāi)端口
void CreatSqliteDB(); //創(chuàng )建數據口
… …
private:
… …
};
2.2 Web Server的設計
Boa是嵌入式 Web Server中的代表,對于Boa的移植非常簡(jiǎn)單[4],配置好交叉編譯器后,編譯Boa源代碼,將生成的應用程序放入根文件系統的/bin目錄下,接下來(lái)完成Boa的配置。
Boa需要在/etc目錄下建立一個(gè)boa目錄,里面放入Boa的主要配置文件boa.conf。在Boa源碼目錄下已有一個(gè)示例boa.conf,可以在其基礎上進(jìn)行修改。首先修改Group為User,修改User為boa,要根據自己開(kāi)發(fā)板的情況設定,一定要是存在的用戶(hù)和組。設置ServerName可以為想要的任何名字,接下來(lái),從Linux主機的/etc目錄下將mine.types文件復制到文件系統/etc目錄下。最后,創(chuàng )建日志文件所需的目錄/var/log/boa,HTML文檔的主目錄/var/www,CGI腳本所在目錄/var/www/cgi-bin。
配置工作完成以后,設定開(kāi)發(fā)板的ip與主機在同一網(wǎng)段,運行boa,即可開(kāi)啟boa服務(wù)器,將靜態(tài)網(wǎng)頁(yè)放入/var/www目錄下,在瀏覽器中輸入開(kāi)發(fā)板ip即可看到網(wǎng)頁(yè)運行,對于動(dòng)態(tài)網(wǎng)頁(yè),要編寫(xiě)相應的CGI程序,編譯后放入/var/www/cgi-bin目錄。
CGI是Web服務(wù)器與你的或其他機器上的http程序進(jìn)行“交談”的一種工具,其程序需運行在網(wǎng)絡(luò )服務(wù)器上。在本設計中,ARM板通過(guò)串口與下位機進(jìn)行通信,遠程PC無(wú)法直接與下位機進(jìn)行通信,所以采用數據庫作為數據的中轉單元,在數據庫中建立兩個(gè)字段,一個(gè)字段用于存放數據信息,另一字段存放控制信息。如圖1系統的結構圖所示,下位機的數據信息通過(guò)串口發(fā)往ARM,將這些信息在LCD上顯示,同時(shí)經(jīng)這些信息保存在數據字段中,CGI程序讀取并處理數據字段信息后,將這些信息顯示在遠程PC的瀏覽器上;另一方面,PC端的控制信息,經(jīng)CGI編碼后存放于數據庫的控制字段中,Qt程序檢查控制字段,根據這些控制信息改變程序運行狀態(tài)。
2.3 數據庫的設計
SQLite是一款輕型的數據庫,它的設計目標是嵌入式,占用資源低、能夠支持Windows/Linux/Unix等主流的操作系統,與Mysql、PostgreSQL這兩款開(kāi)源世界著(zhù)名的數據庫管理系統相比,它的處理速度快[5]。Qt的QtSql模塊由三部分組成,分別是驅動(dòng)層、SQL接口層、用戶(hù)接口層。QtSql模塊為不同層次的用戶(hù)提供了豐富的數據庫操作類(lèi)。
在進(jìn)行數據庫操作前,必須首先建立與數據庫的連接。QtSql模塊使用驅動(dòng)插件與不同數據庫接口通信,目前Qt4支持幾乎所有主流數據庫。在配置Qt時(shí),選擇將SQLite驅動(dòng)內置于Qt中或者編譯成插件。在使用QtSql模塊時(shí),需要對工程進(jìn)行配置:在頭文件中加入語(yǔ)句#include;在工程的.pro文件中加入Qt+=sql。經(jīng)配置后,在Qt應用程序中就可以連接并使用SQLite數據庫了。在Qt中建立數據庫連接的方法是:
QSqlDatabase db=QSqldatabase::addDatabase('QSQ-LITE');
根據本系統的要求,要監控8個(gè)通道的溫度數據,能根據這些數據繪制歷史曲線(xiàn),所以數據庫要包含一個(gè)時(shí)間字段和八個(gè)溫度值字段,同時(shí)還要一個(gè)數值字段和一個(gè)控制字字段用于與遠程PC的通信,在Qt程序中可以使用如下語(yǔ)句建立數據庫:
QSqlQuery q;
q.exec('CREATE TABLE temperature (datetime DOUBLE,''channel1 DOUBLE,''channel2 DOUBLE,''channel3 DOUBLE,''channel4 DOUBLE,''channel5 DOUBLE,''channel6 DOUBLE,''channel7 DOUBLE,''channel8 DOUBLE,''webdate DOUBLE,''webcontrol DOUBLE)');
建立數據庫后,就可以使用INSERT、DELETE等SQL語(yǔ)句對數據庫進(jìn)行插入、刪除等操作了。
3 運行實(shí)例
根據上文所提出的技術(shù)方案和Qt/E程序設計思想,在S3C2410ARM處理器上完成了系統的開(kāi)發(fā),系統運行界面截圖如圖4所示。
選則好通道和時(shí)間區間,可以查看各通道不同時(shí)間段內的歷史曲線(xiàn)圖,如圖5所示。
在開(kāi)發(fā)板上運行Boa服務(wù)器,設置開(kāi)發(fā)板ip為192.168.1.100,在遠程PC上打開(kāi)瀏覽器,輸入“http://192.168.1.100/cgi-bin/temperature”,則可在瀏覽器上監控系統運行,如圖6所示。
根據燃料電池開(kāi)發(fā)過(guò)程中對溫度監控的需要設計了實(shí)時(shí)監控系統及GUI界面,本文詳細介紹了整個(gè)系統的結構及系統各部分的開(kāi)發(fā)流程,基于Qt/E類(lèi)庫,設計了監控系統的GUI及程序結構。實(shí)際運行結果表明,所提出的設計方法能夠滿(mǎn)足應用的需要。
本設計與初步應用表明,采用Qt/Embedded作為開(kāi)發(fā)圖形界面工具,利用其結構清晰的特點(diǎn)和跨平臺性,能有效縮短項目的開(kāi)發(fā)周期,提高程序代碼的重用率,是開(kāi)發(fā)嵌入式系統GUI界面的有效工具。
評論