地震前兆观测是通过监测地震发生前可能出现的各种自然现象,以预判地震发生的过程。地震前兆现象包括地形地貌变化、地下水变化、动物行为异常、电磁场波动等。系统的观测和数据分析,可以提高地震预报的准确性,减少地震带来的风险。我国历史上有不少关于地震前兆的记载,如《汉书·五行志》中提到的“鱼跃于渊,地将震之”的说法。这些早期观测主要依赖直观的经验观察。20世纪初,随着现代科学技术的引入,我国逐渐开展了系统的地震观测。1950年,我国建立了全国性的地震观测网,初步形成较为系统的地震观测体系。1966年邢台地震后,我国加强了地震预报和前兆观测的研究。这一时期建立了许多前兆观测台站,主要包括地下水、电磁场、地形变等手段。随着观测手段的多样化以及不同观测仪器的广泛使用,加之各项操作及运维情况各不相同,保障前兆数据的正常连续产出成为地震预报工作的基本要求。
为实现地震前兆数据动态曲线的实时监控,笔者采用Python设计开发了实时监控系统,基于“十五”通讯协议,实现与前兆仪器的数据交互,并利用matplotlib模块,实现数据曲线的绘制与分析等功能。
1 系统总体设计目前,行业内使用的前兆系统由中国地震局中国数字地震观测网络项目研发部署,其开发环境为Suse Linux 10操作系统,数据库使用Oracle 10g分布式数据库进行开发设计。此外,该系统采用C#语言,编制了以C/S应用模式基于Oracle数据库的地震前兆综合管理系统,系统包括树形视图区、参数设置区以及功能细化区,可集中显示数据、图形、字典和日志等,并集中监控前兆台网运行状态,各项功能可进行快速切换,方便查询和管理(王建国等,2013)。目前因为前兆仪器数据存储为本地存储,通过数据管理系统定时采集到服务器内,这个期间就存在时间延误,如果数据出现问题,工作人员并不能及时发现并处理。例如,宁波地震监测中心站日间进行2次数据采集,上午及下午各一次,但在日常观测中,若故障发生在下午采集后与次日采集前的时间区间内,数据故障时间最长可达16小时。为了满足中心站日常工作的运维需求,笔者基于Python设计并开发了一套前兆数据实时监控系统。该系统依托《地震前兆观测网络通信协议》所规定的数据交换标准,对地震前兆数据进行持续性数据采集,在Python环境中基于requests库建立与观测设备的数据传输连接,遵循协议既定的标准化指令,搜集装置所记录的即时数据,并据此生成实时波动图像。通过对数据分析的要求以及对日常工作的分类和整理,确定系统的总体结构、功能模块以及需要开发的各个部分,如图 1所示。基于当前需求和专业流程,根据功能模块进行开发,对代码中的类、函数、过程等的命名、含义、参数等进行规范化注释,以提高代码的可读性以及系统后期升级维护的便利性(章东,2022)。系统功能按各模块分别实现,其主要模块功能包括访问仪器数采、读取对应数据、绘制图形等。此系统需要使用地震行业内部地址,以保证客户端能够正常访问服务器数据库。
![]() |
图 1 软件总体设计流程 Fig.1 Overall software design flowchart |
系统采用Python语言进行编制,数据交互及仪器控制基于“十五”通讯协议命令执行,根据不同工作需求,使用不同命令处理不同请求,并执行相应操作,主要功能包括连接主机数采、数据下载、重启、调零、绘图以及告警推送等。表 1为常用操作的命令格式。
![]() |
表 1 “十五”通讯协议命令表 Table 1 Communication protocol command table of the "10th five-year plan" |
通过前端UI进行系统参数设置。用户只需输入对应的仪器IP地址并成功登录系统,即可进行各类控制操作。常用功能通过“十五”通讯协议命令来执行,确保通信的准确性和稳定性。系统采用模块化设计,涵盖实时波形绘制、历史波形绘制、数据监控以及告警通知等多个功能模块,确保系统的可维护性和扩展性。
实时波形绘制模块是系统中的一个关键功能,旨在提供高效、稳定的实时数据监控工具,确保运维人员能够在第一时间掌握观测数据,做出及时响应。该模块通过以下步骤实现实时数据的获取和展示:①建立TCP连接:使用socket库与指定的IP和端口建立TCP连接,确保数据传输的稳定性和及时性;②发送命令:向仪器发送获取实时数据的命令,确保可以实时获得当前的观测值;③数据记录与处理:记录返回的实时观测值,并使用matplotlib.pyplot模块生成实时数据折线图,其中X轴设置为时间轴(长度为10 min),Y轴为实时观测值;④实时显示:实时数据显示在UI界面的子窗口内,用户可以随时查看数据的变化情况,及时掌握仪器的运行状态。
图 2展示了实时波形绘制的UI界面及实际效果,以下为核心代码示例:
![]() |
图 2 程序UI界面 Fig.2 Program UI |
HOST = ‘10.33.96.3’ # 目标仪器IP地址
PORT = 81 # 目标端口号,根据实际情况填写
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT)) #建立TCP连接
login_command = “get /42+ X421BGKJ0008+lin+administrator+01234567 /http/1.1\r\n”
s.sendall(login_command.encode())#发送登录命令,本段为“十五”通讯协议固定格式命令,X421BGKJ0008为连接仪器的序列号,下文同。
s.recv(1024) # 读取登录响应(只是确认连接成功)
get_value_command = “get /21+X421BGKJ0008+dat+0 /http/1.1\r\n”
s.sendall(get_value_command.encode())#发送获取观测值命令,本段为“十五”通讯协议固定格式命令。
data = s.recv(1024).decode()# 读取返回的观测值
if data.startswith(‘$57’): try: parts = data.split()x_val = float(parts[8])y_val = float(parts[9]) #解析返回的数据,本段代码为解析VP型垂直摆返回格式,不同仪器型号返回值格式不同,应作相应调整
x_data.append(x_val) y_data.append(y_val)if len(x_data) > 100: x_data.pop(0)y_data.pop(0)line.set_data(x_data, y_data)except (IndexError, ValueError) as e: print(f”Error parsing data: {e}”)return line, ani = animation.FuncAnimation(fig, update, init_func=init, blit=True, interval=1000)plt.show()#更新绘图数据,设置动画。
数据下载模块通过“十五”通讯协议的获取数据命令执行数据下载操作。该模块具备以下功能:①选择仪器的数据类型:用户可选择下载仪器的分钟值或小时值;②日期范围选择:用户可手动选择所需日期范围;③批量下载:系统支持批量下载观测数据文件,简化了数据备份过程中逐日下载的繁琐操作,如图 3所示。
![]() |
图 3 选择历史数据文件图 Fig.3 Snapshot of selecting historical data file |
通过这些功能将提升数据下载和备份效率。以下为数据下载模块的核心代码:
HOST = ‘仪器IP地址’ # 仪器IP
PORT = 81 # 服务使用端口81
command = “GET /23+ID 01+dat+1+1 HTTP/1.1\r\nHost: 仪器IP地址"#“十五”协议固定格式
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: # 连接到服务器
s.connect((HOST, PORT))# 发送命令
s.sendall(command.encode()) # 接收返回值
data = s.recv(1024)# 确保data目录存在
os.makedirs(‘data’, exist_ok=True)
with open(‘data/response.txt’, ‘w’) as f:
f.write(data.decode())
print(“返回值已保存到data/response.txt") # 保存返回值到文件
历史波形绘制模块旨在提供对观测数据的便捷可视化操作。通过该模块用户可以实现以下功能:①打开历史数据文件夹:操作执行后,系统将打开当前历史数据的文件夹,便于用户选择所需数据文件(图 3);②选择数据类型:用户可以选择下载的分钟值或小时值数据。该模块包含多选功能,支持单选一天或多选多天的数据曲线,方便用户对不同时段数据进行对比分析;③图形界面操作:用户通过图形界面可以对观测数据进行放大、缩小和截图等操作,这些功能使用户能够更灵活地查看和分析数据;④颜色区分:不同的时间段数据曲线会以不同的颜色显示,便于区分和比较。
该模块显著提升了数据分析的效率和用户体验,提供了直观、方便的历史波形展示工具。图 4展示了不同时间段数据曲线的颜色区分效果。
![]() |
图 4 历史数据绘制曲线图 Fig.4 Plotting historical data curves |
告警通知模块通过实时读取和分析数据,进行逻辑判断(图 5),确保地震前兆观测的及时性和准确性。本模块设定以下2种告警触发条件:
![]() |
图 5 告警通知逻辑导 Fig.5 Logic diagram of alert notification |
(1)数据中断告警:当监测数据中断持续180 s时,系统将触发告警通知,以便运维人员及时检查设备和网络连接状况,防止数据丢失。
(2)数据超限告警:在实际使用中,对形变观测数据的区间进行主动监控。例如,对于VP垂直摆的观测数据,设置的正常区间为±2 400 mV。当数据超过此范围时,系统将触发告警通知,提示可能存在的异常情况。
为实现告警信息的及时推送,系统集成腾讯公司的企业微信平台。通过使用Python的requests库,向企业微信API发送HTTP请求,将告警信息推送至指定的企业微信群组。告警模块通过配置企业微信群组机器人的参数,实现告警信息的自动转发。当告警条件触发时,企业微信群组机器人立即将告警信息转发到企业微信群组,确保运维人员在第一时间收到通知并进行处理(图 6)。
![]() |
图 6 Logic diagram of alert notification Fig.6 Screenshot of alert bot message push |
以下是告警通知模块的核心代码:
import requests
api_key = ‘your_api_key’ #企业微信消息机器人API
url = ‘https://api.enterprise.wechat.com/push’ #企业微信URL地址
payload = { ‘message’: ‘Hello, this is a test message!’, ‘receiver’: ‘user_id’ } # 构建请求数据
response = requests.post(url, headers={‘Authorization’: api_key}, json=payload) # 发送请求
if response.status_code == 200: print(‘Message sent successfully!’)
else: print(‘Failed to send message: ’, response.status_code) # 处理响应
3 系统应用目前,该系统已经应用于宁波地震监测中心站(图 7),通过在日常工作中使用,有效提高了前兆数据的连续性和有效率,减少了值班人员的工作量,并为数据在监测预报上的应用提供了科学保障,为防震减灾和社会应用提供更好地支撑。在系统试运行期间,软件运行稳定,故障率较低(月均故障≤2次),无明显卡顿或无响应现象。前端波形展示页面刷新及时,后台数据采集程序运行正常,阈值告警任务执行准确。运维团队通过该平台有效实施了对区域内预警设备的自动监测,多次成功捕捉到数据波动的非正常信号,并迅速作出反应处理,缩短了从故障发生到处理的响应时间,数据异常由次日处理提升至即时解决。
![]() |
图 7 宁波站目前部署在值班室电脑的运行图 Fig.7 Picture of the current deployment and operation on the duty room computer |
本文详细介绍了一种基于Python的前兆数据实时监控系统。Python作为一种强大的编程语言,其丰富的库和模块使得数据处理与分析更加便捷。特别是requests模块和matplotlib.pyplot模块的发送HTTP请求及创建图形功能,使得工作效率大幅提升。
该系统通过实时波形监控和设定阈值告警,运维人员可以实时掌握前兆仪器的运行状态,及时发现并处理数据异常,从而大幅提升运维效率。系统基于《前兆仪器网络化通讯规程》进行数据传输与控制,实现了实时数据采集和分析。当数据变化超出预设阈值时,系统将自动发送告警信息,确保数据的准确性和完整性。
该系统适用于前兆监测设备的实时数据监控,目前支持VP型垂直摆、DZW型重力仪、SS-Y型伸缩仪、DSQ型水管仪等前兆仪器的实时波形显示及告警。该系统部署后,将有助于运维人员及时了解当前监测数据变化,缩短故障发现和排查时间(连凯旋等,2020)。基于Python的前兆数据实时监控系统不仅提高了工作效率,提升了数据质量,还具有广阔的应用场景。无论是在地震监测预报工作,还是在其他需要实时监控和数据分析领域,均能发挥其重要作用。
近年来,随着地震监测专业设备的不断更新和迭代,设备监控和维护的工作量显著增加。运维人员在设备监控方面承受着相当繁重和复杂的工作负担。在这种背景下,智能化和一体化的运维解决方案将成为未来发展的重要趋势之一。利用先进的软件系统对观测数据进行实时监控,可在异常发生的第一时间推送告警通知。这不仅能够显著减轻运维人员的工作量,提高工作效率,还能大幅提升台站运维的时效性和准确性。软件系统的智能化和自动化功能,能够确保地震监测设备的稳定运行,使运维人员能够专注于更高层次的分析和决策工作,进一步优化地震监测和预警系统的整体性能。
连凯旋, 温丽媛, 颜丙囤, 等. 基于python的地下流体实时数据监控与告警系统研发[R]. 中国地球科学联合学术年会, 2020: 1 406-1 407.
|
王建国, 刘春国, 王伟, 等. 地震前兆数据库综合管理系统[J]. 大地测量与地球动力学, 2013, 33(Z1): 114-116. |
章东. 基于C#的地震前兆数据监测系统的实现[J]. 信息系统工程, 2022(9): 39-42. |