0 引 言
火灾是城市灾害中的一种主要形式,它已经日益成为影响社会经济发展和人民生活的一个重要灾害,而目前城市在预防火灾方面主要采用的就是在建筑物内安装火灾自动报警系统及其联动消防装置,虽然这种装置在及早发现火情和控制火势方面发挥了重要作用,但是在目前这种消防设备管理和监督体系下,很多建筑物的所有方不能够及时地对建筑物内的消防设施进行检查维修,导致很多火灾自动报警系统故障误报频发,极大地影响了建筑物内的人员的工作和生活; 同时,大部分消防主控室主要通过人工值班、电话报警方式,因受到电话线路、报警方式方法以及报警人情绪的影响,往往造成接警调度处理速度较慢; 消防部门在接警时也是依靠电话来传递信息的,极易受到报警人或值班员听觉的影响而导致接传火警信息有误,造成不应有的错误和无法估量的损失,所以建立基于互联网的城市消防监控系统具有很重要的实践意义。在这项工程中,最关键的就是处于网络与自动报警联动装置之间的接入网关的设计和研制。利用这种专门的硬件设备以及在这之中的程序,可以把各个建筑物的消防自动化及其联动装置接入Internet,通过互联网连接到城市中的监控中心。
1 基于互联网的城市消防远程监控系统结构
该系统由三层组成,系统框图如图1 所示。第一层是建筑物内的消防自动报警及其联动装置以及其他一些用户的消防设施,它们由很多不同厂家和类型的火灾探头、消防主机、手动消防设备组成; 第二层是火灾信息收集管理处置中心、政府消防部门信息接口、互联网普通用户查询接口等信息使用单位 。
2 火灾信息传输网关的硬件设计
该嵌入式网关的中央处理单元采用三星公司的16/ 32 位RISC 处理器S3C2440A,它基于ARM920T内核,运算速度高达400 MHz,适用于需要联网应用的嵌入式电子设备。其中的NOR FLASH 用于存储bo ot loader 启动代码,NAND FLASH 用于存储操作系统的内核映像和根文件系统映像,SDRAM 用于加载操作系统内核及应用程序等可执行代码和数据,为其运行提供空间。外围电路包括以太网模块、串口模块、人机接口模块等,如图2 所示。
图1 基于网络的城市火灾信息传输系统
图2 嵌入式网关的硬件结构
3 火灾信息传输网关的软件设计
3. 1 软件总体设计
软件总体设计如图3 所示。
图3 软件基本框架
3. 2 总体概述
网关软件系统按照功能分为4 个模块。
( 1) 网络通信模块
主要负责信息往网络上的传递,将该网关获取的火警,故障等信息依照特定的网络协议准确无误地传递给上层的应用服务器,同时还要负责接收来自服务器的数据,如配置信息,控制指令等。具体来说,网络通信模块又可以分为两个子模块: 数据通信和数据处理。数据通信的工作只是负责从网络上获取数据或者将数据发送到网络。数据处理主要负责组包和解包,涉及到通信协议。当数据区有数据需要网络通信模块处理时,数据处理子模块会首先从数据区取出数据,并分析、判断数据类型,根据数据类型组包,然后将包交给数据通信子模块发送。
( 2) 串口采集模块
主要负责通过串口获取消防主机的状态,并进行分析,分离出有用信息,并将其写入数据区,供其他模块使用,它是信息传输网关的核心。
由于消防主机众多,而且协议又各不相同,因此串口采集模块需要根据消防主机定制。在此,同样将串口采集模块分为两个子模块: 数据采集和数据加工。数据采集通过特定的对话方式( 和具体的消防主机有关) 从消防主机获取数据,数据加工读取这些数据,并按照消防主机协议进行解析,提取初步的信息,如消息类型( 火警还是故障) ,探头地址( 内部编码地址) 。然后依照内部协议组包,并写入数据区,以后的工作就交由网络通信模块。
( 3) 系统控制模块
主要用于控制信息传输网关的硬件设备,如指示灯、按键、灯等。它从数据区读取控制指令,根据控制指令执行特定的硬件控制。控制指令可能由网络通信模块产生,如上层服务器发送查岗请求,网络通信模块经过数据处理转化为响喇叭指令,写入数据区。当然,控制指令可以由任何模块产生。系统控制模块可以返回硬件状态信息,也是通过写状态信息到数据区来实现信息传递的。
( 4) 系统维护模块
主要负责确保系统各个模块的正常运行,同时记录及上传工作日志,供系统维护人员参考,同时收集上来的数据经过分析和挖掘,可以作为产品性能指标制定的依据。各模块在建立之初将会在数据区注册,维护模块通过这个注册信息实现心跳应答机制来判断各个模块的工作状态。同时,还将数据区中的日志信息提取出来写入日志文件,并提出发送日志文件请求给网络通信模块。
每个模块依照分工完成职能之内的工作,不属于职能内的工作通过写入数据区交由职能模块去完成。数据区是各个模块传递信息的媒介,通过格式化的数据写入和读取,实现模块间的信息共享和职能分工。
3. 3 各模块详细设计
3. 3. 1 流程分析
核心管理模块是嵌入式网关入口,当嵌入式网关加电启动,嵌入式网关的操作系统负责启动核心管理模块。此时,其他模块还未启动。核心模块首先为其他模块启动初始化系统环境,如创建管道,共享内存等。接着,核心模块启动其他模块。这时,系统将启动完成。
接着,核心模块建立定时器,创建定时器是为了定时地检测其他模块,以判断其他模块的状态,称这个过程为“心跳”。
当以上过程完成后,核心管理模块开始监视所有管道,当管道有数据时,他读取定长的数据并分析,找出源地址、目的地址及命令字。根据命令字类型的不同做不同的处理。程序流程图如图4 所示。
图4 程序启动过程
( 1) 初始化。初始化的主要工作是为模块间的通信建立有名管道,每个与核心模块通信的进程有一个管道。当前系统需要创建四个管道。其他模块如果想要使用管道,必须首先打开管道。所有与管道的通信都有API 供其他用户使用。
( 2) 启动其他模块。核心模块通过子进程调用execl( ) 来启动其他模块。每个其他模块都是一个可执行程序,通常位于一个固定的路径及固定的文件名。每个模块在启动之后需要向核心模块发送注册信息,这些信息包括模块标识、进程ID、进程状态等。登记信息由核心模块保留,供以后使用。
( 3) 创建定时器。核心模块需要定时地检测其他模块的生存状况,通过注册一个定时器,可以定时地触发检测功能。
( 4) 开始*。当所有初始化工作完成以后,核心模块开始进入工作状态。它的主要工作就是负责处理管道信息。通过使用select ( ) 函数可以实现同时*多个管道。当某个管道有数据,核心模块读取数据包( 格式详见后文) ,并解析出包头,得到包的源地址,目的地址,及控制字并加以分析,选择处理流程。处理流程包括: 数据中转,巡检,系统维护等。当该数据包处理完成以后,核心模块返回继续等待下一个数据包。
( 5) 处理数据中转。其他模块间无法直接通信,都必须通过核心模块进行中转。数据包中指明了包的源地址,目的地址及控制字。这里的控制字说明数据需要中转,核心模块解析到数据包需要中转,就将包写入到给定目的地址的模块管道。
( 6) 处理巡检。服务器需要定时地检测前置机各个模块的状态,于是发送巡检请求给网络模块,网络模块解析后组包发送给核心模块,核心模块在分析包发现该包是巡检请求,于是通过kil l( ) 函数及注册记录信息,判断各个模块的状态,并组包发送给服务器。
( 7) 处理系统维护。系统维护的主要任务是为了保证系统所有模块的正常运行。前面初始化了一个定时器,通过定时器,可定时地查询其他模块的状态。当发现某个模块异常,核心模块将重启该模块。
3. 3. 2 关键数据结构
( 1) 包格式
( 2) 模块ID 定义
如表1 所示:
表1 模块ID 定义
# defineID_CORE0x0001
# defineID_NET WORK0x0002
# define ID_COM0x0004
# defineID_CT L0x0008
# define ID_LOG0x0010
( 3) 控制字定义
如表2 所示:
表2 控制字定义
( 4) 管道初始化
首先,用户必须选择正确地管道初始化函数,通过初始化函数,用户正确的建立与管道的连接。初始化函数如表3 所示。
表3 初始化函数
( 5) 管道写操作
一旦管道创建完成,用户就可以通过调用管道写函数来写数据。用于必须调用和初始化一致的写函数。
如网络模块调用pipe_init_ netw o rk 函数初始化管道,必须通过调pipe_w rite_netw ork 来写,若调用其他函数写入将失败,如表4 所示。
表4 管道写函数
表4 中目的模块ID 和控制字在conf ig . h 文件中定义。msg 是要发送数据的首地址,必须注意的是msg所指向的数据必须是字符串类型,必须以“ 0”结束,否则发送函数无法确定msg 数据包的长度。对于不是以msg 结尾的数据包,必须字符串化,否则发送函数的行为未定义。
( 6) 管道读操作管道读操作从管道读取一个固定长度的数据包,并解析数据包,从数据包中分离信息。管道的读操作可以是阻塞模式和非阻塞模式。在阻塞模式下,读操作将阻塞直到有数据返回。用户通过设置读操作中的参数f lag 可以实现模式选择。当f lag= 0 时,表示为阻塞模式; 当f lag= 1 时,表示为非阻塞模式。管道读操作也要求管道必须正确的初始化,否则读失败,同时也要求必须选择正确的管道读函数,如表5 所示。
表5
表5 中,src 是unsigned shor t * 类型,如果不要求获取源地址,可以传递NU LL。msg 用于存放接收数据的内存首地址,msg 必须大于或等于251 B。空间必须由用户分配。函数假定msg 的空间已分配且空间足够大 。
( 7) 基于TCP/ IP 的网络通信
装置采用串口采集消防主机上的数据,并且把数据转换成TCP/ IP 协议能识别的数据包,因此串口采集的数据源要作为以太网帧的一部分。为了向设备提供透明的接口并区分数据源,需要制定统一的帧格式。帧格式如下:
其中,串*字段用来区分数据源; 帧头、帧尾作为一个串口帧的起始分界( 可自定义) ; 数据部分是来自串口的原始数据流。
以太网方面采用面向连接的网络通信,采用TCP/ IP网络通信协议。数据包结构描述中控制单元格式如下:
应用数据单元基本格式如下:
消防主机发送的信息一般在10~ 100 B 之间,若选择T CP 协议,会使协议开销在网络的吞吐量中占有很大的比例。U DP 协议支持实时多播通信,保证了网关向监控中心实时发送火警情报,并能有效地减少用户信息传输装置的开销和网络资源。UDP 协议的数据可靠性和完整性问题由应用程序来解决,因此在该系统中使用UDP 更合理。
TCP/ IP 通信模块采用SOCKET 套接字编程实现。本系统采用服务器/ 客户端编程模型,服务器和客户端分别对应监控中心工作站服务器和用户信息传输装置。
4 结 语
本文详细剖析了利用Internet 实现火灾自动报警系统与城市远程消防监控中心的连接及相关信息的交互,并设计了该系统的关键设备——嵌入式信息传输网关,采用已经移植有Linux 2. 6内核操作系统的ARM9单片机,在此基础上进行了应用程序的开发,实现了火灾探测信息的处理转发功能和上位机与嵌入式网关的信息交互功能。设备在实际环境中安装后的测试结果表明,该嵌入式系统对火灾探测数据及交互信息的处理和转发稳定可靠、实时性好,不仅适用于基于IP 的火灾信息传输网络中,同时还可应用于其串口和以太网通信的场合中,应用前景广阔。