监控行业通信协议应用最广的协议就是美国PELCO-P,PELCO-D协议,可以说国内大部分控制设备,包括嵌入式录像机,监控视频采集卡软件,各种控制键盘,PC机调试研究均有此协议。其中通过各个行家又繁衍出各种版本。此文讲解“正宗”的美国PELCO-P\D协议,最后也讲解一下最新版本及其他厂家的协议。
一、PELCO协议介绍
1、PELCO协议据本人了解,有PELCO-P\D两种协议。其中PELCO控制键盘与PELCO矩阵通信协议不在此文范围。这里只讲PELCO主控与终端解码器通信协议。
2、PELCO主控与前端解码器是通过RS422\RS485通信格式传输,注意:以前不少菜鸟问我的设备是用RS485协议,这就是笑话了。协议是指通信的内容,主控与接收约好的数据传输,类似合同,甲乙两方按约定的事项来办事。
3、除PELCO原装设备支持RS422和RS485兼容接口,国内大部分厂家主控和接收设备仅支持RS485接口,RS485接口是半双工通信模式,即发送端发过去的控制命令,只管发出去,不管你收不收得到,有的厂家连续发,有的间隔发,总类很多。停止命令往往发1、2条。如PELCO\PANASONIC、三星等大厂做的通信接口,主控发出去命令,接收端收到命令返回SCK命令给主控,叫回答命令,告知发送端我已收到命令,不用再发了,这就是RS422通信模式的一种用途。
4、PELCO协议内容包括云台控制命令,摄像机控制命令,辅助控制命令。预置位设置和调用命令。注意:网上PELC协议版本众多,建议看家选择英文版本,中文版本很多错误。其中英文版本最后的例子有错,后面我会纠正!下面逐一介绍:
二、PELCO协议内容介绍
1、 先讲PELCO-P协议:
|
Byte
|
Value
|
Function
|
|
字节1
|
$A0
|
STX (start transmission)
|
|
字节2
|
$00 to $1F
|
Address
|
|
字节3
|
Data byte 1
|
(see below)
|
|
字节4
|
Data byte 2
|
(see below)
|
|
字节5
|
Data byte 3
|
(see below)
|
|
字节6
|
Data byte 4
|
(see below)
|
|
字节7
|
$AF
|
ETX (end transmission)
|
|
字节8
|
$00-$FF
|
Check Sum
|
看上表:P协议一共8个字节,头字节是A0,第2个字节是地址00-31(一共32个地址),32个地址现在大系统已经不够用了,所以我们要更改它,可以改成00-63个地址,00-127个地址。地址在软件里随便增加的。这里还注意一个地址是0开始,这也是为什么我们常说P协议地址主控要减1。有的技术人写的软件老老实实的按照PELCO-P文档的软件来定义,应当自己灵活一下,把地址码改到从1开始不就行了吗?这样就不会在将来客户使用过程要加1或减1这么麻烦。
上表第3个字-第6个字节是:看下表:
|
Bit number
|
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
|
字节3
|
0
|
Camera On
|
Autoscan On
|
Camera on / off
|
Iris Close
|
Iris Open
|
Focus Near
|
Focus Far
|
|
字节4
|
0
|
Zoom Wide
|
Zoom Tele
|
Tilt Down
|
Tilt Up
|
Pan Left
|
Pan Right
|
0 (for pan / tilt)
|
|
字节5
|
Pan Speed $00 to $3F and $40 for Turbo
|
|
字节6
|
Tilt Speed $00 to $3F
|
通过上表可知:P协议内第3和第4个字节是摄像机协议和云台控制命令,第5和第6个字节是云台水平速度和垂直速度命令。看上表,第3个字节内的第6位是摄像机电源开,5位:可以定义云台自动扫描,4位:摄像机屏蔽开与关;3位:光圈关;2位:光圈开;1位:聚焦近焦;0位:聚焦远焦。举例:打开光圈,那么此字节应当是04H十六进制,二进制就是00000100b。P协议第4字节云台命令和变倍命令,看滴4字节data2里的8位都有:7位是0无意义;6位是变倍广角;5位:变倍远焦;4位:云台向下;3位:云台向上;2位:云台向左;1位:云台向右;0:可能是无意义。这里没有明显云台自动命令,所以最早PELCO老大是不做云台自动转的命令在协议里。之后国内厂家为了自动,就用调用多少号预置位命令去实现自动协议。各个厂家的调用预置位或者是设置预置位号命令不同,这就是造成了今天各个厂家的云台解码器设置方法不一样。这里很令工程商和菜鸟恼火!
有时候工程商操作的时候发现云台怎么是左右反了的?这就是软件不匹配造成。A厂家技术人喜欢这样定义右命令,B厂家技术人喜欢那样定义。这就是协议之间的混乱,不严格按照PELCO老大的协议命令。自己定义的命令使用者调试异常只能找厂家解决。
讲上面的第5个字节:第5个字节是用在变速球机才有用的命令。PELCO老大把水平速度定义成00-63个级,一共64级够用了。第6个字节是垂直速度,和水平速度一样也是64个速度级。这里讲速度级,问各位使用者,控制高速球的时候,您能感觉出高速球在以64个速度在不同变化吗?不能!控制高速球转动无非是用控制键盘的摇杆或者是点鼠标,点鼠标那个就不说了,麻烦的要死!按遥控器?海康的导航键要按的频率快,云台才转的快一些,但里面也只有几个速度级而已。
讲控制键盘控制高速球,大家知道,控制键盘的摇杆3维的里面是3个电位器,左右1个,上下1个,旋转1个控制变倍。控制键盘摇杆内电位器由于精度问题,在键盘软件里一般是做6-12个速度级来控制高速球。高速球软件里也要做6-12个速度表。这样我感觉是最理想,当键盘摇杆出现偏移量,键盘发码给高速球。可想一下,键盘摇杆向右45°就到头了。说这么多,64个速度级是没有用的,但是在高速球内,开发者最好都做进去,因为你不知键盘发过来的是哪个速度。也可以用判断法,把64分成6-12个范围来接收控制。我强烈建议使用者,购买监控设备,控制端和前端最好使用1个厂家的设备。这样能省很多事情。
再回到第一个表看P协议的第7个字节是AFH,这个是结束字节标志。第8个字节是校验字节。最后再讲校验。
下面讲PELCO协议特殊命令:看表格:常用的命令我用红色表示。
第3字节
第4字节
第5字节
第6字节
|
Command
|
Data byte 1
|
Data byte 2
|
Data byte 3
|
Data byte 4
|
|
Set Preset XX
|
00
|
03 常用
|
00
|
01 to FF
|
|
Clear Preset XX
|
00
|
05 常用
|
00
|
01 to FF
|
|
Go To Preset XX
|
00
|
07 常用
|
00
|
01 to FF
|
|
Flip (rotate 180o)
|
00
|
07 常用
|
00
|
21
|
|
Zero Pan Position
|
00
|
07 常用
|
00
|
22
|
|
Set Aux XX
|
00
|
09 常用
|
00
|
01 to 08
|
|
Clear Aux XX
|
00
|
0B 常用
|
00
|
01 to 08
|
|
Remote Reset
|
00
|
0F 不常用
|
00
|
00
|
|
Zone Start
|
00
|
11 不常用
|
00
|
01 to 08
|
|
Zone End
|
00
|
13 不常用
|
00
|
01 to 08
|
|
Write char to screen
|
00
|
15 不常用
|
0 to 28
|
0 to 7F
|
|
Clear Screen
|
00
|
17 不常用
|
00
|
00
|
|
Alarm Ack
|
00
|
19 不常用
|
00
|
01 to 08
|
|
Zone Scan On
|
00
|
1B 不常用
|
00
|
00
|
|
Zone Scan Off
|
00
|
1D 不常用
|
00
|
00
|
|
Pattern Start
|
00
|
1F 不常用
|
00
|
00
|
|
Pattern Stop
|
00
|
21 不常用
|
00
|
00
|
|
Run Pattern
|
00
|
23 不常用
|
00
|
00
|
|
Zoom Lens Speed
|
00
|
25 不常用
|
00
|
00 to 03
|
|
Focus Lens Speed
|
00
|
27 不常用
|
00
|
00 to 03
|
上表主要用到的是预置位设置与调用和清除,在高速球里还有flip自动翻转,还有控制室外解码器的雨刷开关AUX命令打开与关闭。第4字节设置预置位是03H,调用预置位是07H,清除预置位是05H。打开雨刷继电器是09H,关闭雨刷是0BH。上面第6字节是预置位的设置和调用范围可以是01-255个。自己也可以定义1024个或者64个。后面有范围的数字都可以自己定义。但是第4字节不要自己定义,否则会乱的。
特殊命令,存在第4个字节里:
|
Preset Number
|
Function
|
|
99
|
Begin
Auto-scan
启动云台自动扫描
|
|
98
|
Begin Frame
Scan
摄像机帧扫描不常用
|
|
97
|
Begin Random Scan
不常用
|
|
96
|
Stop
Scan
停止所有功能
|
|
95
|
Enter Menu
Mode
打开摄像机和球机菜单
|
|
94
|
Remote
Reset
云台或摄像机复位
|
|
93
|
Set Right Limit Stop 设置右限位
|
|
92
|
Set Left Limit Stop
设置左限位
|
|
34
|
Home (return to 0 pan position) 归零自检
|
|
33
|
Flip
自动翻转
|
这些命令可以自己定义,但在解码器球机说明书里要有详细的说明,否则操作者也不会用的。
有的控制设备只有1-64号预置位就无法实现上述命令,所有有些厂家做在64范围内就是这个原因,一般是做兼容。
三、举例说明PELCO-P协议各个命令字节帧
1、1帧也叫1串命令,指主控设备发出1串命令叫1帧,包含8个字节。波特率是1200-9600bit/s
例子如下:PEOCO-P 协议
地址1号:雨刷命令
AUX1-ON: A0 01 00 09 00 01 AF
06
OFF:A0 01 00 0B 00 01 AF 04
AUX2-ON:A0 01 00 09 00 02 AF
05
OFF:A0 01 00 0B 00 02 AF
07
AUX3-ON: A0 01 00 09 00 03 AF
04
OFF:A0 01 00 0B 00 03 AF 06
AUX4-ON: A0 01 00 09 00 04 AF
03
OFF:A0 01 00 0B 00 04 AF 01
11号地址: 地址是0B
AUX1-ON:A0 0B 00 09 00 01 AF
0C
OFF:A0 0B 00 0B 00 01 AF 0E
摄像机命令,地址1号:
close: A0 01
08 00 00 00 AF
06
停止:A0 01 00 00 00 00 AF 0E
open: A0 01
04 00 00 00 AF
0A
停止:A0 01 00 00 00 00 AF 0E
near: A0 01
02 00 00 00 AF
0C
停止:A0 01 00 00 00 00 AF 0E
far:
A0 01 01 00 00 00 AF
0F
停止:A0 01 00 00 00 00 AF 0E
tele:
A0 01 00 20 00 00 AF
2E
停止:A0 01 00 00 00 00 AF 0E
wide:
A0 01 00 40 00 00 AF
4E
停止:A0 01 00 00 00 00 AF 0E
up: A0
01 00 08 00 01 AF
07
停止:A0 01 00 00 00 00 AF 0E
down: A0 01 00
10 00 01 AF
1F
停止:A0 01 00 00 00 00 AF 0E
left: A0
01 00 04 01 00 AF
0B
停止:A0 01 00 00 00 00 AF 0E
right: A0 01
00 02 01 00 AF
0D
停止:A0 01 00 00 00 00 AF 0E
preset #1: A0 01 00 03 00 01 AF
0C 设1号预置位
call
#1: A0
01 00 07 00 01 AF 08
调1号预置位
menu
: A0
01 00 03 00 5F AF
52 打开菜单
tour: 预置位巡航,调76号预置位,字节定义的76: A0
01 00 07 00 4C AF 45
停止:A0 01 00 07 00 60 AF 69
scan: 两点扫描或者水平扫描,字节定义99号预置位,16进制是63: A0
01 00 07 00 63 AF 6A
停止:A0 01 00 07 00 60 AF 69
补充:关于校验位:下面这句是PELCO-P协议英文资料最后一句话。P协议校验位是字节2-6的异或,应当是22而不是17。在我上面的例子里,校验位是从第1字节到第7字节的异或,如:A0
01 00 03 00 5F AF 52
A0 01 00 03 00 20 AF 17 (the last byte is the XOR
sum of bytes 2 through 6)