RS485/云台控制(PTZ)学习文档

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为例的部分指令:

  {0xff,0x01,0x00,0x08,0x00,0xff,0x08,}//上

  {0xff,0x01,0x00,0x10,0x00,0xff,0x10,}//下

  {0xff,0x01,0x00,0x04,0xff,0x00,0x04,}//左

  {0xff,0x01,0x00,0x02,0xff,0x00,0x02,}//右

  {0xff,0x01,0x00,0x40,0x00,0x00,0x21,}//变倍短

  {0xff,0x01,0x00,0x20,0x00,0x00,0x41,}//变倍长

  {0xff,0x01,0x01,0x00,0x00,0x00,0x81,}//聚焦近

  {0xff,0x01,0x00,0x80,0x00,0x00,0x02,}//聚焦远

  {0xff,0x01,0x02,0x00,0x00,0x00,0x03,}//光圈小

  {0xff,0x01,0x04,0x00,0x00,0x00,0x05,}//光圈大

  {0xff,0x01,0x00,0x0b,0x00,0x01,0x0d,}//灯光关

  {0xff,0x01,0x00,0x09,0x00,0x01,0x0b,}//灯光开

  {0xff,0x01,0x00,0x07,0x00,0x01,0x09,}//转至预置点001

  {0xff,0x01,0x00,0x03,0x00,0x01,0x05,}//设置预置点001

  {0xff,0x01,0x00,0x05,0x00,0x01,0x07,}//删除预置点001

  以上对应的停命令均是:

  {0xff,0x01,0x00,0x00,0x00,0x00,0x01,}//停命令

Pelco-P:

          PELCO-P协议一般采用RS-485传输,波特率为4800,1位起始位和停止位,8位数据位,无校验位。格式:




 

  起始码是固定值$A0。地址码是设备的逻辑地址,可由接收设备上的DIP开关来设定????。

数据位1-4意义:




 

停止码是固定值 $AF 。校验码是 Byte2 到 Byte6 这 5 个数的异或值(XOR)。地址码是从 0编起的,所以地址码$00表示第一台设备。

以地址码0x01为例:

{0xa0,0x01,0x00,0x08,0x00,0x30,0xaf,0x39,}//上

{0xa0,0x01,0x00,0x10,0x00,0x30,0xaf,0x21,}//下

{0xa0,0x01,0x00,0x04,0x10,0x00,0xaf,0x15,}//左

{0xa0,0x01,0x00,0x02,0x10,0x00,0xaf,0x13,}//右

{0xa0,0x01,0x00,0x40,0x00,0x00,0xaf,0x41,}//变倍短

{0xa0,0x01,0x00,0x20,0x00,0x00,0xaf,0x21,}//变倍长

{0xa0,0x01,0x02,0x00,0x00,0x00,0xaf,0x03,}//聚焦近

{0xa0,0x01,0x01,0x00,0x00,0x00,0xaf,0x00,}//聚焦远

{0xa0,0x01,0x08,0x00,0x00,0x00,0xaf,0x09,}//光圈小

{0xa0,0x01,0x04,0x00,0x00,0x00,0xaf,0x05,}//光圈大

  无命令字发送//灯光关

  无命令字发送//灯光开

{0xa0,0x01,0x00,0x96,0x00,0x20,0xaf,0xb7,}//自动巡航

{0xa0,0x01,0x00,0x99,0x00,0x20,0xaf,0xb8,}//关闭自动巡航

{0xa0,0x01,0x00,0x07,0x00,0x01,0xaf,0x07,}//转至预置点001

{0xa0,0x01,0x00,0x03,0x00,0x01,0xaf,0x03,}//设置预置点001

{0xa0,0x01,0x00,0x05,0x00,0x01,0xaf,0x01,}//删除预置点001

以上对应的停命令均是(上下左右、变倍、聚焦、光圈均有停命令):

{0xa0,0x01,0x00,0x00,0x00,0x00,0xaf,0x01,}

云台控制(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 {

       char stx;

       char address;

       char command1, command2, data1, data2;

       char checksum;

} send_msg;(消息各部分的含义和规定见本文档第三部分)

对于pelco-P定义命令消息:

static struct st_message {

       char stx;

       char address;

       char data1, data2, data3, data4;

       char etx;

       char checksum;

} 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参数需要规定一下格式以便解析函数能够正确解析它可以根据自己需要的进行规定,例如各项参数间采用@符号隔开等。
  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
摄像头视频云台控制PTZ前端HTML是指通过HTML页面控制PTZ云台摄像头的运动。在互联网时代,视频监控系统已成为各行各业必不可少的安全保障措施,而摄像头PTZ控制技术是其中最基本的功能之一。 首先需要明确的是,云台控制是指控制摄像头的云台,而这里的PTZ具体指摄像头的转向、变焦、变倍等控制操作。这其中最关键的部分是前端HTML控制页面的设计与编写,通过精细的前端设计,能够让用户更方便高效地操作PTZ云台。典型的控制操作通常包括拍照、录像、移动旋转、变焦变倍等功能。 在控制流程上,摄像头和PTZ云台通常通过物理接口相连,不同的摄像头与云台之间的控制命令也有所不同。因此,在进行HTML页面设计时,需要了解相关的PTZ协议规范,以确保控制命令能够精准达到云台和摄像头设备。 同时,为了响应用户的操作指令,前端HTML页面需要与后端服务端对接,以实现状态查询、控制命令下发等功能。因此,在进行前端设计时,还需要考虑到相关的网络通信协议和安全机制。 综上所述,摄像头视频云台控制PTZ前端HTML是一个综合性的控制系统,需要涉及多个领域技术的融合,包括前端UI设计、网络通信、用户体验等方面。只有把握好这些关键点,才能在实现高效控制功能的同时提升整个系统的稳定性、易用性和安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值