本帖最后由 gmgmgm 于 2013-2-28 15:54 编辑
PELCO-P协议一般采用RS-485传输,波特率为4800,1位起始位和停止位,8位数据位,无校验。其格式如下:
Byte Value Function
1 $A0 起始码
2 $00 to $1F 地址码
3 Data byte 1 数据位1
4 Data byte 2 数据位2
5 Data byte 3 数据位3
6 Data byte 4 数据位4
7 $AF 停止码
8 $00-$FF 校验码
地址码是设备的逻辑地址,可由接收设备上的DIP开关来设定。 数据位1到4的意义如下:
| Bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 数据位1 | 0 | 摄像机打开 | 自动扫描 | 摄像机打开/关闭 | 光圈关闭 | 光圈打开 | 焦距拉近 | 焦距拉远 | 数据位2 | 0 | 视角变宽 | 视角变窄 | 下 | 上 | 左 | 右 | 0 | 数据位3 |
| 平移速度 $00(停止)到 $3F(高速)以及$40(最高速) | 数据位4 |
| 上下移动速度$00(停止)到 $3F(最高速) |
停止码是固定值 $AF 。 校验码是 Byte2 到 Byte6 这 5 个数的异或值(XOR)。 地址码是从 0编起的,所以地址码$00表示第一台设备。 PELCO-D和PELCO-P协议另有一些特殊命令,可对设备进行一些高级控制,
在百度上看了很多相关此协议的文档,按上面的协议计算校验码,结果让我失望,不知道是不是我的算法有问题
A0 01 02 00 00 00 AF 0C
我的程序无法算出结果为0C,算的结果是03
01^02^00^00^00=0X03
我终于发现了,别人的键盘0C值是这样计算出来的,A0^01^02^00^00^00^AF=0C这样不是跟协议不一致吗?
|