基于GPL(General Public License)架構之下的Linux,具有硬件需求低,架構開放,系統穩定,保密性好等特點,嵌入式Linux的這些優點正好符合工控領域安全性,穩定性,實時性和易維護等要求。另外,嵌入式Linux操作系統中一個重要的組成部分就是圖形用戶界面GUl(Graphic User Interface)。風電控制系統中人機界面功能復雜,種類繁多,其性能的好壞主要取決于圖形功能的設計。利用Qt/Embedded(簡稱qte)開發的GUI,能實現系統的監視,控制,管理等功能。 1 控制界面的圖形化設計 在風電控制界面設計中,對用戶特征分析十分重要,用戶一般是受過訓練的,經常使用計算機而且有相當經驗的非程序員用戶。其人機界面開發中應考慮以下幾方面: (1)安全性:設定操作員級別,使畫面顯示,執行和操作根據權限的不同而有區別。 (2)順序原則:信息分層,增強可讀,集成一致性。 (3)圖形系統:完成特定圖形的輸入,顯示和操作。 (4)實時數據的操作:對現場采集的數據能在限定的時間內給予顯示,通過畫面方便的在線調節和設定一些參數。如風電中風速顯示,葉輪的轉角調節等。 (5)先進的報警系統。 眾多的自動化控制設備,如微機調速器以及微機測量儀表等它們采用小體積的Flash或ROM,處理器性能相對較弱,它們適合用嵌入式GUI來完成人機交互的操作。嵌入式Linux系統的有代表性的GUI系統主要有MiniGUI、Microwindows、TinyX以及Qt/Embedded。很多工控軟件是使用c++語言編寫的,而且系統本身對庫的健壯性,穩定性要求比較高,用qte能設計出優秀的圖形界面,并且能和其它C++程序互相調用。 2 開發過程 開發使用的硬件平臺為H9200F系統主板,它是基于嵌入式工業控制系統的開發套件。系統的核心是32位ARM920T核的高速ARM處理器AT91RM9200,移植了Uboot,設備的驅動程序包括觸摸屏驅動和unux-2.4.27的內核,交叉編譯工具為cross-2.95.3。 2.1 建立交叉編譯環境 嵌入式系統應用軟件的開發屬于跨平臺開發,因為嵌入式設備所用的CPU和Pc機上的CPU有著不同的架構,需要一個交義開發環境在PC機上編譯出適用于嵌入式設備CPU架構的軟件。用來開發的計算機一般稱為宿主機(X86),它運行Linux程序;嵌入式設備稱為目標機,一般就是目標板(arm),所以我們必須配置兩套開發環境((for ARM和for X86)。如圖1為完整的嵌入式Qt程序開發流程。 ![]() 圖1 嵌入式Qt交叉編譯開發過程 從網上下載免費的Qt/Embedded開發包,本系統采用qte3.3.4的版本:qt-embedded-free-3.3.4.tar.gz,qt-x11-free-3.3.4.tar.gz。其軟件包中自帶了qmake,可以生成工程文件和Makefile文件。 * 將壓縮包解壓后安裝在主機上。在qte的安裝過程中,研究了以下幾個問題: (1)./configure后的命令指定Qt嵌入式開發包能否生成虛擬緩沖幀工具qvfb,支持的顯示顏色深度,支持的圖形種類等。如果qte的應用是在UNIX/Linux平臺下開發的話,那么qvfb就可以在機器上以一個獨立的控制臺或者虛擬緩沖幀的方式來運行,通過指定顯示設備的寬度,高度和顏色深度,虛擬出來的緩沖幀將和物理的顯示設備在每個像素卜保持一致。這樣每次調試應用時開發人員就不用總是刷新嵌入式設備的FLASH存儲空間。從而加速了應用的編譯、鏈接和運行周期。 (2)安裝完成后為保證每次運行程序的路徑都足正確的,需要修改個人設定文檔中的~/.bashrc文件或者~/.bash_profile或者系統路徑文件,在文檔中加入幾個路徑變量,特別是QTEDIR=qte安裝路徑,QTDIR=qte安裝路徑和qte的lib文件路徑的設定。 (3)運行qvfb,若無法找到輸入設備,如顯示/dev下沒有fb0設備,則列臨時文件夾/tmp下刪除相應的文件;如果是缺少字庫,則將系統里的字庫拷貝到QTDIR/lib下,最后必須保證環境變量PATH能搜尋到qvtb命令。 * 第二步是在交義編譯的目錄下重新安裝能編譯目標板arm程序的qte。 首先在交叉編澤目錄下重新解壓qt-embedded-free-3.3.4.tar.gz,將X86的QTEDIR/bin文件罩的moc和uic二進制文件復制到交義編譯的目錄下的bin文件夾里。然后配置交叉編譯工具(如qmake),修改.conf文件,指定文件的編譯器為安裝的交叉編譯工具,即QMAKE_CC,QMAKE_CXX,QMAKE_LINK,QMAKE_LINK_SHLIB所用的工具。 精簡Qt就在于make命令,按開發的實際需求可以增減Qt庫的大小。qte開發包有5種編譯范圍的選項,使用這些選項,可控制Qt生成的庫文件的大小。每個選項都對應在$QTDIR/src/tools/的.h(標頭檔)文件里.Tmlltech把這些標頭檔定義為“Feature Definition Files”(特征定義檔)。除廠使用已有的五種定義外,也可以根據實際定義Qt的特征,把在sre/tools/中所不需要的項目用QT_NO_記錄下來創造一個自定義標頭檔,但是還要注意項目之間功能的相依性問題。 最后,執行strip命令:#strip -R.note -R.comment $QTDIR/lib/lihqte.so*。將交叉編譯好的Qt庫libqte.so*下載到開發板中的某個目錄下。 2.2 Qt/Embedded開發程序過程 Qt/Embedded的開發有兩種方式,一種是圖形編程方式,一種是傳統的代碼編程方式。不論是使用圖形界面編程還是直接寫代碼。都會涉及到Qt的元對象系統。Qt的一個主要成就就是使用了一個機制擴展了c++并且可以創建獨立的軟件組件。這種機制被稱為元對象系統,它有兩個關鍵技術:信號和槽,以及內省(introspection)。內省功能是實現信號和槽的基礎,它允許程序員在運行時獲得有關QObject子類的“元信息”,包含對象的類名以及它所支持的信號和槽的列表。但是標準的c++沒有對Qt元對象系統提供支持。Qt通過提供一個獨立的工具moc來解析Q_OBJECT類定義。moc使用純c++來實現它所有功能,所以Qt的元對象系統可以在任意C++編譯器上工作。 ![]() 圖2 Qt/Embedded編程過程 * 利用Qt Designer開發 這是一種所見即所得的方式。啟動Qt圖形編輯器,編輯GUI界,保存后得到.ui文件。在Qt Designer的代碼編輯器里輸入的代碼保存為file.ui.h文件(一個C++源文件)。雙擊窗體啟動Qt Designer的代碼編輯器,可以添加所制窗口的一些額外功能。比如添加新的槽函數.Qt Designer會自動監測到在代碼中已經創建了一個新槽,并且Uic(User Interface Compiler)會在窗體的類定義中自動生成正確的函數聲明。在Qt中,uic是從XML文件生成代碼的用戶編輯器,用來將fiie.ui文件生成file.h和file.cpp文件。 在風電控制系統中為了設定用戶級別,對信息進行安全管理和根據權限而限制操作范圍,一般需要有用戶登錄管理,如: ![]() 圖3 用戶管理界面 兩個界面是用Qt Designer開發的,它們進行切換的功能就可以在代碼編輯器中蓖寫accept ()函數實現,即:Login1的對象->hide0;Login2的對象->show0, * 編寫程序開發 這是一般程序員開發程序時所用的方式。在控制界面中,需要使用很多圖元和圖標,系統應該有圖庫集和能調入圖形的擴展接口;蛘呤怯凶约航⒌幕緢D元。Qt中有很多為應用程序提供圖片的方法。常用的有: (1)在運行時候把圖片保存到文件中并且載人它們; (2)在源文件中包含XMP文件(因為XMP文件也是有效的C++文件) (3)使用Qt的圖片集機制。 圖片集方法比在運行的時候載入文件更加方便和迅速,并且它可以和所有支持的文件格式一起工作。這些圖片被存放在源代碼樹中名為images的子目錄下。 程序中繼承QMainWindow()類編寫桌面,采用Qt的布局管理器QGridLayout().QVBoxLayout()和QHBoxLayout(),在桌面上雙擊第三個圖標Item 3打開表格處理程序為: ![]() 圖4 桌面系統 void desktop::iconView() { QIconView *qiconview=new QIconView(this);//定義按鈕類對象 ⋯//對象的屬性設定 QIconViewItem *itemX:new QIconViewItem(qiconview, QString("Item X")); //定義各個按鈕 ⋯//按鈕屬性(setRenameEnabled(),setPixmap()等) QObject::connect(qiconview,SIGNAL(doubleClicked(QIconViewItem *)),this,SLOT(itemClicked(QIconViewItem *)));//按鈕信號與槽的設定 ⋯//鼠標移動按鈕的監聽} void desktop::itemClicked(QIconViewItem *item)//按鈕按下的槽函數 {int id=item->index(); switch(id){ case 0-2:{...//其他應用程序}break; case 3:{表格程序的對象base; base->show0; base的屬性設定;}break;⋯} 2.3 將程序發布到目標板上 將開發好的Qt/Embedded程序用交叉編譯工具重新編譯成可執行文件,生成二進制目標可執行代碼,再將嵌入式目標系統掛載到Linux宿主機的共享分區,讓qte程序直接運行在嵌入式目標系統,并進行調試。調試成功以后,就可以把程序同化到系統的FLASH存儲器中。如果需要程序開機自動運行,可以編輯啟動時的執行文件/usr/etc/rc.local,將啟動運行的程序路徑及文件名添加到這里,就可以實現系統啟動時的程序自動運行。 3 結束語 桌面系統實現了圖像數據的載入,文字編輯,表格處理和屏幕鍵盤等基礎功能,為開發風力發電組態軟件提供了一個很好的平臺。本文的創新點在于:1.以設計風力發電控制臺人機交互界面為前提,以用戶需求結合qte特點來開發嵌入式GUI。2.對qte安裝和編程上的技術問題做了詳細分析,提出精簡qte的方法。 作者:趙瑩,徐大平,呂躍剛 來源:《微計算機信息》(嵌入式與SOC)2009年第4-2期 |