陳淑敏,郭獻(xiàn)崇
(張家口職業(yè)技術(shù)學(xué)院信息工程系,河北張家口 075051)
虛擬儀器面板的設(shè)計(jì)主要是利用控件的屬性以及用戶界面函數(shù)庫(kù)(User Interface Library)中提供的函數(shù),設(shè)計(jì)符合需求的儀器面板。通過(guò)這些控件屬性和函數(shù)的調(diào)用,可以非常容易地把采集或仿真的波形進(jìn)行處理后,顯示在Panel的Graph控件或其他控件中。同時(shí),通過(guò)這些函數(shù)可編輯與改變某個(gè)控件的屬性值。
在LabWindows/CVI集成開發(fā)環(huán)境中設(shè)計(jì)虛擬汽車儀表盤的步驟如下:
(1)通過(guò)模-數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口。
(2)指示每小時(shí)公里數(shù)、行駛的里程、耗油量。
(3)顯示發(fā)動(dòng)機(jī)轉(zhuǎn)速。
(4)如果車速超過(guò)一個(gè)限定值(限定值可調(diào)節(jié)),則發(fā)出警報(bào)。
(5)油量低于某一限定值(限定值可調(diào)節(jié)),則發(fā)出報(bào)警。
當(dāng)儀器運(yùn)行時(shí),通過(guò)函數(shù)產(chǎn)生數(shù)據(jù)流,運(yùn)行結(jié)果在儀器面板上顯示。
當(dāng)關(guān)閉儀器時(shí),選擇“關(guān)閉”按鈕將結(jié)束操作,關(guān)閉儀器,并退出該程序。
虛擬汽車儀表盤用戶界面:
具體的虛擬儀器設(shè)計(jì)包括如下三個(gè)步驟。
(1)創(chuàng)建用戶界面
創(chuàng)建用戶界面的實(shí)質(zhì)就是生成*.uir文件。包括建立儀器面板(panel),在面板中加入控件,修改儀器面板(panel)和控件屬性,保存*.uir文件等過(guò)程。
(2)程序源代碼的設(shè)計(jì)
完成完整的C語(yǔ)言程序源代碼設(shè)計(jì)包括形成源代碼和框架,添加程序代碼,保存程序代碼等過(guò)程,最終形成*.c文件。
(3)形成工程文件并運(yùn)行
將*.uir、*.c以及*.h文件合成在一起形成工程文件(*.prj)。包括形成工程文件,保存工程文件及運(yùn)行工程文件等過(guò)程。
創(chuàng)建用戶界面包括創(chuàng)建控件和修改控件屬性兩個(gè)過(guò)程。當(dāng)LabWindows/CVI啟動(dòng)后,選擇File-New,將出現(xiàn)空白工程窗口。
(1)創(chuàng)建控件
本設(shè)計(jì)包括鈕類控件、定時(shí)器控件、顯示控件、Numeric控件、指示燈控件等。每個(gè)控件有名稱等屬性。創(chuàng)建控件就是在儀器面板(panel)上添加控件的過(guò)程。
首先,需要?jiǎng)?chuàng)建儀器面板。在工程窗口中,選擇File-New-Userface(*.uir),創(chuàng)建一個(gè)用戶界面(*.uir),然后打開用戶界面編輯窗口。需要在用戶界面編輯窗口中,選擇Create-Panel建立儀器面板。
根據(jù)設(shè)計(jì)所要實(shí)現(xiàn)的功能在儀器面板中逐個(gè)創(chuàng)建控件,用鼠標(biāo)把它們拖到相應(yīng)的位置,建立好虛擬面板。
(2)修改用戶界面中各控件元素的屬性
通過(guò)上述步驟建立的控件屬性還沒(méi)有設(shè)置,例如圓形按鈕顯示的文字為系統(tǒng)的默認(rèn)值“OK”,而要求顯示的是漢字“點(diǎn)火”。通過(guò)控件元素屬性的設(shè)置,完成所要求的用戶界面。
◎修改Panel的屬性
雙擊Untitled Panel ,彈出Edit Panel窗口。本設(shè)計(jì)中,儀器面板需要設(shè)置的屬性為標(biāo)題文字的設(shè)置。在“Panel Title”屬性文字框中輸入“汽車數(shù)字儀表面板”,這時(shí),右邊編輯窗口中的標(biāo)題隨之改變。設(shè)計(jì)完畢后,單擊“OK”按鈕,完成Panel屬性的設(shè)置。
◎按鈕控件屬性的設(shè)置
按鈕控件屬性的設(shè)置包括控件回調(diào)函數(shù)、空間名稱、控件標(biāo)題屬性的設(shè)置。雙擊相應(yīng)按鈕控件將會(huì)彈出按鈕控件屬性設(shè)置窗口。在“Source Code Connection”欄內(nèi)的回調(diào)函數(shù)“Callback Function”一欄中輸入相應(yīng)的回調(diào)函數(shù)名稱。在“Lable”一欄中輸入控件按鈕標(biāo)題屬性,完成按鈕控件屬性的設(shè)置。
◎顯示控件Numeric Meter屬性的設(shè)置
雙擊顯示控件Numeric Meter,出現(xiàn)設(shè)置面板。一般情況下,需要設(shè)置的屬性有:默認(rèn)值的設(shè)置(在Default Value欄中輸入);數(shù)據(jù)類型屬性的設(shè)置(在Date Type欄中選擇);標(biāo)題屬性的設(shè)置(在Label欄中輸入相應(yīng)的文字);表盤刻度屬性的設(shè)置:選擇“Range Values”按照要求進(jìn)行選擇,以改變刻度盤的刻度值。
◎定時(shí)器控件Timer屬性的設(shè)置
定時(shí)器控件Timer所要設(shè)置的屬性包括回調(diào)函數(shù)名稱和定時(shí)間隔時(shí)間屬性兩部分。
控件回調(diào)函數(shù)的設(shè)置:在“Source Code Connection”欄內(nèi)的回調(diào)函數(shù)“Callback Function”一欄中輸入回調(diào)函數(shù)的名稱。
定時(shí)間隔時(shí)間屬性的設(shè)置:將“Control Settings”欄中輸入數(shù)值,此數(shù)值根據(jù)需要多少時(shí)間調(diào)用一次回調(diào)函數(shù)來(lái)確定。
當(dāng)上述控件屬性設(shè)置完畢之后,單擊“OK”按鈕,完成控件屬性的修改。
◎?qū)ntitled.uir文件存盤
選擇File-Save As將Untitled.uir文件另存,系統(tǒng)自動(dòng)生成(.h)文件。
至此,用戶界面文件的設(shè)計(jì)結(jié)束。
下面要做的是程序編寫工作。由于LabWindows/CVI可自動(dòng)生成程序代碼框架及默認(rèn)的處理函數(shù),只添加一些必須的代碼即可完成程序的設(shè)計(jì)編寫。
(1)產(chǎn)生程序源代碼框架
(2)添加程序代碼
(3)保存編輯好的C文件
(1)保存工程文件
選擇Edit-Add-Files To Project依次將*.uir、*.c以及*.h文件加入,完畢后再選擇File-Save將工程文件(*.prj)保存。
(2)運(yùn)行工程文件
選擇Run-Run Proj]ect來(lái)運(yùn)行工程文件。
(1)接口程序
double sensor (void)
{ char RecieveData[9];
char SendData[4];
OpenComConfig (1, "", 9600, 0, 8, 1, 512, 512);
SendData[0]='#';
SendData[1]='0';
SendData[2]='1';
SendData[3]=' ';
ComWrt (1, SendData, 4);
ComRd (1, RecieveData, 9);
data=(RecieveData[2]-RecieveData[2])*100+(RecieveData[3]-RecieveData[2])*10+(RecieveData[4]-RecieveData[2])+(RecieveData[6]-RecieveData[2])*0.1;
return data;
}
(2)*.h文件C語(yǔ)言說(shuō)明部分程序
/*******************************************/
/* LabWindows/CVI User Interface Resource (UIR) Include File
*/
/* Copyright (c) National Instruments 2004. All Rights Reserved.
*/
/*
*/
/* WARNING: Do not add to, delete from, or otherwise modify the contents
*/
/* of this include file.
*/
/*******************************************/
#include
#ifdef __cplusplus
extern "C" {
#endif
/* Panels and Controls: */
#define PANEL 1 /? callback function: PanelCallback ?/ #define PANEL_SHISU 2 #define PANEL_LICHENG 3 #define PANEL_YOULIANG 4 #define PANEL_LED_chaosu 5 #define PANEL_LED_meiyou 6 #define PANEL_CLOSE 7 /? callback function: Close ?/ #define PANEL_DIANHUO 8 /? callback function: Dianhuo ?/ #define PANEL_TOGGLEBUTTON_3 9 /? callback function: Togglebutton_3 ?/ #define PANEL_TOGGLEBUTTON_2 10 /? callback function: Togglebutton_2 ?/ #define PANEL_TOGGLEBUTTON_1 11 /? callback function: Togglebutton_1 ?/ #define PANEL_YOUXIAN 12 #define PANEL_XIANSU 13 #define PANEL_F_ZHUANSU 14 #define PANEL_TIMER_1 15 /? callback function: Timer_1 ?/ #define PANEL_TIMER_2 16 /? callback function: Timer_2 ?/ #define PANEL_TIMER_3 17 /? callback function: Timer_3 ?/ #define PANEL_TIMER_dianhuo 18 /? callback function: Timer_dianhuo ?/ #define PANEL_TIMER 19 /? callback function: TimerCallback ?/ 。。。。。。。。。。。
參考文獻(xiàn):
[1]劉君華.基于LabWindows/CVI的虛擬儀器設(shè)計(jì)[M]. 電子工業(yè)出版社,2003.
[2]雷振山.LabVIEW 7 Express實(shí)用技術(shù)教程[M]. 機(jī)械工業(yè)出版社,2004.
[3]馬法成.LabVIEW入門培訓(xùn)教材. 天津中德職業(yè)技術(shù)學(xué)院,2001.
[4]張毅剛 等.虛擬儀器軟件開發(fā)環(huán)境[M]. 機(jī)械工業(yè)出版社,2002.
張家口職業(yè)技術(shù)學(xué)院學(xué)報(bào)2010年1期