點(diǎn)擊學(xué)習(xí)>>《龍哥手把手教你學(xué)LabVIEW視覺設(shè)計(jì)》視頻教程
一、串口通信簡(jiǎn)介
串口按位(bit)發(fā)送和接收字節(jié)。串口通信是指外設(shè)和計(jì)算機(jī)間,通過數(shù)據(jù)信號(hào)線 、地線、控制線等,按位進(jìn)行傳輸數(shù)據(jù)的一種通訊方式。這種通信方式使用的數(shù)據(jù)線少,在遠(yuǎn)距離通信中可以節(jié)約通信成本,但其傳輸速度比并行傳輸?shù)汀?/p>
串口按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時(shí)用另一根線接收數(shù)據(jù)。它很簡(jiǎn)單并且能夠?qū)崿F(xiàn)遠(yuǎn)距離通信。比如IEEE488定義并行通行狀態(tài)時(shí),規(guī)定設(shè)備線總長(zhǎng)不得超過20米,并且任意兩個(gè)設(shè)備間的長(zhǎng)度不得超過2米;而對(duì)于串口而言,長(zhǎng)度可達(dá)1200米。典型地,串口用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線、發(fā)送、接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時(shí)在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗(yàn)。對(duì)于兩個(gè)進(jìn)行通信的端口,這些參數(shù)必須匹配。
二、LabVIEW簡(jiǎn)介
LabVIEW是一種程序開發(fā)環(huán)境,由美國(guó)國(guó)家儀器(NI)公司研制開發(fā),類似于C和BASIC開發(fā)環(huán)境,但是LabVIEW與其他計(jì)算機(jī)語言的顯著區(qū)別是:其他計(jì)算機(jī)語言都是采用基于文本的語言產(chǎn)生代碼,而LabVIEW使用的是圖形化編輯語言G編寫程序,產(chǎn)生的程序是框圖的形式。 LabVIEW軟件是NI設(shè)計(jì)平臺(tái)的核心,也是開發(fā)測(cè)量或控制系統(tǒng)的理想選擇。
LabVIEW特點(diǎn)
盡可能采用了通用的硬件,各種儀器的差異主要是軟件。
可充分發(fā)揮計(jì)算機(jī)的能力,有強(qiáng)大的數(shù)據(jù)處理功能,可以創(chuàng)造出功能更強(qiáng)的儀器。
用戶可以根據(jù)自己的需要定義和制造各種儀器
三、Labview實(shí)現(xiàn)串口通信步驟
1.在程序面板上添加VISA配置接口
2.添加后,開啟幫助文檔的顯示。菜單的Help-》show context help,如下圖
鼠標(biāo)選擇目標(biāo)則會(huì)顯示幫助框。如下圖所示。
3.創(chuàng)建相應(yīng)的配置
在程序面板中鼠標(biāo)移動(dòng)到對(duì)應(yīng)的引腳上,點(diǎn)擊鼠標(biāo)右鍵-》create-》control,創(chuàng)建后,界面面板上會(huì)出現(xiàn)對(duì)應(yīng)的控制框。如下圖所示,創(chuàng)建個(gè)VISA resource name。
前面板顯示如下:
4依次創(chuàng)建,波特率、停止位、數(shù)據(jù)位等
如下圖所示。
5.創(chuàng)建個(gè)while循環(huán),用于放置發(fā)送的程序
鼠標(biāo)移動(dòng)到循環(huán)條件控制的引腳上,創(chuàng)建個(gè)control。用于調(diào)試,不對(duì)條件處理,會(huì)報(bào)錯(cuò)。
6前面板放置個(gè)按鈕,用于控制數(shù)據(jù)的發(fā)送
7.創(chuàng)建個(gè)事件,用于響應(yīng)發(fā)送按鈕
鼠標(biāo)移動(dòng)到timeout的位置,鼠標(biāo)右鍵選擇edit events…如下圖所示。
操作上面后,出現(xiàn)如下界面:選擇需要響應(yīng)的控件,這里選擇“ok button”,選擇鼠標(biāo)按下
點(diǎn)擊ok后,事件的名稱也變化了。如下圖所示。
如果鼠標(biāo)點(diǎn)擊按鍵,則會(huì)進(jìn)入事件處理。
8.創(chuàng)建VISA寫函數(shù)
9連接端口和寫函數(shù)
10添加個(gè)關(guān)閉函數(shù)
11.創(chuàng)建字符串控件,傳遞給寫函數(shù),用于發(fā)送
選中VISA Write的write buffer,右鍵create-》control,
12界面如下所示
13.安裝虛擬串口,提供一個(gè)下載地址
用虛擬串口配置兩個(gè)端口,配置好后,這兩個(gè)串口之間是自動(dòng)連接上,模擬硬件上兩個(gè)串口對(duì)接上的。
14運(yùn)行串口工具
15.運(yùn)行串口工具,打開串口,運(yùn)行VI,發(fā)送數(shù)據(jù)
我的電腦配置的是COM12和COM13,vi選擇COM12
運(yùn)行VI,在write buffer里面填寫test,點(diǎn)擊OK發(fā)送。
每點(diǎn)擊一次,發(fā)送一次
16.建立接收模塊
添加個(gè)while循環(huán),
創(chuàng)建while循環(huán),用于接收。創(chuàng)建VISA Read,在Read buffer引腳上點(diǎn)擊鼠標(biāo)右鍵create-》indicator,建立個(gè)顯示控件。
17 在VISA Enable Event的event type,創(chuàng)建個(gè)常量
然后在常量的下拉列表中選擇Serial Character。這個(gè)表示串口接收到數(shù)據(jù),可以進(jìn)入幫助文檔查看詳細(xì)的說明。
18.創(chuàng)建事件等待
19.連接事件,等待事件的類型直接連接在VISA Enable Event的Event type即可。
20.添加個(gè)屬性節(jié)點(diǎn),Visa Bytes at serial port,獲取串口中的字節(jié)數(shù)
連接字節(jié)數(shù),這樣告訴需要讀取的字節(jié)數(shù)。也能保證每次都把串口中的數(shù)據(jù)讀完。
21.添加個(gè)case結(jié)構(gòu)
22.運(yùn)行效果
23.調(diào)整下界面
24程序無法結(jié)束
按理說,點(diǎn)擊兩個(gè)stop按鍵,程序應(yīng)該結(jié)束才對(duì),但是事實(shí)不是這樣的。點(diǎn)擊之后會(huì)卡住哪?
發(fā)送循環(huán)中,事件是一直等待按鍵的時(shí)間處理。即使點(diǎn)擊stop后程序也會(huì)等待按鍵的處理,現(xiàn)象是:點(diǎn)擊兩個(gè)結(jié)束按鈕后,還需要點(diǎn)擊一次發(fā)送“ok按鈕”才能結(jié)束程序。 處理辦法:在發(fā)送按鈕事件創(chuàng)建個(gè)超時(shí)處理。
1. 如下圖所示,中事件的超時(shí)時(shí)間設(shè)置1000ms的常量
2. 將鼠標(biāo)放置在圖中的紅框中,點(diǎn)擊鼠標(biāo)右鍵,選擇Add Event Case.。
如果字節(jié)數(shù)大于0,那么讀取數(shù)據(jù)并顯示。事件的超時(shí)時(shí)間設(shè)置為1000ms。
3. 添加應(yīng)用超時(shí)判斷,如下圖所示。選擇點(diǎn)擊ok
添加后如下:
這樣運(yùn)行程序中,點(diǎn)擊兩個(gè)STOP按鈕后就可以結(jié)束程序了。
25.使用一個(gè)按鈕來結(jié)束程序
刪除stop 和STOP2按鈕,在界面面板上添加個(gè)結(jié)束按鍵,如下圖所示。鼠標(biāo)移動(dòng)到按鍵上,右鍵,創(chuàng)建stop按鈕的value屬性節(jié)點(diǎn),如下圖所示。
創(chuàng)建兩個(gè)結(jié)束按鍵的value屬性節(jié)點(diǎn),連接在循環(huán)條件上。
但是注意上面圖中,連接線后,是錯(cuò)誤的。處理辦法如下:
修改按鍵的行為,默認(rèn)是第二排第二個(gè),修改為上面第一個(gè)即可。
26優(yōu)化1后的結(jié)果
運(yùn)行程序后,點(diǎn)擊一下stop,程序就結(jié)束了。
27.優(yōu)化顯示框
28將接收的字符追加顯示
添加一個(gè)移位寄存器,將鼠標(biāo)移動(dòng)到while循環(huán)的左右邊界上,點(diǎn)擊鼠標(biāo)右鍵,選擇addshift Register如下圖所示。
添加一個(gè)字符串連接函數(shù),如下圖所示。
這樣程序是錯(cuò)誤的:點(diǎn)擊下圖所示,可以查看錯(cuò)誤的地方,提示。問題是在,添加了移位寄存器,然后兩邊的值連接經(jīng)過case結(jié)構(gòu),我們只連接了True情況,F(xiàn)alse情況還沒處理。
29優(yōu)化2運(yùn)行效果
30.添加滾動(dòng)條
鼠標(biāo)移動(dòng)到顯示框上右鍵,選擇屬性。界面如下。
選中Show Vertical scroll bar,顯示框的滾動(dòng)條就出來了,點(diǎn)擊ok。
31還有一問題,接收數(shù)據(jù)中,滾動(dòng)條不會(huì)跟著動(dòng)
處理辦法是,設(shè)置滾動(dòng)條的位置。創(chuàng)建滾動(dòng)條位置屬性節(jié)點(diǎn),Scroll Position
鼠標(biāo)移動(dòng)到屬性節(jié)點(diǎn)上,右鍵,選擇Change to Write。
那么控制的引腳方向轉(zhuǎn)到前面了。然后創(chuàng)建個(gè)常量1000,如下圖所示。
這樣呢,接收的字符顯示的行數(shù)在1000以內(nèi),那么都會(huì)定位剛接收的字符位置。
32 點(diǎn)擊stop后,再運(yùn)行程序的時(shí)候,stop還是那個(gè)狀態(tài)
處理辦法是在初始化過程中,對(duì)stop的按鍵值進(jìn)行初始化。創(chuàng)建stop的value屬性節(jié)點(diǎn)。如下圖所示。
33.累加接收的字符數(shù)并顯示
創(chuàng)建個(gè)移位寄存器,連接VISA Read 的Return count,與上一次的值相加,再傳給移位寄存器,作下一次使用,并顯示相加的數(shù)字。
34 優(yōu)化3后
35 可以對(duì)接收字符數(shù)判斷,超過多少字符數(shù)后就清空顯示框,重新開始顯示
處理辦法是:對(duì)字符數(shù)做個(gè)判斷,如果超過多少,加個(gè)case結(jié)構(gòu),超了就賦值個(gè)空字符串,未超就追加。
推薦閱讀:
評(píng)論