4. OPC UA核心概念
在CODESYS中集成OPC UA,如果只停留在“勾选服务器、填个端口”的层面,往往会在客户端连不上、变量读不到、权限被拒绝时无从下手。真正决定OPC UA能否稳定工作的,是它背后那套自描述的信息模型与地址空间机制。理解这些核心概念,才能把PLC变量正确地“暴露”给上位系统。
一、信息模型:把设备抽象成可理解的对象
OPC UA不是简单的“变量搬运协议”,它首先是一套信息模型。传统通信只关心“地址+值”,而OPC UA要求每个数据都带有语义:它是什么、属于谁、类型是什么、能否被写入。CODESYS把PLC中的变量、结构体、功能块映射为OPC UA的信息模型对象,使客户端无需事先约定就能发现数据结构。
信息模型由三层构成:对象(Object)表示设备或功能实体,如“电机1”;变量(Variable)表示可读写的数据点,如“转速”;方法(Method)表示可被远程调用的操作,如“复位”。这三者通过引用相互连接,形成一棵可浏览的树。
二、地址空间与节点:一切皆节点
OPC UA把所有可访问内容统一组织进地址空间(Address Space)。地址空间是一张有向图,图中的每个顶点称为节点(Node)。节点用NodeId唯一标识,格式通常为ns=2;s=Motor1.Speed,其中ns是命名空间索引,s表示字符串标识符。
节点不是孤立的,它们通过引用(Reference)连接。最常见的引用类型是Organizes(组织关系)和HasComponent(组成关系)。客户端浏览地址空间时,实际就是沿着引用从一个节点走到另一个节点。CODESYS默认把符号配置中的变量挂在Objects节点下,形成层级路径。
三、数据类型:跨平台一致性的基础
OPC UA定义了一套内建数据类型,如Boolean、Int16、UInt32、Float、Double、String、DateTime。CODESYS在编译符号配置时,会把IEC 61131-3类型映射到对应的OPC UA类型。若类型映射不匹配,客户端可能显示“BadTypeMismatch”。
对于结构体(STRUCT),OPC UA会将其展开为带子节点的复杂变量;数组则映射为带索引的变量节点。自定义类型需要确保在符号配置中启用“支持OPC UA”选项,否则不会出现在地址空间中。
四、服务集与安全模型
OPC UA客户端与服务器之间的交互,全部通过服务集(Service Set)完成。常用服务包括:Browse浏览地址空间、Read读数据、Write写数据、Subscribe订阅变化、Call调用方法。CODESYS OPC UA服务器实现了这些标准服务,因此任何合规客户端都能接入。
安全模型则决定“谁能连、能连什么”。它包含三层:传输安全(None/Sign/Sign&Encrypt)、用户认证(匿名/用户名密码/证书)、访问权限(节点级读写控制)。在CODESYS中,安全策略在“OPC UA服务器”配置页设置,证书需在“安全屏幕”中生成或导入。
五、典型配置与排障清单
在CODESYS中启用OPC UA服务器后,需要在“符号配置”中勾选要发布的变量,并设置访问权限。以下是一个最小配置示例:
OPC UA 服务器配置
端口: 4840
安全策略: None, Basic256Sha256
用户: admin / ******
符号配置:
Motor1.Speed : Read
Motor1.Start : ReadWrite
Motor1.Reset : Call
| 现象 | 可能原因 | 排查方向 |
|---|---|---|
| 客户端浏览不到变量 | 符号未发布或命名空间未启用 | 检查符号配置中“支持OPC UA”勾选 |
| 读取返回 BadNodeIdUnknown | NodeId拼写错误或命名空间索引不对 | 用客户端浏览确认实际NodeId |
| 写入被拒绝 | 节点权限为只读或用户无写权限 | 检查变量访问权限与用户角色 |
| 连接被安全策略拒绝 | 客户端与服务器加密策略不匹配 | 统一为Basic256Sha256并交换证书 |
掌握信息模型、地址空间、节点引用、数据类型、服务集与安全模型这六个概念后,CODESYS OPC UA的配置就不再是“碰运气”。它们共同决定了数据如何被描述、如何被寻址、如何被安全访问,也是后续与MQTT网关、SCADA、MES对接的基础。