摘要:Labview是虛擬儀器、遠(yuǎn)程測控等領(lǐng)域的通用編程環(huán)境,其基于VISA的編程機(jī)理得到廣泛應(yīng)用,VISA支持的接口種類多、功能強(qiáng)大、技術(shù)成熟,是目前虛擬儀器及測控編程使用最為廣泛的工具之一。串行口是儀表、數(shù)據(jù)采集、遠(yuǎn)程測控應(yīng)用較多的接口,也是最為成熟的接口技術(shù),目前在數(shù)據(jù)量不大的儀表控制、數(shù)據(jù)采集、遠(yuǎn)程測控等領(lǐng)域普遍使用。研究基于VISA的串口通信程序,對于開發(fā)串口儀表控制程序、數(shù)據(jù)采集、遠(yuǎn)程測控應(yīng)用具有較通用的參考意義。
關(guān)鍵詞:VISA;串口;虛擬儀器;數(shù)據(jù)采集
中圖分類號:TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號:1009-3044(2008)06-10ppp-0c
Design of the General Purpose Serial Communication Program Based on VISA
DONG Zhi-qiang,XU Shi-Rong,YU Ya-min
(UNIT 69046,URUMQI 830002,China)
Abstract: Labview is the general IDE for Virtual Instrument(VI),its program theory on VISA is widely used,VISA supports many kind of interfaces,has much function and is perfect,it is the popular tool to program the VI and measurement.Serial port is the popular interface of Instrument,DAQ,remote measurement.it is used widely in the no much data area such as Instrument control,DAQ,remote measurement.The research of Serial program baed on VISA has the importance for programming on Instrument control,DAQ and remote measurement.
Key words: VISA; serial port; VI(Virtual Instrument); DAQ(Data Acquisition)
1 VISA簡介
LabVIEW提供了功能強(qiáng)大的VISA庫。VISA(Virtual Instrument Software Architecture)——虛擬儀器軟件規(guī)范,是用于儀器編程的標(biāo)準(zhǔn)I/O函數(shù)庫及其相關(guān)規(guī)范的總稱。VISA庫駐留于計(jì)算機(jī)系統(tǒng)中,完成計(jì)算機(jī)與儀器或外部裝置之間的連接,用以實(shí)現(xiàn)對儀器或外部裝置的程序控制,其實(shí)質(zhì)是虛擬儀器系統(tǒng)標(biāo)準(zhǔn)API。VISA本身不具備編程能力,它是一個(gè)高層API,通過調(diào)用底層驅(qū)動(dòng)程序來實(shí)現(xiàn)對儀器的編程,其層次結(jié)構(gòu)如圖1所示。
圖1 LabVIEW程序設(shè)計(jì)層次結(jié)構(gòu)圖
與其他現(xiàn)存的I/O接口軟件相比,VISA的I/O控制功能具有如下幾個(gè)特點(diǎn):適用于各種儀器類型(如VXI儀器、GPIB儀器、RS-232串行儀器、消息基器件、寄存器器件、存儲(chǔ)器器件等儀器);適用于多種硬件接口類型;適用于多處理器結(jié)構(gòu)或分布式網(wǎng)絡(luò)結(jié)構(gòu);適用于多種網(wǎng)絡(luò)機(jī)制;VISA的I/O軟件庫的源程序是唯一的,其與操作系統(tǒng)及編程語言無關(guān),跨平臺(tái)移植性好。
2 VISA庫串口通訊函數(shù)
VISA串口通訊函數(shù)調(diào)用路徑為:Functions→Instrument I/O VISA→VISA Advanced→Interface Specific→Serial中。(1)VISA Configure Serial Port節(jié)點(diǎn)。該節(jié)點(diǎn)主要用于串口的初始化。主要參數(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.5位或2位;Parity:奇偶校驗(yàn)設(shè)置。可為無校驗(yàn)、奇校驗(yàn)或偶校驗(yàn);flow control:流量控制方式,硬件方式或軟件方式(Xon/Xoff)。(2)VISA Read節(jié)點(diǎn)。讀串口數(shù)據(jù)子VI,VISA串口通信主要節(jié)點(diǎn)之一,用于將串口中的數(shù)據(jù)讀出,然后利用LabVIEW的強(qiáng)大數(shù)據(jù)處理功能對其進(jìn)行分析處理。主要參數(shù)意義如下:VISA resource name:串口號;byte count:用于設(shè)置所要讀的字符數(shù)。(3) VISA Write節(jié)點(diǎn)。寫數(shù)據(jù)到串口子VI,VISA串口通信主要節(jié)點(diǎn)之一,用于將數(shù)據(jù)寫入串口。參數(shù)類似于VISA Read子VI。(4)VISA Close節(jié)點(diǎn)。關(guān)閉串口。(5)還有VISA Serial Break、VISA Bytes at Serial Port、VISA Set I/O Buffer Size、VISA Flush I/O Buffer等幾個(gè)串口通信輔助子VI,結(jié)合串口通信主VI,共同完成串口通信任務(wù),其功能分述于下表:
表1 VISA串口通信子VI功能描述表
3 VISA串口通訊編程基本流程
在LabVIEW環(huán)境中使用串口與在其它開發(fā)環(huán)境中開發(fā)過程類似,基本的流程框圖如圖2。
圖2 基于VISA串口通信編程基本流程圖
首先需要調(diào)用VISA Configure Serial Port完成串口參數(shù)的設(shè)置,包括串口資源分配、波特率、數(shù)據(jù)位、停止位、校驗(yàn)位和流控等等。初始化完成后,使用VISA Write、VISA Read進(jìn)行數(shù)據(jù)收發(fā)。在接收數(shù)據(jù)之前需要使用VISA Bytes at Serial Port查詢當(dāng)前串口接收緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),如果VISA Read要讀取的字節(jié)數(shù)大于緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù),VISA Read操作將一直等待,直至Timeout或者緩沖區(qū)中的數(shù)據(jù)字節(jié)數(shù)達(dá)到要求的字節(jié)數(shù)。某些特殊情況下,需要使用VISA Set I/O Buffer Size設(shè)置串口接收/發(fā)送緩沖區(qū)的大小,使用VISA Flush I/O Buffer清空接收與發(fā)送緩沖區(qū)。在串口使用結(jié)束后,使用VISA Close結(jié)束與VISA resource name指定串口之間的會(huì)話。
4 數(shù)值型數(shù)據(jù)的處理方法
4.1 如果這些數(shù)據(jù)是靜態(tài)的,也就說在程序設(shè)計(jì)階段要傳輸?shù)臄?shù)據(jù)就已經(jīng)確定了,在這種情況下,首先設(shè)置VISA Write的write buffer的顯示屬性為Hex Display,然后直接輸入要發(fā)送的16進(jìn)制字符串就可以了。串口設(shè)備的控制命令通常是由一個(gè)或多個(gè)16進(jìn)制字符組成的,當(dāng)我們需要對其進(jìn)行控制時(shí)經(jīng)常會(huì)采用這種方法發(fā)送控制命令。
4.2 數(shù)據(jù)是動(dòng)態(tài)的;即要傳輸?shù)臄?shù)值型數(shù)據(jù)是動(dòng)態(tài)產(chǎn)生和變化的,在發(fā)送之前首先要將其轉(zhuǎn)換成對應(yīng)的16進(jìn)制字符串,才能賦給VISA Write發(fā)送。將這些數(shù)據(jù)構(gòu)成一個(gè)數(shù)組,用Byte Array To String進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換的結(jié)果就是對應(yīng)數(shù)組數(shù)值的字符串,可以提交VISA Write發(fā)送?;蛘呤褂肨ype Cast也可以實(shí)現(xiàn)同樣的功能。
圖3 串口發(fā)送數(shù)值型數(shù)據(jù)處理方法
圖4 串口接收數(shù)值型數(shù)據(jù)處理方法
5 字符串型數(shù)據(jù)的處理方法
通常傳輸數(shù)據(jù)具有一定格式或協(xié)議,一個(gè)完整的數(shù)據(jù)幀可能包括起始段、數(shù)據(jù)段、校驗(yàn)段,而每一段有幾個(gè)部分組成,幾個(gè)部分的類型和長度不盡相同,數(shù)值型、字符型或布爾型,單字節(jié)或多字節(jié)。在處理方法上,采用統(tǒng)一的字符形式處理數(shù)據(jù),字符是LabVIEW里最方便的數(shù)據(jù)類型。
經(jīng)過打包的字符數(shù)據(jù)經(jīng)過串口發(fā)送時(shí)需要進(jìn)行必要的轉(zhuǎn)換,否則傳輸將出錯(cuò)。如打包過后需要發(fā)送的的字符串為:34 12 56 78 94(空格為了區(qū)分),如果直接將其賦給VISA Write發(fā)送,串口上的數(shù)據(jù)是:33 34 31 32 35 36 37 38 39 34,每個(gè)字符前增加一個(gè)字符‘3’。數(shù)據(jù)接收時(shí),從串口接收到的數(shù)據(jù)是16進(jìn)制的ASCII碼,要轉(zhuǎn)換成對應(yīng)的數(shù)值型數(shù)據(jù),使用String To Byte Array或者Type Cast。正確的轉(zhuǎn)換程序如下。
圖5 字符串型數(shù)據(jù)處理方法
6 串口通信程序?qū)崿F(xiàn)及效果
以上分析了基于VISA串口通信程序設(shè)計(jì)的基礎(chǔ)知識(shí)和使用中需要注意的數(shù)據(jù)轉(zhuǎn)換問題,在此基礎(chǔ)上,利用VISA,配合適當(dāng)?shù)腖abview控制結(jié)構(gòu),可以編制出界面友好、功能完善、通用性強(qiáng)的串口通信終端程序,試用結(jié)果表明,該軟件界面簡潔、性能可靠、通用性強(qiáng),既可以獨(dú)立使用,也可以作為子VI為其他應(yīng)用程序調(diào)用,其程序主要結(jié)構(gòu)及運(yùn)行軟件界面如下圖所示:
圖6 串口設(shè)置及通信參數(shù)設(shè)置程序簡圖
圖7 數(shù)據(jù)接收、發(fā)送部分程序簡圖
圖8 軟件運(yùn)行效果圖
參考文獻(xiàn):
[1]L abVIEW8.2 User Manual.USA:National Instruments Corporation,2006.
[2]楊樂平.LabVIEW程序設(shè)計(jì)與應(yīng)用.電子工業(yè)出版社,2001.
[3]劉君華.虛擬儀器圖形化編程語言LabVIEW教程[M].西安:電子科技大學(xué)出版社,2001.
[4]鄧華.MATLAB 通信仿真及應(yīng)用[M].人民郵電出版社 2000
[5]樓順天,陳生潭,雷虎民.MATLAB 5.x程序設(shè)計(jì)語言[M].西安:電子科技大學(xué)出版社,2000
收稿日期:2008-01-12
作者簡介:董智強(qiáng)(1974-),學(xué)士,1997年畢業(yè)于解放軍理工大學(xué)通信工程學(xué)院,現(xiàn)主要從事通信裝備維修工作。