“《工业数据可视化:Python + Flask 实现 Web 实时读取 MySQL 数据》该篇中已经实现了 Python + MySQL + Flask 的工业数据可视化基础框架,但实际工业现场的数据往往并不直接来自数据库,而是来自 PLC、组态软件、DCS、仪表设备及 OPC Server。因此本文开始拓展工业数据采集层,不局限于直接通信读取设备的信息,本文使用 Python 对接 OPC UA Simulation Server,实现 OPC UA 实时变量读取,并为后续 OPC UA → MySQL → Web SCADA 的完整工业数据链路做准备。”目前大多数 PLC 编程软件、组态软件、SCADA 系统以及工业平台,基本都已经支持 OPC UA 接口。相比直接研究组态软件内部数据库结构或私有通信协议,通过 OPC UA 获取实时数据通常更加标准化,也更适合进行 Python、Web、数据库及工业数据平台的二次开发。
整理了几个常用设备的OPC UA文档如下:
DeltaV 的 OPC UA文档:https://www.emerson.com/is/content/emerson/de/systems-and-software/deltav-distributed-control-system-dcs/product-data-sheets/documents/deltav-opc-ua-servers-and-clients.pdf?utm_source=chatgpt.com
西门子PLC 的 OPC UA文档:https://www.ad.siemens.com.cn/productportal/prods/1500published/Comm/Comm_12.2/Comm_12.2.html
组态王 的 OPC UA文档:
https://www.kingsupport.cn/forum.php?mod=viewthread&tid=1740
三菱 的 OPC UA文档:https://us.mitsubishielectric.com/fa/en/products/cnt/programmable-controllers/melsec-iq-r-series/it-connect/opc-ua-server/?utm_source=chatgpt.com
OPC UA(Open Platform Communications Unified Architecture)是一种工业自动化领域通用的数据通信协议,由 OPC Foundation 制定。相比传统工业协议,OPC UA 不仅可以读取变量数据还能支持设备模型,变量描述,报警事件,历史数据和权限认证等。因此在 MES、SCADA、工业互联网及数字化工厂中应用越来越广泛。典型通信结构如下:PLC / DCS / 仪表设备↓OPC Server↓OPC UA 协议↓Python / Web / SCADA
在实际工业现场中,OPC UA Server 通常由:PLC,DCS,SCADA,组态软件,工业网关等设备或软件提供。但在学习阶段,如果没有真实PLC,也可以通过 OPC UA 仿真服务器模拟工业数据环境。
我选择了OPC UA Simulation Server来作为测试服务器,用于模拟温度,压力,电机状态,计数器,模拟量等数据。该软件官网网址为(若无法下载则科学上网):https://downloads.prosysopc.com/opc-ua-simulation-server-downloads.php,安装好后如下图:图中opc.tcp://暴龙战神:53530/OPCUA/SimulationServer则为OPC的连接地址。在objects中有软件自带的几种数据类型,下面就用Python读取里面的数据。
这里的ns=3;i=1002代表的是OPC UA 节点ID读取成功与 Modbus 直接通过寄存器地址读取数据不同,OPC UA 中所有数据都以Node(节点)的形式存在。整个就像工业数据树,所有变量、设备、文件夹、状态、历史数据等内容,都会以节点结构组织。Python 实际读取的就是这些节点中的变量数据。modbus能通过寄存器地址来读值那么opc呢,下面就要引入NodeId节点标识.在 OPC UA 中,每个节点都会有唯一 NodeId。例如总之,有节点标识,就能取到对应的值。节点标识就是数据的唯一身份证号。