张昭辉,周 文,蒋学俊,后 接
(1.中国科学院上海应用物理研究所,上海 201800;2.中国科学院大学,北京 100049)
核能凭借高能量密度、洁净低碳等优势成为新能源中的研究热点[1]。而在核工业系统的发展中,数字化监测系统可以实现对核反应堆多个关键参数的实时监测,并快速识别异常情况,实现风险预警和事故防范,保证系统安全运行[2]。通过数字技术和互联网技术实现全流程的数据采集、通信、分析和展示[3],实现对温度、压力、流量等多个参数的精确测量和控制,从而建立完善的风险预警系统,提高核电站的安全性和可靠性[4]。另外,数字化监测管理可以提升核工业的信息化水平,促进核工业的数字化转型和发展。因此,在核工业监控系统的发展中,数字化实时监测管理已经成为必不可少的一部分[5-8]。
国内外众多知名的科研机构将实时监测系统应用到核能领域。美国国家再生能源实验室NREL 开发的Pump and Compressor Performance Monitoring 系 统,简 称PumpCMP。它用于监测实验室里各种泵和压缩机的性能变化,来预防故障和优化设备运维,能监测多种参数,采用在线监测和离线诊断相结合,实时检查设备性能变化,定期深入分析故障模式。但是它的系统复杂,部署成本高,软硬件均需定制化开发,缺乏通用性和开源性,移植度不高。日本东芝公司(Toshiba Corporation)开发了一种名为“PumpVision”的实时监测系统,可以用于监测核电站中的泵设备参数,并及时发现任何异常情况。该系统实现了常见监测功能,实现所有过程点监测,具有较高的通用性,但是可拓展性不如web 开发形式的数字化监测系统,并且不能直接实现多终端访问。
由此可见,开发一个数字化监测系统,可以提高核电站等重大设施的安全性,提升设备的效率和可持续性,保证数据的准确性和可靠性。本文针对熔盐堆泵设备的实时数据数字化监测问题,在国内外现有研究基础上[9,10],设计并实现了一个基于EPICS 和Python 的实时数据数字化监测系统。该系统实现了数据采集,可视化展示,模型训练部署等功能。实验结果表明,该系统能够有效地监测设备的运行状态,有助于提高设备的可靠性和安全性。
为保障熔盐堆泵设备的正常运行,需要对泵设备的控制信号进行监控。系统需要与实验物理及工业控制系统(Experiment Physics and Industrial Control System,EPICS)集成,获取实时监测数据,如温度、压力、流量、电压、电流等数据,并将其存储到数据库中。
系统需要提供可视化展示界面,以图表等形式直观地展示实时监测数据。基于离线和在线的数据训练模型,提供数据分析功能,实现识别和分析实时数据,并实现实时警报和通知功能。当监测数据超出预设阈值时,可以通过邮件等方式发送警报和通知给相关人员。
系统也应具有良好的可扩展性,可以部署不同的监测模型,可以方便地添加新的监测设备和数据源,并支持不同的数据格式和协议。
数据采集模块采用EPICS 框架实现,包括EPICS IOC、Channel Access Server、数据采集程序和数据存储组件。EPICS IOC 负责与设备进行通信,并采集设备的监测数据;Channel Access Server 提供EPICS IOC 和客户端之间的通信服务,使客户端可以通过网络访问EPICS IOC 并获取监测数据;数据采集程序负责与Channel Access Server 进行通信,获取并处理设备的监测数据;数据存储组件负责将采集到的监测数据存储到数据库中,以便后续分析和诊断。
数据采集模块采用EPICS 框架实现,包括EPICS IOC、Channel Access Server、数据采集程序和数据存储组件。
本系统以MVC 模式的思想设计,以提高模块化程度和代码可维护性。MVC 架构包括模型(Model)、视图(View)和控制器(Controller)3 个部分。系统采用浏览器/服务器架构这类分布式系统架构,支持操作员通过不同终端访问,例如不同浏览器、手机端和平板等。以下是详细说明和系统架构设计图。
1)Model(模型层):负责处理监测数据的生成。采集到的监测数据由模型层进行处理和分析,生成处理结果;借助scikit-learn、Pandas 等库完成数据处理和模型训练。
图1 EPICS架构Fig.1 EPICS Architecture
图2 MVC架构Fig.2 MVC Architecture
2)View(视图层):负责渲染前端页面并展示处理结果。使用HTML、CSS 和JavaScript 等技术实现,通过echarts 框架以折线图和雷达图等形式展示实时监测数据的动态更新。
3)Controller(控制器层):负责处理前端页面的请求和响应,调用模型层进行数据处理和分析;采用Django 路由层将前端页面的请求映射到相应的视图函数上,前端页面使用Ajax 技术和WebSocket 协议与后端服务进行数据交互。
此系统实现了MVC 模式,同时使用浏览器/服务器架构进行设计,由前端负责界面,服务器端负责业务逻辑和模型运算。在技术路线上数据采集模块和服务端开发采用EPICS 和Django 框架实现,前端页面使用ECharts 和HTML、CSS、JavaScript 等技术,并运用numpy、lightgbm等进行数据处理和模型训练。
图3 技术方法Fig.3 Technical methods
数据可视化是将采集的数据进行整理,以图形及图表形式集中展示,使操作员能够直观、清晰地理解和分析数据的关系、趋势和规律,并结合数据分析等技术从而发现其中未知信息的过程。
数据采集使用Python 的pyepics 库实现,其中使用caget 函数从EPICS 中获取监测数据。caget 函数可以指定EPICS 中的PV 名称,获取该PV 的监测数据,并以Python对象的形式返回。后端服务器使用Python 的channels 库实现WebSocket 协议,与前端页面建立WebSocket 连接。
本系统需要实时监控某些数据,如泵设备的实时运行状况,并对数据进行可视化展示和进行分析和处理,因此采用了观察者模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有的观察者对象,使它们能够自动更新自己。实时监控设备数据,如流量、温度、压力等,这些数据作为观察者模式的主题Subject,而通过多种方式展示监控数据的展示方式作为观察者Observer。Subject 的数据变化需要调用notifyObservers()方法实时更新到各个Observer,采用观察者模式可以实现主题与观察者之间的实时数据同步。Subject 作为数据源,包含更新数据的方法和注册/移除观察者的方法。Observer 作为抽象观察者,定义更新方法。本系统中有多个展示方式,例如Echarts 图表、数字-文本等作为具体观察者,继承Observer,实现update()方法以更新数据可视化。其关系如图4 所示。
图4 观察者模式Fig.4 Observer mode
本文实现的实时监测可视化主要关注了以下类型图元:
1)数字-文本形式
服务端使用WebSocket.send()向前端传递数据时,采用不同的标志位进行数据区分。前端使用JavaScript 将监测数据绑定到对应的元素上,并实现DOM 操作,将数据动态更新到页面上。使用jQuery 的.html()方法获取输出区域当前的HTML 内容,采用字符串拼接的方式添加新内容,并使用jQuery 的.scrollTop()方法,将输出区域的滚动条滚动到其最大高度。
2)表格形式
在筛选离线数据时,前端将筛选条件通过POST 形式传递到服务端之后,Django 以使用其内置的ORM(对象关系映射)来查询数据库。用JavaScript 对数据进行解析,并分页。分页功能通过设置基于偏移量的分页(OFFSET)和基于游标的分页(CURSOR)来实现,提高浏览效率。
3)统计图
雷达图与折线图等都基于数据可视化库ECharts 实现。使用Echarts 提供的API 配置ECharts 基本参数,之后将运行中新的数据添加到原有数据中,并使用chart.setOption()方法更新雷达图的数据,同时使用JavaScript 的setInterval()方法来实现定时器,并实现图表的自动刷新。
本系统需要实时获取数据,并进行分析与存储。数据分为两类,一类是泵设备的实时运行原始数据,如温度、压力、流量、电压、电流等,另一类是模型的输出结果,如预测的故障类型信息等。数据库基于日期的分区保存,通过限制分区的数量上限,来放弃旧数据,释放物理空间。
在实时监测数据的写入方法上,为了解决数据丢失问题,本系统采用了Timeloop 定时任务框架。该轻量级的、跨平台的定时任务框架可以方便地实现任务的定时执行,真正实现数据定时读取。通过将单例模式应用到熔盐泵设备的数字化实时监测系统中,实现数据写入功能全局唯一,并提供一个全局的访问点,实现节约内存,统一管理,提高代码复用性等诸多优点,有效地提高系统的性能和稳定性。
本系统实现了数据的定时更新和持久化存储,确保数据的完整性和可靠性,方便后续数据分析和决策。
训练集筛选使用HTML 表单和JavaScript 来实现。通过JavaScript 将操作员输入的筛选条件发送到服务器端,以便筛选出符合条件的训练数据。服务端根据数据库表名来创建对应的动态模型类,之后依据筛选条件获取数据。
模型训练采用离线和在线结合的方式实现。选择训练集后,模型训练在相对独立的环境中进行。在训练过程中,实时将训练过程中的输出与结果以文字和折线图的形式展现给操作员。
使用各种机器学习或深度学习算法来对监测数据进行建模和训练,将模型封装为一个API 或库文件,在后端服务器中进行部署和调用。当操作员发起处理请求时,后端服务器会调用模型API 或库文件,对采集到的实时监测数据进行智能分析,并将结果显示在前端页面上。
保存模型时,应用程序会对模型数据进行序列化,以便于后续的存储和加载。同时,操作员也可以指定将某个模型布置到主页中,方便数据的实时监测。如图5 所示,模型管理模块和数据管理模块构成并丰富了系统最终的数字化监测功能。
图5 系统功能总体图Fig.5 Overall system function diagram
数据可视化监测模块包含不同的子模块,包含基本信息显示,当前运行模型的监测阈值和实时数据统计量。同时,阈值和实时统计量也以折线统计图展示,操作员可查看历史数据情况。折线图下方为故障数据输出,系统针对出现特定报警级别的情况采用不同的报警方式。操作员也可从雷达图和数字文本中获得实时详细数据。
模型可视化模块包括3 个主要模块:模型选择、参数和训练数据选择,以及训练过程和结果展示。训练过程监测和训练结果展示子模块采用文本与折线统计图结合的方式为操作员提供实时可视化反馈,使操作员更容易进行调整。操作员可根据评估训练结果来决策是否保存模型或设置主页。
本系统为设备的运行和维护提供了重要的支持,通过实时监测数据,操作员可及时发现设备的异常情况并采取措施。同时,实时数据以图表的形式展示,可以更加直观地反映设备的运行状态和趋势,有助于对设备的当前状态进行评估和优化。模型训练模块实现了训练数据与参数设置,并提供了一种人机交互友好的方式帮助操作员来管理和训练不同的模型。
本研究设计并实现了一个基于熔盐堆泵设备的实时数字化实时监测系统。系统利用PyEpics 获取设备多项实时数据,并运用WebSocket 技术实现前后端通信与数据传递。前端采用HTML、CSS 和JavaScript 技术,通过ECharts 框架渲染实时数据折线图,使操作员直观了解设备运行状态和趋势;后端使用Django 框架进行数据处理和逻辑功能实现。此外,系统采用单例模式记录监测数据,确保数据的一致性与准确性。
为了实现监测数据的监听与页面更新,本系统应用观察者模式。当监测数据发生变化时,观察者会收到通知并自动更新页面内容。同时,系统提供可视化模型训练功能,允许操作员直接在页面上设置各类参数,训练与部署模型。随着研究的进一步进行,系统将集成多种模型,实现各类数字化分析功能,如故障诊断等,及时发现异常并采取相应措施。
综上所述,该实时数字化实时监测系统为监测设备运行状态提供了有效方法,有助于提高设备的可靠性和安全性,并且该系统具备很高的可拓展性,今后将继续完善系统功能与性能,更好地服务实际生产和运行。