利用串口通讯技术破解Pelco-D云台控制协议
作者:一点一滴的Beer http://beer.cnblogs.com/
硬件设备:
带云台功能的4.2寸智能球摄像机
球机功能:
水平360度全方位转动,倾斜90度角,2.5倍变焦,支持0-0xF6个预置位;内置解码芯片,支持Pelco-D协议控制云台动作。
解决问题思路简介:
1. 拆开云台,按照球形云台设备的说明书拔动云台内部的拔码开关,对此设备的逻辑地址、串口通讯的波特率、控制协议类型(D协议或者P协议)等等进行必要的设置。
2. 连接PC机,在PC机上进行串口通讯编程,发送云台控制协议命令,控制云台运动。
开发环境及编程语言:
VS2005环境,C#语言,WinXp平台。
其实上面说的这些平台都无所谓,因为云台控制的核心是发送的命令,主要用的技术就是串口通讯技术,不管用什么平台,只要能将相应的协议命令发送到云台设备即可。
遇到问题:
关于云台的控制协议Pelco-D协议,网上都有详细的介绍。中文的介绍一般都只是对云台的方位的控制,详细的Pelco-D协议请到网上下载英文版本的文档。文档中对此协议进行了详细介绍,功能异常强大。但是请注意,协议的被设计成很强大的功能并不意味着你的云台设备支持这么多强大的功能,所以在对你的设备进行控制的时候,最好先了解它支持哪些功能。比如,D协议中还可以对云台的当前位置和状态进行查询,这个就需要云台内部的解码芯片中的程序返回数值,但是一般的云台都不具备此功能;D协议理论上还可以调整光圈,但显然很多云台在硬件上就没有光圈调节器,所以凡事因事制宜。
D协议具有很多子版本。不同的云台厂家会根据自身的产品特点衍生出不同的D协议子类。比如我购买的云台在开发的时候,发现按照标准的协议虽然可以实现简单的方位控制,但是却无法实现云台的镜头缩放。当时怀疑是不是此设备的镜头缩放硬件出了故障,于是就质问卖家,卖家说:“在发货前经过了测试,用的是PELCO_D_TDTC协议,可以支持缩放”。并把他的测试软件的协议截图发给了我,这个时候我才知道D协议居然还有这么多子类,同时我一下就晕了,不知道如何是好,因为手上没有任何这样的资料,云台的参考手册就只有简单的一页纸,里面找思路感觉比较困难。
到网上查找PELCO_D_TDTC协议,得到的相关搜索结果少这又少。最后实在是百无聊赖,到网上下载了一个云台控制的上位机软件(深圳明日实业的云台控制上位机软件,如下图)。然后接上云台设备,在PC机上进行控制实验,发现,居然可以对云台的镜头的缩放进行控制。这就证明了此云台的硬件是正常的,可能就是自己的协议命令不正确。但是如果还从英文版本的D协议说明书中找突破口,实在太难了,于是想办法从此软件上找解决问题的思路。
解决问题的思路:
用串口线将两台机器连接起来,然后一端用云台控制上位机软件发送命令,另外一端用串口调试助手接收,并显示。
实现两台机器通讯,可以是PC机和单片机,也可以是两台PC机。但是这都对需要开发人员额外增加设备。在此,笔者想到了一个比较简单的方法来实现在同一台机器上自发自收。
1.准备一根USB转RS232的转接线。因为我的PC机上只有一个串口,所以需要再增加一个串口,如果你的机器上有多个串口,可以跳过此步。
2.自制一个两端都是母口的串口连接线。因为PC机的串口一般都是公口,所以如果要将两个公口互边,必需要做一根连接线。市场上有这种成品转接线,如果你可以买到,就跳过此步。(“公头”串口如下图左,“母头”串口接头如下图右)
RS232的引脚定义如下,只需要接三根线就可以进行通讯:RxD,TxD,GND,分别是接收,发送和地线。
自制双母口串口连接线的接线为:如上图的编号,2、3、5分别对3、2、5
注意:一边的R、T分别和另一端的T、R相连,因为RS232是半双工通讯的,在自制的时候,一定要注意交错相连,因为你做的是连接线而不是延长线。
3.完成上面的两根线后,连接两个串口(比如我的机器上是COM1和COM3),就开始实现同一台机器的两个不同串口之间的收发了。
4.在PC机上打开“云台控制上位机软件”和“串口调试助手”,对端口号分别设置为COM1和COM3,然后串口的其它设置都一样。对“云台控制上位机软件”进行操作,便能在“串口调试助手”中看到相应的云台控制D协议命令了。
实验提到的D协议云台控制命令:
方位控制:
命令 | 控制字符 |
上 | FF 01 00 04 30 00 35 FF 01 00 00 00 00 01 |
下 | FF 01 00 10 00 30 41 FF 01 00 00 00 00 01 |
左 | FF 01 00 04 30 00 35 FF 01 00 00 00 00 01 |
右 | FF 01 00 02 30 00 33 FF 01 00 00 00 00 01 |
左上 | FF 01 00 0C 30 30 6D FF 01 00 00 00 00 01 |
左下 | FF 01 00 14 30 30 75 FF 01 00 00 00 00 01 |
右上 | FF 01 00 0A 30 30 6B FF 01 00 00 00 00 01 |
右下 | FF 01 00 12 30 30 73 FF 01 00 00 00 00 01 |
自动 | FF 01 00 07 00 63 6B FF 01 00 00 00 00 01 |
停 | FF 01 00 00 00 00 01 |
缩放控制:
ZOOM WIDE | FF 01 00 40 00 00 41 FF 01 00 00 00 00 01 |
ZOOM TELE | FF 01 00 20 00 00 21 FF 01 00 00 00 00 01 |
FOCUS FAR | FF 01 00 80 00 00 81 FF 01 00 00 00 00 01 |
FOCUS NEAR | FF 01 01 00 00 00 02 FF 01 00 00 00 00 01 |
设置预置点
以预置点1为例:
SET | FF 01 00 03 00 01 05 |
GOTO | FF 01 00 07 00 01 09 |
CLEAR | FF 01 00 05 00 01 07 |
ZERO | FF 01 00 07 00 22 2A |
以预置点2为例:
SET | FF 01 00 03 00 02 06 |
GOTO | FF 01 00 07 00 02 0A |
CLEAR | FF 01 00 05 00 02 08 |
ZERO | FF 01 00 07 00 22 2A |
FLIP(ROTATE 180) | FF 01 00 07 00 21 29 FF 01 00 00 00 00 01 |
PATERN START | FF 01 00 1F 00 00 20 FF 01 00 00 00 00 01 |
PATTERN STOP | FF 01 00 21 00 00 22 FF 01 00 00 00 00 01 |
RUNPATTERN | FF 01 00 23 00 00 24 FF 01 00 00 00 00 01 |
注意:从网上流传的“云台控制上位机软件”的界面来看,还有很多其它高级功能,但是因为我的云台在硬件上只支持上面那些功能,所以更多的命令结果我就不罗列了,反正利用此方法可以提取出你想要的任何命令。
可能上面的一些基本命令也可以通过查D协议的原版英文文档得到,但是当时在理论认证的时候遇到了一些小麻烦,所以就暂时用这个算是有点耍小聪明的方法来解决自己的问题吧。今后有时间再从理论上进行总结吧。
如果还有时间,再将自己写的云台控制软件进行总结吧,暂时先发一个截图。
------------------------------------------------------------------
Author:一点一滴的Beer
Email /Gtalk:dreamzsm@gmail.com
From:http://www.cnblogs.com/beer
Notes:欢迎转贴,但请在页面中加个链接注明出处
Time:2010-12-8