在室内型和室外型云台及一体化智能高速球型摄像机中,解码器通过RS-485总线接收来自监控中心由控制键盘或DVR发送的命令,对命令进行解析后发出相应的控制指令,从而控制云台的上下左右运动以及摄像机的光圈、聚焦和变倍等调整动作。
1 通信协议介绍
一个控制命令就是一个通过串行总线传输的消息,消息由多个字节组成,每个字节的传输格式一般都是1个起始位、8个数据位、1个停止位、没有奇偶校验位。下面介绍消息的基本结构,第一个字节往往是同步字节或称特征字节,可以是AAH或55H等,它的作为是让总线上的每个终端作好接收后续字节的准备。第二个字节是地址,即指明接收该命令的终端地址,响应该消息的可能是一个,也可能是一组或全部的终端。每个终端有自己独一无二的地址信息,只有当接收到的信息中的地址与自己的地址吻合时,才执行该命令,因为地址字节只有8位,因此同一系统中最多只能识别256个不同的终端。在串行通信中,除了单个字节的传输有时需要奇偶校验外,接收到的消息还要做整体的数据块校验,通常采取的是将数据块进行简单的累加或者是异或后得到一个校验字节(Check-Byte),将该校验字节附加在消息的最后发出。终端接收后,首先要对接收到的数据块进行校验以判断数据是否可靠。表1是PELCO-D协议的一个完整消息的结构。
ticle/UploadPic/2008-9/200892105851686.jpg" width="350"/>
|
---|
不同的公司采用不同的协议,消息的结构完全不同。表2显示4种常见传输协议的基本格式。
由于协议之间完全不兼容,因此云台解码器往往只使用其中一种传输协议,造成产品的适用范围不广,一种兼容多种协议的解决方法是采用硬件设定的***上设计一个多位拨码开关,当使用不同协议时,拨码开关的选择状态不同,单片机读取该设定参数后就知道当前是什么样的传输协议,然后采取相应的解码措施,在串行口中,当接收到对应协议中每个消息的特征字节时,就开始接收相应长度的后续字节,否则放弃该字节不予判断,这样设计的缺陷在于,首先必须非常明确当前的传输协议,其次是当更换不同的协议时必须重新设定拔码开关的状态,在使用过程中不灵活不方便,而且这种方法容易造成误判,因为一种协议中的特征字节也很可能会在其他协议的命令中以非特征字节的形式出现。仅仅依靠特征字节来决定是否接收后续字节是很容易丢码或产生误码的。
2 滑动窗和过滤器
本文提出采用滑动窗过滤器的方式进行多协议的自动识别,而不会造成误码或漏码。在单片机的RAM中建立一个数组R_Buf[n],他是对串口数据流进行过滤的窗口,窗体的大小即数组的大小n,取各种协议中的一个消息所包含的字节最多的长度,例如取SAMSUNG协议的长度为9。串口接收到的任何一个字节都按照先入先出的顺序通过该窗口,而不论该字节是否是特征字节,串口接收的数据码流依次流经该数组,因此该数组像一个窗口。始终保留码流中的最后一幅数据的图像,如图1所示。
各种协议以其不同的特征字节、消息长度和校验字节的规律而构成过滤器。每从串口中接收到一个新的字节,滑动窗的内容就刷新一次,同时将窗口内容与过滤器中的数据结构对比一次,这样做得好处在于,接收到的串行数据,无论其是什么协议,什么长度以及什么特征字节,都会被过滤一次,滑动窗在数据码流中从头往后搜索,不放过任何一个符合某个协议的有效消息。只要落入滑动窗口内的那些数据符合任何一种协议的数据格式,该数据就被认为是一个有效的消息,因此不会产生漏码或误码的现象。
3 软件设计
过滤过程包括3个阶段:第一个阶段是特征字节过滤;第二个阶段是校验字节过滤;第三个阶段是地址过滤,即判断消息的目的地址与该解码器设备的地址是否吻合。只有在这三个阶段的过滤过程中均符合要求的消息才是有效命令,然后才开始对命令进行解析和执行,因为是自动识别,因此R_Buf[0]中内容每刷新一次就必须开始一次过滤过程。
下面以8051系列兼容单片机为例,用Keil C51语言来描述窗体的形成以及过滤方法。整个过程都是在串口中断服务程序中完成的。
4 结论
采用滑动窗和过滤器的方式可以自动识别不同的传输而无需通过硬件的方式进行协议设定,采用该方法编程简单方便,对码流的识别速度快、效率高、实际应用表明没有漏码和误码现象发生,但是这种方法也有缺陷:一是只能识别那些每个消息的字节数确定的协议,而对那些消息长度不确定的协议不适合,因为滑动窗的大小是固定的,而过滤器的大小无法确定;二是需要自动识别协议的传输波特率都必须相同,否则无法正确识别,这是因为消息的内容是可以自动识别的,而波特率却不是。
|