监控行业通信协议应用最广的协议就是美国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)
四、PELCO-D协议内容介绍:
D协议字节数:7个 Word 1 | Word 2 | Word 3 | Word 4 | Word 5 | Word 6 | Word 7 |
Synch Byte | Address | Command 1 | Command 2 | Data 1 | Data 2 | Check Sum |
1字节:头字节 永远是FF ;2字节:地址字节,01-256,从1开始; 3、4字节:云台和摄像机控制字节,5、6字节:云台水平和垂直速度级字节;7字节:校验字节,是第2到第6字节的或OR。速度级D协议是从00-63个级。
云台和摄像机字节控制位命令如下表:
| Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 |
Command 1 第3字节 | Sense | Reserved | Reserved | Auto / Manual Scan | Camera On / Off | Iris Close | Iris Open | Focus Near |
Command 2 第4字节 | Focus Far | Zoom Wide | Zoom Tele | Down | Up | Left | Right | Always 0 |
举例:关闭摄像机光圈命令,地址01,D协议命令是:FF 01 04 00 00 00 05;看上表,光圈关闭在第3字节的第2位,则为00000100二进制,16进制则是04H。第4字节的控制命令如上。
关于云台自动功能如何实现,云台的自动功能是做到解码板电路,有多种硬件电路方法,也有软件检测限位开关或者光耦中断来控制左和右自动扫描。但上面协议表是没有自动命令,在P协议里AUTO PAN命令是CALL 99号预置位。在D协议里是没有定义,编程者可以定义CALL #NO来实现。
D协议特殊命令控制表:
第3字节 第4字节 第5字节 第6字节
Command | Word 3 | Word 4 | Word 5 | Word 6 |
Set Preset | 00 | 03 | 00 常用 | 01 to 20 |
Clear Preset | 00 | 05 | 00 常用 | 01 to 20 |
Go To Preset | 00 | 07 | 00 常用 | 01 to 20 |
Flip (180° about) | 00 | 07 | 00 常用 | 21 |
Go To Zero Pan | 00 | 07 | 00 常用 | 22 |
Set Auxiliary | 00 | 09 | 00 常用 | 01 to 08 |
Clear Auxiliary | 00 | 0B | 00 常用 | 01 to 08 |
Remote Reset | 00 | 0F | 00 常用 | 00 |
Set Zone Start | 00 | 11 | 00 不常用 | 01 to 08 |
Set Zone End | 00 | 13 | 00 不常用 | 01 to 08 |
Write Char. To Screen | 00 | 15 | X Position 00 to 28 不常用 | ASCII Value |
Clear Screen | 00 | 17 | 00不常用 | 00 |
Alarm Acknowledge | 00 | 19 | 00不常用 | Alarm No. |
Zone Scan On | 00 | 1B | 00不常用 | 00 |
Zone Scan Off | 00 | 1D | 00不常用 | 00 |
Set Pattern Start | 00 | 1F | 00不常用 | 00 |
Set Pattern Stop | 00 | 21 | 00不常用 | 00 |
Run Pattern | 00 | 23 | 00不常用 | 00 |
Set Zoom Speed | 00 | 25 | 00不常用 | 00 to 03 |
Set Focus Speed | 00 | 27 | 00不常用 | 00 to 03 |
上表第6字节的数值范围编程者可以随便定义范围。
D协议,地址1,命令串如下:
close:FF 01 04 00 00 00 05 停止:FF 01 00 00 00 00 01
open:FF 01 02 00 00 00 03 停止:FF 01 00 00 00 00 01
near:FF 01 01 00 00 00 02 停止:FF 01 00 00 00 00 01
far:FF 01 00 80 00 00 81 停止:FF 01 00 00 00 00 01
tele:FF 01 00 20 00 00 21 停止:FF 01 00 00 00 00 01
wide:FF 01 00 40 00 00 41 停止:FF 01 00 00 00 00 01
up:FF 01 00 08 00 20 29 停止:FF 01 00 00 00 00 01
down:FF 01 00 10 00 20 31 停止:FF 01 00 00 00 00 01
left:FF 01 00 04 20 00 25 停止:FF 01 00 00 00 00 01
right:FF 01 00 02 20 00 23 停止:FF 01 00 00 00 00 01
preset #1:FF 01 00 03 00 01 05
call #1 :FF 01 00 07 00 01 09
menu :FF 01 00 03 00 5F 63
tour:FF 01 00 07 00 4C 54 停止:FF 01 00 07 00 60 68
scan:FF 01 00 07 00 63 6B 停止:FF 01 00 07 00 60 68
pgm:FF 01 00 25 00 00 26 自定义的
建议编程者在做控制串口软件时,没帧命令输出时间间隔最好定义200ms/ 帧。
以上P\D两种协议介绍完毕。下面介绍一下异类协议,这些协议很少见的。设计的一些别的因素,不全部贴出。把常用的协议讲完,此贴最后再讲各种协议之间的软件编程。
国内一些厂家的协议都比较简单,就不谈了!下面谈谈台湾利凌、深圳三立、成都科力、松下这四家的通信协议,举1、2个命令来解释。
1、利凌高速球协议
地址1命令:
变倍缩小:01 20 FF,变倍停止:01 00 FF
变倍变大:01 10 FF,变倍停止:01 00 FF
云台向右:01 01 83 ( 80-87为速度级) 停止:01 00 FF
调1号预置位: 41 00 00
调2号预置位: 41 01 00
调3号预置位: 41 02 00 (地址要加40H)
设置2号预置位:82 03 64
以上为利凌高速球一些命令,其协议为3个字节,为我见过的协议命令最简单的,固定波特率9600bit/s。第1字节:地址,第2字节:动作命令,第3字节:也是动作命令。 停止命令统一为:地址 00 FF
利凌协议的特殊点在预置位设置和调用这个地址的区别,另外一个就是发码的连续性。
如摄像机控制和云台控制地址都是和主控一一对应,而调用预置位的命令,地址要加40H,在软件里用1条add a,#40h;a为变量,即可。而在设置预置位时,地址变量要加80H才可以。
另外一个利凌高速球接收命令是为连续接收,也就是说主控端要连续发命令过来,高速球才连续转。通过测试,每帧命令间隔30ms最理想。此时间可用定时器中断计算出来。
2、深圳三立视讯,其矩阵协议型号有450、550、650.其中450和550兼容,650增加了一些特殊命令。
三立视讯据说是一家中日合资企业,其协议为小日本定义,字节比较多,协议之啰嗦。2004年经过研究,已经破解。现在列几条命令出来讲讲。
其协议命令为ASCII,如云台水平向右命令用STX ADXX;GCF:202136C:2022XY0 ETX来表示,转换成16进制命令即得是:02 41 44 30 31 3B 47 43 46 3A 32 30 32 31 33 36 43 3a 32 30 32 32 30 30 30 03,这里一共26个字节。02是头字节,41 44是标志字节,30 31表示01地址,第17个字节是43表示右命令。假如做三立协议和P\D协议之间的转换,这里讲30 31表示01地址,用软件怎么转换,请看:
subb a,#30h ;先把第4字节的高位地址变量减30H
mov b,#10 ;赋寄存器B常数10,
mul ab ;两数相乘得出高位地址的十位
mov buf0,a ;把十位保存在buf0
subb a,#30h ;此时第5字节地位地址变量已在a内,低位减30h得出个位.
add a,buf0 ;十位和个位相加得出01地址。
此时30 31两个地址变成了01地址。
ZOOM TELE: STX ADXX;GC7:2021228 ETX
ZOOM WIDE: STX ADXX;GC7:202122C ETX
SET PRESET: STX ADXXSPXY ETX
三立协议之烦是高速球协议里有3种字节长度的命令,26、18、10这三种。做软件时要注意。