新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 视频监控系统中云台控制模块的设计与实现

视频监控系统中云台控制模块的设计与实现

作者: 时间:2011-11-22 来源:网络 收藏

Bootloader、Linux内核和设备驱动程序形成基本的嵌入式运行环境,应用层软件snmpd为SNMP代理软件,负责接收、解码控制命令,并将解码后的命令通过串口RS485发送到云台模块,实现对云台运动方向的控制。

3.1 Linux2.6.21操作系统定制

本系统采用开放源代码的嵌入式Linux2.6.21作为操作系统。首先对Linux内核进行裁剪,保留本系统所需的NAND Sevice Support、UDP协议以及串口支持、套接字、NFS文件系统等。裁剪包括并口支持、USB口支持、WLAN协议支持、SD卡支持等驱动模块。将裁剪后的内核通过交叉编译器编译即可得到ARM处理器能够运行的文件。然后再将镜像文件通过Bootloader下载到目标板的Dataflash中。

3.2 应用程序snmpd的开发

3.2.1 Agent开发环境的建立

由于嵌入式Linux系统的资源有限,不可能在其上运行开发和调试工具,因此,采用“宿主机即目标机”的开发形式。宿主机和目标机通过串口与网口连接。宿主机是安装了Linux系统的PC机,在宿主机上建立交叉编译环境,程序在宿主机上进行编译,然后通过交叉编译工具得到在嵌入式操作系统上运行的可执行文件。本系统采用Linux2.6.21版本作为PC机的操作系统,编译器选用Arm-linux-gcc3.4.1版本,以Net-snmp v5.4.2作为开发工具,目标机CPU为ARM11微处理器。

3.2.2 MIB库的扩展

开发环境建立后,就可以进行SNMP代理软件的开发。依据Net-SNMP开发文档,要在SNMP代理中实现自定义的功能()就需要对其MIB库进行相应的扩展。MIB文件的编写要遵循SNMP协议中SMI部分的要求[5-6]。下面是本文编写的实现功能的MIB库文件,本文将其命名为S3C6410.txt。

S3C6410-MIB DEFINITIONS ::= BEGIN

IMPORTS

TimeTicks FROM SNMPv2-SMI

enterprises FROM SNMPv2-SMI

OBJECT-GROUP,NOTIFICATION-GROUP FROM SNMPv2-CONF

OBJECT-TYPE, Integer32, Gauge32, MODULE-IDENTITY

FROM SNMPv2-SMI

TEXTUAL-CONVENTION FROM SNMPv2-TC;

S3C6410 OBJECT IDENTIFIER::={ enterprises 9000 }

DIRECTION OBJECT-TYPE

SYNTAXInteger32

MAX-ACCESS read-write

STATUScurrent

DESCRIPTION

"DIRECTION controll the directions of the camera.

The number ‘0’ equals the command ‘stop’

The number ‘1’ equals the command ‘left’

The number ‘2’ equals the command ‘right’

The number ‘3’ equals the command ‘up’

The number ‘4’ equals the command ‘down’

The other number equals the number ‘0’

"

DEFVAL { 0 }

::={ S3C6410 1 }

END

MIB文件S3C6410.txt描述了0、1、2、3、4分别代表的涵义。即,当SNMP代理软件(snmpd)接收到了控制端发送过来的0、1、2、3、4信息时,分别将其解释为stop、left、right、up、down命令。

3.2.3 C代码(框架)的自动生成和自定义功能的加入

按照SMI规范编写好MIB库文件后,将MIB文件放在usr/local/share/snmp/mibs/目录下面,并用Net-SNMP自带的mib2c工具生成相应的C文件S3C6410.c和S3C6410.h;然后将这两个C文件拷贝到net-snmp.5.4.2/agent/mibgroup/examples/目录下,并在生成的S3C6410.c模板上添加需要的功能[7]。下面是主要添加和修改的部分。

(1)依据PELCO-D云台协议定义一维字符型数组stop、left、right、up、down。当SNMP代理接收到stop、left等命令时,就可以按照下面的定义将命令翻译成云台模块可以识别的码流。

char stop[7]={0xff,0x01,0x00,0x00,0x00,0x00,0x01};//0

char left[7]={0xff,0x01,0x00,0x04,0xff,0x00,0x04};//1

char right[7]={0xff,0x01,0x00,0x02,0xff,0x00,0x02};//2

char up[7]={0xff,0x01,0x00,0x08,0x00,0xff,0x08};//3

char down[7]={0xff,0x01,0x00,0x10,0x00,0xff,0x10};//4

(2)打开串口并设置串口参数,SNMP代理通过串口控制云台转动。

open("/dev/s3c_serial1",O_RDWR | O_NDELAY |

O_NOCTTY)//打开串口

//设置串口参数

tio.c_cflag = B2400 |CS8 |CREAD |CLOCAL;

tio.c_cflag = ~HUPCL;

tio.c_lflag = 0;

tio.c_iflag = IGNPAR;

tio.c_oflag = 0;

tio.c_cc[VTIME] = 0;

tio.c_cc[VMIN] = 0;

……

(3)在case MODE_SET_ACTION:下添加功能。

case MODE_SET_ACTION:

……

switch(direction)

{

case 0://当接收到0时执行stop命令

write(fd,stop,7);

close(fd);

break;

……

……

case 640://当接收到640时启动application

system("exec /mnt/nand/my.application ");

break;

default://错误处理

……

}

当snmpd接收到0、1、2…时,分别向串口写入stop、left、right…命令。

3.2.4 snmpd的编译、配置和移植

(1)在net-snmp-5.4.2.1目录下使用CC=arm-none-linux-gnueabi-gcc ./configure --build=i386-linux --host=arm-none-linux-gnueabi --enable-mini-agent --disable-ipv6 --with-endianness=little --disable-manuals --disable-ucd-snmp-compatibility --enable-as-needed --disable-embedded-perl --without-perl-modules --disable-snmptrapd-subagent --disable-applications --disable-scripts --with-mib-modules="S3C6410"命令进行配置编译选项,这里可以添加需要或者去掉一些不需要的选项。配置完成后使用make install命令进行编译、安装。编译得到的snmpd比较大,但可用arm-linux-strip snmpd进行处理即可得到需要的snmpd文件。

(2)snmpd.conf文件的配置。配置文件用于存放代理进程所需的配置信息。代理进程在初始化时访问该文件:读取所需的参数、地址以及启动运行及进入循环后读写SNMP报文所需的其他信息。下面是本设计中缩减后的SNMP代理配置文件内容:

#sec.namesourcecommunity

com2sec locallocalhostpublic

com2sec mynetwork 192.168.1.0/24public#我的网段

在168

为了便于测试,可以将组设置为可读写,如:group MyRWGroup v2c mynetwork。

(3)移植到目标开发板。将snmpd和修改后的snmpd.conf文件移到宿主机的Windows下。启动目标板,将snmpd文件上传到目标板/usr/sbin目录下(需要将访问

权限更改为可执行),将snmpd.conf文件上传到/usr/local/share/snmp/下(不存在的目录先要创建)。然后就可以启动snmpd了。

4 系统测试

测试环境为:内线速率为10 Mb/s的局域网Intranet;控制终端采用戴尔Vostro230型PC机(主频2.7 GHz,内存2 GB,Windows XP操作系统,IP地址:24.84.58.129)。为了方便测试,控制软件采用ManageEngine-MibBrowser软件,ARM11板IP地址设为24.84.58.224。

在系统搭建完成后,启动ARM板,同时在控制端PC机上打开ManageEngine-MibBrowser软件,并加载MIB文件。设置好相关参数后,向ARM板分别发送控制命令1(左)、2(右)、3(上)、4(下)、0(停止)。

实验表明,该方案能够在上稳定可靠地实现对云台的远程控制功能,效果非常好。

本文将先进的嵌入式技术与SNMP协议相结合,通过MIB扩展和SNMP移植,成功地在ARM11平台上实现了对云台的远程控制,并给出了运用Net-SNMP工具实现云台控制功能的详细方法。该方案不仅新颖,而且稳定可靠,开发周期短,具有很高的市场应用价值。目前,该方案已在某单位网络管理系统的模块中得到运用。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭