在LabVIEW中使用串口

admin @ 2014-03-26 , reply:0

第一部分使用LabVIEW系統VI
 
一、串口VI介紹
LabVIEW的串口通訊VI位於Instrument I/O Platte的Serial中,包括:

 VI名稱
 VI功能
 VISA Configure Serial Port
 初始化VISA resource name指定的串口通訊參數
 VISA Write
 將輸出緩衝區中的數據發送到VISA resource name指定的串口
 VISA Read
 將VISA resource name指定的串口接收緩衝區中的數據讀取指定位元組數的數據到計算機內存中
 VISA Serial Break
 向VISA resource name指定的串口發送一個暫停信號
 VISA Bytes at Serial Port
 查詢VISA resource name指定的串口接收緩衝區中的數據位元組數
 VISA Close
 結束與VISA resource name指定的串口資源之間的會話
 VISA Set I/O Buffer Size
 設置VISA resource name指定的串口的輸入輸出緩衝區大小
 VISA Flush I/O Buffer
 清空VISA resource name指定的串口的輸入輸出緩衝區

 二、使用說明
在LabVIEW環境中使用串口與在其它開發環境中開發過程類似,基本的流程框圖如下。
 
 圖1、串口操作數據流圖
 
首先需要調用VISA Configure Serial Port完成串口參數的設置,包括串口資源分配、波特率、數據位、停止位、校驗位和流控等等。
 
 圖2、初始化串口
 
如果初始化沒有問題,就可以使用這個串口進行數據收發。發送數據使用VISA Write,接收數據使用VISA Read。在接收數據之前需要使用VISA Bytes at Serial Port查詢當前串口接收緩衝區中的數據位元組數,如果VISA Read要讀取的位元組數大於緩衝區中的數據位元組數,VISA Read操作將一直等待,直至Timeout或者緩衝區中的數據位元組數達到要求的位元組數。當然也可以分批讀取接收緩衝區或者只從中讀取一定位元組的數據。
  
 圖3、從串口發送數據                圖4、從串口接收數據
 
在某些特殊情況下,需要設置串口接收/發送緩衝區的大小,此時可以使用VISA Set I/O Buffer Size;而使用VISA Flush I/O Buffer則可以清空接收與發送緩衝區。在串口使用結束后,使用VISA Close結束與VISA resource name指定的串口之間的會話。
   
 圖5、設置緩衝區大小                       圖6、 清空緩衝區  圖7、結束會話/線程
 
具體的例子可以參考:examples\instr\smplserl.llb。

第二部分使用MSCOMM控制項 
在LabVIEW中使用MSCOMM控制項,與在VC、VB中使用一樣。同樣可以使用中斷方式進行接收。
 
 圖8、使用控制項的串口收發程序
 
 圖9、程序數據流圖
 
首先通過LabVIEW的工具菜單“Tools >> Advanced >> Import ActiveX Controls”將Microsoft的串口控制項-“Microsoft Communications Control,version 6.0”添加到LabVIEW環境中,存放在預設路徑即可,這樣在User Controls Palette裡面可以找到這個控制項。
 
 圖10、添加ActiveX控制項菜單
 
 圖11、選擇添加用戶控制項
 
 圖12、用戶控制項
將串口控制項    放置在Front Panel上,在框圖程序中用控制項屬性對其進行編程,實現所需要的功能。
注意:一個串口資源要有一個MSCOMM控制項與之相對應。
 
第三部分 注意事項 
一、串口通訊的波特率設置要精確,比如要求9600的波特率,則晶振應選擇11.0593MHz或其倍數。
 
二、由於通常情況下LabVIEW串口VI接收或發送的都是字元串(Normal),所以如果需要發送或接收十六進位數值(Hex),請在發送或接收之前進行必要的轉換。
 
2.1、數值型數據的處理方法:

  1. 如果這些數據是靜態的,也就說在程序設計階段要傳輸的數據就已經確定了,在這種情況下,首先設置VISA Write的write buffer的顯示屬性為Hex Display,然後直接輸入要發送的16進位字元串就可以了。串口設備的控制命令通常是由一個或多個16進位字元組成的,當我們需要對其進行控制時經常會採用這種方法發送控制命令。
  2. 數據是動態的;即要傳輸的數值型數據是動態產生和變化的,在發送之前首先要將其轉換成對應的16進位字元串,才能賦給VISA Write發送。將這些數據構成一個數組,用Byte Array To String進行轉換,轉換的結果就是對應數組數值的字元串,可以提交VISA Write發送。或者使用Type Cast也可以實現同樣的功能。

 
圖13、串口數據轉換界面
 
 圖14、 串口數據轉換數據流圖
 
 圖15、操作界面
  
 圖16、單片機C程序
 
2.2、字元串型數據的處理方法: 
我們在處理過程當中,傳輸的數據可能具有一定格式或協議,比如一個完整的數據幀包括起始段、數據段、校驗段等等,而每一段往往又有幾個部分組成,這幾個部分的類型和長度可能又不盡相同,可能是數值型的,可能是字元型的,也可能是布爾型的,單位元組或者是多位元組。此時我們往往都採用統一的字元形式來處理這些數據,因此有時候我們說,字元是LabVIEW里最方便的數據類型。
 
經過打包的字元數據要經過串口發送需要進行必要的轉換,否則傳輸將出錯。比如我們打包過後需要發送的的字元串為:34 12 56 78 94(空格為了區分),如果直接將其賦給VISA Write發送,串口上的數據將是:33 34 31 32 35 36 37 38 39 34。正確的轉換程序如下。
  
 圖17、字元型數據處理
 
數據接收:
從計算機串口接收到的數據是16進位的ASCII碼,要轉換成對應的數值型數據,可以使用String To Byte Array或者Type Cast。
 
三、LabVIEW串口VI不能使用中斷方式傳輸。




[admin via 研發互助社區 ] 在LabVIEW中使用串口已經有2334次圍觀

http://cocdig.com/docs/show-post-44781.html