基于PySide2天气雷达运行监控软件的设计与实现
2024-03-13谢宸浩黎德波罗赐麟徐黄飞鲁峻麟
谢宸浩,黎德波,罗赐麟,徐黄飞,鲁峻麟
(1.广州市突发事件预警信息发布中心,广东广州 511430;2.广东省气象数据中心,广东广州 510640)
广州CINRAD/SA新一代天气雷达(以下简称“广州雷达”)于1999年筹建,2001年开始正式运行。广州雷达在2016年完成双偏振升级,2018年完成技术升级及技术状态统一后,在一定程度上实现了雷达系统的优化配置,提高了雷达技术性能,进一步提升广州雷达设备整体质量。同时,广州雷达在完成一系列的升级改造后,数据格式以及业务上传方式也发生了明显的改变。而目前广州雷达站在用的监控软件已无法应对当前雷达发展的新情况,陈旧且简单的底层架构造成软件容错性差,技术升级困难,长时间不更新造成软件对目前主流的windows系统版本兼容差,已无法满足网络安全要求。全国多个台站在这方面也做了尝试,郭春辉等[1]通过读取RDA计算机的RadarMonitor文件夹下的.dat二进制文件,获取雷达设备运行时的各种参数,并将异常参数及结果通知值班人员,但是雷达虚警比较多,虚警在雷达下一次体扫标定后会自动消除,因此监控.dat文件容易造成误报过多;吴少峰等[2]是利用监控log文件完成对雷达报警信息的监控,但log文件不同台站文件的个数、类型及格式不尽相同,且RDA计算机系统升级也将改变log文件的格式,不利于长期使用和推广,而且同一个log文件每天产生一个,文件信息量大,占用资源较大,客户端在台站运行时偶尔会由于信息量过大而发生瘫痪现象。
随着双偏振天气雷达进行业务上传的数据量越来越大,业务考核越来越严格,双偏振天气雷达资料的及时传输变得越来越重要,按照2018年12月中国气象局综合观测司审定的新一代天气雷达观测规定,必须按有关规定向国家、省级信息业务部门传送新一代天气雷达探测资料[3]。为提高双偏振天气雷达系统的可用性,特别是保障重大天气过程中雷达的正常运行,是雷达机务保障人员的重要职责,因此开发新的广州新一代双偏振天气雷达运行监控软件(以下简称“监控软件”)并应用于业务具有非常重要的意义。
1 软件设计
1.1 软件架构
监控软件的开发平台采用了Python3.10+Pyside2+VSCode,软件整体进行模块化独立设计,各功能模块集成于主程序模块中,子模块可独立操作,从而降低了程序的复杂度,使程序的设计操作简单化。监控软件的整体架构由展示层、控制层、业务层以及数据层组成,如图1所示。展示层的界面开发采用PySide2,并通过CSS样式表进行修饰。PySide2提供了对Qt5.12+Designer完整框架的访问,因此使用PySide2既能开发出完美的界面,又能享受Python的便捷开发。同时PySide2是开源的,使用不受限制,与传统Qt的C++相比,使用PySide2能大大减少代码量,更便于软件的维护升级。控制层通过Python3.10与界面库构建操作控件响应用户需求,并与业务层进行实时交互。数据层负责对软件的监控信息、监控参数、报警配置以及用户信息等关键参数进行存储。业务层则依据控制层的指令来调用数据层的关键参数,进行雷达运行状态数据的采集、缓存、处理、比对。监控软件的运行环境可同时兼容Windows 10以及Windows 7操作系统。
图1 软件架构设计示意图
1.2 功能模块
雷达系统主要由3部分组成,分别是雷达产品生成子系统(radar products generator,RPG)、主用户终端子系统(principal user processor,PUP)和雷达数据采集子系统(radar date acquisition,RDA)[4]。雷达约6 min完成1次体扫,RDA将标准格式雷达基数据向省级和RPG软件的逐径向分发,RPG软件解析基数据并将解析后的数据分发到PUP,PUP将RPG处理后的数据进行二次处理,生成雷达产品并上传至省局[5]。广州雷达在2016年完成双偏振升级后需同时上传单双偏振两种雷达产品共计57种。同时,广州雷达在2018年完成技术升级及技术状态统一后,新增了雷达标准输出控制器,雷达的状态文件通过标准输出控制器上传至省局。为了更好地保障广州双偏振雷达正常运行并完成广州双偏振雷达资料的业务上传,监控软件主要实现以下功能:雷达资料生成和传输的监控、雷达状态文件传输的监控、雷达报警信息的本地化存储和多种报警方式,软件的功能结构如图2所示。
图2 软件功能结构示意图
1)监控模块。
(1)雷达基数据生成监控。
雷达约6 min生成一个基数据文件,为了保证雷达数据的完整性,雷达基数据在上传省局的同时也会进行本地化存储[6],通过定时检查本地FTP雷达共享的基数据目录中最新时次的雷达基数据文件的写入时间,与计算机系统时间进行比对,两者时间差值若是大于软件设置的基数据生成报警门限,则可判断为雷达基数据生成异常,并向值班人员发出告警。
(2)雷达产品生成监控。
PUP生成雷达产品上传至省局后,默认会在本地保存7 d的雷达产品文件[7]。与基于FTP的雷达基数据生成监控模块的设计思路一致,定时检查FTP雷达产品共享目录中最新时次的雷达产品文件的写入时间,与计算机系统时间进行比对,两者时间差值若是大于软件设置的产品生成报警门限,则可判断为雷达产品生成异常,并向值班人员发出告警。由于每种雷达产品生成的时间间隔不一样,如VWP每6 min生成一个产品文件,PPI每1 min生成一个产品文件,因此雷达产品生成报警门限需要根据所监控的雷达产品种类进行设置。
(3)雷达状态传输监控。
雷达标准输出控制器的运行情况会按照月份生成log文件,存储在根目录下的WRSOC文件夹中,当标准输出控制器成功上传雷达状态信息至省局后,会记录在log文件中,内容包括上传时间、状态文件名和省局服务器地址,只需定时读取标准输出控制器中yyyymm.log文件中关于雷达状态文件上传的信息的最新修改时间,与计算机系统时间进行比对,两者时间差值若是大于软件设置的报警门限,则可判断为雷达状态文件传输异常,并向值班人员发出告警。
(4)雷达产品传输监控。
广州雷达目前按照省局要求在PUP业务机上传57种雷达产品至省局服务器,当雷达存在网络延迟太大或暂时中断等问题时,PUP上传不成功的雷达产品会存储至根目录下的archive文件夹中[8-10]。定时检查FTP雷达产品缓存共享目录中是否有新的雷达产品文件产生,当雷达产品缓存目录存在文件时,读取该目录中最旧时次的雷达产品文件的写入时间,与计算机系统时间进行比对,两者时间差值就是该未成功上传的产品文件的存留时间,若是存留时间大于软件设置的产品传输报警门限,则可判断为雷达产品文件传输异常,并向值班人员发出告警。
2)报警模块。
雷达报警模块实现了声音、微信、短信3种报警方式,可确保值班人员及时掌握雷达故障。
(1)多媒体声音报警模块:通过调用系统音频格式文件,让音响输出设备播报雷达报警信息。
(2)短信报警模块:利用各手机运营商自带邮箱能开启手机短信推送邮件提醒的特点,在开启邮箱的SMTP服务后,即可通过python中的smtplib进行请求邮件服务,实现软件自动给值班人员发送报警短信。
(3)微信报警模块:微信是最为常用的手机APP之一,通过微信报警可以提高监控软件的实用性。在微信APP中开启“QQ邮箱提醒”功能,同时将微信与QQ邮箱关联,通过向值班人员的QQ邮箱发送报警邮件来实现值班人员的微信提醒。
3)报警日志模块。
该系统报警记录全部实现本地化保存,用于雷达发生故障后快速查询和统计。该模块有3个功能,分别是写入、查询以及清除。当系统监控到雷达故障发生报警时,系统会将发生报警的时间及类型本地存储在Alarm.log文件中,值班人员可以在软件中的监控信息界面右键进行快速查询。
4)其他模块。
软件还集成了参数管理模块、软件状态监控模块以及软件注册模块,其中参数管理模块主要用于统一管理雷达资料路径、监控频率、报警门限、报警方式、值班人员信息等参数。软件对参数类型做了分类,存储时只存储编号,显示时再转换成对应的字符显示。软件状态监控模块主要用于对软件的运行状态如开始、暂停、报警等进行监控,并实时显示在软件监控信息界面中的状态图标中,帮助值班人员快速掌握软件的运行状态。同时,软件会根据当下的运行状态判断用户的操作是否符合规范,并进行相对应的弹窗提醒。
2 关键技术
2.1 更高效的监控方式
为了解决监控.dat文件以及log文件造成的误报过多、信息量过大导致软件崩溃等问题,软件通过监控雷达资料生成及传输的目标目录来判断雷达的运行状态。同时,由于雷达部分资料如雷达产品ppi生成速度快,资料目录的文件数量多,采用listdir()方法读取此类雷达资料目录时,会返回包含目录中所有文件的列表,类型为list。这种方法耗时较长,设置的监控门限较小的情况下容易造成误报。为了解决这个问题,软件使用scandir()方法代替listdir(),读取雷达资料目录时返回的是包含文件类型或文件属性信息的os.DirEntry迭代器,通过循环读取迭代器就能快速定位到最新生成的雷达资料。关键代码如下:
2.2 优化程序的多线程监控
线程也叫轻量级进程,是操作系统能够进行运算调度的最小单位,也是进程中的实际运作单位。进程在执行过程之中拥有独立的内存单元,而多个线程共享内存,从而极大的提升了程序的运行效率。本监控软件把4个雷达资料监控模块、报警测试模块以及主程序分别放在独立线程中运行,每个线程在程序中是独立的、并发的执行流,通过多线程监控能避免当其中一类雷达资料监控耗时过长时,整个主程序都会等待这个操作,主程序就不能及时响应用户的其他操作。同时,为了解决并发访问的冲突问题,软件将主程序线程设置为守护线程,并通过创建线程列表来监控子线程的运行状态,子线程冲突时用递归锁RLock进行阻塞,子线程完成监控任务后会自动结束进程,释放内存,保证主程序的运行效率。关键代码如下:
2.3 单例模式的设计模式
单例模式是一种软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在。当希望在整个软件不会存在多个相同的实例对象,从而避免严重浪费内存资源时,单例对象就能派上用场。软件把需要反复调用的线程开启、销毁函数以及监控状态信号触发的回调函数放在命名为SCHEDULER的单例模式中,这样可以节约内存和计算,SCHEDULER单例模式作为计数器还可以保证多个线程的协调性。此外,还方便软件的管理,对于后续的升级也有很大的便捷性。关键代码如下:
3 软件实现
广州新一代双偏振天气雷达运行监控软件的界面功能明了、操作便捷,在软件界面的设计上使用了stackedWidget,在软件界面上将软件的4个功能模块全部列出,其中监控信息功能模块主要用于显示监控的信息流以及报警信息,并提供了监控开始、暂停、报警方式测试的软件基础操作;参数设置、报警配置、软件注册功能模块则用于修改系统的配置文件,如设置ftp监控路径、监控频率、报警时间门限等系统参数。
3.1 监控信息分界面
为了让值班人员能实时掌握雷达资料最新的生成以及传输情况,软件会在监控信息功能模块中滚动显示当前的监控情况。为了保证雷达异常清晰显目,异常状态及异常结果显示为红色字体;同时,监控信息框左下方图标用于指示当前雷达的运行状态,以便于值班人员能做到快速定位异常内容(黄色图标代表软件等待开始监控,绿色图标代表软件正在运行且雷达状态正常,红色表示软件正在运行且雷达异常),如图3所示。
图3 软件监控信息界面
3.2 参数设置分界面
该功能模块主要用于设置软件监控的系统参数,其中包括ftp监控路径、监控频率、报警时间门限、值班人员的选择等。同时,为了保证软件的通用性,考虑到部分台站未完成技术升级及技术状态统一,以及部分台站所使用的监控电脑性能较差,软件仅默认开启雷达基数据和产品生成监控,雷达状态信息传输和产品传输监控则可根据台站需求选择是否需要开启,如图4所示。
图4 参数设置界面
3.3 报警配置分界面
软件多媒体声音报警为默认选项,值班人员可根据需求在参数设置界面选择是否开启短信报警功能。同时,可在报警配置分界面进行配置用于发送报警信息的邮箱,以及对站内值班人员的信息进行删增减改。如需通过微信接收雷达报警信息,可将站内值班人员的邮箱地址设置为QQ邮箱,并在微信APP中开启“QQ邮箱提醒”功能。
4 软件应用效果
业务上,及时准确地了解雷达的运行状态和模式,及时采取措施处理系统运行故障,减少停机时间,更好地发挥天气雷达在灾害性天气中的作用,是雷达值班机务人员的重要职责。广州新一代双偏振天气雷达运行监控软件实现了对技术升级后的双偏振天气雷达运行状态、资料传输情况和网络连接状态的自动监控,软件兼容目前主流的windows操作系统版本。广州雷达站对该软件进行了3个月的试运行,期间利用雷达的周和月维护停机时间进行多次测试,证明软件对于雷达停机响应及时。自正式投入业务运行以来,软件运行稳定,软件发生告警12次,告警均为基数据生成异常,后经值班人员排查,是由于广州雷达RPG被植入挖矿病毒后造成RPG计算机性能大幅度下降,从而导致雷达基数据本地保存延时严重。软件故障提醒及时准确,成功协助值班人员及时发现并解决了该次故障,极大地缩短值班人员的故障响应时间。