0 引言
传统的图像监测系统往往布线复杂,通过远距离有线传输而费用高昂,并且灵活机动性小,由于GPRS(通用分组无线业务)通信技术在中低速率无线数据传输方面的突出优势,基于GPRS网络的图像监测系统打破了电缆和光纤传输的限制,在图像监控系统市场中占有很大优势。但是使用GPRS网络进行实时监控的网路费用较大,而在某些场合,比如运送重要物品的货车、无人值守的贵重设备等并不需要实时监控,仅当有入侵障碍物时才需要采集和传输现场图像并发送报警信号,以达到监测和防盗的目的。
针对这个问题,本文设计了一种基于ARM9和GSM/GPRS网络的无线可移动红外监测报警系统,使用红外监测模块对被监测点进行监测,当探测到入侵障碍物时调用图像采集设备对现场状况进行图像采集并以JPEG格式保存在终端的存储系统中,然后使用GPRS模块将最新的现场图像通过GPRS网络传输到指定的FTP服务器上,并以短信息的方式向用户报警。本系统的红外监测触发传输图像模式可以使系统按流量计费来节省GPRS网络通信费用,它的通用性强,可行性和性价比高,在实际应用中有一定的价值。
1 系统的体系结构
从体系结构上看,本系统由远程监测终端、GSM/GPRS及Internet无线网络、FTP服务器监控中心及用户手机组成。监控中心通过数字数据网专线与Internet互联,具有固定的IP地址。远程监测终端由终端控制单元、图像采集设备、红外监测设备及GSM/GPRS模块组成。图1所示为本系统的整体体系结构示意图。
2 终端的硬件设计
2.1 终端的硬件结构
系统中终端使用ARM9内核的S3C2410为处理器,以TX-05D红外线反射开关作为红外监测模块,使用包含USB接口和ZC301p芯片的CMOS图像传感器作为图像采集设备,采用GSM/GPRS模块WAVECOM Q2403A作为无线传输模块。图2为远程监测终端的硬件结构框图。
2.2 终端的硬件实现
S3C2410微处理器有丰富的外设接口,其中包括117个复用功能输入/输出端口引脚,即GPIO口,每一个端口都可以通过软件设置来满足各种系统配置和设计需求[1]。终端中使用S3C2410微处理器GPIO口中的GPG6口以输入模式连接红外监测模块的数据线,当红外监测模块探测到入侵障碍物时,数据线将向GPG6口输入高电平信号,从而被处理器识别并做出相关处理。GSM/GRPS模块WAVECOMQ2403A通过串口2连接到S3C2410实现图像传输和短信息发送。终端中图像采集设备是USB接口的、基于ZC301p芯片的CMOS图像传感器,它连接到S3C2410的USB HOST口中,实现图像的采集。终端电源模块为S3C2410及各个设备提供相应的工作电压。通过进行模拟试验,终端的硬件设计能够达到功能和性能上的要求,基本能够进行实际应用。
3 终端的软件设计
3.1 终端的软件结构
终端的软件包括引导加载程序Bootloader、操作系统内核、设备驱动程序和应用层程序,其软件结构如图3所示。
终端的文件系统采用了双文件系统,即以cramfs不可写文件系统存储系统文件,以jffs2可读写文件系统存储数据文件,从而既可以使系统文件得到可靠保护,又可以方便前期调试工作和图像数据文件的读写。这也是本设计的一个特点。
3.2 设备驱动程序
设备驱动程序可以被看作操作系统的一部分,对于某个特定的硬件设备来说,其对应的设备驱动程序是不同的。操作系统本身是没有各种设备驱动的,但是它留下了扩展设备驱动的接口。本终端系统中的设备驱动程序主要包括GPIO驱动、USB接口驱动、视频设备驱动和GSM/GPRS串口驱动。
GPIO驱动是针对GPIO输入/输出端口进行的驱动程序开发,主要的部分是GPIO端口的初始化和配置,经过测试终端采用GPIO总线中的GPG6口以输入模式来接收红外监测模块传入的高电平信号。USB接口驱动由三部分组成:主机控制器驱动程序(HCD)、USB驱动(USBD)、设备端驱动程序(Slave Device Driver),它主要是为支持USB接口的图像采集设备的使用。GSM/GPRS串口驱动是字符设备驱动,系统中选用的串口2对应的设备文件为/dev/tts/1,初始化串口2的波特率为115200 B/s,8位数据位,无奇偶校验,1位停止位,实现了GSM/GPRS模块的连接。
本系统中使用的视频设备驱动为SPCA5XX,它是面向该ZC301p芯片的,其实现是按照标准的USB VIDEO设备的驱动框架编写的,整个源程序由三个主体部分组成:设备的初始化模块和卸载模块、上层软件接口模块、数据传输模块。此视频设备驱动程序的设计,能够取到应用程序所需要的jpeg流。在此不能不提到ioct1的作用。为了补充设备读写操作的功能,例如控制硬件等,最常用的通过设备驱动程序完成控制动作的方法就是实现ioct1方法。ioct1系统调用为驱动程序执行"命令"提供了一个设备相关的入口点。与read和其他方法不同,ioct1是设备相关的,它允许应用程序访问被驱动硬件的特殊功能一配置设备以及进入或退出操作模式。在本设计中用到的,是通过ioct1截取jpeg流和配置图像采集设备的参数。
3.3 PPP拨号脚本
本设计中,对于处理器而言,GPRS模块就相当于一个调制解调器,处理器通过串口发送AT命令控制GPRS模块工作情况和得到GPRS模块相关信息。中国移动在GPRS网中建立了相当于ISP的GGSN,以连接GPRS网与外部的Internet网络。要使用GPRS功能首先要登录GPRS网络中的GGSN,这个工作可以通过相关AT命令完成。同时,为了能够进行IP数据包的传输,就必须首先实现数据链路层PPP协议。
PPP是简单链路设计的链路层协议。设计目的主要是用来建立点对点连接,进行数据收发。PPP协议中主要任务有链路建立、维护、拆除、上层协议协商和认证等。在GPRS网络中一般用到的有LCP(链路控制协议)、PAP(密码验证协议)、CHAP(挑战握手验证协议)和IPCP协议(PPP IP控制协议)。为了建立点到点连接,PPP连接时的两端开始都必须发送LCP数据包来配置和测试数据连接;在连接建立后,对等实体还有可能需要认证;然后,PPP必须发送NCP数据包来选择一种或多种网络层协议来配置。一旦网络层协议被配置好后,该网络层的数据包就可以被封装在ppp 帧中在链路上传送了。PPP链路将保持可配置的状态,直到有LCP数据包和NCP数据包终止连接。在GPRS模块拨号成功后,就要进行LCP协商配置。交互过程完成后,终端将主动进行PAP认证,发出PAP数据包,进入认证鉴权阶段。
PAP认证主要进行用户名和密码认证,其数据包仍然封装在PPP6帧内,格式和LCP一致。进入PAF认证阶段,终端主动发出Authenticate-Request数据包,由于中国移动使用的GPRS可以设置任意的用户名和密码,因此本设计中使用的用户名和密码都为"lab"。接下来进入IPCP设置阶段。
在IPCP配置过程中,可以设置网络连接中的网络环境,主要包括协商分配IP地址、IP压缩协议和DNS服务器地址等。由于不需要进行域名的解析和IP压缩,因而只进行IP地址的配置。
经过上述PPP协议数据交换过程,数据链路已经建立,但是要进行数据的传输,还要进行IP协议和TCP/UDP协议的实现。由于Linux内核已经支持TCP/IP协议,并且在内核配置时选中支持PPP协议,就可以完成上述的协议支持。为了完成上述的PPP协议实现过程,需要在文件系统的/et c文件夹下添加拨号脚本文件,并且在/usr/bin文件夹下添加应用程序pppd和chat。chat程序定义了计算机和modem之间的对话交互,完成拨号动作。pppd后台程序则同内核ppp驱动一起建立并维护与另一端的ppp连接,并确定连接两端的IP地址。
3.4 应用层程序
应用层程序中包括红外监测模块、图像采集模块、GPRS无线传输模块及GSM短信息发送模块。下面主要介绍图像采集模块与GPRS无线传输模块的实现。
3.4.1 图像采集模块
在Linux环境下,编写获取视频音频的应用程序,都使用V4L标准,V4L(Videofor Linux标准是Linux中通行的音频视频流采集标准。它为内核、驱动和应用程序的交流提供了统一的接口。在应用程序中利用V4LAPI获取视频图像按以下几个步骤进行:打开视频设备、设置设备的属性(图像的亮度、对比度、设定传输格式和传输方式)、开始传输数据,最后关闭设备。
首先,定义与设备相关的结构体如下:
struct vldeo_capabil i ty capabi li ty; //视频设备的属性
struct video_window captureWindow; //包含获取到的图像的长和宽
struct video_picture imageProperties; //包含获取到的图像属性
结构体struct video_capabi lity包含视频设备的属性有:视频设备的规范名称、接口类、所能获取的最大图像的宽和长、所能获取的最小图像的宽和长。其次,要使用ioctl系统调用,ioctl系统调用的功能是通过打开的文件描述符对各种文件,尤其是字符设备文件进行控制,完成特定的I/O操作。V4L支持的ioctl命令大约有二十多个,在应用中主要用的是下面几个命令:
ioctl(fd,V IDIOCGCAP,&capability); //获取视频设备的基本功能信息
ioctl(fd,VIDIOCGPICT,&picture); //设置和获取采集图像的各种属性
ioct l(fd,VIDIOCGMBUF,*mbuf); //获取缓冲区信息
ioctl(fd,VIDIOCMCAPTURE,&mmap); //捕捉图像,获取图像信息
ioctl(fd,VIDIOCSYNC,&frame); //等待捕获完成的图像
本设计中主要设置的参数有:捕获的图像大小为320×240像素,图像帧的调色板palette值为21,图像色彩深度为8位。
最后,使用read方法实现图像的获取,read方法则可以直接读取设备文件来获取一帧数据保存到缓冲区中。通过convertframe()函数将pFramebuffer中的数据转成完整的jpeg格式的数据保存到ptframe缓存中去,再调用fwrite()函数将pt-frame缓存中的jpeg式数据写入到指定的文件中去,即得到一幅jpeg格式的图像。另外要提到的是本设计中为了方便服务器端读取上传的图片,将图像文件重名为系统时间格式。这时需要调用Linux系统函数time和1ocaltime。综上,图像采集模块已经实现。
3.4.2 GPRS无线传输模块
本设计中使用socket(套接字)编程技术来实现GPRS网络中FTP文件的传输,它是网络通信中应用进程和网络协议之间的接口。在Linux操作系统中,socket属于文件系统的一部分,网络通信就像文件读取一样方便。并且socket用IP地址加上端口号来唯一地标志一个进程。利用socket实现通信就像网络上大部分通信一样,是在客户机/服务器(client/server)模式下进行的。这种模式下,将请求服务的一方称为客户端,将提供服务的一方称为服务器端。和大多数的应用程序一样,客户端和服务器端使用传输协议进行通信。应用程序通过传输协议进行交互时所用的接口称为应用程序接口(Application Program Interface,API)。一个API定义了应用程序与协议软件进行交互时可以使用的一组操作。本设计中使用了FTP协议来传输图像数据文件。一次完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。
本系统中使用socket编程技术实现GRPS网络中无线FTP传输图像的具体步骤是这样的;首先,建立socket客户端的部分,用来发送FTP命令等参数。调用socket()创建了套接字,返回了该socket的描述符。接着,将服务端的IP地址、端口号和网络地址类型(本设计中是PF INET,表明该socket在Internet域中进行通信)填充到该socket结构体中。然后建立刚创建的套接字的连接,通过此套接字发送登录该FTP服务器的相关命令:发送登录名和密码;使用TYPE命令设置文件的传输类型为I。接着,建立作为socket服务器端的部分,用来发送数据文件。与socket客户端不同的是需要先创建socket,然后绑定本地地址(也就是由GPRS系统DHCP分配的IP地址)到该socket上。接着是监听这个socket,当监听到与socket客户端(也是FTP服务器端)连接上时,开始请求发送图像数据文件的命令。这部分实际也充当了FTP的客户端工作。在监听到连接后,使用PORT命令监听等待连接的端口,接着使用STOR命令发送上传文件的请求。
在收到连接成功的回应后,作为socket服务器端的代码,要调用accept函数,表示可以接受socket客户端,即FTP服务器端的连接请求,然后开始打开最新的图像数据文件,通过数据链路发送文件。图像文件传输完成后,需要关闭文件流,并关闭以上创建的socket连接,以免在下次传输时出现错误。如此便完成了GPRS无线传输模块的设计,GPRS无线传输模块的流程图如图4所示。
3.4.3 应用层主程序
在各个模块的功能实现之后,终端的应用层主程序进行模块的集成,完成系统的功能,如图5即为终端的应用层主程序的流程图。
3.5 终端的软件实现
终端的软件实现主要包括对引导加载程序和操作系统内核的定制和裁减、文件系统的配置、驱动程序和应用程序的编写和交叉编译。终端的驱动程序和应用程序在Linux宿主机上以C语言编写,以arm-linux-gcc.3.3.2完成交叉编译后随文件系统一起烧写到嵌入式终端的NAND FLASH存储系统中,驱动程序以模块方式插入系统内核,应用程序在系统加电后一直运行。经过测试,终端的软件系统能够完成红外监测、图像采集、GPRS传输图像和GSM短信息报警的功能,达到了实际应用的要求。
4 结语
通过上述工作,完成了基于ARM9和GSM/GPRS网络的无线可移动红外监测报警系统的软硬件设计和实现。本系统可以使用在无人值守的重要场合,完成对敏感物体的监测和报警,防止外来入侵障碍物的影响,实现远程监测和报警的功能。系统有无线可移动和红外监测触发传输图像等特点,可以节省布线成本和使用时的GPRS网络费用,并且处理速度高、性能好、通用性强、可行性和性价比高,在实际应用中有一定的价值。