摘 要:在以太网和TCP/IP协议基础上,运用32位微控制器采集多媒体信号在内的多种信息并进行远程传输的多媒体远程监控网的整体模型。介绍了监控节点平台的软件和硬件设计,并分析了系统性能。
关键词:32位微控制器 以太网 Linux 图像信号采集
1 应用背景
传统的监控网络建立在以单片机和PC机构成的计算机网络上,最常用的联网手段是使用串行总线,如RS485等。自从上世纪80年代以来,现场总线技术在工业过程监控网络上得到了广泛的应用。基于此技术的监控网络,由于受带宽限制而只能用于传送简单的数据(如温度、压力采样值等),且传输距离仅在车间范围。
随着安全监控技术的发展需要,监控系统要求处理图像、视频、音频信号。为满足这些要求,通常的做法是建立专用的信号网络传输图像和声音信号,一般为模拟信号。而这样的网络布线成本高,维护困难。如果需要远程监控,还要采用特殊手段对信号进行转换,接入远程监控网络。如果能利用目前计算机网络中广泛应用的以太网,则这些问题便可以得到解决。
应用以太网进行信号传输具有如下优点。
(1)高带宽。目前百兆以太网广泛应用,千兆以太网逐渐成熟。(2)安全性高。以太网及TCP/IP协议上实现了多种有效的加密手段。(3)容易互联。遵循TCP/IP协议,采集到的数据可以方便地共享给远程用户。(4)利用现有资源,减少布线维护成本。
虽然传统的8或16位单片机也可以支持以太网控制器,但由于其本身处理能力有限,因此不能利用以太网高带宽的特性。本文将采用32位嵌入式处理器PXA255建立数据采集节点。由于手持应用的32位处理器PXA255处理能力强,可以运行在400MHz,处理器支持多个运行级别和内存管理,因此从硬件上支持操作系统,很适合作为采集终端。
2 多媒体平台设计
多媒体监控系统的示意图如图1所示。一个C类以太网段最多可以支持254个节点,而通过路由器等中继设备,一个监控系统理论上可以支持的节点数目没有上限。通过以太网关,可以方便地实现数据在Internet上的共享,并保证数据安全。
作为实验室系统,本文设计了2个采集节点和1台PC作为监视节点的系统。采集节点以32位嵌入式微控制器PXA255为中心,采集视频、声音和键盘输入等信号,通过以太网和监视节点通信。监视节点显示上述信号的实时状态。系统的核心是数据采集端的设计和实现。
2.1 硬件设计
监控节点的硬件模块示意图如图2所示。其中微控制器为PXA255;SDRAM是2片K4S561632A;构成StrongARM1111 Processor的是Xscale的扩展芯片,提供了USB Host控制器;音频芯片使用CS4201;以太网控制器使用LAN91C96;Flash采用2片28F128J3A,为系统提供32MB的静态数据存储空间。
图中未标出的还有PXA255的JTAG接口,用于烧写Flash和测试硬件电路。视频采集设备采用了Logitech公司的QuickCam网络摄像头,该摄像头采用USB接口和采集板USB Host接口连接。
QuickCam使用CMOS感光元件,采集速率为30幅/秒、640×480分辨率16色图像。USB摄像头直接为采集板提供数字图像信号,免去了传统采集设备从模拟信号到数字信号转换的过程。同时,USB设备具有即插即用特性,使得更换设备更方便。
图中LCD Panel是可选设备。PXA255可支持640×480真彩色LCD显示屏。实验室系统中采集端连接了1个5英寸的LCD显示屏,可用于检验采集端之间传输图像的效果。
2.2 软件设计
(1)ARM Linux上的程序设计
系统软件采用了自由软件ARM Linux。ARM Linux是桌面和服务器上广泛使用的GNU/Linux操作系统,是以ARM为核心的处理器上的移植版本。与流行的商业嵌入式操作系统相比,ARM Linux的内核由于和桌面GNU/Linux系统内核一致,因而内核稳定性得到保证。其源代码目前遵循GPL协议发布,可以保证系统的可维护性。
在ARM Linux中访问硬件的方式与桌面Linux和UNIX类似。硬件设备在ARM Linux系统中由设备节点表示,每个设备节点都有1个主设备号和1个次设备号。二者的组合在同一系统中是惟一的。应用程序通过访问设备节点访问硬件,操作系统调用设备号对应的驱动程序来响应应用程序的请求。
PXA255集成了AC97CODEC芯片控制接口。本系统使用了CS4201CODEC芯片,采集端因此具备了采集声音信号的能力。音频设备在ARM Linux系统中表示为一个字符类型设备,因此读写该类型设备的数据单位为字符。
ARM Linux对USB摄像头设备提供底层支持。采集节点采用了Logitech公司的QuickCam摄像头,CMOS感光部件能提供640×480分辨率、16位色深的图像。摄像头设备在ARM Linux文件系统中也是字符类型设备,可以以字符为单位读出数据。但一幅完整的图像一般由多个字符组成,因此只读一幅图像的一部分通常是没有意义的。此外,多次使用read系统调用,在应用程序和内核之间进行上下文切换,对系统影响很大。因此,对这种设备一般使用内存影射的方式访问。通过mmap系统调用把驱动程序或者内核空间内存影射到用户空间,使得应用程序可以直接访问影射的内存,避免了多次上下文切换。
ARM Linux为系统提供以太网控制器的驱动程序和与UNIX相似的TCP/IP协议栈。通信程序是建立在标准Socket接口上的客户/服务器程序,采集端运行网络服务器、接受监控端请求、发送数据到监控端并处理监控端的命令。
(2)采集端程序设计
具体实现中,采集端软件由3个独立的线程构成。主线程流程图如图3所示,其流程如下:建立一个Socket服务器和监控端建立的基于流的Socket连接;建立若干管道作为不同信号由采集线程到网络通信线程之间的数据缓冲区;打开摄像头和其他采集设备;启动网络通信和数据采集2个线程后,主线程放弃CPU,直至网络通信线程结束才被重新调度。
网络通信线程流程图如图4所示。主要部分采用select系统调用,以等待可用的采集数据和监控端的命令。此处利用了Linux系统中Socket连接和管道都可以用统一的文件描述符表示的特点。select系统调用处于阻塞线程,直到任一描述符有可读数据:即如果Socks连接得到了监控端命令,则根据该命令停止采集和传输,直到对硬件进行配置后才重新进入采集程序;如果管道中有采集数据可用,则把数据发送到监控端。
采集线程流程图如图5所示。在ARM Linux操作系统中,获得内核空间用内存映像机制获取图像。具体说就是使用ARM Linux的mmap函数,把QuickCam捕获的图像映射到用户内存空间,用ioctl系统调用向摄像头驱动程序发送命令。VIDIOCMCAPTURE命令摄像头获取一幅图像,VIDIOCSYNC命令图像同步到映射的用户内存空间。同步命令返回后,映射内存为最近获取的图像。采集线程把数据直接复制到相应管道。
其他数据(如声音、键盘输入)由于数据量较小且不确定,一般不采用内存空间映射的方法获取,而直接采用read系统调用。但因为在数据源无数据可读时,read会阻塞直到有数据为止。因此,如果有多个数据源,也应该使用select系统调用,由系统轮询各个数据源,直到其中一个有可读数据时使用read,再进入select轮询状态。这样可以使多个数据源任一个有数据时都可以得到及时处理。
3 性能指标
QuickCam摄像头每秒可获得近30幅640×480分辨率的16位色图像。但由于JPEG压缩算法需要较高的CPU资源,采集端实际可获得10幅/秒图像。图像为320×240分辨率16位色,经过JPEG压缩后最小可达2KB以下。考虑到需要控制图像失真和压缩时间,因此选择压缩比为10:1,每幅图像大约10KB。压缩比小于40:1,一般可以认为图像压缩是无损的。
通过10M以太网交换机连接采集板和PC控制台端,最大传输能力为7Mbps,因此理论上系统每秒可以传输90幅图像。实验表明,采集端得到的图像确实可以送达监控端。
以太网的数据链路层和物理层协议与现场总线不同,采用的是CMSA/CD方式。如果总线负载超过25%,多媒体传输速度会受到数据碰撞的影响。采用点名方式分时采集各点数据可以避免多个采集端同时发送多媒体数据,还可以利用实时交换机代替普通交换机获得更好的实时性能。
如果需要提高系统的性能,则减少压缩算法占用的CPU时间是关键。此外,将单独采集图像的系统性能和图像与声音等同时采集的系统性能做对比,可以发现,在采集端加入其他中断源对于采集图像信号也有较大影响。
4 结束语
系统已实现了采集平台与监控中心、平台之间的视频、音频以及温度压力报警等信号的互传。目前工作的重点是在系统上实现对视频和音频信号的硬件压缩解压,进一步提高信号传输速度和质量。
由于Linux系统的API和UNIX系统兼容,使得大多数为UNIX和Linux编写的应用程序都可以不经修改或稍加修改就可应用在本系统中,如目前已经应用的JPEG图像压缩算法库等。这使得该系统不仅适合视频信号采集,而且在工业监控的很多领域都有了应用前景。
参考文献
1 Intel Corporation.Intel PXA255 Processor Design Guide. http://www.intel.com,2003
2 Intel Corporation.Intel PXA255 User′s Menu.http://www. intel.com,2003
3 Rubini A.Linux Device Drivers.北京:中国电力出版社,2000
4 Jerry D G.多媒体数字压缩原理与标准.北京:电子工业出版社,2000
5 吕风军.数字图像处理编程入门.北京:清华大学出版社,1999
6 Steven W R.UNIX环境高级编程.北京:机械工业出版社,2000