基于ARM的火灾信息传输网关设计
3.2 总体概述
网关软件系统按照功能分为4个模块。
(1)网络通信模块
主要负责信息往网络上的传递,将该网关获取的火警,故障等信息依照特定的网络协议准确无误地传递给上层的应用服务器,同时还要负责接收来自服务器的数据,如配置信息,控制指令等。具体来说,网络通信模块又可以分为两个子模块:数据通信和数据处理。数据通信的工作只是负责从网络上获取数据或者将数据发送到网络。数据处理主要负责组包和解包,涉及到通信协议。当数据区有数据需要网络通信模块处理时,数据处理子模块会首先从数据区取出数据,并分析、判断数据类型,根据数据类型组包,然后将包交给数据通信子模块发送。
(2)串口采集模块
主要负责通过串口获取消防主机的状态,并进行分析,分离出有用信息,并将其写入数据区,供其他模块使用,它是信息传输网关的核心。
由于消防主机众多,而且协议又各不相同,因此串口采集模块需要根据消防主机定制。在此,同样将串口采集模块分为两个子模块:数据采集和数据加工。数据采集通过特定的对话方式(和具体的消防主机有关)从消防主机获取数据,数据加工读取这些数据,并按照消防主机协议进行解析,提取初步的信息,如消息类型(火警还是故障),探头地址(内部编码地址)。然后依照内部协议组包,并写入数据区,以后的工作就交由网络通信模块。
(3)系统控制模块
主要用于控制信息传输网关的硬件设备,如指示灯、按键、灯等。它从数据区读取控制指令,根据控制指令执行特定的硬件控制。控制指令可能由网络通信模块产生,如上层服务器发送查岗请求,网络通信模块经过数据处理转化为响喇叭指令,写入数据区。当然,控制指令可以由任何模块产生。系统控制模块可以返回硬件状态信息,也是通过写状态信息到数据区来实现信息传递的。
(4)系统维护模块
主要负责确保系统各个模块的正常运行,同时记录及上传工作日志,供系统维护人员参考,同时收集上来的数据经过分析和挖掘,可以作为产品性能指标制定的依据。各模块在建立之初将会在数据区注册,维护模块通过这个注册信息实现心跳应答机制来判断各个模块的工作状态。同时,还将数据区中的日志信息提取出来写入日志文件,并提出发送日志文件请求给网络通信模块。
每个模块依照分工完成职能之内的工作,不属于职能内的工作通过写入数据区交由职能模块去完成。数据区是各个模块传递信息的媒介,通过格式化的数据写入和读取,实现模块间的信息共享和职能分工。
3.3 各模块详细设计
3.3.1 流程分析
核心管理模块是嵌入式网关入口,当嵌入式网关加电启动,嵌入式网关的操作系统负责启动核心管理模块。此时,其他模块还未启动。核心模块首先为其他模块启动初始化系统环境,如创建管道,共享内存等。接着,核心模块启动其他模块。这时,系统将启动完成。接着,核心模块建立定时器,创建定时器是为了定时地检测其他模块,以判断其他模块的状态,称这个过程为“心跳”。
当以上过程完成后,核心管理模块开始监视所有管道,当管道有数据时,他读取定长的数据并分析,找出源地址、目的地址及命令字。根据命令字类型的不同做不同的处理。程序流程图如图4所示。本文引用地址:https://www.eepw.com.cn/article/150981.htm
(1)初始化。初始化的主要工作是为模块间的通信建立有名管道,每个与核心模块通信的进程有一个管道。当前系统需要创建四个管道。其他模块如果想要使用管道,必须首先打开管道。所有与管道的通信都有API供其他用户使用。
(2)启动其他模块。核心模块通过子进程调用execl()来启动其他模块。每个其他模块都是一个可执行程序,通常位于一个固定的路径及固定的文件名。每个模块在启动之后需要向核心模块发送注册信息,这些信息包括模块标识、进程ID、进程状态等。登记信息由核心模块保留,供以后使用。
(3)创建定时器。核心模块需要定时地检测其他模块的生存状况,通过注册一个定时器,可以定时地触发检测功能。
(4)开始监听。当所有初始化工作完成以后,核心模块开始进入工作状态。它的主要工作就是负责处理管道信息。通过使用select()函数可以实现同时监听多个管道。当某个管道有数据,核心模块读取数据包(格式详见后文),并解析出包头,得到包的源地址,目的地址,及控制字并加以分析,选择处理流程。处理流程包括:数据中转,巡检,系统维护等。当该数据包处理完成以后,核心模块返回继续等待下一个数据包。
(5)处理数据中转。其他模块间无法直接通信,都必须通过核心模块进行中转。数据包中指明了包的源地址,目的地址及控制字。这里的控制字说明数据需要中转,核心模块解析到数据包需要中转,就将包写入到给定目的地址的模块管道。
(6)处理巡检。服务器需要定时地检测前置机各个模块的状态,于是发送巡检请求给网络模块,网络模块解析后组包发送给核心模块,核心模块在分析包发现该包是巡检请求,于是通过kill()函数及注册记录信息,判断各个模块的状态,并组包发送给服务器。
(7)处理系统维护。系统维护的主要任务是为了保证系统所有模块的正常运行。前面初始化了一个定时器,通过定时器,可定时地查询其他模块的状态。当发现某个模块异常,核心模块将重启该模块。
3.3.2 关键数据结构
(1)包格式:
(2)模块ID定义
如表1所示:
评论