跳到主要内容

OPC-UA

OPC-UA(OLE for Process Control - Unified Architecture,IEC 62541)是工业自动化领域的标准通信规约。Kepware、Matrikon、Prosys、Ignition 等几乎所有 SCADA / 中间件产品都提供 OPC-UA 服务器功能。

由于大多数 PLC 本身不具备 OPC-UA 服务器功能,通常通过 Kepware 之类的网关软件将 PLC 数值以 OPC-UA 方式对外提供,而本网关则连接该 OPC-UA 服务器读取数值。

支持的 spec / 安全

本网关的 OPC-UA 客户端支持至 OPC UA 1.04 (IEC 62541:2020) —— 基于 Eclipse Milo 0.6.16 SDK。

  • Transport:opc.tcp://(UA Binary encoding)
  • Security:None / Basic256Sha256 / Aes128_Sha256_RsaOaep / Aes256_Sha256_RsaPss 等标准策略
  • User token:Anonymous / UserName+Password / X.509 Certificate
  • Subscription:网关采用 polling 方式(timecycle 周期)—— 不使用 UA 的 MonitoredItem 订阅

注册表单输入项

输入栏填写内容示例
IP 地址OPC-UA 服务器 PC 的 IP192.168.0.40
端口OPC-UA 服务器端口49320(Kepware 默认)/ 4840(标准)
用户 (User)在 OPC-UA 服务器中注册的用户 IDkopens(因服务器而异)
密码该用户的密码***
服务器名称 (servername)端点末尾的服务器名称(Kepware 则留空)
使用 Discovery是否自动检索服务器的端点通常 false。不行时尝试 true
使用 Subscription (subscription-enabled)以 server-push 模式替代 polling勾选时 true(对大量标签更高效)
Publishing (publishing-interval)服务器发布数据变更的间隔 (ms)1000(默认)
Sampling (sampling-interval)服务器采样数值的间隔 (ms)1000(默认)
Queue Size (queue-size)变更值累积队列大小(防止 notification 丢失)10(默认)

用户 / 密码 两栏均留空时,将尝试以匿名(Anonymous)方式连接。服务器端需允许匿名连接。


标签的 PLC 地址表示法

OPC-UA 的标签地址通常称为 NodeId,格式如下。

表示法说明
ns=2;s=Channel1.Device1.Tag1namespace 2,字符串标识符 —— Kepware 中最常见
ns=2;i=1234namespace 2,数字标识符
ns=3;g=09087e75-8e5e-499b-954f-f2a8624db28aGUID 型
  • ns= 是 namespace 编号。通常为 2
  • s= 之后填入 “Channel.Device.Tag” 形式的路径(与 Kepware 中创建的路径完全一致)。

如何获取 NodeId

  1. PLC 厂商 / Kepware 厂商手册 中通常附有映射表。
  2. 使用 UA Expert 等免费 OPC-UA 客户端直接连接,在树形结构中右键点击节点即可复制 NodeId。
  3. Kepware 自带的 OPC Quick Client 工具也可完成同样的操作。

Kepware 快速设置

以下是常用组合 Kepware 的操作步骤。

  1. Kepware Server → Project → 添加通道(例:Simulator
  2. 添加设备(例:Simulator)→ 型号 = 16 Bit Device
  3. 添加标签 → 名称 Sine1,type Float,scan rate 100ms
  4. Project Properties → OPC UA → Server Endpoint 中启用端口 49320
  5. 启用匿名或用户账户

在本网关的注册表单中:

栏位
IPKepware 服务器 PC 的 IP
端口49320
用户/密码上面创建的账户(匿名则留空)
标签 PLC 地址ns=2;s=Simulator.Simulator.Sine1

常见问题与解决

现象 / 消息可能原因解决
“Connection refused” / 无法连接OPC-UA 服务器未启动或端口被阻断确认 OPC-UA 服务器是否运行、IP/端口是否正确
“User access denied”用户/密码错误,或服务器不允许匿名连接在服务器注册用户或允许匿名
“Security checks failed”服务器安全策略不匹配将服务器安全策略设为 “None” 或 “Basic256Sha256”
能连接但数值始终为 0null标签 NodeId 拼写错误、namespace 编号不同用 UA Expert 等验证同一 NodeId 是否真正可用
反复断开重连网络不稳定,或服务器 PC 负载过高巡检服务器 PC 资源 / 线缆 / 交换机

常用数据格式

PLC 中的值数据格式格式辅助PLC 地址示例
开/关Boolean(留空)ns=2;s=Pump.Status
整数Integer(留空)ns=2;s=Counter
大整数Long(留空)ns=2;s=Total
浮点数 (32-bit)Float(留空)ns=2;s=Pressure
浮点数 (64-bit,高精度)Double(留空)ns=2;s=PrecisionTemp
字符串String(留空)ns=2;s=Recipe.Name

对于 OPC-UA,format 栏通常留空(由服务器提供数据类型)。


更详细的示例 / 自动化注册

如需通过脚本 / API 自动注册,请参考 高级 — REST API 页面中的 OPC-UA 示例。