利用串口通訊技術破解Pelco-D雲台控制協議
作者:一點一滴的Beer http://beer.cnblogs.com/
硬體裝置:
帶雲台功能的4.2寸智能球攝像機
球機功能:
水平360度全方位轉動,傾斜90度角,2.5倍變焦,支援0-0xF6個預置位;內建解碼晶片,支援Pelco-D協議控制雲台動作。
解決問題思路簡介:
1. 拆開雲台,按照球形雲台裝置的說明書拔動雲台內部的拔碼開關,對此裝置的邏輯地址、串口通訊的傳輸速率、控制協議類型(D協議或者P協議)等等進行必要的設定。
2. 串連PC機,在PC機上進行串口通訊編程,發送雲台控制協議命令,控制雲台運動。
開發環境及程式設計語言:
VS2005環境,C#語言,WinXp平台。
其實上面說的這些平台都無所謂,因為雲台控制的核心是發送的命令,主要用的技術就是串口通訊技術,不管用什麼平台,只要能將相應的協議命令發送到雲台裝置即可。
遇到問題:
關於雲台的控制協議Pelco-D協議,網上都有詳細的介紹。中文的介紹一般都只是對雲台的方位的控制,詳細的Pelco-D協議請到網上下載英文版本的文檔。文檔中對此協議進行了詳細介紹,功能異常強大。但是請注意,協議的被設計成很強大的功能並不意味著你的雲台裝置支援這麼多強大的功能,所以在對你的裝置進行控制的時候,最好先瞭解它支援哪些功能。比如,D協議中還可以對雲台的當前位置和狀態進行查詢,這個就需要雲台內部的解碼晶片中的程式返回數值,但是一般的雲台都不具備此功能;D協議理論上還可以調整光圈,但顯然很多雲台在硬體上就沒有光圈調節器,所以凡事因事制宜。
D協議具有很多子版本。不同的雲台廠家會根據自身的產品特點衍生出不同的D協議子類。比如我購買的雲台在開發的時候,發現按照標準的協議雖然可以實現簡單的方位控制,但是卻無法實現雲台的鏡頭縮放。當時懷疑是不是此裝置的鏡頭縮放硬體出了故障,於是就質問賣家,賣家說:“在發貨前經過了測試,用的是PELCO_D_TDTC協議,可以支援縮放”。並把他的測試軟體的協議發給了我,這個時候我才知道D協議居然還有這麼多子類,同時我一下就暈了,不知道如何是好,因為手上沒有任何這樣的資料,雲台的參考手冊就只有簡單的一頁紙,裡面找思路感覺比較困難。
到網上尋找PELCO_D_TDTC協議,得到的相關搜尋結果少這又少。最後實在是百無聊賴,到網上下載了一個雲台控制的上位機軟體(深圳明日實業的雲台控制上位機軟體,如)。然後接上雲台裝置,在PC機上進行控制實驗,發現,居然可以對雲台的鏡頭的縮放進行控制。這就證明了此雲台的硬體是正常的,可能就是自己的協議命令不正確。但是如果還從英文版本的D協議說明書中找突破口,實在太難了,於是想辦法從此軟體上找解決問題的思路。
解決問題的思路:
用串口線將兩台機器串連起來,然後一端用雲台控制上位機軟體發送命令,另外一端用串口調試助手接收,並顯示。
實現兩台機器通訊,可以是PC機和單片機,也可以是兩台PC機。但是這都對需要開發人員額外增加裝置。在此,筆者想到了一個比較簡單的方法來實現在同一台機器上自發自收。
1.準備一根USB轉RS232的轉接線。因為我的PC機上只有一個串口,所以需要再增加一個串口,如果你的機器上有多個串口,可以跳過此步。
2.自製一個兩端都是母口的串口連接線。因為PC機的串口一般都是公口,所以如果要將兩個公口互邊,必需要做一根連接線。市場上有這種成品轉接線,如果你可以買到,就跳過此步。(“公頭”串口如左,“母頭”串口接頭如右)
RS232的引腳定義如下,只需要接三根線就可以進行通訊:RxD,TxD,GND,分別是接收,發送和地線。
自製雙母口串口連接線的接線為:如的編號,2、3、5分別對3、2、5
注意:一邊的R、T分別和另一端的T、R相連,因為RS232是半雙工通訊的,在自製的時候,一定要注意交錯相連,因為你做的是連接線而不是延長線。
3.完成上面的兩根線後,串連兩個串口(比如我的機器上是COM1和COM3),就開始實現同一台機器的兩個不同串口之間的收發了。
4.在PC機上開啟“雲台控制上位機軟體”和“串口調試助手”,對連接埠號碼分別設定為COM1和COM3,然後串口的其它設定都一樣。對“雲台控制上位機軟體”進行操作,便能在“串口調試助手”中看到相應的雲台控制D協議命令了。
實驗提到的D協議雲台控制命令:
方位控制:
命令 |
控制字元 |
上 |
FF 01 00 04 30 00 35 FF 01 00 00 00 00 01 |
下 |
FF 01 00 10 00 30 41 FF 01 00 00 00 00 01 |
左 |
FF 01 00 04 30 00 35 FF 01 00 00 00 00 01 |
右 |
FF 01 00 02 30 00 33 FF 01 00 00 00 00 01 |
左上 |
FF 01 00 0C 30 30 6D FF 01 00 00 00 00 01 |
左下 |
FF 01 00 14 30 30 75 FF 01 00 00 00 00 01 |
右上 |
FF 01 00 0A 30 30 6B FF 01 00 00 00 00 01 |
右下 |
FF 01 00 12 30 30 73 FF 01 00 00 00 00 01 |
自動 |
FF 01 00 07 00 63 6B FF 01 00 00 00 00 01 |
停 |
FF 01 00 00 00 00 01 |
縮放控制:
ZOOM WIDE |
FF 01 00 40 00 00 41 FF 01 00 00 00 00 01 |
ZOOM TELE |
FF 01 00 20 00 00 21 FF 01 00 00 00 00 01 |
FOCUS FAR |
FF 01 00 80 00 00 81 FF 01 00 00 00 00 01 |
FOCUS NEAR |
FF 01 01 00 00 00 02 FF 01 00 00 00 00 01 |
設定預置點
以預置點1為例:
SET |
FF 01 00 03 00 01 05 |
GOTO |
FF 01 00 07 00 01 09 |
CLEAR |
FF 01 00 05 00 01 07 |
ZERO |
FF 01 00 07 00 22 2A |
以預置點2為例:
SET |
FF 01 00 03 00 02 06 |
GOTO |
FF 01 00 07 00 02 0A |
CLEAR |
FF 01 00 05 00 02 08 |
ZERO |
FF 01 00 07 00 22 2A |
FLIP(ROTATE 180) |
FF 01 00 07 00 21 29 FF 01 00 00 00 00 01 |
PATERN START |
FF 01 00 1F 00 00 20 FF 01 00 00 00 00 01 |
PATTERN STOP |
FF 01 00 21 00 00 22 FF 01 00 00 00 00 01 |
RUNPATTERN |
FF 01 00 23 00 00 24 FF 01 00 00 00 00 01 |
注意:從網上流傳的“雲台控制上位機軟體”的介面來看,還有很多其它進階功能,但是因為我的雲台在硬體上只支援上面那些功能,所以更多的命令結果我就不羅列了,反正利用此方法可以提取出你想要的任何命令。
可能上面的一些基本命令也可以通過查D協議的原版英文文檔得到,但是當時在理論認證的時候遇到了一些小麻煩,所以就暫時用這個算是有點耍小聰明的方法來解決自己的問題吧。今後有時間再從理論上進行總結吧。
如果還有時間,再將自己寫的雲台控制軟體進行總結吧,暫時先發一個。
------------------------------------------------------------------
Author:一點一滴的Beer
Email /Gtalk:dreamzsm@gmail.com
From:http://www.cnblogs.com/beer
Notes:歡迎轉貼,但請在頁面中加個連結註明出處
Time:2010-12-8