visa linux 串口 通信,使用visa进行串口通信
最近因?yàn)轫?xiàng)目的原因,都在研究上位機(jī)通信問題。這兩個(gè)星期研究還是蠻多心得,下面就寫寫關(guān)于使用visa進(jìn)行串口通信的內(nèi)容
LABVIEW軟件
LabVIEW 在儀器控制方面,還是很有優(yōu)勢的,把你儀器給你,讀懂指令,然后估計(jì)半小時(shí)就可以編寫好一個(gè)完整的儀器控制系統(tǒng)。從儀器配置到數(shù)據(jù)發(fā)送,數(shù)據(jù)接收,到數(shù)據(jù)生成報(bào)表。
如果使用其他語言,例如 VB,VC 之類的,寫過儀器控制的同學(xué)來說,這個(gè)問題,寫個(gè)界面, 就要寫半天, 還得什么進(jìn)制轉(zhuǎn)換啊, 各種操作, 麻煩多了。 但是, 如果你采用 LabVIEW,這些問題,都是小兒科了。
LabVIEW 的 VISA 驅(qū)動(dòng)
VISA,它是一種虛擬架構(gòu),讓你不用關(guān)心底層,直接調(diào)用就好,而且不用管接口是什么類型的,它通吃。比如,你是 232 接口,用 VISA 吧,485 接口,用 VISA 吧
用過 VB 、VC 的,可能用 WINAPI 習(xí)慣了,其實(shí)既然有 VISA,而且也方便使用,我建議大家還是使用 VISA 吧。LabVIEW 的推出,本來就是為了讓編程簡單化,模塊化,你如果用其他的 DLL 之類的,要涉及到底層的一些知識(shí),要配置很多參數(shù)什么什么的。
LABVIEW串口編程原理
其實(shí)原理可以用一個(gè)過程描述:
拿打電話來說吧。
①,首先,撥對(duì)方號(hào)碼,號(hào)碼肯定要配置正確吧,不正確肯定達(dá)不到對(duì)方的, **VISA **配置串口相當(dāng)于你給對(duì)方撥電話.
②,其次,給對(duì)方說要說的話,這個(gè)相當(dāng)于 VISA 串口寫。你說話,當(dāng)然也也聽對(duì)方說話,那就是 **VISA **串口讀。
③,通話結(jié)束,要掛電話,掛電話相當(dāng)于 關(guān)閉 VISA.
總結(jié)起來就是
撥電話→VISA **
串口配置講電話→VISA **
讀寫(這里就是各種命令啦。)
掛電話→**VISA **關(guān)閉
其實(shí)串口很容易。難點(diǎn)在于你讀到數(shù)據(jù),怎么轉(zhuǎn)化成自己需要的數(shù)據(jù)。而且保證數(shù)據(jù)無誤。
LABVIEW的visa使用
事實(shí)上,真的只需要下面幾個(gè)函數(shù)。
①配置串口
配置串口時(shí)候,最好是在對(duì)應(yīng)的參數(shù)端口那里,右鍵,新建常量或者輸入控件,然后再在新建出來的上面修改。因?yàn)?#xff0c;新建出來的數(shù)據(jù)類型,肯定是對(duì)的。
需要注意的是:
①停止位那里,不是常數(shù) 1 1.5 2 等,實(shí)際是 10,15,20 數(shù)值。這里最好右鍵新建常量然后選擇對(duì)應(yīng)的枚舉類型,如上圖所示。
更需要注意的是:②配置串口,頂端有個(gè) 啟用終止符,一般默認(rèn)是 真,終止符一般默認(rèn)是 OA,即換行符。
那為什么配置 **VISA **要搞個(gè)終止符呢?
(注意:這個(gè)函數(shù)的終止符,只是接受的終止符,只是對(duì) LabVIEW 接收而言,后面會(huì)具體講。)終止符,是個(gè)條件,很多儀器上,也有終止符,而且終止符的優(yōu)先級(jí)高。比如你要用”**VISA **讀取“接收 1000 個(gè)字符,而還沒接受完畢,收到了終止符 OA,那么程序就當(dāng)一個(gè)命令結(jié)束了。后面的字符串,放入下一個(gè)命令里面去。對(duì)編程很方便的,如果你傳輸?shù)淖址豢赡艹霈F(xiàn) OA 或者自己設(shè)定的終止符, 我建議用終止符來做終止條件, 這樣,比你在 VISA 讀去里讀取固定的字節(jié)好 很多。
②bytes at port確定字節(jié)數(shù)
一般的組合,如上圖所示。組合的前面,是 VISA 串口字節(jié)數(shù),函數(shù)路徑見上圖,其實(shí)就是一個(gè)屬性節(jié)點(diǎn),看那個(gè) bytes at port 英文就應(yīng)該明白了。它利用一個(gè)讀取緩沖區(qū)字節(jié)數(shù),讀到字節(jié)數(shù),就確定了 VISA 讀取里面那個(gè)字節(jié)數(shù),然后用讀取 VISA 讀出來。意思就是,前面的先偵測下串口緩沖區(qū)有多少數(shù)據(jù),偵測完了就告訴 VISA 讀,VISA就全讀出來。
這個(gè)組合的功能是,讀取VISA串口已有的全部數(shù)據(jù)。
③visa的讀取
以上程序,先配置串口,然后循環(huán)不停的讀串口,用了讀取串口字節(jié)判斷該不該讀,當(dāng)串口有數(shù)據(jù),即字節(jié)數(shù)不位零時(shí),讀取串口。
④字符串處理
1, 單個(gè)接受字符串就是數(shù)字形式。比如,收到的數(shù)據(jù),就是 1,你要轉(zhuǎn)成 1,很容易。直接用下面的函數(shù)來轉(zhuǎn)為數(shù)值形式。
2,你接收到的是一串字符串:比如 01 02 03 04 05 .......
用截取字符串截取每一個(gè)數(shù)據(jù),然后再參照第①種方式,轉(zhuǎn)化成數(shù)值。
⑤調(diào)試經(jīng)驗(yàn)
用讀取串口字節(jié)數(shù)+VISA 讀取
組合,可以防止上圖錯(cuò)誤發(fā)生,因?yàn)橛袛?shù)據(jù)就讀,沒數(shù)據(jù)就不讀。而如果你指定要讀的字節(jié)數(shù),當(dāng)超時(shí)時(shí)間到之后,如果還沒讀到指定直接,就會(huì)報(bào)錯(cuò)。
但是,我寫過一個(gè)協(xié)議,是先發(fā)送一段字符,過幾毫秒馬上又發(fā)送結(jié)束符 0D,所以,前面數(shù)據(jù)剛讀出來,就被后面的覆蓋了,導(dǎo)致我每次都只能看到 0D,后來才知道,不是一起發(fā)的,是間斷發(fā)的。用這種組合,不容易掌握字符串的字?jǐn)?shù)。因?yàn)樗袛?shù)據(jù)就讀出來,所以,調(diào)試的時(shí)候,多小心
總結(jié)
以上是生活随笔為你收集整理的visa linux 串口 通信,使用visa进行串口通信的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么自学linux操作系统,linux操
- 下一篇: linux共享磁盘给指定ip,linux