APP下载

电器试验设备远程监控系统设计与实现

2019-03-05,

计算机测量与控制 2019年2期
关键词:试验设备工位远程

,

(西安工程大学 机电工程学院,西安 710600)

0 引言

传统的电器试验设备监控系统只基于设备端,只能在试验现场的设备端获取试验相关信息和对设备进行管理,这样信息的分散导致信息获取效率和管理效率低下,因此需要开发集中式监控系统对电器试验设备进行信息集成和集中管理[1]。目前,集中式数据采集与监视系统已广泛应用于电力系统、给水系统、石油、化工等领域[2]。然而在低压电器试验场所应用的还比较少,且存在兼容性差、难扩展、未实现网络化、监控对象受地点限制、客户端受平台限制、客户端维护升级困难等问题[3-5]。

本文针对上述问题,开发了一种基于web的电器试验设备远程监控系统,实现了电器试验设备的信息集成和集中管理,系统能够实时显示设备状态和试验数据、对设备进行远程启停控制。系统不受时间、地点、平台的限制,用户可随时随地通过有网络的计算机或移动终端掌握现场的试验状况。针对B/S模式实时性差的问题,采用多种方法有效提高了系统的实时性。在设计中充分考虑了系统的通用性和可扩展性,能够兼容常规的电器试验设备,对于设计过程中未考虑到的特殊试验设备,只需扩充数据库模型,即可兼容。经测试,系统运行良好,能够满足试验人员和管理人员实时监控设备运转情况和对试验设备进行集中管理的需求。

1 系统结构和系统功能

1.1 系统结构

系统采用B/S和C/S相结合的模式,试验场地局域网内采用C/S模式,这符合局域网内传输数据量大、专用性强的特点;在Internet上采用B/S模式,无需考虑客户端的兼容,便于对软件进行维护升级。系统总体结构如图1所示,系统由设备端、服务器端和客户端三部分组成。

图1 系统结构

设备端是系统的数据来源,电器试验设备中包含工控机、主控板卡、试验电路等部分。主控板卡用于数据采集、试验过程控制。工控机上运行的监控软件通过与主控板卡进行串口通信,完成对设备运行状况的监视、对试验过程的控制和对试验结果数据的采集,试验参数和试品信息也在设备端录入,设备端监控软件将获取到的数据转为固定格式的字符串后通过Socket通信发送给服务器端的数据交互程序,此外还能接收和执行服务器端数据交互程序发送的远程控制命令和试验参数。

服务器端包括数据交互程序、Redis缓存、MySQL数据库、Web应用程序。数据交互程序利用异步I/O模块asyncio编写,通过Socket与多台试验设备通信,是Socket服务器端,用于接收设备端发送的数据,将其中的设备状态数据、试验结果数据解析为Key-Value格式的数据后存入Redis缓存。如果设备状态数据中包含故障和报警信息,还需将其存入MySQL数据库,为了减轻数据库压力,对于正常的状态信息不提供历史状态查询,不存入数据库。设备端录入的试验参数、试品信息也存入MySQL数据库,同时试验结果数据需定时保存到MySQL数据库中,防止内存被占满。此外,数据交互程序与Web应用程序之间利用Redis的订阅发布功能进行通信,用于接收Web应用程序发送的请求数据、控制命令、控制参数,向Web应用程序推送实时数据。Redis订阅发布模式本质上是共享内存,这种进程间通信方式避免了对进程中数据的拷贝和传递,既节约了内存空间又速度快[6]。Redis缓存用于存储频繁更新的实时数据,MySQL数据库用于存储不经常变动的数据和历史数据。Web应用程序负责接收客户端发来的HTTP请求和返回HTTP响应,并与Redis和MySQL进行交互,从Redis缓存中获取实时数据,从MySQL数据库中获取不经常变动的“冷数据”。

客户端即计算机或者移动终端中的浏览器,客户端负责与用户进行交互,向Web服务器发送HTTP请求,接收Web服务器返回的响应并将其中的HTML文档解析后显示在浏览器上,将信息展现给用户。若请求的页面中包含实时数据,还需与Web应用程序维持一条WebSocket连接,用于实时数据的推送。

1.2 系统功能

系统具有用户管理、设备管理、试验管理、设备监控、报表管理、日志管理等功能,在此仅对设备监控功能做详细介绍。系统需实现传统工业控制系统中的上位监控功能,能够实时显示设备运行状态和现场数据,其中设备运行状态包括设备启停状态、报警信息、故障信息、安全联锁情况、各工位状态信息、控制模式等。现场数据包括各试验场地和实验室信息、各设备基本信息、各工位基本信息、试验参数、工位上的试品信息、试验结果数据等,其中试验结果数据采用动态曲线图的形式显示。此外,系统还能够在满足安全联锁条件的情况下对设备进行远程启停控制,远程控制和设备端控制互锁,以防冲突。在进行远程控制前需将设备控制模式切换为远程控制模式,然后输入控制参数,即可远程启动试验。

2 系统设计

系统采用基于Python语言的Django框架进行开发,使用的IDE为PyCharm,编程语言版本为python3.6.3,Web框架版本为Django2.0。使用MySQL和Redis数据库管理数据,前端采用Bootstrap框架,图表的绘制采用Echarts,这些开发环境均为开源免费软件。下面对系统设计中的部分关键问题分别进行详细分析。

2.1 数据库设计

在本系统中,数据库是一个非常核心的部分,设备采集和录入的数据需要进行存储,用户、试验项目、试验场地、试验室等相关信息都要通过后台管理录入数据库,数据存储架构的合理与否直接影响系统的功能和性能[7]。系统采用关系型数据库MySQL和Redis缓存相结合方式对数据进行管理,MySQL用于存储不经常变更的“冷数据”,Redis用于存储读写操作比较频繁的“热数据”,以满足对数据进行高并发读写的需求。这种数据管理方式既能提高系统响应速度,又能保证数据的安全。

2.1.1 MySQL数据库

根据试验设备的实际情况和本系统的功能需求,在充分考虑系统通用性的前提下,将数据库分为基础数据库、试验数据库、知识库和系统库4个部分。其整体结构如图2所示。

图2 数据库结构

基础数据库主要用于对试验场地、试验室、设备、工位、试验主电路基本信息进行描述。以设备信息表为例,其基本信息包括所在地、所在实验室、设备编号、生产厂家、设备类型等。由于不同类型的设备,其工位信息模型一般也不同,因此需要对不同类型的设备分别建立相应的工位信息表。

试验数据库用于对试验相关信息进行描述,包括试验项目信息、试品信息、试验参数、试验结果、控制命令、故障记录、报警记录。试验项目表与试品信息表通过外键相关联,在进行试验前需新建试验项目。试验参数表和试验结果表应按照不同的试验类型分别建立。故障记录表中只记录故障设备、故障代码和故障时间,根据故障代码查询知识库获取相应的故障信息,以节省数据库空间。

知识库用于对系统知识进行存储,其中设备库用于记录系统中已经进行建模的各设备类型相关的知识,包括相应的工位信息表表名、可选试验类型等信息。在设备信息表中将设备类型作为外键与设备库相关联,当添加新设备时,只需勾选相应的设备类型,即可获得其相关信息,无需重复输入。比如在设备库中存储工位信息表表名,这样在为设备添加工位时,可根据不同的设备类型,自动关联相应的工位信息表,动态生成不同的form表单。元件库用于记录试验主电路中各开关元件的信息,在试验主电路信息表中,将元件作为外键,在建立试验主电路模型时,只需勾选相应元件即可。试验库用于记录在系统中已进行建模的各类型试验相关的知识,包括其对应的试验参数表表名、试验结果表表名、可选设备类型等信息。考虑到有的综合型试验设备可进行多种类型的试验,这意味着同一种试验也可以在多种类型的设备上进行,因此通过在试验库中将可选设备类型设为“多对多”字段,将其与设备库相关联。在试品信息表中,将试验类型作为外键与试验库相关联,在添加试品时,通过勾选试验库中的试验类型添加其试验类型。

系统库用于存储系统相关的信息,包括用户信息表、用户权限表和系统日志。

2.1.2 Redis缓存

根据实时数据的类型,在Redis中分别设计了不同的存储结构,如表1所示。采用Hash类型存储设备状态和工位状态信息,Value部分为一个HashMap对象,该HashMap对象的Key为设备ID、工位编号、状态名等拼接成的字符串”,Value为字符串类型的状态数据。而试验结果数据由于添加频繁且需要使用容器盛放,如果采用Hash类型存储,每添加一个新数据都需要取出容器对象、反序列化、添加新数据、序列化、更新,开销较大。因此采用List类型存储试验结果数据,每一个工位的一个被测物理量对应一个键值对,Key为“设备ID-工位编号-变量名”,Value部分为List对象,新的数据直接插入即可。为了防止内存被占满,需定时将旧的试验结果数据存储到MySQL数据库,并从Redis中删除。

2.2 远程控制与安全联锁

系统具有远程启停控制功能,通过点击启动按钮并输入控制参数即可远程启动设备。首先用户需要进入想要控制的设备的监控页面,点击按钮将其控制模式切换为远程控制模式,然后在联锁条件满足的条件下点击启动或停止

表1 Redis存储结构

按钮,Web应用程序会生成一条固定格式的控制命令字符串。如果是启动命令,页面会跳转到该工位中的试品对应的试验参数输入界面,用户输入试验参数后点击提交,生成一条固定格式的试验参数字符串,生成的命令和参数经数据交互程序发送给相应设备,设备端监控程序将控制命令和控制参数解析后传给其控制子程序执行,从而实现远程控制。

试验应在满足安全条件的情况下进行,因此远程控制功能也需进行安全联锁。一方面,设备端控制与远程控制需进行互锁,设备的控制模式为设备端控制时,监控界面不显示启停控制按钮;另一方面,需要对试验条件进行前后端验证。在前端验证中,若不满足试验条件,则将启动按钮设为禁用状态;后端验证中若不满足试验条件,则点击启动按钮后重定向到当前页面,并显示警告信息。

2.3 动态数据的实时更新

本文采用Websocket技术和Redis发布订阅模式实现动态数据的实时显示,WebSocket是HTML5提出的一项浏览器和服务器之间的通信协议,其本质上是TCP连接,浏览器其和服务器可以利用该协议实现双向通信,使B/S模式具备了C/S模式的实时通信能力。该方法与传统的Ajax轮询技术相比,避免了不必要的请求,传输的数据量少,因此其资源消耗少、实时性强[8]。

动态数据实时更新的具体流程为:客户进入包含动态数据的页面时,客户端通过javascript代码与服务器建立WebSocket连接,并向服务器发送设备ID、工位编号等请求数据,服务器端的Web应用程序接收请求数据后通过Redis发布订阅将其发送给数据交互程序,并等待交互程序的数据,交互程序接收到请求数据后,对后续接收的设备端数据进行判断,如果与请求数据相关,则在将其保存到Redis缓存的同时,通过Redis发布订阅发送给Web应用程序,Web应用程序接收到数据后通过Websocket发送给客户端浏览器,浏览器接收到数据后,对监控页面中的数据进行局部刷新,实现动态数据的实时更新。这种更新方式实现了由设备端主动向客户端推送数据,设备状态未发生变化或没有新的试验数据产生就不会有数据传输,最大程度上节省了系统资源和带宽。

2.4 数据可视化

电器试验设备监控系统通常需要利用波形图的形式对试验结果数据进行可视化显示,通过对目前常用的几款前端可视化插件进行对比,本文选用ECharts实现数据的可视化,ECharts是一款基于HTML5的图形库,图形创建简单、支持的图形丰富[9]。其具体实现步骤如下:

1)引入JS文件:

2)准备一个放置图表的容器:

3)利用Ajax请求或WebSocket从后台获取数据:

对于静态试验结果数据,只需在页面加载完成后,进行一次Ajax请求获取试验数据;对于动态试验结果数据,需与Web应用程序建立WebSocket连接,获取服务器端推送的新数据。静态数据与动态数据的判断标准为试验是否已完成。

4)初始化图表,设置参数,生成图表:

var realtime_data_chart = echarts.init(document.getElementById("realtime_data")) //初始化图表

option = {----}; //设置option属性,将上一步获取的后台数据设置在option中

realtime_data_chart.setOption(option,true) //生成图表

设置option属性和生成图表需放在上一步返回数据之后的回调函数中,以实现动态刷新效果。

3 系统测试

基于以上系统设计,对系统的设备监控功能模块进行了测试。测试阶段采用个人笔记本电脑上的Django框架自带的轻量级Web服务器,其性能能够满足测试环境的需求。所监控的对象是一台脱扣器吸合释放电压测试设备,其设备端监控系统界面和各工位如图3和图4所示。

图3 设备端监控系统 图4 设备端工位

监控主界面如图5所示,按所在地和试验室对设备进行检索后,页面显示相应的设备列表,列表中包含设备类型、启停状态,控制模式、联锁条件等信息。点击运行状况进入设备主界面,如图6所示。在实时波形列点击查看,即可查看设备实时采集到的试验数据,如图7所示,其横坐标由预设的试验次数决定,每进行一次试验,试验曲线中动态增加一组数据。点击试品列中的试品编号可查看试品的相关信息,包括基本信息、试验参数和试验结果,如图8所示。点击切换为远程控制,最右侧会新增一列,用于对设备的远程启停控制。点击开启后在跳转的新页面中输入并提交控制参数,设备即按照设定的参数运行,同时开启按钮变为停止按钮。

测试结果表明,系统监控模块的各项功能运行状况良好,可实时地对试验设备进行监控。系统动态数据更新过程无页面刷新和卡顿,更新响应时间小于0.5 s,表明本文所设计的远程监控系统框架能够在满足基本监控功能的同时,保证了较高的实时性,基本满足设计目标。

图5 设备监控主页面

图6 设备运行状况页面

图7 实时试验数据

图8 试品信息

4 总结

4.1 总结

为了解决低压电器试验设备监控系统对信息集成和网络化集中管理的实际需求,设计了低压电器试验设备远程监控系统。该系统能够实时显示试验现场数据,准确反映现场设备的运行状态,能够对设备进行远程启停控制,具有良好的人机交互界面。在满足以上基本功能的基础上,该系统还具有以下优势:

1)通用性和可扩展性好:本系统从设计之初就考虑到其通用、可扩展的需求,对于不同类型的设备和试验,分别建立了相应的数据库模型。因此系统对于开发阶段考虑在内的不同类型、不同地点的设备均适用,在开发阶段未考虑到的特殊设备,可以通过扩展数据库的方式使其兼容,因此系统具有较高的可扩展性。

2)易维护和管理:管理员可通过Django自带的后台管理模块对系统进行管理,无需开发额外的后台管理软件,这也是Django的优势之一[10],新设备的添加可以通过后台管理轻松完成。系统的升级维护也只需在服务器端进行,对用户的正常使用没有影响,减少了系统维护人员的工作量。

3)易用性:该系统实现了网络化且不受平台限制,用户可以通过计算机或移动终端中的浏览器随时随地访问系统,无需安装专用的客户端软件,并利用Redis缓存、WebSocket技术和Redis共享内存通信等方法减轻了因此带来的实时性变差的问题。

4)低成本:系统所采用的开发环境均为免费软件,能够大幅度降低系统的开发费用。此外,由于维护方便,系统在以后使用中的维护费用也比较低。

4.2 展望

本系统的成功测试给电器试验设备通用远程监控系统的建设提供了一个良好的开端。远程监控所涉及的内容广泛,由于时间和能力有限,很难对其中的每个细节做深入的研究,因此系统还存在诸多不足。在以后的工作中,需要在以下几个方面进行完善和充实。

数据库模型需要进一步完善和扩充。电器试验设备种类繁多,不同类型的试验设备,其工位信息模型不同,不同类型的试验,其试验参数和试验结果模型一般也不相同;同一类型的试验设备由于生产厂家设计理念或应用场景的不同,也会存在差异。这可能导致试验设备与数据库模型不匹配的情况出现,因此需要在今后的运用过程中对数据库模型不断进行扩充,以提高系统通用性。

建立和完善基于ActiveX控件的元件库。目前该监控系统尚未在元件库中添加ActiveX控件,因此无法在网页中动态显示试验主电路的状态和试验过程。在以后的工作中需要建立和扩充基于ActiveX控件的元件库,在监控页面中嵌入ActiveX控件来显示主电路的单线模拟线路图,以实现其试验过程的可视化。这也是一项长期的工作,需要在以后的实际应用中逐步扩充元件库。

添加手动控制功能。电器试验设备上位监控系统的控制功能通常都包含手动控制,因此在远程监控系统中也不应缺失此功能。开发远程手动控制功能之前,应先保证元件库中有相应的元件,并且能够动态模拟试验主电路的状态。

猜你喜欢

试验设备工位远程
广东莱伯通试验设备有限公司
远程求助
基于TIA系统快速换批生产方法的应用
广东莱伯通试验设备有限公司
远程工作狂综合征
广东莱伯通试验设备有限公司
基于R-D SSD模型航空发动机安装工位检测算法
广东莱伯通试验设备有限公司
工位大调整
远程诈骗