监控行业通信协议应用最广的协议就是美国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协议:ByteValueFunction字节1$A0STX(starttransmission)字节2$00to$1FAddress字节3Databyte1(seebelow)字节4Databyte2(seebelow)字节5Databyte3(seebelow)字节6Databyte4(seebelow)字节7$AFETX(endtransmission)字节8$00-$FFCheckSum看上表:P协议一共8个字节,头字节是A0,第2个字节是地址00-31(一共32个地址),32个地址现在大系统已经不够用了,所以我们要更改它,可以改成00-63个地址,00-127个地址。地址在软件里随便增加的。这里还注意一个地址是0开始,这也是为什么我们常说P协议地址主控要减1。有的技术人写的软件老老实实的按照PELCO-P文档的软件来定义,应当自己灵活一下,把地址码改到从1开始不就行了吗?这样就不会在将来客户使用过程要加1或减1这么麻烦。上表第3个字-第6个字节是:看下表:Bitnumber76543210字节30CameraOnAutoscanOnCameraon/offIrisCloseIrisOpenFocusNearFocusFar字节40ZoomWideZoomTeleTiltDownTiltUpPanLeftPanRight0(forpan/tilt)字节5PanSpeed$00to$3Fand$40forTurbo字节6TiltSpeed$00to$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字节CommandDatabyte1Databyte2Databyte3Databyte4SetPresetXX0003常用0001toFFClearPresetXX0005常用0001toFFGoToPresetXX0007常用0001toFFFlip(rotate180o)0007常用0021ZeroPanPosition0007常用0022SetAuxXX0009常用0001to08ClearAuxXX000B常用0001to08RemoteReset000F不常用0000ZoneStart0011不常用0001to08ZoneEnd0013不常用0001to08Writechartoscreen0015不常用0to280to7FClearScreen0017不常用0000AlarmAck0019不常用0001to08ZoneScanOn001B不常用0000ZoneScanOff001D不常用0000PatternStart001F不常用0000PatternStop0021不常用0000RunPattern0023不常用0000ZoomLensSpeed0025不常用0000to03FocusLensSpeed0027不常用0000to03上表主要用到的是预置位设置与调用和清除,在高速球里还有flip自动翻转,还有控制室外解码器的雨刷开关AUX命令打开与关闭。第4字节设置预置位是03H,调用预置位是07H,清除预置位是05H。打开雨刷继电器是09H,关闭雨刷是0BH。上面第6字节是预置位的设置和调用范围可以是01-255个。自己也可以定义1024个或者64个。后面有范围的数字都可以自己定义。但是第4字节不要自己定义,否则会乱的。特殊命令,存在第4个字节里:PresetNumberFunction99BeginAuto-scan启动云台自动扫描98BeginFrameScan摄像机帧扫描不常用97BeginRandomScan不常用96StopScan停止所有功能95EnterMenuMode打开摄像机和球机菜单94RemoteReset云台或摄像机复位93SetRightLimitStop设置右限位92SetLeftLimitStop设置左限位34Home(returnto0panposition)归零自检33Flip自动翻转这些命令可以自己定义,但在解码器球机说明书里要有详细的说明,否则操作者也不会用的。有的控制设备只有1-64号预置位就无法实现上述命令,所有有些厂家做在64范围内就是这个原因,一般是做兼容。三、举例说明PELCO-P协议各个命令字节帧1、1帧也叫1串命令,指主控设备发出1串命令叫1帧,包含8个字节。波特率是1200-9600bit/s例子如下:PEOCO-P协议地址1号:雨刷命令AUX1-ON:A00100090001AF06OFF:A001000B0001AF04AUX2-ON:A00100090002AF05OFF:A001000B0002AF07AUX3-ON:A00100090003AF04OFF:A001000B0003AF06AUX4-ON:A00100090004AF03OFF:A001000B0004AF0111号地址:地址是0BAUX1-ON:A00B00090001AF0COFF:A00B000B0001AF0E摄像机命令,地址1号:close:A00108000000AF06停止:A00100000000AF0Eopen:A00104000000AF0A停止:A00100000000AF0Enear:A00102000000AF0C停止:A00100000000AF0Efar:A00101000000AF0F停止:A00100000000AF0Etele:A00100200000AF2E停止:A00100000000AF0Ewide:A00100400000AF4E停止:A00100000000AF0Eup:A00100080001AF07停止:A00100000000AF0Edown:A00100100001AF1F停止:A00100000000AF0Eleft:A00100040100AF0B停止:A00100000000AF0Eright:A00100020100AF0D停止:A00100000000AF0Epreset#1:A00100030001AF0C设1号预置位call#1:A00100070001AF08调1号预置位menu:A0010003005FAF52打开菜单tour:预置位巡航,调76号预置位,字节定义的76:A0010007004CAF45停止:A00100070060AF69scan:两点扫描或者水平扫描,字节定义99号预置位,16进制是63:A00100070063AF6A停止:A00100070060AF69补充:关于校验位:下面这句是PELCO-P协议英文资料最后一句话。P协议校验位是字节2-6的异或,应当是22而不是17。在我上面的例子里,校验位是从第1字节到第7字节的异或,如:A0010003005FAF52A00100030020AF17(thelastbyteistheXORsumofbytes2through6)四、PELCO-D协议内容介绍:D协议字节数:7个Word1Word2Word3Word4Word5Word6Word7SynchByteAddressCommand1Command2Data1Data2CheckSum1字节:头字节永远是FF;2字节:地址字节,01-256,从1开始;3、4字节:云台和摄像机控制字节,5、6字节:云台水平和垂直速度级字节;7字节:校验字节,是第2到第6字节的或OR。速度级D协议是从00-63个级。云台和摄像机字节控制位命令如下表:Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0Command1第3字节SenseReservedReservedAuto/ManualScanCameraOn/OffIrisCloseI