日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

發(fā)布時(shí)間:2025/5/22 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Labview 串口通信之——PC控制云台方向 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、項(xiàng)目需求:

1.??????完成上位機(jī)與下位機(jī)的串口通信

2.??????上位機(jī)電腦給下位機(jī)發(fā)送16進(jìn)制指令,控制攝像機(jī)云臺(tái)的各個(gè)方向。

3.??????該程序用Labview開發(fā)

?

二、開發(fā)過(guò)程:

1.??????開發(fā)平臺(tái)搭建:

開發(fā)過(guò)程用到的幾個(gè)軟件介紹:

(1)??????串口調(diào)試助手

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

(3)??????Labview

(4)??????Sony云臺(tái)自帶軟件(類似于串口調(diào)試助手)

?

2.??????各個(gè)軟件介紹:

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

左邊欄最上面的是電腦自帶的物理串口。點(diǎn)右邊的addpair,可以添加成對(duì)的串口。一對(duì)串口已經(jīng)虛擬互聯(lián)了,如果添加的是COM3、COM4,用COM3發(fā)送數(shù)據(jù),COM4就可以接收數(shù)據(jù),反過(guò)來(lái)也可以。

4.串口調(diào)試助手

可以看到虛擬出來(lái)的串口COM3、COM4,選擇COM4,設(shè)置為波特率9600,無(wú)校驗(yàn)位、8位數(shù)據(jù)位,1位停止位。

?

5. RS232

RS-232接口符合美國(guó)電子工業(yè)聯(lián)盟EIA)制定的串行數(shù)據(jù)通信的接口標(biāo)準(zhǔn),原始編號(hào)全稱是EIA-RS-232(簡(jiǎn)稱232RS232)。它被廣泛用于計(jì)算機(jī)串行接口外設(shè)連接。連接電纜機(jī)械、電氣特性、信號(hào)功能傳送過(guò)程。

6.同步傳輸和異步傳輸

?

同步傳輸通常要比異步傳輸快速得多。接收方不必對(duì)每個(gè)字符進(jìn)行開始和停止的操作。一旦檢測(cè)到幀同步字符,它就在接下來(lái)的數(shù)據(jù)到達(dá)時(shí)接收它們。

?

7.同步異步傳輸?shù)膮^(qū)別

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

?

2,)異步傳輸?shù)膯挝皇亲址絺鬏數(shù)膯挝皇菢E。

?

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

?

4,)異步傳輸對(duì)時(shí)序的要求較低,同步傳輸往往通過(guò)特定的時(shí)鐘線路協(xié)調(diào)時(shí)序。

?

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

三.近距離通信,RS232

3.1簡(jiǎn)單連接:

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

無(wú)Modem時(shí),最大通信距離按如下方式計(jì)算:

RS-232C標(biāo)準(zhǔn)規(guī)定:當(dāng)誤碼率小于4%時(shí),要求導(dǎo)線的電容值應(yīng)小于2500PF。對(duì)于普通導(dǎo)線,其電容值約為170PF/M。則允許距離L=2500PF/(170PF/M)=15M

這一距離的計(jì)算,是偏于保守的,實(shí)際應(yīng)用中,當(dāng)使用9600bps,普通雙絞屏蔽線時(shí),距離可達(dá)30~35米。

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

圖3是零MODEM方式的最簡(jiǎn)單連接(即三線連接),圖中的2號(hào)線與3號(hào)線交叉連接是因?yàn)樵谥边B方式時(shí),把通信雙方都當(dāng)作數(shù)據(jù)終端設(shè)備看待,雙方都可發(fā)也可收。在這種方式下,通信雙方的任何一方,只要請(qǐng)求發(fā)送RTS有效和數(shù)據(jù)終端準(zhǔn)備好DTR有效就能開始發(fā)送和接收。

?

(1)RTS與CTS互聯(lián):只要請(qǐng)求發(fā)送,立即得到允許

(2)DTR與DSR互聯(lián):只要本端準(zhǔn)備好,認(rèn)為本端立即可以接收(DSR、數(shù)傳機(jī)準(zhǔn)備好)。

?

3.3 串口問(wèn)題匯總:

3.31串口資源被占用:

這時(shí)候在LabVIEW會(huì)報(bào)錯(cuò),提示串口號(hào)存在,但當(dāng)前不能對(duì)其進(jìn)行操作,同時(shí)打開MAX時(shí)也可以在對(duì)應(yīng)的串口號(hào)下看到同樣的錯(cuò)誤,這表示這個(gè)串口已經(jīng)被其它程序占用了,比如有時(shí)候打開了串口調(diào)試助手來(lái)調(diào)試串口,然后又想在LabVIEW里面試一下,這時(shí)就會(huì)報(bào)這個(gè)錯(cuò),因?yàn)榇谝呀?jīng)被串口調(diào)試助手調(diào)用了,它不能被二個(gè)程序同時(shí)使用。

解決的方法是關(guān)掉其它程序即可,串口調(diào)試助手里也可以關(guān)閉這個(gè)串口。

還有一種情況是調(diào)試OK后生成EXE,運(yùn)行EXE也出現(xiàn)這個(gè)問(wèn)題,這時(shí)是因?yàn)榇诒辉瓉?lái)的LabVIEW程序打開,再用EXE打開時(shí)就會(huì)報(bào)錯(cuò),解決辦法是關(guān)掉原來(lái)的LabVIEW程序。最好是關(guān)掉LabVIEW.

在使用串口的過(guò)程中一定要關(guān)閉串口(使用VISA CLOSE),否則程序在退出的時(shí)候會(huì)報(bào)錯(cuò)說(shuō)數(shù)據(jù)丟失。

?

四.關(guān)鍵數(shù)據(jù)格式轉(zhuǎn)換問(wèn)題

?

4.1使用LabVIEW發(fā)送數(shù)據(jù)

?

還有一個(gè)問(wèn)題是使用LabVIEW發(fā)送數(shù)據(jù)的問(wèn)題

①如果下位機(jī)接收的是字符串?dāng)?shù)據(jù)類型的話,直接用VISA寫入對(duì)應(yīng)的字符串就行了,現(xiàn)在的儀器一般都是接收字符串的,所以可以直接使用VISA發(fā)送而不需要轉(zhuǎn)換。

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

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

但實(shí)際使用過(guò)程中,一般都是需要將某個(gè)子VI輸出一個(gè)動(dòng)態(tài)的字符串通過(guò)VISAWrite發(fā)送到下位機(jī)的,這時(shí)候就需要對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)換一下,這個(gè)轉(zhuǎn)換過(guò)程描述起來(lái)就是:將字符串A轉(zhuǎn)換為字符串B,使得正常顯示的字符串A跟十六進(jìn)制顯示的字符串B是一樣的。

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

這個(gè)轉(zhuǎn)換過(guò)程首先將字符串轉(zhuǎn)換為十六進(jìn)制數(shù)值型,然后再通過(guò)將這個(gè)十六進(jìn)制數(shù)值創(chuàng)建為一個(gè)數(shù)組,最后再使用“字節(jié)數(shù)組至字符串轉(zhuǎn)換”這個(gè)函數(shù)轉(zhuǎn)換為字符串即可,實(shí)際上就是圖5字符串轉(zhuǎn)換為U8字節(jié)的反向操作,只不過(guò)是這個(gè)十六進(jìn)制的值初始類型是十六進(jìn)制,要先轉(zhuǎn)換為數(shù)值類型。具體程序如下圖所示。

由于十六進(jìn)制數(shù)據(jù)由二個(gè)字節(jié)構(gòu)成,而字符只有一個(gè)字符,所以每二個(gè)字符表示一個(gè)十六進(jìn)制數(shù)據(jù),如果字符多于二個(gè)的話要先進(jìn)行截取,每二個(gè)字符轉(zhuǎn)換為一個(gè)十六進(jìn)制數(shù)據(jù)。也可以用空格將正常顯示的字符串每二個(gè)字符用一個(gè)空格斷開,然后先將這個(gè)字符串以空格為分隔符轉(zhuǎn)換為一個(gè)字符串?dāng)?shù)組,再轉(zhuǎn)換為十六進(jìn)制數(shù)值再轉(zhuǎn)換為字符串。

需要注意一下的是如果正常顯示的字符串并不是2的整數(shù)倍,那么上圖的轉(zhuǎn)換程序就會(huì)少轉(zhuǎn)換一個(gè)字符,可以用程序動(dòng)態(tài)判斷一下這個(gè)字符串的長(zhǎng)度,如果是奇數(shù)的話在它最左邊補(bǔ)一個(gè)“0”再使用上面的程序就正常了。

?

4.2 LabVIEW從串口接收數(shù)據(jù)

?

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

0011000100110010 00110011 00110100

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

上面說(shuō)的是下位機(jī)發(fā)送的是數(shù)值類型的數(shù)據(jù)的,使用“字符串至字節(jié)數(shù)組轉(zhuǎn)換”這個(gè)函數(shù). ②如果是下位面發(fā)送的是字符串類型的數(shù)據(jù),那么LabVIEW已經(jīng)直接轉(zhuǎn)換好了。

個(gè)人總結(jié):無(wú)論下位機(jī)發(fā)送的是何種類型的數(shù)據(jù),LABVIE從串口接收的時(shí)候,總是將每8位二進(jìn)制數(shù),作為字符的ASCII碼解讀。

?

4.3 關(guān)鍵問(wèn)題解決:

?

???????? 貼了那么多資料,最終還是要回歸到具體解決的問(wèn)題上來(lái)。本次做的小項(xiàng)目,總體來(lái)說(shuō),開發(fā)周期比較短,程序功能比較簡(jiǎn)單,但是涉及到的知識(shí)面比較多,知識(shí)點(diǎn)多而雜亂,所以對(duì)這部分資料做了相關(guān)整理,權(quán)當(dāng)對(duì)思路的整理。

???????? 本次遇到的問(wèn)題:

????PC與攝像機(jī)云臺(tái)通信過(guò)程中,開發(fā)的程序第一版可以完成虛擬串口之間的數(shù)據(jù)通信,但是問(wèn)題是實(shí)際測(cè)試中還是不能控制云臺(tái)。檢測(cè)了相關(guān)指令也沒(méi)發(fā)現(xiàn)錯(cuò)誤。

???????? 后來(lái)發(fā)現(xiàn)Labview程序無(wú)論是接收還是發(fā)送數(shù)據(jù)都是以字符串格式完成的,所以當(dāng)客戶要求用16進(jìn)制完成下位機(jī)與上位機(jī)通信的時(shí)候,問(wèn)題就出現(xiàn)了。最開始設(shè)計(jì)程序的時(shí)候也沒(méi)考慮到這個(gè)問(wèn)題。

?

(1)????將16進(jìn)制轉(zhuǎn)化成asc碼:

這個(gè)方法行不通,數(shù)據(jù)發(fā)下去還是不行。繼續(xù)找資料,找到下面的解決方案:

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

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

具體做法參考以下鏈接:

?

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

?

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。