PELCO-D/PELCO-P协议

PELCO-D/PELCO-P协议

 

 

 

 

 

PELCO-D:

 

数据格式1位起始位、8位数据、1位停止位,无效验位。波特率:2400B/S

 

命令格式

 

字节1

 

 

字节2

 

 

字节3

 

 

字节4

 

 

字节5

 

 

字节6

 

 

字节7

 

 

同步字节

 

 

地址码

 

 

指令码1

 

 

指令码2

 

 

数据码1

 

 

数据码2

 

 

校验码

 

 

 

 

1.      该协议中所有数值都为十六进制数

 

2.      同步字节始终为FFH

 

3.      地址码为摄像机的逻辑地址号,地址范围:00H–FFH

 

4.      指令码表示不同的动作

 

5.      数据码1、2分别表示水平、垂直方向速度(00-3FH),FFH表示“turbo”速度

 

6.      校验码 = MOD[(字节2 + 字节3 + 字节4 + 字节5 + 字节6)/100H]

 

 

 

以地址码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,0x20,0x00,0x00,0x21,}//变倍短

 

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

 

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

 

{0xff,0x01,0x01,0x00,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:

 

数据格式1位起始位、8位数据、1位停止位,无效验位。波特率:9600B/S

 

命令格式

 

字节1

 

 

字节2

 

 

字节3

 

 

字节4

 

 

字节5

 

 

字节6

 

 

字节7

 

 

字节8

 

 

STX

 

地址码

 

 

指令码1

 

 

指令码2

 

 

数据码1

 

 

数据码2

 

 

ETX

 

校验码

 

 

 

 

1.      该协议中所有数值都为十六进制数

 

2.      STX始终为A0H

 

3.      地址码为摄像机的逻辑地址号,地址范围:00H–1FH

 

4.      指令码表示不同的动作

 

5.      数据码1、2分别表示水平、垂直方向速度(00-3FH),在有关预制点的操作时,数据码2表示预制点值

 

6.      ETX始终为AFH

 

7.      校验码(XOR sum of Bytes 2-6) = 字节2 ^ 字节3 ^ 字节4 ^ 字节5 ^ 字节6

 

 

 

以地址码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,}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TABLE OF CONTENTS DOCUMENT HISTORY.............................................................................................................................................................3 LEGAL NOTICES.......................................................................................................................................................................4 NOTICE OF DISCLAIMER..............................................................................................................................................................4 PROPRIETARY NOTICE.................................................................................................................................................................4 QUESTIONS..................................................................................................................................................................................4 WHAT THIS MANUAL COVERS.............................................................................................................................................5 THE BYTE FORMAT.................................................................................................................................................................5 THE MESSAGE FORMAT.........................................................................................................................................................5 The Standard Command Set.......................................................................................................................................................6 Extended Commands..................................................................................................................................................................7 Advanced Feature Set.................................................................................................................................................................8 Creating Labels..
在 .Net 平台上开发 PELCO-D/P 控制功能,可以使用 SerialPort 类或 Socket 类来实现串口或网络通信。具体的开发步骤如下: 1. 创建一个类来处理 PELCO-D/P 的指令,比如命名为 PelcoDHelper。 2. 在 PelcoDHelper 中定义方法来生成 PELCO-D/P 协议数据包,可以根据指令类型、摄像头地址、运动速度等信息来生成数据包。 3. 在 PelcoDHelper 中定义方法来解析 PELCO-D/P 协议数据包,可以根据协议规范来解析数据包中的各个字段。 4. 在 PelcoDHelper 中定义方法来发送和接收 PELCO-D/P 指令,可以使用 SerialPort 类或 Socket 类来实现串口或网络通信。 5. 在控制器或其他业务逻辑中调用 PelcoDHelper 中的方法来实现 PELCO-D/P 控制功能。 需要注意的是,PELCO-D/P 协议比较复杂,需要仔细研究其协议规范,并且根据摄像头的型号和支持的指令来实现相应的控制功能。同时,需要注意安全性问题,避免恶意攻击或误操作导致摄像头损坏或数据泄露。 以下是一个使用 SerialPort 类来实现串口通信的示例代码: ```csharp public class PelcoDHelper { private SerialPort _serialPort; public PelcoDHelper(string portName, int baudRate) { _serialPort = new SerialPort(portName, baudRate); _serialPort.Open(); } public byte[] GenerateCommandData(PelcoDCommand command) { // 根据指令类型、摄像头地址、运动速度等信息来生成数据包 byte[] data = new byte[8]; data[0] = Convert.ToByte(command.Address); data[1] = Convert.ToByte(command.Command1); data[2] = Convert.ToByte(command.Command2); data[3] = Convert.ToByte(command.Data1); data[4] = Convert.ToByte(command.Data2); data[5] = Convert.ToByte(command.Checksum); return data; } public PelcoDResponse Receive() { // 读取并解析响应数据 byte[] buffer = new byte[7]; _serialPort.Read(buffer, 0, 7); PelcoDResponse response = new PelcoDResponse(); response.Address = buffer[0]; response.Data1 = buffer[1]; response.Data2 = buffer[2]; response.Data3 = buffer[3]; response.Data4 = buffer[4]; response.Data5 = buffer[5]; response.Checksum = buffer[6]; return response; } public void Send(byte[] data) { // 发送指令数据 _serialPort.Write(data, 0, data.Length); } } // 控制器或其他业务逻辑中调用 PelcoDHelper 中的方法来实现 PELCO-D/P 控制功能 public class PelcoController : Controller { private readonly PelcoDHelper _pelcoDHelper; public PelcoController(IConfiguration configuration) { var pelcoDSettings = configuration.GetSection("PelcoD"); var portName = pelcoDSettings.GetValue<string>("PortName"); var baudRate = pelcoDSettings.GetValue<int>("BaudRate"); _pelcoDHelper = new PelcoDHelper(portName, baudRate); } [HttpPost] public IActionResult ControlPelcoD([FromBody] PelcoDCommand command) { var data = _pelcoDHelper.GenerateCommandData(command); _pelcoDHelper.Send(data); var response = _pelcoDHelper.Receive(); return Ok(response); } } ``` 上述代码中,PelcoDHelper 是一个 PELCO-D/P 辅助类,使用 SerialPort 类来实现串口通信。PelcoController 是一个控制器,负责接收客户端发送的 PELCO-D/P 指令,并调用 PelcoDHelper 中的方法来实现控制功能。需要注意,在使用 SerialPort 类时需要在 PelcoDHelper 的构造函数中打开串口,并在控制器中使用 PelcoDHelper 的实例来发送和接收数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值