一文读懂 OPC UA:工业 4.0 的万能通讯标准
📢作者留言:写到第五期,终于要聊 OPC UA 了。这玩意儿有点特殊——它不是"设备到设备"的协议,而是系统到系统的协议。你在工厂里搞 MES、SCADA、ERP,想让它们互相"打电话",OPC UA 就是那个标准普通话。而且,工业 4.0 的标配就是 OPC UA,不懂这个,出门都不好意思跟人打招呼。1. OPC UA 是什么?OPC UA =Open Platform Communications Unified Architecture翻译过来就是"开放平台通讯统一架构"。先说历史:OPC UA 的前身是 OPC(OLE for Process Control),1996 年由微软、几个自动化厂商联合制定,用来解决 Windows 平台下工控软件之间的通讯问题。早期的 OPC 依赖 DCOM 技术——这玩意儿配置起来能把人逼疯,防火墙一升级,通讯就挂。于是,OPC UA 在 2006 年诞生,彻底重构,核心目标只有一个:让工业数据和云端数据自由流动。1.1 它能解决什么问题?传统工厂的数据孤岛: ┌──────────┐ ┌──────────┐ ┌──────────┐ │ PLC 1 │ │ PLC 2 │ │ PLC 3 │ │ (西门子) │ │(罗克韦尔) │ │ (三菱) │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └───────┬───────┴───────────────┘ │ 各玩各的,无法互通 ▼ ┌──────┐ │ 数据 │ ← 只能靠 OPC 服务器做翻译 │ 孤岛 │ └──────┘ OPC UA 时代: ┌──────────┐ ┌──────────┐ ┌──────────┐ │ PLC 1 │ │ PLC 2 │ │ PLC 3 │ │ (西门子) │ │(罗克韦尔) │ │ (三菱) │ └────┬─────┘ └────┬─────┘ └────┬─────┘ │ │ │ └───────┬───────┴───────────────┘ │ ▼ ┌────────────────┐ │ OPC UA 服务器 │ ← 统一接口 └───────┬────────┘ │ ┌──────┼──────┐ ▼ ▼ ▼ ┌────┐ ┌────┐ ┌────┐ │MES │ │SCADA│ │ERP │ ← 任何系统都能访问 └────┘ └────┘ └────┘1.2 OPC UA vs 传统 OPC维度OPC Classic (DA/AE/HDA)OPC UA平台仅 Windows跨平台(Win/Linux/Unix/嵌入式)传输DCOMTCP/HTTP/SOAP数据模型简单标签复杂对象模型安全性弱端到端加密 + 认证防火墙噩梦友好互联网❌✅2. 信息模型:OPC UA 的精髓OPC UA 不仅仅是传输数据,它是自带数据模型的协议。2.1 地址空间(Address Space)OPC UA 服务器内部维护一个地址空间,像文件系统一样组织数据:Address Space (地址空间) │ ├─ Devices (设备) │ ├─ PLC_01 │ │ ├─ Inputs │ │ │ ├─ Temperature (Float, ℃) │ │ │ ├─ Pressure (Float, bar) │ │ │ └─ Status (Boolean) │ │ └─ Outputs │ │ ├─ Valve_1 (Boolean) │ │ └─ Motor_Speed (Float, RPM) │ │ │ └─ Conveyor_01 │ ├─ Speed (Float) │ └─ Fault_Code (UInt16) │ ├─ Alarms (报警) │ ├─ High_Temperature_Alarm │ ├─ Low_Pressure_Alarm │ └─ Motor_Overload_Alarm │ └─ Historical (历史数据) ├─ Temperature_Trend └─ Production_Count_History每个节点(Node)都有:NodeId:唯一标识符(类似文件的路径)BrowseName:浏览名称DisplayName:显示名称DataType:数据类型Value:当前值AccessLevel:访问权限2.2 OPC UA 的数据类型类型说明示例Boolean布尔值TRUE / FALSESByte/Byte有符号/无符号字节0 ~ 255Int16/Int32/Int64整数-32768 ~ 32767Float/Double浮点数3.14159String字符串“Temperature_01”DateTime时间戳2024-01-15T10:30:00ZUAObject对象