随着计算机、网络和数据库技术的发展,用户对地震数据服务水平要求越来越高,无人值守地震台站作为工作效率高、建设速度快、投入少、占地少、维护成本小的工作方式在全国得到普遍推广(侯建民等,2009)。由于观测环境需要,无人值守台站多在较偏远或环境复杂位置,如:深山、山洞、荒岛(韩进等,2011)。如何对无人值守台站进行远程、统一、有效地维护与管理,已经成为一项亟待解决的问题。为此,黄显良等(2013)研发了智能地震台站综合智能监控系统,通过安装在台站的软硬件设备和远程测控平台,对无人值守地震台站设备工作状态和环境进行实时监控,能够自动判定台站故障点并发出报警信息。
为解决河南省无人值守台仪器运维工作中面临的难题,综合应用Nagios系统,WiFi智能插座等技术,基于Java等编程技术,研发无人值守台站设备智能管控平台。该平台通过实现路由器及前兆仪器等设备工作状态的实时监控与短信告警、故障点智能定位与故障远程自排除能力,辅以视频监控,建立集监控、告警、遥控于一体的智能自动化仪器运维机制。系统研发有助于故障的及时发现与自动排除,可在较大程度上减小设备运维成本,提高观测资料的连续性和观测质量。
1 系统架构设计系统部署包括台站硬件设备增设和省地震局“监控中心”软件部署2部分。在台站端,通过增设WiFi电源开关和网络摄像头完成智能改造;在省地震局,部署“监控中心”前台与后台软件平台,最终实现台站设备故障的及时短信告警与智能程序化排除功能,形成全自动、智能高效的台站仪器运维模式。系统整体架构见图 1。
![]() |
图 1 系统总体架构 Fig.1 Overall architecture of the system |
前台值守程序部署于省地震局服务器,以轮询方式实时汇总采集各台站网络状态与仪器健康值状态,并提供故障短信推送服务。维护人员可远程监控台站信息及仪器运行状态,发现问题并远程控制处理。系统具有故障点智能定位与排除方案预判能力,综合分析网络通断状态、前兆仪器健康指数等因素,并智能分析故障原因,推导智能处置决策。
系统集成市场上技术成熟的WiFi智能插座。在监测到仪器死机故障时,通过点对点WiFi智能插座的关闭开启操作,实现指定交换机或仪器设备的远程重启。基于网络摄像头与浏览器,实现多台站集中视频监控,支持移动侦测,发现异常自动抓拍报警。
后台采用PHP+Javascript+HTML技术实现,提供Web界面与用户交互,以直观醒目的表现形式展示当前故障与故障智能分析报告,并提供点对点设备电源管理、视频集中监控、故障查询等功能。
2 系统模块设计无人值守台站设备智能管控平台在代码实现上由前台值守Java程序和后台管理程序构成。Java是一种可以撰写跨平台应用软件、面向对象的程序设计语言(黄文海,2017),具有卓越的通用性、高效性、平台移植性和安全性(高洪岩,2015)。Mysql是流行的关系型数据库管理系统(任进军等,2017)。前台值守程序基于Java+MySQL技术研发,完成从故障发现、故障告警、智能分析、决策执行到故障归档的一系列流水化处理。设计实现网络连通状态及仪器健康状态监控、故障短信告警、故障诊断、决策方案执行、智能模型训练等模块。系统功能模块结构见图 2。
![]() |
图 2 系统功能模块结构 Fig.2 Structure of system function modules |
仪器健康状态监控模块基于前兆仪器通讯指令原语,实现对仪器健康状态的实时监控,获取全面精准的状态数据,为后续故障点的智能分析定位提供充分数据依据。仪器网络通讯状态正常,数据采集进程僵死的现象时有发生,由于缺少有效监控软件,此类故障不易察觉,不利于提高数据观测质量。仪器健康状态监控模块周期性获取仪器采集的最新5组数据,采用数据波动监测算法展开比对分析,判断仪器采数是否正常,本质上杜绝此类现象发生。
网络连通状态监控模块融合Nagios网络监控技术,结合Ndoutils组件实现多台站设备网络状态实时监控,与值班表数据集成联动,实现故障短信告警模块。
台站网络拓扑结构的固定性决定故障排查的规律性。故障事件往往表现为具有时间关联性的多个故障对象组成的故障序列,而故障序列本质上是由故障点引起的一系列连锁故障反应。故障诊断模块基于故障现象矩阵建立智能分析模型,依据网络拓扑结构形成推导规则,根据人工模式下积累的历史故障分析与处置记录开展样本训练,不断修正模型,最终形成智能预判能力。
后台管理程序为用户提供管控平台的交互界面,基于B/S架构研发,通过浏览器即可访问登录,具有跨平台且易维护的优势。代码层面基于PHP+HTML+Javascript语言研发,PHP负责服务器端逻辑处理与数据库查询操作,Javascript负责浏览器端与用户的动态交互。采用登录认证管理机制,支持多级权限控制,为各台站提供其管辖范围内仪器的自动化维护流程,实现分级运维监控。管理员拥有最高权限,管辖范围覆盖全省所有台站。实现值班表管理、实时故障汇总与分析展示、设备连通率统计查询、历史故障档案查询、设备远程重启、远程视频监控等模块设计。
3 主要模块代码实现 3.1 仪器健康状态监控模块仪器健康状态监控模块通过多线程并发执行,以非堵塞socket模式与多台前兆仪器建立连接,周期性执行查询指令,对反馈结果加以判断,形成故障记录并入库。其中数据采集监控算法设置一个固定长度的缓存区间,存放相邻时刻采集的相同数据,若出现连续N次相同数据,致使缓存溢出,则判定为数据采集进程故障。部分主要实现代码如下
public void sample_var(String newsample){//采集到新数据时,运行数据波动监测算法
if (index==0) {
samples[0]=newsample;
lasttime=dates[0]=df.format(System.currentTimeMillis());
index++; //缓存为空时,添加最新采集的一组数据进入缓存
return;
}
if (samples[index-1].equals(newsample)){//缓存有数据且新添数据与缓存中数据相同
if (index==2) {
index=0;lasttime=df.format(System.currentTimeMillis()); //多次获取仪器数据值相同,致使缓存溢满,则断定仪器死机,清空缓存,记录故障时间
if (dead==0) {//当前仪器数据采集状态为正常,则重置标识为故障
control.datacontainer.update(“update cc_healthstate set samplestate=1 where equip_name=’”+equip_name+”’”); //将故障状态更新至数据库
dead=1;//更新数据采集故障标志位为故障
index=0;
report_unhealthy(“DATA”); //登记故障发生情况
}
return;
}
if (index<2){//缓存未满,且最新数据与缓存数据相同,则直接添入缓存
samples[index]=newsample;
lasttime=dates[index]=df.format(System.currentTimeMillis());
index++; //将最新数据与采集时刻添加进缓存
return;
}
}
else {//最新数据与缓存数据不同,存在数据波动,在清空缓存后,添加新数据
samples[0]=newsample;
lasttime=dates[0]=df.format(System.currentTimeMillis());
index=1;
if(dead==1){ //若当前存在数据采集状态故障,则判定故障恢复
control.datacontainer.update(“update cc_healthstate set samplestate=0 where equip_name=’”+equip_name+”’”); //将数据采集状态更新至数据库中
dead=0;//重置数据采集状态故障标记为无故障
recover(“DATA”); //登记故障恢复情况
}
return;
}
}
3.2 故障分析模块故障分析模块从故障采集模块收集汇总有时间关联性的故障对象,创建并维护故障序列清单,并适时触发故障分析流程与故障短信告警流程。智能模式下,联动触发决策方案执行流程,远程重启故障点,待故障序列中所有故障均恢复后,将故障详情归档,并以数据库记录方式保存,为后续模型训练提供数据样本。部分关键实现代码如下
public int processnotification(String state, String name, String start){
//将故障添加进故障序列中,忽略重复告警
if(m.containsKey(name)){ //故障序列中已存在此故障
if (state.equals(“1”)){//此故障未恢复,屏蔽重复告警
return 1;//判断重复故障
}
if (state.equals(“0”)){ //此故障已恢复
m.get(name).settime(start); //登记故障恢复时间
unrecover--; //更新故障序列中故障对象个数
if (unrecover==0) putinfile(); //故障序列均恢复,将故障序列归档为一个故障集合 return 0;
}
}
else{ //新故障产生,添加新故障进队列,触发智能分析算法的执行
m.put(name, new LogItem(id, name, start, database)); //生成新故障对象,入队列
unrecover++; //更新故障序列中故障对象个数
decline(name);
try {
if(!name.contains(“HC[“))//每增添一个新故障,启动故障点分析流程
aa.process(id); //提供故障序列号,触发智能分析流程
} catch (Exception e) {e.printStackTrace(); }
return 0; //返回0为非重复告警
} return 0; }
4 监控平台效果展示“仪器实时健康状态总览”页面通过可视化形式展示数据采集状态与仪器健康状态,页面自动刷新周期为1 min。仪器健康状态实时监控界面见图 3。
![]() |
图 3 仪器健康状态实时监控界面 Fig.3 The interface for real-time monitoring of the health status of equipment |
“实时故障汇总与分析”页面展示当前所有故障对象,并根据故障情况动态实时更新智能分析算法产出的故障点与处置决策。故障汇总与故障分析报告界面见图 4。“远程设备重启”页面实现对台站仪器、网络通讯设备点对点的远程重启控制,其中前兆仪器拥有电源重启与指令重启2种重启功能。“值班表管理”页面为用户提供值班表的录入、编辑渠道,功能界面见图 5。
![]() |
图 4 故障汇总与故障分析报告界面 Fig.4 Fault summary and fault analysis report |
![]() |
图 5 值班表管理功能界面 Fig.5 The interface for function of management on duty |
“网络连通率统计查询”页面为用户提供按时间统计连通率的查询功能,界面见图 6。查询条件有自定义与预定义2种模式,点击序列按钮中的单个按钮,可按照预定义时间段进行快速查询,已预定义11个时间段。点击下方列表中对象名称,可浏览此对象当前时间段的历史故障记录。
![]() |
图 6 故障连续率统计查询功能界面 Fig.6 The interface for function of continuous rate statistical query |
无人值守台站由于其观测环境的限制,基本建于位置偏远或环境复杂地区,地震系统有限的仪器维护人员和定时定点的维护管理模式已不能保证工作的及时性和有效性,而且在一定程度上浪费了人力、物力和财力,无法满足发展需求。
基于Java等编程技术研发无人值守台设备智能管控平台,实现了对河南省地震前兆无人值守台站仪器设备的实时监控、短信告警、自动故障排除功能,建立智能高效的无人值守台仪器运维机制。故障发生时,可以通过人工方式对故障点设备断电、加电,实现冷重启。智能模式下无需人为干预,自动根据模型分析结果实施故障排除方案。
系统的成功部署有助于故障的及时发现与自动排除,有效减少仪器运行维护带来的人力、物力资源消耗,提高了观测资料的连续性和观测质量。在该系统试运行期间,在不耗费人力、物力的前提下,缩减了故障响应时间,提高了工作效率,受到研究人员地广泛好评。
高洪岩. Java多线程编程核心技术[M]. 北京: 机械工业出版社, 2015: 26-26. | |
韩进, 宋澄. 遥测地震台站的防雷思考[J]. 地震地磁观测与研究, 2011, 32(1): 109-112. DOI:10.3969/j.issn.1003-3246.2011.01.020 | |
侯建民, 黄志斌, 代光辉, 等. 国家台网地震速报综合信息发布系统研究[J]. 中国地震, 2009, 25(4): 445-454. DOI:10.3969/j.issn.1001-4683.2009.04.012 | |
黄文海. Java多线程编程实战指南[M]. 北京: 电子工业出版社, 2017: 31-33. | |
黄显良, 戚浩, 程鑫, 等. 智能地震台站试验性研究[J]. 国际地震动态, 2013(10): 11-15. DOI:10.3969/j.issn.0235-4975.2013.10.005 | |
任进军, 林海霞. MySQL数据库管理与开发[M]. 北京: 人民邮电出版社, 2017: 59-59. |