0、 引言
随着天然气的使用变得越来越广泛,由于天然气使用不当而引起的事故频发。据统计,城市燃气已经成为仅次于交通、火灾和建筑事故之后的主要事故来源。只有对天然气的使用进行实时有效的监控才能较好地防止事故的发生。目前在我国市面上已经较大范围的使用了天然气报警器,可以对天然气浓度进行监控,并在浓度异常时发出蜂鸣声报警。
不过这种报警器在使用上还存在一定的局限性,只能运行在天然气使用现场,不便于工作人员的实时监控;其次蜂鸣式报警很难引起工作人员的注意,从而错过了最佳的处理时机。国外的天然气监测产品大多针对工业级应用,尺寸较大,成本较高。
北京市政府在前几年颁布的《北京市燃气事故应急预案》中指出,要建立“统一指挥、属地管理、以人为本、专业处置、增强意识、预防为主”的燃气突发事件应急体系,全面提高应对燃气突发事件的能力,希望对其管辖范围内的所有天然气使用节点(例如餐馆、居民楼等)进行实时的监控,能够第一时间发现天然气浓度异常,从而统一指挥,专业处置来有效预防事故的发生,减少事故带来的损失。
基于以上需求,本文提出了基于 CS 架构的天然气远程监控系统。主要目标就是将分散在各个使用现场的报警器采集的数据集中到一个远程监控中心(例如政府部门、小区管理处等)。远程监控中心对所有节点的数据进行统一的监控,如有异常发生立即报警,提醒工作人员采取相应的措施,从而达到防止事故发生的效果。
1、 系统设计目标
整个系统主要分为两个部分,第一部分是运行在分散的监控节点处(例如餐馆)的报警器以及客户端软件;第二部分是运行在管理部门(例如政府相关部门)的远程监控端软件。本文将主要介绍远程监控端软件。
系统各部分功能如下:报警器,它被安装在远离工作人员工作的单独的天然气存放地点,因此需要定期采集天然气存放现场的燃气浓度、室内温度等数据,并将数据打包传送到客户端软件上(该软件可以安装在工作人员办公的地方)。客户端软件在接收到报警器的数据后再通过网络将数据传输到远程的中心监控平台。系统结构图如图 1 所示。
2、 远程监控中心功能模块设计
通过对天然气远程监控中心的需求分析,系统主要分为以下几个功能模块:数据接收与存储、节点实时监控、监控节点管理、节点异常报警、预案提取以及系统设置等。系统具体功能模块设计如图 2 所示:
2.1 数据接收与存储
此模块主要负责对各个天然气使用节点传输来的数据进行接收与存储。每个监控节点会将节点名称、温度、浓度三个数据打包成具有特定格式的字符串,并定时(例如间隔 5 秒发送一组数据)将数据发送给远程监控中心。成功接收数据后,系统对数据进行拆包并解析出传输节点的名称,节点当前的温度数据、浓度数据,再进一步将数据按照规则存储到相应的文件中进行保存。由于数据量十分庞大,为了便于有效的保存和查找数据,系统按照日期每日创建新文件夹,并且为每个节点创建单独的文本文档来保存一天内接收到的该节点的数据。
2.2 节点实时监控
此模块为用户提供可视化的对节点实时监控功能。系统接收到节点传输的数据是以文本形式保存,无法直观的展现,因此在节点实时监控模块,用户可以选择查看节点的动态数据曲线,实时绘制节点数据,更加直观。除了以动态曲线外,还提供了现场图像查看功能。用户可以随时向客户端发送指令获取节点的现场监控图像,并将实时图像与原始正常图像进行对比显示,作为判断节点是否异常的依据。
2.3 监控节点管理
系统还为工作人员提供了对节点信息的管理功能。每个节点将包含节点名称、节点联系人信息、节点所属区域等基本信息,并存入数据库中。其中节点名称用以唯一标识一个节点;节点联系人信息将包含节点安全负责人姓名、电话等,便于出现异常时的紧急联系;而节点所属区域信息是为了将节点进行地域上的分组,方便管理。工作人员可以根据需要增加新节点,修改节点信息,删除节点,导出节点信息等。
2.4 节点异常报警
该模块是系统中最重要的功能部分。系统在接收数据后还会对数据进行安全性判定,判断该节点此时传输的数据是否存在异常(异常一共分为三个等级,等级一为普通异常,等级三为严重异常)。如果出现异常,会弹出提示框提醒用户注意,并且自动生成节点的数据曲线和提取节点的现场图像,方便用户查看。
2.5 预案管理
预案是指根据评估分析或经验,对潜在的或可能发生的突发事件的类别和影响程度而事先制定的应急处置方案。本系统的主要目标就是提前预防事故的发生,因此处理预案也变得尤为重要,预案的内容主要是针对报警节点而采取措施的信息。
如果某节点出现了相应等级的异常,系统会根据节点的等级自动提取对应的处理预案,提醒用户按照预案进行相应的操作,防止事态恶化。例如某节点处于二级报警时,此时情况比较严重,预案会提醒工作人员拨打该节点安全责任人的电话,对节点环境进行勘察,采取正确的应对措施。预案内容可以根据地方政策等因素进行变更,为具有一定权限的用户提供了预案修改功能。
2.6 系统设置
系统会设置一些报警阈值,例如天然气浓度阈值、温度阈值等,将每次接收到节点上传的数据和系统设置的阈值进行比较,如果大于或者等于阈值设定数值就会产生报警。为了达到提前预防的效果,提供了三级阈值设定功能。级别越高表示异常越严重。系统安全设置部分就是为用户提供个性化的阈值设置。用户可以根据实际情况,在指定范围内选取某个数值作为阈值报警值,该值会保存到数据库中,作为数据检测的比较值。除了安全设置外还提供例如路径修改,页面颜色修改等其他设置功能。
2.7 附加功能
附加功能模块是为了让用户有更好的体验而设置的,例如邮件工具,用户可以在系统中向各个节点的联系邮箱发送通知、资料等,方便快捷。
3、 系统实时性研究
3.1 线程池的引入
由于客户端监控节点数量庞大,远程监控端软件面临的连接请求繁重,次数统计如表 1 所示。为了保证对请求处理的实时性,必须采用多线程并发编程机制。
线程完成任务的时间包括三部分,创建时间(T1)、任务执行时间(T2)和销毁时间(T3)。如果为每个任务创建新线程,那么当任务数量庞大时,系统花费在线程创建和销毁上的时间将是不容小觑的,这会给系统带来较大的处理延时。使用线程池可以缓解这样的情况。图 2 展示了为所有新任务创建新线程所用的时间与使用线程池来完成任务所用时间的比较图。从图中可以看出,当连接请求达到 105次的时候,多线程时间消耗为使用线程池所消耗时间的 10 倍左右。因此,采用线程池并发编程可以提高线程的重用性,减少不断创建和销毁线程带来的开销,在一定程度上提高系统的实时性。
3.2 线程池调度策略
系统为了处理请求,为每次连接分配一个任务线程,然而远程监控软件可能同时接收到较多的请求,加上线程池中存活线程数量有限,不能同时处理所有的请求,这些请求会在有空闲线程时随机执行。当客户端节点的请求长时间不能被处理时,数据异常可能正在这段时间里发生,导致系统无法准确的监测到数据异常,降低了系统的可靠性。为了改善这种状况,我们设计了一个基于 priority Blocking Queue(优先级阻塞队列)的线程优先级调度策略来确保客户端发送的请求在安全时间间隔内被系统处理。
系统接收连接请求,会根据 socket 对象以及请求客户端最后一次被接收到数据的时间与当前时间差得到的优先级来创建一个任务(task),如果线程池中没有空闲线程,即 runningThread数量等于 threadNum 时,将 task 加入 priority Blocking Queue 中进行排队等待;如果线程池中有一定数量的空闲线程,就从任务队列中为空闲线程分配任务对象来执行。请求处理函数伪代码如图 3 所示:
为了比较线程池一般的调度算法与基于优先级阻塞队列的调度算法在处理异常数据的实时性,我们设计了模拟实验,实验中假设客户端以一定概率发送异常数据,如果异常数据在 20s内没有被处理,就认为是异常数据处理遗漏现象,在现实中可能就会带来灾难事故。
对比数据如图 4 所示,横轴表示客户端传输数据中异常数据的比率(excpRate = excp(异常数据量)/ allData(数据量)),纵轴表示系统的异常遗漏率(missRage =1- excpRec(接收到的异常数据量)/ excp(异常数据量))。由图可知,当客户端传输的异常数据比率在0.4%时,两个算法的遗漏比率分别为0.086%和 0.038%,一般调度方法遗漏率是优先调度算法的两倍左右。并且随着异常数据率越大,倍数关系越大。可见加入优先调度算法后可以有效降低异常遗漏率,提高系统的实时性和可靠性。
4、 系统安全性研究
4.1 权限设置与日志记录
在客户端软件和远程监控端软件中分配了管理员和普通用户两种角色。普通用户只可以查看监控数据,不能对系统的任何信息进行修改。管理员用户拥有最高权限,这样可以防止系统信息被肆意修改。日志记录是在一些重要操作中记录下操作用户、操作时间和具体操作。当系统运行出现异常时,日志记录文件有助于维护和调试。
4.2 数据有效性验证
系统中的数据有效性验证主要分为以下几类:
数据完整性验证:确保提交信息中特定的字段区域不能为空,以免在数据存储进数据库时发生错误。
数据唯一性验证:对数据库中唯一标示符所对应的字段进行唯一性验证,避免插入数据库时出现冗余异常。
数据格式正确性验证:对特定信息格式的数据进行的验证,例如邮件数据,电话号码数据等。通过与相应的正则表达式匹配,判断数据格式是否正确。
4.3 数据加密
系统中的数据主要通过两种形式存储:MySQL 数据库以及文本。
数据库数据加密:数据库数据在插入和读取时,分别调用MySQL 自带的 ENCODE 和 DECODE 函数,对数据进行简单加密和解密。没有正确秘钥时,查询的数据将是乱码。
文本数据加密:文本数据存储的主要内容是温度浓度数据以一定格式组成的字符串,因此选取了简单对称加密的 DES 算法,加密和解密使用共同的秘钥。
5、 结束语
本系统经过测试,能够正常的运行,实现了方便实用的设计目标,提供了多层次监控报警的功能。通过本系统,用户可以在远端对分散在不同地点的天然气使用现场进行实时的监控,同时根据需要查看各个节点的数据曲线等。出现异常时,从报警器端到远程监控软件端都会产生报警,提醒用户注意,此时用户可以根据报警的级别采取相应的应对措施,从而尽早发现问题解决问题。
除了满足功能上的需求外,系统也采用线程池、优先级调度算法、数据加密等方法来提高系统在实时性和安全性。在开发过程中,为增加新功能预留接口,便于系统的升级与维护。
参考文献:
[1] 郑敏 . 基于 Web 的气象系统信息网络远程监控研究 [J]. 软件,2012,33(6):131-132.
[2] 高鹏,苏志远 . 基于物联网的远程监控系统 [J].软件,2012,33(12):74-77.
[3] 陈建峰 , 许豪杰 , 戴松世等 . 基于 C/S 多层结构的核磁共振成像设备远程监控系统 [J]. 计算机应用 ,2011,31:3429-3933.
[4] 杨开杰 , 刘秋菊 , 徐汀荣 . 线程池的多线程并发控制技术研究 [J]. 计算机应用与软件 , 2010,27(1):168-170,179.
[5] 路勇 . Java 多线程同步问题分析 [J]. 软件,2012,33(4):31-33.
[6] 王溪波 , 于洋 , 于戈 . 基于优先级的 Java 线程唤醒机制研究与实现 [J]. 沈阳建筑大学学报 ,2008,24(2):328-331.
[7] 刘芳 . 一种数据库加密系统的设计与实现 [J]. 软件,2012,33(11):97-98.
[8] 张清华 , 邓亚平 . 基于一种 DES 算法改进体制的研究 [J]. 计算机应用与软件 , 2003,08:13-15.