震情报告自动产出软件的设计与实现
2023-12-23甄宇同顾宝刚王丽杰
甄宇同,叶 浩,杜 微,顾宝刚,王丽杰
(海城市地震台,辽宁 海城 114200)
0 引言
1975 年海城7.3 级地震发生后,海城老震区微震、小震不断,中强地震频发,由于民众防震减灾意识不断提高,这也对海城市地震工作提出了更高的要求。海城市地震台承担着向海城市市委、市政府、市地震局等上级主管单位报送震后应急和地震会商材料等任务。
为了能够及时准确地上报震情信息,根据实际工作专门研发了一套震情报告自动产出软件,实现快速产出震情文字材料,避免出现由于人工因素存在的问题,提高工作效率,为地震应急决策提供依据[1-4]。
1 软件设计
1.1 开发思路
震情报告自动产出软件基于Visual Basic和Python 两种编程语言开发,整体架构使用多进程、多线程的工作模式,各项功能采用流程化的结构设计。使用Visual Basic语言开发了地震速报信息与地震目录获取、地震目录处理和Word 文档编辑等功能,使用Python 语言开发了向企业微信推送文件的功能。
软件模块充分考虑功能独立、代码复用的原则,每个模块独立封装自身参数、方法,并单独编译[5]。软件开发过程中使用了大量控件、类库和API 函数,增强可操作性,无需安装其他辅助软件即可实现相关功能[6]。同时使用了看门狗技术,避免意外崩溃而影响软件的正常运行。绝大多数参数(如台站经纬度、震中距、起始震级、地震目录范围等)用户可根据实际需求自行设定,软件的可扩展性得到大幅提高。
1.2 流程设计
震情报告自动产出软件自动产出的震情报告包括两个文档,一是向海城市市委市政府、应急管理服务中心报送的《震情汇报》,主要是根据每月、每周的地震会商汇总上月或上周海城老震区、省内及邻区、国内、国外的地震目录、宏观异常和分析意见等内容;二是震后向鞍山市地震局报送的《震情特刊》,包括地震简讯、宏微观异常及综合分析意见等内容。因两个文档的触发机制、数据源和文件内容等均不相同,故采取了两种不同的设计流程。
《震情汇报》的产出采取定时触发机制,即用户可以设置每月(月报)、每周(周报)的特定时间产出报告。数据源为中国地震台网中心的地震目录数据库,首先由软件定时自动下载不同震级下限的地震目录文件,然后对下载后的地震目录按设置参数(发震起止日期、起始震级、震中名称、经纬度范围、震中距等)自动筛选和格式处理,导入缺省或在日常工作中记录的宏观异常等内容,最后对标题、地震目录列表等文字信息进行自动格式化排版,产出Word文档。
图1 软件工作流程图Fig.1 Software working flow chart
《震情特刊》的产出采取地震触发机制,即接收到地震速报信息后根据设定的参数达到报告产出的条件则产出《震情特刊》。数据源为辽宁台网发布的地震速报短信,首先由地震速报短信接收设备负责接收辽宁台网推送的地震速报短信(这里不再详述),本软件对短信内容进行格式化处理提取地震三要素等信息,然后根据设置参数判断是否符合产出报告条件,若符合条件则调用《震情特刊》Word 文档编辑模块产出报告。
报告产出后存储在本地指定目录,最后将报告手动或自动推送给指定人员即完成了整个流程。报告推送的方式有两种,一是调用企业微信推送可执行程序发送给指定企业微信用户;二是通过电子邮件方式推送指定收件人,如图1所示。
2 软件功能实现
震情报告自动产出软件按照设计流程和预设模板自动产出和推送报告,为实现自动数据获取、数据处理、文档编辑和自动发送功能,使用了多个Timer 控件。软件同时还具备手动产出功能,可在需要时立即手动产出报告。这里以《震情汇报》为例主要介绍创建模板和报告自动推送的相关技术和方法。
2.1 创建模板
在Visual Basic 调用Word 之前,需要先引入Microsoft Word 16.0 Object Library 对象库[7-8]才能便捷地以Word 为对象编程,然后建立Application 对象和Document 对象。报告内容部分包括红头标识和期数、海城老震区地震活动、省内及邻区(ML≥2.0)、国内(MS≥5.0)、国外(MS≥7.0)、宏观异常、分析意见和报送单位等部分。正文部分涉及震中距计算、震中所在乡镇名称获取的有关技术和算法不再详述。软件可预设缺省的宏观异常和分析意见,也可进行手动编辑。
2.2 核心流程实现
以《震情汇报》的定期自动产出为例,其核心流程包括地震目录下载、按条件筛选地震、导入缺省或在日常工作中记录的宏观异常记录文本和报告推送(2.3节)等。
地震目录数据的下载基于FTP 协议,其步骤为启动与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后给予响应,并执行正确的命令。
地震目录筛选步骤为:首先读取发震日期、震中位置字符串,如筛选2022 年8 月份海城市发生的地震,则逐行读取地震目录文件截取发震日期字符串并将其转变为数值类型,条件为:20220801≤Date≤20220831,同时查找震中位置字符串中是否包含“鞍山市海城市”字符,若符合这两个条件则保存至Haicheng202208.EQT文件,再读取该文件进行震级区间次数统计并根据冒泡算法筛选出最大地震。
宏观异常记录部分由软件提供录入窗口,缺省为无宏观异常描述文本,当有宏观异常时用户可对文本内容进行修改,软件将自动保存为TXT 文件,产出报告时读取该文件内容并添加到预设位置。
2.3 报告自动推送
2.3.1 企业微信方式
企业微信推送方式可以让工作人员通过手机随时随地接收到软件产出的报告,便于查阅和校核。这部分使用Python 语言开发,将代码编译成可执行文件,待报告产出后由震情报告自动产出软件调用将报告文件推送到企业微信“自建应用”—地震速报[海城市地震台](图2),自建应用可见范围的人员均可看到报告文件。有关企业微信企业ID、部门ID、AgentId和Secret等敏感信息写入加密后的Access数据库。
图2 企业微信自建应用收到的报告文件Fig.2 Report files received by enterprise Wechat self-built applications
2.3.2 电子邮件方式
电子邮件推送方式主要用于自动向上级主管单位和领导发送产出的报告,可同时发送给多个收件人。通过调用系统自带的CDO 接口完成电子邮件的自动推送,对外发送邮箱需要开启POP3/SMTP模式。代码如下:
3 实际应用
震情报告自动产出软件自2022 年3 月投入使用以来,不管是在固定时间还是震后均能保证触发产出快速、运行稳定,实现了信息自动化。如:《震情汇报》月报(图3a)设置的开始产出时间为每月1 日8 时30 分,一般用时35秒左右即自动完成了地震目录下载、筛选、报告编辑和推送等一整套流程,这在以往人工操作时一般需要2~3 个小时才能完成;再如:2022 年4 月3 日10 时42 分在辽宁省鞍山市海城市发生M2.2 级地震,10 时47 分短信接收设备接收到速报短信,13 秒后即产出本次地震的《震情特刊》(图3b)并完成自动推送,这在以往人工操作时一般需要20~30分钟才能完成。
图3 软件自动生成的《震情汇报》和《震情特刊》Fig.3 Earthquake Report and Earthquake Special Issue automatically generated by software
4 结语
震情报告自动产出软件触发设定后,程序自动完成数据获取、处理及报告产出和推送。软件架构合理,运行稳定,报告的产出和推送及时、准确,极大地缩短了震后应急和地震会商资料的准备时间,减少了大量的重复性劳动[9],满足了海城市地震台地震应急和地震会商工作的时效性需求。今后,将紧密结合实际工作的进一步完善、扩展和升级软件功能,以便发挥该软件的更大作用。