姜帥琦
(南京農(nóng)業(yè)大學(xué) 工學(xué)院,江蘇 南京 210031)
Labview軟件簡介:
本設(shè)計采用Labview軟件進行開發(fā)設(shè)計。Labview是美國NI公司的一種基于G語言的虛擬儀器軟件開發(fā)工具。它的顯著特點是:采用簡單易學(xué)的圖形化編程,提供眾多的設(shè)備驅(qū)動程序和可供用戶直接調(diào)用且功能強大的函數(shù)庫和Windows動態(tài)鏈接庫函數(shù),實現(xiàn)多線程編程等高級功能。并提供靈活的程序調(diào)試手段,既可以設(shè)置斷點又可以設(shè)置探針,在程序運行中觀察數(shù)據(jù)流的變化。
Labview編寫的程序叫虛擬儀器程序,包括軟面板設(shè)計和流程圖設(shè)計2部分。軟面板代替常規(guī)儀器的控制面板,一般由開關(guān)、旋鈕、表頭、顯示器和其他部件組成。儀器流程圖的設(shè)計,是根據(jù)儀器功能的要求,利用虛擬儀器開發(fā)平臺提供的子模板,確定程序的流程圖、主要處理算法和所實現(xiàn)的技術(shù)方法。流程圖與每個儀器的前面板對應(yīng),用戶能夠通過前面板,用鼠標(biāo)或控件操作儀器。
Labview具有功能強大的函數(shù)模塊庫,特別適用于測試和控制系統(tǒng)的開發(fā)。結(jié)合NI的硬件模塊,能夠方便的進行采集和分析相關(guān)測試數(shù)據(jù)。考慮到儀表整體功能測試和模塊功能測試的需要,整個系統(tǒng)主要包括界面模塊和各個功能測試模塊。根據(jù)信號類型將儀表功能測試分為:車速表測試模塊、發(fā)動機轉(zhuǎn)速表測試模塊、燃油表測試模塊、水溫表測試模塊等主要功能模塊。
程序設(shè)計主要由兩部分組成:上位機程序設(shè)計和下位機程序設(shè)計,而在編寫雙方通信程序之前,必須先定義好雙方的通信協(xié)議,采用相應(yīng)的數(shù)據(jù)傳輸方法,這樣才能保證數(shù)據(jù)的可靠性。
串行通信是一種常用的數(shù)據(jù)傳輸方法,雖然它的傳輸速度慢,但由于它占用的通信線路少、成本低、容易實現(xiàn)等優(yōu)點,在數(shù)據(jù)通信方式上仍占有重要地位。目前,串口通信程序的開發(fā),在Windows操作系統(tǒng)下一般用VB、VC、VF Delphi等許多高級語言編寫。當(dāng)用VB、VC、VF,開發(fā)串行通信程序時,開發(fā)人員不得不面對非常煩瑣的API函數(shù)編程;用文本語言編串口通信程序較為復(fù)雜,花費的時間較長。所以在主機通信程序設(shè)計中,我們采用LabVIEW圖形化語言作為編程語言,它把高級語言中的函數(shù)封裝為圖形功能模塊,圖標(biāo)間的連線表示各個功能模塊之間的數(shù)據(jù)傳遞。編程方式簡單、直觀、便于使用。串口通信功能模塊包括串口初始化模塊、串口讀模塊以及串口寫模塊,通過這些模塊就可以實現(xiàn)對單片機的控制。
VISA的調(diào)用流程如圖1所示。通過對VISA節(jié)點的調(diào)用,可以方便、快速地實現(xiàn)系統(tǒng)上位機對下位機的實時監(jiān)控。
在LabVIEW功能模板的Function >>InstrumentI/O >>VISA 程序庫中包含進行串行通信操作的一些功能模塊:

圖1
該節(jié)點主要用于串口的初始化,在利用計算機控制串口儀器設(shè)備時,會經(jīng)常用到這個節(jié)點在進行串行通信前,首先要配置好串口,即先初始化串口,使計算串口的各種參數(shù)設(shè)計與儀器設(shè)備的串口保持一致,這樣才能正確的通信。它的主要參數(shù)意義如下:
VISA resource name:VISA資源名稱,本文指串口號。
baud rate:波特率,默認(rèn)為 9600。
data bits:一幀信息中的位數(shù),LabVIEW中允許5-8位數(shù)據(jù),默認(rèn)值為8位。
stop bits:一幀信息中的停止位的位數(shù),可為1位、1位半或2位。
Parity:奇偶校驗設(shè)置。可為無校驗、奇校驗或偶校驗。
flow control:該參數(shù)數(shù)據(jù)類型為簇,用于串行通訊中的握手方式。
V該節(jié)點為串口讀子VI,為本文中的主要節(jié)點,將串口中的數(shù)據(jù)讀出,然后利用LabVIEW的強大數(shù)據(jù)處理功能對其進行分析處理。主要參數(shù)意義如下:
ISA resource name:VISA資源名稱,本文指串口號。
byte count:用于設(shè)置所要讀的字符數(shù)。由于LabVIEW的串行通訊子V1只允許對字符串的讀寫,因此本文中在進行數(shù)據(jù)處理時,必須要實現(xiàn)字符串與數(shù)字之間的正確轉(zhuǎn)換。此外,若要讀入當(dāng)前串口中的所有字符,則要執(zhí)行“VISA Sytes at Serial Port”子VI,用以確定將要讀入的確切的字節(jié)數(shù),然后將其輸出作為VISARead節(jié)點的輸入即可。

圖2
VISA Write節(jié)點的功能是向VISA resource name所代表的儀器或接口寫入信息。輸入?yún)?shù)VISA resource name是VISA Open函數(shù)所返回的,或者“流過”其他VISA函數(shù)的,包含了會話信息的VISA資源名;write buffer為字符串類型的寫入數(shù)據(jù),輸出參數(shù)dup VISA resource name為輸入?yún)?shù)VISA resource name的一個備份,可用于后繼的VISA函數(shù)調(diào)用。整型輸出參數(shù)return count返回實際寫入數(shù)據(jù)的字節(jié)數(shù)。

圖3
主要參數(shù):
VISA resource name:VISA資源名稱,本文指串口號。
本文所用LabVIEW串口通訊程序的波特率為96O0,無奇偶校驗,8位數(shù)據(jù)位,1位停止位,禁止軟、硬件握手。
該節(jié)點用于將打開的VISA資源關(guān)閉,VISA resource name輸入?yún)?shù)為包含會話信息的資源名。該函數(shù)關(guān)閉VISA會話,并釋放與之關(guān)聯(lián)的所有資源。
該函數(shù)功能為打開一個與VISA resource name所代表儀器資源的會話。會話是VISA resource name參數(shù)本身隱含攜帶的儀器訪問邏輯標(biāo)識,可以同時存在對一個VISA資源的多個訪問會話。在調(diào)用VISA Open之前VISA resource name參數(shù)僅僅是一個資源描述字符串,在函數(shù)調(diào)用之后,輸出參數(shù)VISA resource name已經(jīng)攜帶了會話信息,可以用于后繼的VISA操作。輸入?yún)?shù)為包含會話信息的資源名。
當(dāng)完成VISA資源的搜索后,對于搜索到的VISA資源,可以通過VISA Open節(jié)點打開,建立計算機與這些VISA資源之間的通信管道。
在Labview環(huán)境中使用串口與在其它開發(fā)環(huán)境中開發(fā)過程類似,基本的流程框如圖4:

圖4
首先需要調(diào)用VISA Configure Serial Port完成串口參數(shù)的設(shè)置,包括所用串口號、比特率、一幀信息中有效數(shù)據(jù)的位數(shù)、停止位、奇偶校驗、數(shù)據(jù)流量控制等,如下圖5:

圖5
如果初始化沒有問題,就可以使用這個串口進行數(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ū)的大小,此時可以使用VISA Set I/O BufferSize;而使用VISA Flush I/O Buffer則可以清空接收與發(fā)送緩沖區(qū)。在串口使用結(jié)束后,使用VISA Close結(jié)束與VISAResource Name指定的串口之間的會話。
首先完成串口的初始化,在此設(shè)置波特率為9600b/s,8位數(shù)據(jù)位,1位停止位,無奇偶校驗;其次設(shè)置Write/Read等相應(yīng)模塊的功能。
由于硬件在整個工作期間,以9600bit/s的速率連續(xù)向外發(fā)送數(shù)據(jù),為了數(shù)據(jù)處理方便,可以采用LabVIEW8.6中的Serial Read With Time-out.vi模塊,以保證每次從串口緩存中讀出等量偶數(shù)個數(shù)據(jù)。
本文中所做的研究需要將實際采集到的方程式賽車的各種儀表信息存儲到單片機中,由單片機提供數(shù)據(jù)給上位機進而實現(xiàn)數(shù)據(jù)的顯示,再通過PC機的RS-232串行接口與外部設(shè)備進行通信,因此需要實現(xiàn)PC機和單片機之間的通信。本文將論述在Labview環(huán)境下PC機與AT89S52單片機之間實現(xiàn)串行通信的方案。
下位機的程序包括數(shù)據(jù)采集模塊和串口通信的數(shù)據(jù)傳輸模塊,數(shù)據(jù)采集模塊首先進行初始化,通過單片機控制A/D轉(zhuǎn)換模塊數(shù)據(jù)采集功能,A/D模塊將模擬信號轉(zhuǎn)換成數(shù)字信號后發(fā)出中斷,單片機將傳輸AD模塊采集的信號到緩沖區(qū)。串口數(shù)據(jù)傳輸模塊在串口通信之前,對串口進行初始化,主要包括串口波特率,數(shù)據(jù)格式,接收中斷的設(shè)置[18]。當(dāng)上位機發(fā)送數(shù)據(jù)給下位機,會引起單片機接收中斷,此時進入中斷服務(wù)程序,單片機接收數(shù)據(jù),比較校驗和,如果相同,發(fā)指令給PC機確認(rèn),最后將采集到的數(shù)據(jù)通過RS-232串行接口傳送到PC機。
鍵盤掃描查詢子程序,是提供人機信息交換的接口。由于采用掃描法,是利用CPU在完成其他工作之余,反復(fù)掃描查詢鍵盤接口,根據(jù)端口的輸入情況,調(diào)用不同的按鍵處理子程序。當(dāng)按鍵按下時,利用軟件延時去抖動,然后掃描按鍵位置,讀取準(zhǔn)確數(shù)值,最后完成一次按鍵處理。
當(dāng)單片機輸出字形碼時,所有數(shù)碼管都接收到相同的字形碼,但究竟是那個數(shù)碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以只要將需要顯示的數(shù)碼管的選通控制打開,該位就顯示出字形,沒有選通的數(shù)碼管就不會亮。在輪流顯示過程中,每位數(shù)碼管的點亮?xí)r間為1~5ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極管的余輝效應(yīng),只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示數(shù)據(jù),不會有閃爍感。顯示子程序流程圖如圖6所示。

圖6
單片機程序用A/D模塊進行采集傳感器的值,然后用SCI口將采集的值發(fā)給PC機。
A/D轉(zhuǎn)換簡介:
在過程控制和儀器儀表中,多由計算機進行實時控制及實時數(shù)據(jù)處理,計算機所加工的信息總是數(shù)字量,而被檢測的對象卻往往是一些連續(xù)變化的模擬量(如溫度、壓力、速度和流量等),因此需要將模擬量轉(zhuǎn)化成為數(shù)字量,以便在計算機中進行運算處理,此過程稱為模數(shù)(A/D)轉(zhuǎn)換。進行A/D轉(zhuǎn)換,需要了解以下的基本問題:
1)采樣精度
采樣精度就是指數(shù)字量變化一個最小量是模擬信號的變化量,即通常所說的采樣位數(shù)。設(shè)采樣位數(shù)為N,則最小的能檢測到的模擬量變化值為1/2N。如圖7所示:

圖7
2)采樣速率
采樣速率是指完成一次A/D采樣所要花費的時間。速率和所選器件的工作頻率有很大關(guān)系。
3)濾波
為了使采樣的數(shù)據(jù)更準(zhǔn)確,必須對采樣的數(shù)據(jù)進行篩選去掉誤差較大的數(shù)據(jù)。通常采用中值濾波和均值濾波來提高采樣精度。中值濾波是取3次采樣的中間值,均值濾波是取多次采樣的算術(shù)平均值。
4)物理量回歸
在實際應(yīng)用中,得到穩(wěn)定的A/D采樣值后,還需要把A/D采樣值與實際物理量對應(yīng)起來。A/D轉(zhuǎn)換的目的是把模擬信號轉(zhuǎn)化為數(shù)字信號,供計算機進行處理,但必須知道A/D轉(zhuǎn)換后的數(shù)值所代表的實際物理量的值,這樣才有實際意義。





采用NI的Labview軟件系統(tǒng),使得我們建立起一套虛擬儀表平臺,通過該系統(tǒng)可以快速準(zhǔn)確的獲得各項數(shù)據(jù),為我們后續(xù)賽車電子產(chǎn)品的研發(fā)積累了測試經(jīng)驗。虛擬數(shù)字式賽車儀表的應(yīng)用,使儀表的讀數(shù)更加清晰和直觀、信息量更大、智能化程度更高、功耗低及開發(fā)周期短,可用于日常學(xué)科研究中。通過對Labview的綜合應(yīng)用及與單片機的相結(jié)合,使方程式賽車的虛擬儀表設(shè)計更加簡化快速,Labview也為方程式賽車的其他設(shè)計提供了更好的平臺。