張秋林,夏靖波,邱 婧,胡 圖
(空軍工程大學 電訊工程學院,陜西 西安710077)
隨著多媒體技術和網絡通信技術的迅速發展,視頻監控技術在國民生產生活的各個領域得到了廣泛應用。而云臺控制系統的出現為增加視頻監控系統的監控范圍、提高攝像頭的監控效率起到了巨大作用。對于云臺控制系統,參考文獻[1]提出了基于DSP芯片的云臺控制系統,參考文獻[2]提出了在 Visual C++編程中利用ActiveX控件實現云臺控制的方案。但是,這些方案由于沒有現成的開發工具支持,開發周期長、成本高且開發出來的系統在網絡環境不佳時,運行不夠穩定。針對這種情況,以及ARM11微處理器具有優異的多媒體數據處理能力和高度智能化的特點,本文提出了運用Net-SNMP開發工具,通過在嵌入式ARM11平臺上移植SNMP代理的方法實現IP網上云臺的遠程控制方案。

如圖1所示為典型的嵌入式視頻監控系統[3],S3C6410處理器通過控制外圍設備進行視頻采集,并將壓縮編碼后的信號發送給監控終端。同時,嵌入式處理器通過網卡接收監控終端發送過來的云臺控制命令,按照云臺控制協議將其解碼并通過RS485端口發送給云臺,實現對云臺的控制功能。
基于SNMP和ARM11的云臺控制系統的硬件部分由主控制板模塊、云臺模塊和傳輸模塊組成。
系統硬件部分主要包括:微處理器及存儲電路模塊、電源時鐘模塊、網卡模塊和外圍接口電路模塊等[3]。DM9000網卡用于從IP網接收遠程控制命令;RS485串口用于微處理器與云臺之間的通信。Flash用于存儲各種固化程序;SDRAM用于系統運行時程序的存取;串口RS232用于打印輸出信息和程序的調試。
主控制板模塊(即核心控制器)S3C6410是三星公司基于ARM1176JZF-S內核構建的高性能多媒體應用微處理器,由于其內部集成了硬件編解碼單元MFC,使其在多媒體信號處理上大大優于早期的同類產品。S3C6410內部結構復雜,其內部集成有1個LCD控制器、SDRAM控制器、NAND Flash控制器、I2C總線接口和看門狗計數器等。完善的外設和667 MHz的運行頻率,使S3C6410處理器很適用于智能控制系統的開發。
云臺是一種安裝在攝像機支撐物上的工作臺,用于支撐攝像機以實現水平和垂直運動等輔助功能。一般云臺攝像機內置有解碼器,遵循云臺控制標準協議,根據外部控制信號可以對其實現控制。本系統采用3030WQ型云臺和PELCO-D云臺協議。其云臺協議如表1所示,系統硬件架構如圖2所示。

云臺數據格式為:1位起始位、8位數據位、1位停止位,無效驗位。波特率為2 400 B/s。
云臺的停止、左、右、上、下命令分別對應:0xff,0x01,0x00,0x00,0x00,0x00,0x01;0xff,0x01,0x00,0x04,0xff,0x00,0x04;0xff,0x01,0x00,0x02,0xff,0x00,0x02;0xff,0x01,0x00,0x08,0x00,0xff,0x08;0xff,0x01,0x00,0x10,0x00,0xff,0x10(這里的地址碼均設為 0x01)。
軟件設計包括嵌入式系統構建和應用軟件兩部分[4]。嵌入式系統部分按照華恒科技S3C6410用戶手冊構建,其包括了引導程序(Bootloader)、Linux內核、驅動等,軟件框圖如圖3所示。

Bootloader、Linux 內 核 和設備驅動程序形成基本的嵌入式運行環境,應用層軟件snmpd為SNMP代理軟件,負責接收、解碼控制命令,并將解碼后的命令通過串口RS485發送到云臺模塊,實現對云臺運動方向的控制。
本系統采用開放源代碼的嵌入式Linux2.6.21作為操作系統。首先對Linux內核進行裁剪,保留本系統所需的 NAND Sevice Support、UDP協議以及串口支持、套接字、NFS文件系統等。裁剪包括并口支持、USB口支持、WLAN協議支持、SD卡支持等驅動模塊。將裁剪后的內核通過交叉編譯器編譯即可得到ARM處理器能夠運行的文件。然后再將鏡像文件通過Bootloader下載到目標板的Dataflash中。
由于嵌入式Linux系統的資源有限,不可能在其上運行開發和調試工具,因此,采用“宿主機即目標機”的開發形式。宿主機和目標機通過串口與網口連接。宿主機是安裝了Linux系統的PC機,在宿主機上建立交叉編譯環境,程序在宿主機上進行編譯,然后通過交叉編譯工具得到在嵌入式操作系統上運行的可執行文件。本系統采用Linux2.6.21版本作為PC機的操作系統,編譯器選用Arm-linux-gcc3.4.1版本,以Net-snmp v5.4.2作為開發工具,目標機CPU為ARM11微處理器。
開發環境建立后,就可以進行SNMP代理軟件的開發。依據Net-SNMP開發文檔,要在SNMP代理中實現自定義的功能(云臺控制)就需要對其MIB庫進行相應的擴展。MIB文件的編寫要遵循SNMP協議中SMI部分的要求[5-6]。下面是本文編寫的實現云臺控制功能的MIB庫文件,本文將其命名為S3C6410.txt。


表1 PELCO-D協議命令格式

MIB 文件 S3C6410.txt描述了 0、1、2、3、4 分別代表的涵義。即,當SNMP代理軟件(snmpd)接收到了控制端發送過來的 0、1、2、3、4信息時, 分別將其解釋為 stop、left、right、up、down 命令。
按照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等命令時,就可以按照下面的定義將命令翻譯成云臺模塊可以識別的碼流。

(2)打開串口并設置串口參數,SNMP代理通過串口控制云臺轉動。


當 snmpd接收到 0、1、2…時,分別向串口寫入 stop、left、right…命令。
(1)在 net-snmp-5.4.2.1目錄下使用 CC=arm-nonelinux-gnueabi-gcc./configure--build=i386-linux--host=arm-none-linux-gnueabi--enable-mini-agent--disableipv6--with-endianness=little--disable-manuals--disable-ucd-snmp-compatibility--enable-as-needed--disable-embedded-perl--without-perl-modules--disablesnmptrapd-subagent--disable-applications --disablescripts--with-mib-modules="S3C6410"命令進行配置編譯選項,這里可以添加需要或者去掉一些不需要的選項。配置完成后使用make install命令進行編譯、安裝。編譯得到的snmpd比較大,但可用arm-linux-strip snmpd進行處理即可得到需要的snmpd文件。
(2)snmpd.conf文件的配置。配置文件用于存放代理進程所需的配置信息。代理進程在初始化時訪問該文件:讀取所需的參數、地址以及啟動運行及進入循環后讀寫SNMP報文所需的其他信息。下面是本設計中縮減后的SNMP代理配置文件內容:

為了便于測試,可以將組設置為可讀寫,如:group MyRWGroup v2c mynetwork。
(3)移植到目標開發板。將snmpd和修改后的snmpd.conf文件移到宿主機的Windows下。啟動目標板,將snmpd文件上傳到目標板/usr/sbin目錄下(需要將訪問權限更改為可執行),將snmpd.conf文件上傳到/usr/local/share/snmp/下(不存在的目錄先要創建)。然后就可以啟動snmpd了。
測試環境為:內線速率為 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(停止)。
實驗表明,該方案能夠在IP網絡上穩定可靠地實現對云臺的遠程控制功能,效果非常好。
本文將先進的嵌入式技術與SNMP協議相結合,通過MIB擴展和SNMP移植,成功地在ARM11平臺上實現了對云臺的遠程控制,并給出了運用Net-SNMP工具實現云臺控制功能的詳細方法。該方案不僅新穎,而且穩定可靠,開發周期短,具有很高的市場應用價值。目前,該方案已在某單位網絡管理系統的視頻監控模塊中得到運用。
[1]權立偉,石江宏,薛財鋒.IP視頻監控系統中云臺控制模塊的設計與實現[J].電子技術應用,2006(11):86-88.
[2]豐洪才,鄧華來,劉年波.用ActiveX控件實現對云臺和鏡頭的遠程控制[J].計算機應用研究,2004,30(6):234-236.
[3]馮麗芳,孫俊,周俊華,等.基于 ARM9的網絡視頻監控系統實現[J].電力自動化設備,2006,26(10):95-98.
[4]郭巧云,許雪梅,李岸,等.基于 ARMl l的無線視頻監控系統的設計[J].計算機測量與控制,2010,18(8):1786-1789.
[5]尼秀明,徐佩霞,徐佩霞.SNMP擴展代理的快速實現及擴展技巧[J].計算計工程,2002,28(9):124-126.
[6]陳娟,崔燦,凌云,等.SNMP擴展代理的實現[J].計算機工程,2005,31(13):231-233.
[7]黃俊飛,廖建新.Tru64 UNIX中SNMP的實現與擴展[J].計算機工程與應用,2003(5):169-171.