姜帥琦
(南京農(nóng)業(yè)大學(xué) 工學(xué)院,江蘇 南京 210031)
Labview軟件簡(jiǎn)介:
本設(shè)計(jì)采用Labview軟件進(jìn)行開發(fā)設(shè)計(jì)。Labview是美國(guó)NI公司的一種基于G語(yǔ)言的虛擬儀器軟件開發(fā)工具。它的顯著特點(diǎn)是:采用簡(jiǎn)單易學(xué)的圖形化編程,提供眾多的設(shè)備驅(qū)動(dòng)程序和可供用戶直接調(diào)用且功能強(qiáng)大的函數(shù)庫(kù)和Windows動(dòng)態(tài)鏈接庫(kù)函數(shù),實(shí)現(xiàn)多線程編程等高級(jí)功能。并提供靈活的程序調(diào)試手段,既可以設(shè)置斷點(diǎn)又可以設(shè)置探針,在程序運(yùn)行中觀察數(shù)據(jù)流的變化。
Labview編寫的程序叫虛擬儀器程序,包括軟面板設(shè)計(jì)和流程圖設(shè)計(jì)2部分。軟面板代替常規(guī)儀器的控制面板,一般由開關(guān)、旋鈕、表頭、顯示器和其他部件組成。儀器流程圖的設(shè)計(jì),是根據(jù)儀器功能的要求,利用虛擬儀器開發(fā)平臺(tái)提供的子模板,確定程序的流程圖、主要處理算法和所實(shí)現(xiàn)的技術(shù)方法。流程圖與每個(gè)儀器的前面板對(duì)應(yīng),用戶能夠通過前面板,用鼠標(biāo)或控件操作儀器。
Labview具有功能強(qiáng)大的函數(shù)模塊庫(kù),特別適用于測(cè)試和控制系統(tǒng)的開發(fā)。結(jié)合NI的硬件模塊,能夠方便的進(jìn)行采集和分析相關(guān)測(cè)試數(shù)據(jù)。考慮到儀表整體功能測(cè)試和模塊功能測(cè)試的需要,整個(gè)系統(tǒng)主要包括界面模塊和各個(gè)功能測(cè)試模塊。根據(jù)信號(hào)類型將儀表功能測(cè)試分為:車速表測(cè)試模塊、發(fā)動(dòng)機(jī)轉(zhuǎn)速表測(cè)試模塊、燃油表測(cè)試模塊、水溫表測(cè)試模塊等主要功能模塊。
程序設(shè)計(jì)主要由兩部分組成:上位機(jī)程序設(shè)計(jì)和下位機(jī)程序設(shè)計(jì),而在編寫雙方通信程序之前,必須先定義好雙方的通信協(xié)議,采用相應(yīng)的數(shù)據(jù)傳輸方法,這樣才能保證數(shù)據(jù)的可靠性。
串行通信是一種常用的數(shù)據(jù)傳輸方法,雖然它的傳輸速度慢,但由于它占用的通信線路少、成本低、容易實(shí)現(xiàn)等優(yōu)點(diǎn),在數(shù)據(jù)通信方式上仍占有重要地位。目前,串口通信程序的開發(fā),在Windows操作系統(tǒng)下一般用VB、VC、VF Delphi等許多高級(jí)語(yǔ)言編寫。當(dāng)用VB、VC、VF,開發(fā)串行通信程序時(shí),開發(fā)人員不得不面對(duì)非常煩瑣的API函數(shù)編程;用文本語(yǔ)言編串口通信程序較為復(fù)雜,花費(fèi)的時(shí)間較長(zhǎng)。所以在主機(jī)通信程序設(shè)計(jì)中,我們采用LabVIEW圖形化語(yǔ)言作為編程語(yǔ)言,它把高級(jí)語(yǔ)言中的函數(shù)封裝為圖形功能模塊,圖標(biāo)間的連線表示各個(gè)功能模塊之間的數(shù)據(jù)傳遞。編程方式簡(jiǎn)單、直觀、便于使用。串口通信功能模塊包括串口初始化模塊、串口讀模塊以及串口寫模塊,通過這些模塊就可以實(shí)現(xiàn)對(duì)單片機(jī)的控制。
VISA的調(diào)用流程如圖1所示。通過對(duì)VISA節(jié)點(diǎn)的調(diào)用,可以方便、快速地實(shí)現(xiàn)系統(tǒng)上位機(jī)對(duì)下位機(jī)的實(shí)時(shí)監(jiān)控。
在LabVIEW功能模板的Function >>InstrumentI/O >>VISA 程序庫(kù)中包含進(jìn)行串行通信操作的一些功能模塊:
圖1
該節(jié)點(diǎn)主要用于串口的初始化,在利用計(jì)算機(jī)控制串口儀器設(shè)備時(shí),會(huì)經(jīng)常用到這個(gè)節(jié)點(diǎn)在進(jìn)行串行通信前,首先要配置好串口,即先初始化串口,使計(jì)算串口的各種參數(shù)設(shè)計(jì)與儀器設(shè)備的串口保持一致,這樣才能正確的通信。它的主要參數(shù)意義如下:
VISA resource name:VISA資源名稱,本文指串口號(hào)。
baud rate:波特率,默認(rèn)為 9600。
data bits:一幀信息中的位數(shù),LabVIEW中允許5-8位數(shù)據(jù),默認(rèn)值為8位。
stop bits:一幀信息中的停止位的位數(shù),可為1位、1位半或2位。
Parity:奇偶校驗(yàn)設(shè)置??蔀闊o校驗(yàn)、奇校驗(yàn)或偶校驗(yàn)。
flow control:該參數(shù)數(shù)據(jù)類型為簇,用于串行通訊中的握手方式。
V該節(jié)點(diǎn)為串口讀子VI,為本文中的主要節(jié)點(diǎn),將串口中的數(shù)據(jù)讀出,然后利用LabVIEW的強(qiáng)大數(shù)據(jù)處理功能對(duì)其進(jìn)行分析處理。主要參數(shù)意義如下:
ISA resource name:VISA資源名稱,本文指串口號(hào)。
byte count:用于設(shè)置所要讀的字符數(shù)。由于LabVIEW的串行通訊子V1只允許對(duì)字符串的讀寫,因此本文中在進(jìn)行數(shù)據(jù)處理時(shí),必須要實(shí)現(xiàn)字符串與數(shù)字之間的正確轉(zhuǎn)換。此外,若要讀入當(dāng)前串口中的所有字符,則要執(zhí)行“VISA Sytes at Serial Port”子VI,用以確定將要讀入的確切的字節(jié)數(shù),然后將其輸出作為VISARead節(jié)點(diǎn)的輸入即可。
圖2
VISA Write節(jié)點(diǎn)的功能是向VISA resource name所代表的儀器或接口寫入信息。輸入?yún)?shù)VISA resource name是VISA Open函數(shù)所返回的,或者“流過”其他VISA函數(shù)的,包含了會(huì)話信息的VISA資源名;write buffer為字符串類型的寫入數(shù)據(jù),輸出參數(shù)dup VISA resource name為輸入?yún)?shù)VISA resource name的一個(gè)備份,可用于后繼的VISA函數(shù)調(diào)用。整型輸出參數(shù)return count返回實(shí)際寫入數(shù)據(jù)的字節(jié)數(shù)。
圖3
主要參數(shù):
VISA resource name:VISA資源名稱,本文指串口號(hào)。
本文所用LabVIEW串口通訊程序的波特率為96O0,無奇偶校驗(yàn),8位數(shù)據(jù)位,1位停止位,禁止軟、硬件握手。
該節(jié)點(diǎn)用于將打開的VISA資源關(guān)閉,VISA resource name輸入?yún)?shù)為包含會(huì)話信息的資源名。該函數(shù)關(guān)閉VISA會(huì)話,并釋放與之關(guān)聯(lián)的所有資源。
該函數(shù)功能為打開一個(gè)與VISA resource name所代表儀器資源的會(huì)話。會(huì)話是VISA resource name參數(shù)本身隱含攜帶的儀器訪問邏輯標(biāo)識(shí),可以同時(shí)存在對(duì)一個(gè)VISA資源的多個(gè)訪問會(huì)話。在調(diào)用VISA Open之前VISA resource name參數(shù)僅僅是一個(gè)資源描述字符串,在函數(shù)調(diào)用之后,輸出參數(shù)VISA resource name已經(jīng)攜帶了會(huì)話信息,可以用于后繼的VISA操作。輸入?yún)?shù)為包含會(huì)話信息的資源名。
當(dāng)完成VISA資源的搜索后,對(duì)于搜索到的VISA資源,可以通過VISA Open節(jié)點(diǎn)打開,建立計(jì)算機(jī)與這些VISA資源之間的通信管道。
在Labview環(huán)境中使用串口與在其它開發(fā)環(huán)境中開發(fā)過程類似,基本的流程框如圖4:
圖4
首先需要調(diào)用VISA Configure Serial Port完成串口參數(shù)的設(shè)置,包括所用串口號(hào)、比特率、一幀信息中有效數(shù)據(jù)的位數(shù)、停止位、奇偶校驗(yàn)、數(shù)據(jù)流量控制等,如下圖5:
圖5
如果初始化沒有問題,就可以使用這個(gè)串口進(jìn)行數(shù)據(jù)收發(fā)。
發(fā)送數(shù)據(jù)使用VISA Write,接收數(shù)據(jù)使用VISARead。如果VISA Read要讀取的字節(jié)數(shù)大于緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),VISA Read操作將一直等待,直至Timeout或者緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)達(dá)到要求的字節(jié)數(shù)。
在某些特殊情況下,需要設(shè)置串口接收/發(fā)送緩沖區(qū)的大小,此時(shí)可以使用VISA Set I/O BufferSize;而使用VISA Flush I/O Buffer則可以清空接收與發(fā)送緩沖區(qū)。在串口使用結(jié)束后,使用VISA Close結(jié)束與VISAResource Name指定的串口之間的會(huì)話。
首先完成串口的初始化,在此設(shè)置波特率為9600b/s,8位數(shù)據(jù)位,1位停止位,無奇偶校驗(yàn);其次設(shè)置Write/Read等相應(yīng)模塊的功能。
由于硬件在整個(gè)工作期間,以9600bit/s的速率連續(xù)向外發(fā)送數(shù)據(jù),為了數(shù)據(jù)處理方便,可以采用LabVIEW8.6中的Serial Read With Time-out.vi模塊,以保證每次從串口緩存中讀出等量偶數(shù)個(gè)數(shù)據(jù)。
本文中所做的研究需要將實(shí)際采集到的方程式賽車的各種儀表信息存儲(chǔ)到單片機(jī)中,由單片機(jī)提供數(shù)據(jù)給上位機(jī)進(jìn)而實(shí)現(xiàn)數(shù)據(jù)的顯示,再通過PC機(jī)的RS-232串行接口與外部設(shè)備進(jìn)行通信,因此需要實(shí)現(xiàn)PC機(jī)和單片機(jī)之間的通信。本文將論述在Labview環(huán)境下PC機(jī)與AT89S52單片機(jī)之間實(shí)現(xiàn)串行通信的方案。
下位機(jī)的程序包括數(shù)據(jù)采集模塊和串口通信的數(shù)據(jù)傳輸模塊,數(shù)據(jù)采集模塊首先進(jìn)行初始化,通過單片機(jī)控制A/D轉(zhuǎn)換模塊數(shù)據(jù)采集功能,A/D模塊將模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)后發(fā)出中斷,單片機(jī)將傳輸AD模塊采集的信號(hào)到緩沖區(qū)。串口數(shù)據(jù)傳輸模塊在串口通信之前,對(duì)串口進(jìn)行初始化,主要包括串口波特率,數(shù)據(jù)格式,接收中斷的設(shè)置[18]。當(dāng)上位機(jī)發(fā)送數(shù)據(jù)給下位機(jī),會(huì)引起單片機(jī)接收中斷,此時(shí)進(jìn)入中斷服務(wù)程序,單片機(jī)接收數(shù)據(jù),比較校驗(yàn)和,如果相同,發(fā)指令給PC機(jī)確認(rèn),最后將采集到的數(shù)據(jù)通過RS-232串行接口傳送到PC機(jī)。
鍵盤掃描查詢子程序,是提供人機(jī)信息交換的接口。由于采用掃描法,是利用CPU在完成其他工作之余,反復(fù)掃描查詢鍵盤接口,根據(jù)端口的輸入情況,調(diào)用不同的按鍵處理子程序。當(dāng)按鍵按下時(shí),利用軟件延時(shí)去抖動(dòng),然后掃描按鍵位置,讀取準(zhǔn)確數(shù)值,最后完成一次按鍵處理。
當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位選通COM端電路的控制,所以只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。在輪流顯示過程中,每位數(shù)碼管的點(diǎn)亮?xí)r間為1~5ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會(huì)有閃爍感。顯示子程序流程圖如圖6所示。
圖6
單片機(jī)程序用A/D模塊進(jìn)行采集傳感器的值,然后用SCI口將采集的值發(fā)給PC機(jī)。
A/D轉(zhuǎn)換簡(jiǎn)介:
在過程控制和儀器儀表中,多由計(jì)算機(jī)進(jìn)行實(shí)時(shí)控制及實(shí)時(shí)數(shù)據(jù)處理,計(jì)算機(jī)所加工的信息總是數(shù)字量,而被檢測(cè)的對(duì)象卻往往是一些連續(xù)變化的模擬量(如溫度、壓力、速度和流量等),因此需要將模擬量轉(zhuǎn)化成為數(shù)字量,以便在計(jì)算機(jī)中進(jìn)行運(yùn)算處理,此過程稱為模數(shù)(A/D)轉(zhuǎn)換。進(jìn)行A/D轉(zhuǎn)換,需要了解以下的基本問題:
1)采樣精度
采樣精度就是指數(shù)字量變化一個(gè)最小量是模擬信號(hào)的變化量,即通常所說的采樣位數(shù)。設(shè)采樣位數(shù)為N,則最小的能檢測(cè)到的模擬量變化值為1/2N。如圖7所示:
圖7
2)采樣速率
采樣速率是指完成一次A/D采樣所要花費(fèi)的時(shí)間。速率和所選器件的工作頻率有很大關(guān)系。
3)濾波
為了使采樣的數(shù)據(jù)更準(zhǔn)確,必須對(duì)采樣的數(shù)據(jù)進(jìn)行篩選去掉誤差較大的數(shù)據(jù)。通常采用中值濾波和均值濾波來提高采樣精度。中值濾波是取3次采樣的中間值,均值濾波是取多次采樣的算術(shù)平均值。
4)物理量回歸
在實(shí)際應(yīng)用中,得到穩(wěn)定的A/D采樣值后,還需要把A/D采樣值與實(shí)際物理量對(duì)應(yīng)起來。A/D轉(zhuǎn)換的目的是把模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),供計(jì)算機(jī)進(jìn)行處理,但必須知道A/D轉(zhuǎn)換后的數(shù)值所代表的實(shí)際物理量的值,這樣才有實(shí)際意義。
采用NI的Labview軟件系統(tǒng),使得我們建立起一套虛擬儀表平臺(tái),通過該系統(tǒng)可以快速準(zhǔn)確的獲得各項(xiàng)數(shù)據(jù),為我們后續(xù)賽車電子產(chǎn)品的研發(fā)積累了測(cè)試經(jīng)驗(yàn)。虛擬數(shù)字式賽車儀表的應(yīng)用,使儀表的讀數(shù)更加清晰和直觀、信息量更大、智能化程度更高、功耗低及開發(fā)周期短,可用于日常學(xué)科研究中。通過對(duì)Labview的綜合應(yīng)用及與單片機(jī)的相結(jié)合,使方程式賽車的虛擬儀表設(shè)計(jì)更加簡(jiǎn)化快速,Labview也為方程式賽車的其他設(shè)計(jì)提供了更好的平臺(tái)。