IT民工
分类: LINUX
2013-02-18 22:23:54
PELCO 协议
出处: http://blog.chinaunix.net/uid-10747583-id-3069171.html
监控行业通信协议应用最广的协议就是美国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