日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Labview 串口通信之——PC控制云台方向

發布時間:2025/5/22 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Labview 串口通信之——PC控制云台方向 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、項目需求:

1.??????完成上位機與下位機的串口通信

2.??????上位機電腦給下位機發送16進制指令,控制攝像機云臺的各個方向。

3.??????該程序用Labview開發

?

二、開發過程:

1.??????開發平臺搭建:

開發過程用到的幾個軟件介紹:

(1)??????串口調試助手

(2)??????VPSD XP5(虛擬串口軟件)

(3)??????Labview

(4)??????Sony云臺自帶軟件(類似于串口調試助手)

?

2.??????各個軟件介紹:

3.???打開VSPD,界面如下圖所示:

左邊欄最上面的是電腦自帶的物理串口。點右邊的addpair,可以添加成對的串口。一對串口已經虛擬互聯了,如果添加的是COM3、COM4,用COM3發送數據,COM4就可以接收數據,反過來也可以。

4.串口調試助手

可以看到虛擬出來的串口COM3、COM4,選擇COM4,設置為波特率9600,無校驗位、8位數據位,1位停止位。

?

5. RS232

RS-232接口符合美國電子工業聯盟EIA)制定的串行數據通信的接口標準,原始編號全稱是EIA-RS-232(簡稱232RS232)。它被廣泛用于計算機串行接口外設連接。連接電纜機械、電氣特性、信號功能傳送過程。

6.同步傳輸和異步傳輸

?

同步傳輸通常要比異步傳輸快速得多。接收方不必對每個字符進行開始和停止的操作。一旦檢測到幀同步字符,它就在接下來的數據到達時接收它們。

?

7.同步異步傳輸的區別

1)異步傳輸是面向字符的傳輸,而同步傳輸是面向比特的傳輸。

?

2,)異步傳輸的單位是字符而同步傳輸的單位是楨。

?

3,)異步傳輸通過字符起止的開始和停止碼抓住再同步的機會,而同步傳輸則是以數據中抽取同步信息。

?

4,)異步傳輸對時序的要求較低,同步傳輸往往通過特定的時鐘線路協調時序。

?

5,)異步傳輸相對于同步傳輸效率較低。

三.近距離通信,RS232

3.1簡單連接:

當通信距離較近時,可不需要Modem,通信雙方可以直接連接,這種情況下,只需使用少數幾根信號線。最簡單的情況,在通信中根本不需要RS-232C的控制聯絡信號,只需三根線(發送線、接收線、信號地線)便可實現全雙工異步串行通信,即是這里要討論的第一種情況。

無Modem時,最大通信距離按如下方式計算:

RS-232C標準規定:當誤碼率小于4%時,要求導線的電容值應小于2500PF。對于普通導線,其電容值約為170PF/M。則允許距離L=2500PF/(170PF/M)=15M

這一距離的計算,是偏于保守的,實際應用中,當使用9600bps,普通雙絞屏蔽線時,距離可達30~35米。

3.2、零Modem 的最簡連線(3線制)

圖3是零MODEM方式的最簡單連接(即三線連接),圖中的2號線與3號線交叉連接是因為在直連方式時,把通信雙方都當作數據終端設備看待,雙方都可發也可收。在這種方式下,通信雙方的任何一方,只要請求發送RTS有效和數據終端準備好DTR有效就能開始發送和接收。

?

(1)RTS與CTS互聯:只要請求發送,立即得到允許

(2)DTR與DSR互聯:只要本端準備好,認為本端立即可以接收(DSR、數傳機準備好)。

?

3.3 串口問題匯總:

3.31串口資源被占用:

這時候在LabVIEW會報錯,提示串口號存在,但當前不能對其進行操作,同時打開MAX時也可以在對應的串口號下看到同樣的錯誤,這表示這個串口已經被其它程序占用了,比如有時候打開了串口調試助手來調試串口,然后又想在LabVIEW里面試一下,這時就會報這個錯,因為串口已經被串口調試助手調用了,它不能被二個程序同時使用。

解決的方法是關掉其它程序即可,串口調試助手里也可以關閉這個串口。

還有一種情況是調試OK后生成EXE,運行EXE也出現這個問題,這時是因為串口被原來的LabVIEW程序打開,再用EXE打開時就會報錯,解決辦法是關掉原來的LabVIEW程序。最好是關掉LabVIEW.

在使用串口的過程中一定要關閉串口(使用VISA CLOSE),否則程序在退出的時候會報錯說數據丟失。

?

四.關鍵數據格式轉換問題

?

4.1使用LabVIEW發送數據

?

還有一個問題是使用LabVIEW發送數據的問題

①如果下位機接收的是字符串數據類型的話,直接用VISA寫入對應的字符串就行了,現在的儀器一般都是接收字符串的,所以可以直接使用VISA發送而不需要轉換。

②如果下位機接收的是數值型數據的話,就需要轉換一下,其中數值型又是十進制和十六進制二種用得比較多,這二種數據間相互轉換一下就行了,其實是一樣的。

由于在LabVIEW中字符串直接有十六進制的顯示方式,所以發送十六進制的數據比較方便,比如要發送十六進制數值類型的“0xAF”,那么在VISA Write的寫入緩沖區字符串常量上右鍵>>十六進制顯示,如圖1,直接輸入“AF”即可,那么下位機接收到的就是正確的數據(十六進制數值類型)了。

但實際使用過程中,一般都是需要將某個子VI輸出一個動態的字符串通過VISAWrite發送到下位機的,這時候就需要對數據進行轉換一下,這個轉換過程描述起來就是:將字符串A轉換為字符串B,使得正常顯示的字符串A跟十六進制顯示的字符串B是一樣的。

由于轉換目標(十六進制顯示的字符串)的數據類型是十六進制,要想十六進制顯示的字符串跟正常顯示的字符串一樣,這個正常顯示的字符串必須都是十六進制的字符,即只能由0-9,A-F這十六個字母中的字母組合而成。否則就沒辦法使二種顯示方式的字符串一致了。

這個轉換過程首先將字符串轉換為十六進制數值型,然后再通過將這個十六進制數值創建為一個數組,最后再使用“字節數組至字符串轉換”這個函數轉換為字符串即可,實際上就是圖5字符串轉換為U8字節的反向操作,只不過是這個十六進制的值初始類型是十六進制,要先轉換為數值類型。具體程序如下圖所示。

由于十六進制數據由二個字節構成,而字符只有一個字符,所以每二個字符表示一個十六進制數據,如果字符多于二個的話要先進行截取,每二個字符轉換為一個十六進制數據。也可以用空格將正常顯示的字符串每二個字符用一個空格斷開,然后先將這個字符串以空格為分隔符轉換為一個字符串數組,再轉換為十六進制數值再轉換為字符串。

需要注意一下的是如果正常顯示的字符串并不是2的整數倍,那么上圖的轉換程序就會少轉換一個字符,可以用程序動態判斷一下這個字符串的長度,如果是奇數的話在它最左邊補一個“0”再使用上面的程序就正常了。

?

4.2 LabVIEW從串口接收數據

?

①假設LabVIEW從串口接收到的數據為“1234”(正常顯示模式下),那么這個數據在串口底層的時候其實是這樣的二進制數據:

0011000100110010 00110011 00110100

只是在LabVIEW中,這些二進制數據是以字符串形式顯示出來的,它們的實質還是二進制數據,這幾個二進制數據轉換為十進制數據分別是“49,50,51,52”,由于字符串都是以ASCII碼形式保存在計算機中的,那么49,50,51,52這幾個數在ASCII表中就表示是字符串“1,2,3,4”。所以這幾個數據在LabVIEW中就顯示為字符串的1,2,3,4了。如果明白這里面的轉換關系,那么要進行數據轉換時就很容易了,比如上面的例子中,如果LabVIEW中接收到的是字符串“1234”,而原本下位機傳送的是數值型數據,只需要將“1234”字符串轉換為對應的ASCII值就是實際上下位機傳上來的數據了,就是“49,50,51, LabVIEW中將字符串轉換為對應的ASCII值的函數是“字符串至字節數組轉換”這個函數。

上面說的是下位機發送的是數值類型的數據的,使用“字符串至字節數組轉換”這個函數. ②如果是下位面發送的是字符串類型的數據,那么LabVIEW已經直接轉換好了。

個人總結:無論下位機發送的是何種類型的數據,LABVIE從串口接收的時候,總是將每8位二進制數,作為字符的ASCII碼解讀。

?

4.3 關鍵問題解決:

?

???????? 貼了那么多資料,最終還是要回歸到具體解決的問題上來。本次做的小項目,總體來說,開發周期比較短,程序功能比較簡單,但是涉及到的知識面比較多,知識點多而雜亂,所以對這部分資料做了相關整理,權當對思路的整理。

???????? 本次遇到的問題:

????PC與攝像機云臺通信過程中,開發的程序第一版可以完成虛擬串口之間的數據通信,但是問題是實際測試中還是不能控制云臺。檢測了相關指令也沒發現錯誤。

???????? 后來發現Labview程序無論是接收還是發送數據都是以字符串格式完成的,所以當客戶要求用16進制完成下位機與上位機通信的時候,問題就出現了。最開始設計程序的時候也沒考慮到這個問題。

?

(1)????將16進制轉化成asc碼:

這個方法行不通,數據發下去還是不行。繼續找資料,找到下面的解決方案:

(2)????在Labview軟件中設置字符串的顯示格式

Labview軟件中設置字符串的顯示格式為:16進制顯示(也就是:Hex display);

具體做法參考以下鏈接:

?

http://blog.csdn.net/liusandian/article/details/51912000

?

總結

以上是生活随笔為你收集整理的Labview 串口通信之——PC控制云台方向的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。