白 宁
(中国人民解放军63819部队,四川 宜宾 644000)
航天测控站(简称测站)供电系统是完成航天测控任务的动力来源,也是各类通信网络系统的“心脏”。良好的工作状态、稳定的电力输出以及简洁高效的系统状态,是保证航天测控任务顺利实现的重要基础。目前,测站供电系统设备分布广泛,种类多,各设备厂商的通信协议不统一。为了智能集中式监控供电系统,需要对分散的各类供电设备增加相应的传感器监测节点,实现自动实时采集数据。当某类供电设备发生故障时,系统自动报警,值班人员在远端控制中心可以查看实时告警信息,从而快速定位故障节点,减少人力,提高排除故障的效率[1]。在此,采用分布式B/S模式的软件平台,设计了通用化高和可配置性强的两级架构统一格式的通信协议,详细分析测站供电监控系统的功能、体系结构、组网方案以及监控对象等,并利用Python开发语言下的Flask网络编程框架,对测站供电监控系统进行设计与实现。
供电监控系统由以串口服务器为采集处理中心的监控处理模块、以Flask框架下开发的监控中心服务器和数据库服务器3部分组成,结构如图1所示。
图1 供电监控系统组成结构图
实时数据的采集主要由串口服务器完成,通过监控模块接收来自各个传感器的数据。数据传输系统采用RS485串口、RS232串口以及RJ45网口作为数据采集接口。串口数据线传输主要用在设备通信接口和加装传感器接口,采用网络传输向上级监控中心传输数据。数据库服务器是指监控中心通过接收来自监控模块的数据,按照不同设备种类分别保存,在获得调用指令后,将多种数据按约定通信协议组合后返回客户端。当设备故障告警时,可以日志形式查阅告警信息。Web客户端发送请求命令查询各类设备的状态信息,接收来自监控中心的数据,并将这些数据以相应的图形化形式显示。Web客户端还可以通过给监控中心发送指令,以控制监控终端的运行。
供电监控系统的Web服务器通过HTTP协议满足多点访问请求,同时需要适应并行多点访问的兼容性,则监控软件需采用多线程的架构来实现访问控制。部分通过加装测量传感器的老旧供电设备,使用数据接口为串口RS232或RS485类型。数据处理模块需要采用线程同步锁或设备轮询等技术避免同时多个数据获取请求产生的队列拥堵[2]。
图2 供电监控系统服务器程序流程图
供电监控系统的前端服务器采用统一Web页面显示模板。使用Flask框架自带的Jinja2模板库,生成1个包含基本样式的HTML和CSS作为整个服务器的基础模板,其他的页面通过JavaScript语法进行动态数据方面的增添和修改,这样服务器面向客户端的页面设计开发将更加高效。供电监控系统服务器的程序流程如图2所示。服务器后台采用定时查询的方式获取各类串口传感器的数据。当定时器触发数据库接口函数时,建立与数据库的连接。首先初始化接口,包括串口和网口的传感器。其次,建立一个接收数据线程,此时服务器后台保持接收等待状态。服务器程序发出获取数据请求,接口执行查询各个传感器读数据操作。最后,查询当前各个设备的状态信息,若有故障告警则产生日记记录。在完成数据请求的存储显示等操作后,一轮的查询数据任务结束。
监控系统主函数通过Flask模块实例化产生一个APP实例,该实例是整个供电监控系统的程序入口函数。不同用户的数据请求通过该APP实例完成,各类查询显示信息的程序使用Python的装饰器产生相对应的视图函数。只有主函数退出,才会中断数据查询的轮询状态。为确保主函数退出前数据保存的完整性,需要正确关闭外部连接数据库,保存由设备异常告警数据产生的告警日志内容,并清理整个供电监控系统运行过程中产生的临时文件。
数据库模块由多个供电设备采集的数据核心模块组成,是系统实现存储、处理以及查询功能的基础[3-4]。监控系统中存储的数据包含3大类,分别为监测供电设备的基本属性信息、监测供电设备的实时运行指标参数以及记录供电设备的故障告警日志。供电监控系统中UPS的数据库E-R设计如图3所示。
图3 数据库E-R关系图
图3展示了UPS设备实体的主要属性。UPS的IP地址是供电设备的唯一标识,同时设备运行状态和故障告警信息也通过该属性的唯一性进行查询。在日志记录查询功能中,使用列表主要显示多种类型数据,如低压配电、蓄电池以及油机等,通常包含的状态参数种类多,采用列表显示更直观。虚拟仪表以图形化显示状态数据,该控件从JS文件中获取统一传感器数据包,再经过各自函数查询处理后在不同的分页面中显示。
2.3.1 初始化模块的实现
初始化模块完成Flask实例的初始化配置及前端页面模板Bootstrap和数据库的创建。前端页面模板和数据库的创建利用已经创建好的APP实例进行实例化。创建Flask实例只需一条简单语句就能实现:
2.3.2 数据模型模块的实现
数据模型模块是直接与数据库连接和读取数据等操作模块,同时数据模型模块建立的逻辑结构也同数据库设计时各类设备视图构成映射关系。与数据库的交互初始化连接均放在配置文件Config.py中,而对数据库中的每个表进行查询、组装等操作则在APP文件夹下的database.py:
系统设计使用的数据库为SQLite,该数据库结构简单,适合存储大数据。
2.3.3 设备状态查询模块
设备状态查询模块是对数据库进行当前最新条目的查询及更新,通过Database.py文件建立与数据库SQLite的连接,搜索各个设备表后,根据当前的系统时间,更新当前表中的最新数据,做到实时显示最新的设备状态参数。
2.4.1 前端模板
在测站供电监控系统中,采用Bootstrap框架美化页面布局和界面元素,如图4所示。主页面为突出系统运维人员通常查看的各类设备重要状态参数,将各设备的主要参数集成到一个虚拟仪表页面进行显示。将设备故障的告警信息设置为红色,这样用户很容易就能发现设备的告警信息。主页面总体设计风格简单醒目,尤其在考虑后续供电设备的扩展性上,将各类虚拟仪表设置为可根据当前设备数量灵活添加,增加了用户的使用友好性。
图4 供电监控系统主页面
2.4.2 交互细节
当页面上展示出某类供电设备的详细信息时,只有用户点击该设备的详细信息按钮,其相应的操作才会链接到新页面。当用户权限角色为普通用户时,查看信息按钮变为灰色不可触发状态,则不能查看设备详细信息页面,其他页面显示信息也会根据用户角色做出相应的权限展示区分,如图5所示。
图5 蓄电池详细页面
结合网络编程、嵌入式单片机开发以及传感器技术,设计了基于Python和Flask框架的测站供电监控系统。完成基本的软件设计和硬件安装后,设计开发了测站供电监控系统的基本功能,增强了供电监控系统的数据并行处理能力和网络传输能力,实现了对测站供电设备的状态信息监测、远程Web浏览以及故障动态智能告警分析。