【串口通信】labview實現串口通信

labview實現串口通信



學習labview有一段時間了,發現了其中功能的強大和編程的簡潔性,高效性
現在初步實現了串口的通信,把其中的體會和實現過程寫出來,權當拋磚引玉
其中的串口採用的是Rs-232,D型口,共九跟針,其中能用的就是三跟針腳,2,3,5,一個是發送一個是接受,一個是接地,如果做一個串口線延長線的話,只需連接這三根針腳即可,就是2連3,3連2,5連5。
在labview中採用的visa,首先是進行串口設置,設置串口號,波特率,在這裏面只要設置這兩個就可以了,其餘的採用默認,其中特別注意的是要安裝visa驅動包,只有安裝了這個驅動包,你的串口纔可以選擇,一般現在的電腦上只有一個串口,那麼爲了調試方便,這裏有兩個工具可以推薦,一個叫做串口虛擬軟件,我用的是VSPDXP5,就是一個虛擬串口的軟件,讓你的電腦能夠多虛擬兩個串口,你要設置成讓他們互聯,另一個就是串口調試工具,叫sscom32.exe,用來調試串口通信的,可以驗證通信時候成功。visa驅動包在ni網站上有,具體什麼地址你可以到搜索一下.
再就是visa read作用是從串口讀取數據,這裏面有個read buffer,從串口讀取的數據
visawrite向串口寫入數據或者是命令
還有visa close結束串口讀取數據,目的是讀完數據後,釋放串口資源
我的例子
前面板圖
labview實現串口通信(一)
程序圖
labview實現串口通信(一)


labview也可以調用mscomm控件來實現串口通信,但是編程相對來講比較複雜,一般不推薦,直接用labview中自帶的visa是最方便的,在調試過程中的注意事項,

 

一、串口通訊的波特率設置要精確,比如要求9600的波特率,則晶振應選擇11.0593MHz或其倍數。

 

二、由於通常情況下LabVIEW串口VI接收或發送的都是字符串(Normal),

這裏是指串口通信中,如果不是在串口通信,我們可以做個小小的驗證,

labview實現串口通信(二)

在前面板中,字符串在正常顯示的情況下,你輸入00,跟字符串00也會匹配,指示燈也會亮的,但是在串口通信中,一定注意,

所以如果需要發送或接收十六進制數值(Hex),請在發送或接收之前進行必要的轉換。(這一點尤其要注意)

在與單片機通信的時候,假如說跟下位機的協議是發送字符串00,那麼開始採集信號,並顯示出來,如果你也發送00的話,跟字符串根本是不一樣的,首先要經過變化,因爲00對應的ascii碼是4848,16進制就是3030所以你發送的字符串在16進制下也應該是3030


在調試的過程中,我們經常會發現有收到的數據延遲的現象,現在提出幾點解決的方法:

(1)在循環中加入適量的延時,通過一個簡單的例子看,
labview實現串口通信(三)
你會發現在cpu的佔用率在加延時和不加的時候有很大的區別,當加的時候基本不佔,而不加延時的時候達到100%。我在調試串口通信時候,發現whileloop里加一個延時會有很好的效果(假如有一個或某幾個線程佔用了 100% 的CPU,此時系統對其他線程就會反應遲鈍。例如,程序的執行線程佔用了100%的CPU,那麼用戶對界面的操作就會遲遲得不到響應,甚至於用戶會誤認爲程序死鎖了。所以在程序中要儘量避免出現100% 佔用 CPU 的情況。 目前大多數的計算機還是單核單個 CPU的,因此要避免任何一個線程試圖 100% 佔用 CPU 的情況).
(2)visa read的字節總數最好用一個屬性節點來代替
labview實現串口通信(三)
因爲我們不知道數據緩衝區有多少個字節,這樣就不需要去設定了
(3)經常看到會有人說串口裏面有一堆數據,但是去讀的時候卻讀回來一點點,每次均不相同,這種懷狀況是由於串口有一個serialconfiguration這個節點上面,有一個terminationchar,大家將它設爲F就可以了,因爲遇到這個終止符,它就會停止讀數,所以讀回來的就會少了!

發佈了3 篇原創文章 · 獲贊 19 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章