作者简介:倪乙鹏(1996-),男,助理工程师,主要研究方向为地震大地测量学。E-mail:1824440138@qq.com
Hubei Earthquake Agency , Wuhan 430010, China
Python;Geophysical observation instrument;Real-time monitoring;Software development
DOI: 10.13512/j.hndz.2024.04.06
备注
作者简介:倪乙鹏(1996-),男,助理工程师,主要研究方向为地震大地测量学。E-mail:1824440138@qq.com
引言
随着“十一五”地球物理观测系统的运行,稳定的观测系统和高质量的记录数据是实现地球物理仪器功能的首要条件和基本要求,为此台站工作人员每天需要备份数据、查看仪器网络状态以及曲线状态,以求能在第一时间发现故障并及时处理,保证仪器正常运行。随着台站地球物理仪器设备的增加,每天检查仪器所花费的时间也在增加,而且故障未能及时发现的风险也在提高,设计一套对地球物理仪器自动监视和管理的软件,让工作人员从重复单调的工作中解放出来,提高工作的效率正符合中心站的需求。
地震观测向自动化、网络化、智能化发展是近年来的一个趋势,很多学者基于不同的方法提出了仪器设备与网络的监控。部分地震台网编写软件,实现了对服务器与网络化仪器的监控与管理。众多仪器厂商研发了相应的管理软件,对相关仪器具有较完善的控制功能,但一般不具备自动监视功能。王秀英等设计实现了仪器动态监控与动态报警,主要是改变仪器客户端的软件部分设置,观测仪器主动将监控信息发送到指定客户端[1];姜佳宁等使用VB开发了地震仪器自动监控软件,该软件适用于仪器设备的实时与定时监控、时钟与观测数据的监控,出现突发状况能及时通知运维人员[2];袁顺等以新疆测震台网为基础,开发了地震计零位自动监控设备[3];陈彩虹等应用Visual Studio 2010开发工具,结合福建省地震前兆观测台网实际情况,研发了福建省地震前兆台网运行监控日报自动编辑系统[4];王建国等研发了地震台站自动监控与管理软件以实现自动填写日志与异常自动报警[5];李俊超等在地震台站内网部署监控服务器,定时获取仪器数据,发现网络、数据异常并报警通知[6];丁睿等基于MVC的ThinkPHP框架,集成Smarty模板,采用PHP+MySQL,PHP+Oralce双数据库链接原理,研制B/S架构的地震业务数据库管理软件[7]。
综上所述,众多学者已经尝试了推进地震相关工作与信息化的结合,但上述软件多针对某一台网(台站)、某类型仪器,实现某特定功能,或需要的硬件支撑等实现对仪器设备的监控,使用范围较小,推广有一定的局限性和难度。这些尝试缺少软件平台,各环节需要借助不同的工具完成,缺乏有效的衔接与集成,使得工作流程繁琐,效率不高。
本文基于Python编程语言设计与开发了地球物理观测仪器监视软件,实现地球物理主要仪器的统一监视与管理,提升基础监测运维工作的效率,促进中心站业务转型升级。
-
1 软件设计
1.1 软件设计和运行环境Python作为当下最受欢迎的编程语言,拥有着语言简洁、适用性广、集成性强、开源理念、类库丰富等诸多优点。软件采用Python语言编写,在windows系统下点击“Monitor.exe”即可运行,无需安装其他环境,同时兼容win7/win8/win10系统。注意的是,软件的报警需使用电脑的外放声音,因此电脑需安装声卡或外置音箱。
1.2 软件设计思路软件主要实现三个方面的功能,即地球物理数据监视、网络监视和地球物理曲线监视。在实际设计的过程中需要选择对不同的地球物理仪器的监视,增加了一个仪器信息录入功能。另外,将各个模块集成起来进行了界面设计。具体设计规划如图1,之后详细介绍各个功能的设计思路。
1.2.1 集成软件总体设计Python中进行界面设计的工具数不胜数,包括Tkinter、 wxWidgets、 PyQt、 PyGTK 等等,其中PyQt5是Python与Qt结合的产物,一般使用于较为复杂的程序开发,具有控件丰富、功能范围广、开发高效等特点[8]。本文选用PyQt5结合QtDesinger来实现软件功能。简单来说,QtDesiner可以用来设计美化界面,如设计窗口的大小、控件的位置、使用什么控件等等,然后使用PyQt-Integration插件将设计好的Ui格式文件转化为py格式的ui声明文件[9],借由PyQt5编写对应的代码实现各个模块想要的功能。
软件的界面主要分为两个部分,左侧的TreeWidget作为菜单栏共有7个选项,分别对应右侧StackedWidget的7个不同的界面,即软件实现的7种功能。当点击左侧的菜单栏即可切换到不同的页面,通过QThread多线程的方式让多个页面可以同时执行,从而快速高效的实现软件的功能。
1.2.2 地球物理仪器数据监视设计地球物理仪器种类繁多,功能不尽相同, python的爬虫功能可以快速搜集仪器的各项数据。网络爬虫是一种便捷高效的获取数据的方法[10-11],它能按照预设的规则自动的在网络上采集需要的信息。
每个地球物理仪器都有其对应的网页,本文使用Python的Requests功能向仪器网页站点发送请求并获取HTML内容,再使用Xpath或者BS4解析网页获取想要的内容,如实时数据、数据下载链接等等。不同的网页所采取的爬取策略会略有不同,有的需要添加Cookies,有的需要使用JSON,因此软件将仪器做了一个分类,相同网页类型的仪器分为一类,如DSQ、SSY和DZW归为类型1、WYY归为类型6等(见表1)。这样,软件通过读取仪器类型和仪器ip,可以自动定位到对应的函数完成数据监视。
图1 软件设计流程图Fig.1 Flow chart of software design
表1 地球物理仪器分类Table 1 Classification of geophysical instruments
1.2.3 网络通讯状态监视设计保证地震仪器的网络持续畅通是一切监测手段的基础[12],传统的固定时间人工探测网络的方法,严重浪费人力资源且容易疏漏。因此,自动监视网络状态,确认网络中断后及时发出报警,显得尤为重要。
Ping(Packet Internet Groper)是一种因特网包探索器,属于TCP/IP网络体系结构中的一个服务命令。 Ping向目的主机发送ICMP(Internet Control Message Protocol 、因特网报文控制协议)Echo请求报文,测试目的站是否可达及了解其有关状态。本文使用Python中的Ping命令测试需要监视的仪器网络是否畅通。
1.2.4 地球物理观测数据曲线监视设计地球物理仪器曲线是地震仪器数据的最直观的表现,不同的仪器在正常运行时有着特有的曲线形态,当曲线呈现直线、持续上升或下降,或者是大的突跳和毛刺都能直观的看出仪器运行状态异常,因此反映了仪器记录到的地球物理信息以及仪器的运行状态。
PyPlot 是 Matplotlib 的 子 库[13],提 供 了 和MATLAB类似的绘图API,是Python中绘制二维或三维图表的数据可视化工具。本文使用PyPlot获取数据文件和电压值,并将其绘制在画布上以实现曲线绘制与实时曲线展示。
-
2 软件功能
2.1 仪器录入与删除使用者可以通过录入地球物理仪器仪器类型编码(见1.2.2)、台站名、仪器简称以及仪器IP后点击“录入信息按钮”或“删除信息按钮”来实现或取消软件对仪器的监视,其中“台站名”和“仪器简称”可以根据自己台站站点的实际情况进行录入,不做严格要求。需要监视的仪器会直观的显示在表中,如图2监视了武汉中心站辖区内的仪器。因此,该软件可以推广到其他省局或中心站使用,更具有通用性。
2.2 地球物理仪器数据监视地球物理仪器数据监视。使用Python的爬虫功能实现自动或者手动获取各地球物理仪器的实时数据、数据文件,每套仪器建立一个文件夹,对应仪器的数据存储在文件夹目录下;下载的数据文件命名的格式按照对应仪器生成的数据文件名进行命名(仪器名包含年月日信息,这也是省台网要求存储的数据格式)。主要分为三个功能。
2.2.1 昨日数据备份备份预设的地球物理仪器的昨天或选择日期的数据文件。在右上角“日期框”中选择下载数据的日期,当使用者未选择日期时默认为选择昨天,点击“数据下载”按钮,下载信息会呈现在“文本框”中,当进度条达到100%时即下载完成。图3为数据下载界面和实际使用过程中数据存储的路径。
2.2.2 每日数据备份在每天固定的6个监视时间点备份当日的预设地球物理仪器的数据,防止仪器中断时缺数时间过长。由于当日生成的数据文件不足24 h,和完整的数据文件格式略有不同,因此将当日数据单独监视。点击“数据下载按钮”,软件会在3∶30、7∶30、11∶30、15∶30、19∶30、23∶30自动备份当日数据,下载信息会展示在“文本框”中。图4为当日数据下载界面和对应的存储路径。
2.3 地球物理仪器网络状态监视测试仪器网络状态。事先准备好仪器名称和IP,调整监视的间隔(默认为5 s),点击“选择文件并开始按钮”选择文件,软件便开始监视仪器连通状态,监视界面主要有7列(第一列用圆圈直观的反映当前ping结果,绿色为连通,红色则相反;第二列和第三列分别为仪器名称和仪器IP;第四列与第五列为ping通/断的总次数;第7列为返回信息),当某套的仪器断记次数超过10次时,可以及时蜂鸣报警以通知值班人员。图6为武汉中心站网络状态监视情况。
图2 仪器录入界面Fig.2 Instrument input interface
图3 昨日数据备份Fig.3 Yesterday's data backup
图4 今日数据备份Fig.4 Today's data backup
图5 实时数据监视Fig.5 Real-time data monitoring
图6 地球物理网络状态监视Fig.6 Status monitoring of geophysical network
-
3 总结
软件开发完成后,在武汉地震监测中心站投入使用。每日监视30套仪器的运行状态,能够做到备份前一天仪器数据、定时备份当日数据、获取实时数据、绘制仪器曲线、监视网络状态,当仪器故障时能够及时提醒值班人员。目前发现的故障有:仪器网络故障、主机死机无实时数据、仪器数据缺数、实时数据超限等等。
软件在中心站的实际运行中,取得了较好的成果,提高了工作效率,实现了对中心站地球物理仪器的统一管理,一方面辅助日常工作的进行,另一方面有效监视了仪器网络状况、数据状态。
本文基于Python设计与开发了地球物理观测仪器监视软件。软件实现了数据、网络、曲线三个方面的监视,安装方法方便快捷,可以在后续的工作中推广到其他中心站或省局使用。当然,软件会有一些不完善的地方,希望在后续的实际应用中,逐步修复软件中的错误,完善与增进软件功能,更好的促进防震减灾事业发展。
- [1]王秀英,周振安,刘爱春.地震前兆设备动态监控报警功能设计与实现[J].地震研究,2009,32(4):431-436.
- [2]姜佳宁,吴利军,徐磊,等.地震观测仪器自动监控软件设计与实现[J].地震地磁观测与研究,2019,40(4):167-175
- [3]袁顺,王宝柱,冯磊,等.地震计零位自动监控设备研制[J].内陆地震,2013,27(2):175-180.
- [4]陈彩虹,郭皓,陈懿德,等.地震前兆台网运行监控日报自动编辑系统[J].地震地磁观测与研究,2012,33(S2):342-346.
- [5]王建国,栗连弟,崔晓峰,等.数字化地震前兆台网日常工作管理软件[J].地震研究,2009,32(1):79-83.
- [6]李俊超,赵瑞,王秋良.地震台站综合观测仪器自动化监控报警系统的设计与实现[J].大地测量与地球动力学, 2019,39(1):107-110.
- [7]丁睿,王小明.地震业务数据库自动监控与管理系统设计实现[J].大地测量与地球动力学,2015,35(2):349-352.
- [8] Summerfield M. Rapid GUI programming with Python and Qt:the definitive guide to Pyqt programming[M]. Upper Sad⁃dle River,NJ:Prentice Hall,2008.
- [9]章毅恒,陈育罕,张雪秋.基于PyQt的目标检测数据集自动采集软件设计与实现[J].现代信息科技,2023,7(15):12-15.
- [10]何毅平,黄媛,湛茂溪,等.基于网络爬虫的招聘信息可视化系统设计与实现[J].长江工程职业技术学院学报, 2023,40(3):24-28.
- [11]古志敏,吴明珠.基于Python网络爬虫设计与实现[J].电脑编程技巧与维护,2023(9):163-166.
- [12]贺巍,李壵奇,汪伟明,等.地震仪器网络实时监控软件的开发与应用[J].通信电源技术,2016(3):105-106.
- [13] Lou X ,Van d L S ,Lloyd S. AIMBAT:A Python/Matplotlib tool for measuring teleseismic arrival times[J].Seismological Research Letters,2013,84(1):85-93.