为什么要学 OPC UA
相比老旧的 OPC DA(基于 Windows COM/DCOM,部署痛苦),OPC UA 是跨平台、面向服务、自带安全模型的现代标准,也是多品牌设备互联互通和国产化系统对接的主流方向。
主流开源栈怎么选
| 语言 | 推荐库 | 特点 |
|---|---|---|
| C/C++ | open62541 | 轻量、可做客户端也可做服务器,嵌入式友好 |
| Python | asyncua(原 python-opcua) | 上手快,适合脚本、测试、原型 |
| Java | Eclipse Milo | 工程化强,适合后端服务 |
| C# | OPCFoundation 官方栈 | 与 .NET 生态契合 |
学习/做工具用 asyncua 最快;做产品和长期服务,C 用 open62541、Java 用 Milo 更稳。
三个必须理解的概念
地址空间(Address Space):服务器把所有数据组织成一棵节点树,每个变量都是一个节点(Node),用 NodeId 唯一标识(如 ns=2;s=Temperature)。
读/写(Read/Write):客户端按 NodeId 主动读值,类似轮询。
订阅(Subscription):客户端订阅节点,数据变化时服务器主动推送(MonitoredItem),比轮询更省资源、实时性更好,生产环境优先用订阅。
第一个客户端的步骤(以 Python asyncua 为例)
- 连接服务器:
Client(url="opc.tcp://192.168.1.10:4840") - (可选)加载安全策略,匿名或账号密码登录
- 获取节点:
node = client.get_node("ns=2;s=Pressure") - 读值:
await node.read_value() - 或创建订阅,注册数据变化回调
- 用完优雅断开,处理重连
安全策略落地建议
- 内网测试可用 None + 匿名,快速跑通
- 生产环境建议 Sign(签名)或 SignAndEncrypt(签名加密),并配证书
- 客户端要信任服务器证书,否则连不上,这是新手常见卡点
学习路径
先用一个 OPC UA 模拟服务器(如 open62541 自带示例或 UaExpert 客户端)熟悉浏览地址空间,再对接真实设备。理解了“节点 + 订阅”,OPC UA 就入门了。