摘要:Labview是虛擬儀器、遠程測控等領域的通用編程環境,其基于VISA的編程機理得到廣泛應用,VISA支持的接口種類多、功能強大、技術成熟,是目前虛擬儀器及測控編程使用最為廣泛的工具之一。串行口是儀表、數據采集、遠程測控應用較多的接口,也是最為成熟的接口技術,目前在數據量不大的儀表控制、數據采集、遠程測控等領域普遍使用。研究基于VISA的串口通信程序,對于開發串口儀表控制程序、數據采集、遠程測控應用具有較通用的參考意義。
關鍵詞:VISA;串口;虛擬儀器;數據采集
中圖分類號:TP311文獻標識碼: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提供了功能強大的VISA庫。VISA(Virtual Instrument Software Architecture)——虛擬儀器軟件規范,是用于儀器編程的標準I/O函數庫及其相關規范的總稱。VISA庫駐留于計算機系統中,完成計算機與儀器或外部裝置之間的連接,用以實現對儀器或外部裝置的程序控制,其實質是虛擬儀器系統標準API。VISA本身不具備編程能力,它是一個高層API,通過調用底層驅動程序來實現對儀器的編程,其層次結構如圖1所示。

圖1 LabVIEW程序設計層次結構圖
與其他現存的I/O接口軟件相比,VISA的I/O控制功能具有如下幾個特點:適用于各種儀器類型(如VXI儀器、GPIB儀器、RS-232串行儀器、消息基器件、寄存器器件、存儲器器件等儀器);適用于多種硬件接口類型;適用于多處理器結構或分布式網絡結構;適用于多種網絡機制;VISA的I/O軟件庫的源程序是唯一的,其與操作系統及編程語言無關,跨平臺移植性好。
2 VISA庫串口通訊函數
VISA串口通訊函數調用路徑為:Functions→Instrument I/O VISA→VISA Advanced→Interface Specific→Serial中。(1)VISA Configure Serial Port節點。該節點主要用于串口的初始化。主要參數意義如下:VISA resource name:VISA資源名稱,即串口號;baud rate:波特率,默認為9600;data bits:一幀信息的位數,LabVIEW中允許5~8位數據,默認值為8位;stop bits:一幀信息停止位位數,可為1位、1.5位或2位;Parity:奇偶校驗設置。可為無校驗、奇校驗或偶校驗;flow control:流量控制方式,硬件方式或軟件方式(Xon/Xoff)。(2)VISA Read節點。讀串口數據子VI,VISA串口通信主要節點之一,用于將串口中的數據讀出,然后利用LabVIEW的強大數據處理功能對其進行分析處理。主要參數意義如下:VISA resource name:串口號;byte count:用于設置所要讀的字符數。(3) VISA Write節點。寫數據到串口子VI,VISA串口通信主要節點之一,用于將數據寫入串口。參數類似于VISA Read子VI。(4)VISA Close節點。關閉串口。(5)還有VISA Serial Break、VISA Bytes at Serial Port、VISA Set I/O Buffer Size、VISA Flush I/O Buffer等幾個串口通信輔助子VI,結合串口通信主VI,共同完成串口通信任務,其功能分述于下表:
表1 VISA串口通信子VI功能描述表

3 VISA串口通訊編程基本流程
在LabVIEW環境中使用串口與在其它開發環境中開發過程類似,基本的流程框圖如圖2。

圖2 基于VISA串口通信編程基本流程圖
首先需要調用VISA Configure Serial Port完成串口參數的設置,包括串口資源分配、波特率、數據位、停止位、校驗位和流控等等。初始化完成后,使用VISA Write、VISA Read進行數據收發。在接收數據之前需要使用VISA Bytes at Serial Port查詢當前串口接收緩沖區中的數據字節數,如果VISA Read要讀取的字節數大于緩沖區中的數據字節數,VISA Read操作將一直等待,直至Timeout或者緩沖區中的數據字節數達到要求的字節數。某些特殊情況下,需要使用VISA Set I/O Buffer Size設置串口接收/發送緩沖區的大小,使用VISA Flush I/O Buffer清空接收與發送緩沖區。在串口使用結束后,使用VISA Close結束與VISA resource name指定串口之間的會話。
4 數值型數據的處理方法
4.1 如果這些數據是靜態的,也就說在程序設計階段要傳輸的數據就已經確定了,在這種情況下,首先設置VISA Write的write buffer的顯示屬性為Hex Display,然后直接輸入要發送的16進制字符串就可以了。串口設備的控制命令通常是由一個或多個16進制字符組成的,當我們需要對其進行控制時經常會采用這種方法發送控制命令。
4.2 數據是動態的;即要傳輸的數值型數據是動態產生和變化的,在發送之前首先要將其轉換成對應的16進制字符串,才能賦給VISA Write發送。將這些數據構成一個數組,用Byte Array To String進行轉換,轉換的結果就是對應數組數值的字符串,可以提交VISA Write發送。或者使用Type Cast也可以實現同樣的功能。

圖3 串口發送數值型數據處理方法

圖4 串口接收數值型數據處理方法
5 字符串型數據的處理方法
通常傳輸數據具有一定格式或協議,一個完整的數據幀可能包括起始段、數據段、校驗段,而每一段有幾個部分組成,幾個部分的類型和長度不盡相同,數值型、字符型或布爾型,單字節或多字節。在處理方法上,采用統一的字符形式處理數據,字符是LabVIEW里最方便的數據類型。
經過打包的字符數據經過串口發送時需要進行必要的轉換,否則傳輸將出錯。如打包過后需要發送的的字符串為:34 12 56 78 94(空格為了區分),如果直接將其賦給VISA Write發送,串口上的數據是:33 34 31 32 35 36 37 38 39 34,每個字符前增加一個字符‘3’。數據接收時,從串口接收到的數據是16進制的ASCII碼,要轉換成對應的數值型數據,使用String To Byte Array或者Type Cast。正確的轉換程序如下。

圖5 字符串型數據處理方法
6 串口通信程序實現及效果
以上分析了基于VISA串口通信程序設計的基礎知識和使用中需要注意的數據轉換問題,在此基礎上,利用VISA,配合適當的Labview控制結構,可以編制出界面友好、功能完善、通用性強的串口通信終端程序,試用結果表明,該軟件界面簡潔、性能可靠、通用性強,既可以獨立使用,也可以作為子VI為其他應用程序調用,其程序主要結構及運行軟件界面如下圖所示:

圖6 串口設置及通信參數設置程序簡圖

圖7 數據接收、發送部分程序簡圖

圖8 軟件運行效果圖
參考文獻:
[1]L abVIEW8.2 User Manual.USA:National Instruments Corporation,2006.
[2]楊樂平.LabVIEW程序設計與應用.電子工業出版社,2001.
[3]劉君華.虛擬儀器圖形化編程語言LabVIEW教程[M].西安:電子科技大學出版社,2001.
[4]鄧華.MATLAB 通信仿真及應用[M].人民郵電出版社 2000
[5]樓順天,陳生潭,雷虎民.MATLAB 5.x程序設計語言[M].西安:電子科技大學出版社,2000
收稿日期:2008-01-12
作者簡介:董智強(1974-),學士,1997年畢業于解放軍理工大學通信工程學院,現主要從事通信裝備維修工作。