RS485 雲台控制(PTZ)學習文件

2021-06-19 11:08:53 字數 4883 閱讀 9709

rs485/雲台控制(ptz)學習文件

zxf一.專案任務:

在linux環境下通過rs485串列埠實現對雲台鏡頭的各種控制(包括攝像頭的開啟,關閉,各個方向的運動及運動速度,預設點,自動掃瞄,變倍,調焦,光圈,視角寬窄等等的各項控制)。

二.學習步驟

1.驗證串列埠,雲台等硬體

考慮先在windows環境下執行串列埠除錯精靈等軟體,採用rs232-rs485的介面轉換器將pc機與雲台相連,通過串列埠除錯精靈向雲台傳送命令(根據具體雲台所採用的協議pelco-d或是pelco-p),驗證雲台能否正常工作,以保證後續工作順利進行。

2.熟悉linux下的串列埠程式設計

串列埠是電腦上一種很通用裝置通訊的協議,常用pc機上包含的是rs232規格的串列埠,當然,除了rs232 ,還有rs485和rs422兩種規格,用於不同的裝置通訊;linux環境下萬物皆檔案,都是文件,串列埠是裝置文件,配置好後,其他東西就當成文件進行操作。

串列埠程式設計中比較重要的是串列埠的設定,需要配置的部分包括波特率,資料位,停止位,奇偶校驗等。關於linux下串列埠設定的例子和程式網上有很多,而且基本上內容大同小異。

可以採用如下方法來驗證自己在linux下的串列埠程式:準備pc機兩台(一台裝linux系統,另一台裝windows即可),用串列埠線分別和兩台計算機的串列埠相連,在windows機下執行串列埠除錯軟體,並開啟com1(linux下對應串列埠ttys0)等待操作。在linux機下執行自己的串列埠程式,注意開啟的串列埠和波特率,校驗位等設定要和windows機一致,可以將自己的串列埠程式執行在接收資料狀態,並列印資訊,在windows機下用串列埠除錯精靈傳送資料,驗證在linux機下接受是否正確,同樣可以驗證傳送資料是否正確。

關於串列埠設定程式:

1.              配置波特率:注意每台機器都有輸出輸入接收資訊的速度,所以用cfsetispeed和cfsetospeed來分別設定。linux串列埠設定過程中有乙個非常重要的結構體struct termios ,它包括了串列埠端的任何配置,在termios.h中被定義。系統為波特率專門準備了一張錶用b38400,b19200…代替。實際上傳出的是38400和19200這些值。函式原型:void set_speed(int fd,int speed).

2.              配置奇偶校驗,資料,停止位。

這三個引數通常放在一起配置,databits是資料位,stopbits是停止位,parity是校驗位。termios成員中共定義c_cflag 控制項 c_lflag 線路項 c_iflag 輸入項 c_oflag 輸出項 c_cc 控制字元 c_ispeed 輸入波特 c_ospeed 輸出波特 那麼多項,對於每一項都有很多的配置,比較複雜,但就乙個通用的串列埠框架,主要進行奇偶校驗,資料,停止位的配置。而其他的一些控制項。函式原型:

int set_parity(int fd,int databits,int stopbits,int parity)

3.              配置好串列埠後,就可以開啟串列埠,並不斷的從串列埠讀資料,並列印出這些資料進行驗證自己的程式。此部分down了個串列埠程式來熟悉linux下的串列埠程式設計。

三.雲台控制協議pelco-d/p

雲台有水平雲台,旋轉雲台和萬向雲台等多種型別,水平雲台和旋轉雲台的運動速度是恆定的。只有上下左右四個方向,每個方向都有乙個限位開頭,因而每一方向行程的距離固定,而萬向雲台運動速度是可變的,且運動方向是任意,控制比較複雜。對與雲台的工作原理和電路進行了基本了解,由於實際應用時只需通過串列埠向雲台傳送其能識別的命令來完成相應的控制即可。雲台測的東西沒有進一步的深入了解。

雲台控制系統設計時要選協議,每個雲台都有協議可以選擇,要麼自動識別,要麼通過撥碼開關來選擇。具體要看裝置說明書。每個廠家的撥碼方式不一樣。協議選好後,就可以向雲台傳送命令控制雲台,控制雲台時傳送乙個指令,都要在傳送乙個停止指令,否則雲台將一直執行那一操作。查資料發現大多數雲台都支援pelco-d和pelco-p協議。目前這兩個協議也有很多版本,大多是擴充。

pelco-d:

資料格式:1位起始位、8位資料、1位停止位,無效驗位。波特率:2400b/s

命令格式:

1.該協議中所有數值都為十六進製制數

2.同步位元組始終為ffh

3.位址碼為攝像機的邏輯位址號,位址範圍:00h–ffh可以在裝置中設定。

4.指令碼表示不同的動作

5.資料碼1、2分別表示水平、垂直方向速度(00-3fh),ffh表示「turbo」速度

6.校驗碼 = mod[(位元組2 + 位元組3 + 位元組4 + 位元組5 + 位元組6)/100h]

命令字1和命令字2設定如下:

sence碼與bit4和bit3有關。在bit4和bit3為1的情況下,如果sence碼為1,則命令就是自動掃瞄和和攝像機開啟;如果sence碼為0,則命令就是手動掃瞄和攝像機關閉。當然如果bit4或bit3為0的話那命令就無效了。

資料1表示鏡頭左右平移的速度,數值從$00(停止)到$3f(高速),另外還有乙個值是$ff,表示最高速。

資料2表示鏡頭上下移動的速度,數值從$00(停止)到$3f(最高速)。

校驗碼是指byte2到byte6這5個數的和(若超過255則除以256然後取餘數)。

pelco-d的命令碼和資料碼的參考命令:

以位址碼0x01為例的部分指令:

//上//下

//左//右

//變倍短

//變倍長

//聚焦近

//聚焦遠

//光圈小

//光圈大

//燈光關

//燈光開

//轉至預置點001

//設定預置點001

//刪除預置點001

以上對應的停命令均是:

//停命令

pelco-p:

pelco-p協議一般採用rs-485傳輸,波特率為4800,1位起始位和停止位,8位資料位,無校驗位。格式:

起始碼是固定值$a0。位址碼是裝置的邏輯位址,可由接收裝置上的dip開關來設定????。

資料位1-4意義:

停止碼是固定值 $af 。校驗碼是 byte2 到 byte6 這 5 個數的異或值(xor)。位址碼是從 0編起的,所以位址碼$00表示第一台裝置。

以位址碼0x01為例:

//上//下

//左//右

//變倍短

//變倍長

//聚焦近

//聚焦遠

//光圈小

//光圈大

無命令字傳送//燈光關

無命令字傳送//燈光開

//自動巡航

//關閉自動巡航

//轉至預置點001

//設定預置點001

//刪除預置點001

以上對應的停命令均是(上下左右、變倍、聚焦、光圈均有停命令):

雲台控制(ptz)命令控制說明:

⒈ 當控制雲台水平、上下方向動作或「iris」、「focus」、「zoom」時需要使相應的控制位為「1」,不用控制的相應位置為「0」

⒉ 當需要雲台pan/tilt兩方向同時動作時,只需將pan/tilt的相應控制位置「1」即可,pan/tilt 的速度控制由word5/word6決定 

⒊將word3、word4的所有位置為「0」可以停止雲台的動作

5、擴充命令

萬向雲台支援預設點,使雲台轉動到提前設定好的點。命令格式:

四.編寫並除錯linux環境下的雲台控制程式

首先在linux環境下編寫簡單的程式驗證命令的正確性,例如利用write函式直接通過rs485向雲台寫命令(符合雲台控制協議),檢視命令是否執行正確,如果正確則編寫雲台控制程式將這些命令封裝成函式,以供上層函式呼叫。

全域性變數:int ptz_protocol, baudrate,ptz_fd雲台所採用的協議和波特率,串列埠控制代碼。

資料結構:考慮到pelco-d和pelco-p協議命令訊息格式的規定,

對於pelco-d定義命令訊息:

static struct st_message  send_msg;(訊息各部分的含義和規定見本文件第三部分)

對於pelco-p定義命令訊息:

static struct st_message  send_msg;(訊息各部分的含義和規定見本文當第三部分)

*str_cmd為傳參,此字串中應包括需要實現的功能,操作,速度等資訊。功能命令應包括:

tilt_up 上tilt_down下pan_right右 pan_left 左:

pt_left_up  左上             pt_left_down 左下

pt_right_up 右上             pt_right_down  右下

z_zoom_in:                   z_zoom_out:

focus_far:           調焦遠                 focus_near 調焦近

iris_open     光圈開          iris_close:   光圈關

set_preset 設定預製點      goto_preset 運動到預置點

cle_preset 刪除預置點

pan_auto 自動掃瞄       pan_auto_stop停止自動掃瞄

ptz_stop  停止

可以將要實現的各種功能定義成列舉型別,然後將各個功能下的具體操作動作也定義成列舉型別。

程式模組設計:

設計過程中分為三個大模組:

1.     ptz_init 模組主要完成開啟串列埠,並對串列埠進行設定,設定波特率,資料位,校驗位等

2.     ptz_exit 模組主要來關閉串列埠操作。實現比較簡單

3.     ptz_message_handle模組是主要實現部分,實現命令的解析,根據要實現的功能設定send_msg.結構體,並將此結構體,通過rs485串列埠傳送給雲台。此部分大體的流程設計如下:

ptz_message_handle模組:

*str_arg引數需要規定一下格式以便解析函式能夠正確解析它可以根據自己需要的進行規定,例如各項引數間採用@符號隔開等。

常用介面 RS485

rs485電路設計 差分傳輸 半雙工 rs 485是針對uart串列埠的一種介面標準,它定義了序列通訊系統中傳送器和接收器的一系列電氣特性。相比於rs 232,rs 485標準的通訊系統抗干擾能力較強,可實現長距離資料傳輸 同時支援多個收發器連線到同乙個通訊網路中。因此,rs 485在工業控制領域以...

rs485除錯軟體 RS485 三種硬體電路設計

rs485介面具有抗干擾性強,適合長距離傳輸和多站點通訊等特點,因此在工業控制中被普遍使用。微控制器只有uart介面,如果需要使用rs485通訊,需要外面加乙個transceiver。由於rs485工作在半雙工模式,因此傳送和接收的方向切換是設計過程中的乙個重要問題。通常的介面電路有以下三種 1 第...

rs485除錯助手 RS485通訊連線方式是怎樣的

電工之家 www.dgzj.com qq群 2179090 rs485是串列埠的一種,常見的還有rs232,rs422,都屬於串列埠,它們都只是定義了電氣特性的通訊結構,並沒有定義資料傳輸的協議。有的人很容易混淆它們之間的概念,比如人家問你是什麼通訊協議,你回答是rs485,那麼別人就悶了。所謂的通...