APP下载

基于GO语言的配网自动化短信系统设计与实现

2023-06-07李伟青叶汇镓

计算机应用与软件 2023年5期
关键词:主程序数据表脚本

李伟青 石 扬 叶汇镓

(广东电网有限责任公司梅州供电局 广东 梅州 514021)

0 引 言

配网自动化设备点多面广,告警信号量巨大[1],调度员漏监视告警信号情况时有发生,导致供电所运维人员无法及时掌握设备异常情况,继而耽误抢修复电时间。因此,配电自动化主站系统的短信功能应运而生。目前,电网企业使用的配网自动化系统基本带有短信功能,但受系统底层架构设计限制,仅支持固定数量的供电所,如配网自动化系统OPEN3200仅支持32个供电所,D5200仅支持64个供电所。对于配调集约化的地级市供电公司[2],管理的供电所数量往往会超过64个,此时,配网自动化系统自带的短信功能就难以满足实际需求。为解决上述问题,本文设计开发了一套独立于主站系统、可支持任意供电所数量的跨平台短信系统。

1 系统硬件设计

本系统主要包括数据库服务器、Linux工作站和GMS短信模块等三部分。数据库服务器和Linux工作站是配网自动化主站系统发布区(安全III区)设备,数据库采用国产达梦数据库(DM7),该数据库以结构化方式存储了配电设备跳闸和异常告警信息。工作站安装了达梦数据库客户端,借助配网自动化主站系统局域网,即可远程访问数据库服务器获取告警信息。短信系统部署在Linux工作站上,定期读取数据库相关数据表中的告警记录,将告警信息处理成短信内容后以串口或USB接口输出至GSM短信模块,再通过运营商公网发送至目标接收人手机。系统硬件整体如图1所示。

图1 系统硬件连接图

2 软件架构设计

系统软件设计采用“主程序+接口”架构,可实现主程序与接口之间有效解耦。将主要功能需求划分为Web控制管理接口、告警信息采集接口、GSM短信模块接口,主程序只需负责调用各功能接口,将各接口的数据流有序衔接处理,就可实现接口之间各司其职、运行高效、扩展灵活的目标。系统软件架构如图2所示。

图2 系统软件架构图

考虑到数据库类型和数据表结构因不同应用场景存在差异,将告警信息采集接口做成插件模式,采集信息的具体逻辑由通用的shell脚本实现,主程序通过调用数据采集插件即可获得指定时间段数据表中的所有告警信息。在获取到告警信息后,主程序按照预定的规则进行匹配,保留真正需要发送短信的告警信息,从Web载入的excel表格信息找出告警信息接收人,并将告警内容和接收人手机号码存入缓存队列。再通过调用GSM短信模块不断从缓存队列中消费数据,按特定协议封装成GSM模块识别的编码信息发出。为提升短信的发送效率,将GSM模块设计成短信发送集群管理模块,每个模块随机从缓存队列中取出告警内容,自动实现短信发送负载均衡。人机交互方面,本系统将告警信息预定的匹配规则和告警短信接收人信息与短信平台程序解耦,管理员可通过Web控制台上传json文件和excel文件,对短信平台的数据采集及线路管理人员信息配置进行管理。此外,短信平台对每个关键环节开启了日志模式,详细记录了告警信息内容、短信发送时间、接收人等信息,并可通过Web控制台对上述流水日志进行查询,便于功能调试和责任追溯。

3 核心功能软件实现

3.1 编程开发语言选择

传统的基于C/C++为编程语言,使用面向对象的QT类GUI系统为基础研发的客户端软件系统,在升级换代操作系统时,也面临着重新适配开发的工作,软件的使用和开发成本都比较高。如果将传统的客户端程序做成B/S(Brower/Server)架构,将软件功能展示的逻辑交由操作系统发行版默认的浏览器来呈现,核心的功能由服务端来提供,整个软件系统的开发将不会局限于某个特定的GUI库[3-4]。这种开放模式的优点也是显而易见的,一方面可充分利用Web丰富的生态环境实现前端展现功能,另一方面,可从QTC++的跨平台GUI开发框架解放出来,选择一个对开发和维护更加友好的后台开发语言来实现核心功能。因此本文选择了当前广泛应用后台程序开发的Golang语言。Golang语言是Google站在C/C++历史的经验基础上发明的专供服务端开发的语言,相比于C++的复杂,Golang是大道至简[5-6]。

3.2 数据查询接口

为实现主程序与数据采集解耦,数据查询的逻辑由shell脚本实现,以文本流形式反馈给主程序。主程序中QueryForAlert()函数是查询告警的总线程,可根据配置文件中查询表信息,产生相应线程queryOneTableGenAlert()进行单张表查询操作,两个函数是逐级细化解耦多表查询操作过程。用户可通过配置cft.json中的tables结构体信息,实现查询数据库多张不同表的目的,具有非常灵活的扩展特性。tables配置信息中包括轮询数据库间隔时间、数据库查询脚本路径、对告警内容匹配的“白名单”关键字和过滤的“黑名单”关键字等。

shell脚本是实现数据库告警记录查询的载体,其主要功能包括实现远程登录、查询指定数据表告警信息两方面。脚本设计上充分考虑了扩展性,将通用的登录和文本处理封装成“exec_query.sh”,而查询具体数据表的操作封装成一个模板,如查询事故跳闸告警信息的模板accident.sql.template,再将这两部分整合成一个具有表名特征的接口查询脚本,如事故信息表查询脚本query_accident.sh。

3.3 缓存队列数据存储

由于脚本查询数据库的速率比GSM发送短信的速率快几个数量级,两者之间须要引入一种“降速器”才能解决速率失配的问题——短信缓存队列。查询程序调用系统底层命令执行函数exec.Command()运行shell脚本,将查询结果以文本流形式管道标准输出cmd.StdoutPipe(),并存入csv文件流读(接收)对象csvreader中。程序逐行读出csvreader内容,按图3所示流程进行处理,将告警查询结果转变成包含告警内容主体、接收人号码、线路名称等信息的alert结构体,并不断存入缓存队列,为下一步的短信封装(熟数据)与发送提供原材料。

3.4 缓存队列数据消费

考虑到Msg(告警内容)和Receivers(接收人)之间存在一对多的映射关系,每条告警内容需根据接收人数量生成的多条短信逐一发送m.SendSMS()。程序中以不带break的for死循环,不断从ch队列中读取并封装发送。

常见的GSM模块仅支持发送中文短信字符数不超过70个[7-8],因此在发送前对短信内容长度进行判断,将超出70个字符的内容分割成多条(SplitMsg),并在每条短信内容前标记次序,以便接收人分辨子短信的先后顺序(如分割成两条短信时,标记为1/2、2/2)。SendSMS()循环调用sendOneSMS()发送一个小于70个字符的短信,循环次数即为长短信切割成小短信的数量。

3.5 GMS模块发送短信过程

短信系统硬件上采用串口通信,软件上通过AT指令交互。为避免modem发送的中文内容是乱码,系统对短信内容采用PDU协议的UCS2编码。在短信发送过程中,向一个接收人发送一条不超过70字符短信封装成发送短信的最小操作单元sendOneSMS(),其核心操作包括短信编码封装和编码发送两部分。具体发送流程如图4所示。

图4 短信发送过程流程

AT命令是用于控制TE(Terminal Equipment)和MT(Mobile Terminal)之间交互的协议,协议本身采用文本,每个命令均以AT打头[9-10]。系统采用西门子TC35i系列芯片,涉及的AT指令主要包括以下五个:

AT+CSCA?

//查询短信服务中心号码

AT+CMGF=0

//设置短信格式为PDU模式

AT+CMGS=length

//发送短信文本长度

AT+IPR=115 200

//设置波特率为115 200

AT&W

//保存修改后的配置

4 系统测试与应用

为验证设计开发软件的有效性,将短信系统部署在工作站中,并加入Linux操作系统自启动列表。短信系统启动初始化成功后发送一条提示短信,第一次运行需在accident_last_time文件设置数据库查询起始时间,否则按默认时间2020-01-01 00:00:00。GSM模块采用9针串口线接入工作站COM1,使用Linux系统命令dmesg| grep ttyS查看GSM模块是否正确挂载在/dev/tt yS0文件中。在测试过程中,为了避免短信误发至目标接收人,先对config.xls配置文件中的接收人手机号临时修改成测试人员手机号。测试结果如下:图5为短信系统Web控制管理界面,图6为配网自动化主站告警信息,图7为测试人员接收短信。

图5 Web控制管理界面

图6 配网自动化主站告警信息

图7 测试人员接收短信

为提高短信发布功能的可靠性,短信系统设置了“看门狗”功能,每天下午5:10(可修改)定时向系统管理员发送一条“sms station is running”提示短信,以表示短信平台运行正常;管理员如未收到短信,则说明短信系统自身故障,需现场检查处理。

5 结 语

自主开发的短信系统成功部署应用,使得配网自动化主站系统具备向任意个供电所按配电线路运维归属精准发送告警短信的能力。高效精确的短信服务解决了运维单位获取设备异常信息手段不足的痛点,为运维单位快速隔离故障和恢复送电赢得宝贵时间,有助于提升公司供电可靠性水平。鉴于短信系统具有良好的扩展性,下一步将丰富短信功能,扩充数据查询脚本对配网主站系统自身告警信息的采集,以提升主站系统安全运行水平。

猜你喜欢

主程序数据表脚本
酒驾
安奇奇与小cool 龙(第二回)
湖北省新冠肺炎疫情数据表
浅谈数控铣削技术代码程序的嵌套方式研究
电控冰箱软件模块化设计
基于列控工程数据表建立线路拓扑关系的研究
数据库系统shell脚本应用
快乐假期
时光倒流 换回PotPlayer老图标
图表