3. OPC UA信息模型

OPC UA 与许多传统通信协议最大的区别,在于它不只传输“值”,而是把设备、参数、结构、语义和关系都组织成一个可浏览、可查询、可扩展的信息模型。理解这一模型,是后续用 AI 做语义推理、异常诊断和自动编排的基础。本节围绕地址空间、节点、引用、数据类型、对象、变量、方法以及建模方法展开。

一、地址空间:所有信息的统一容器

OPC UA 服务器对外暴露的全部信息都组织在地址空间(AddressSpace)中。地址空间不是简单的文件夹树,而是一张由节点和引用构成的图。客户端可以通过浏览(Browse)从根节点出发,逐层发现对象、变量、方法及其关系;也可以通过查询(Query)按类型或引用关系检索节点。

地址空间通常包含三类内容:类型定义(如 ObjectType、VariableType)、实例(如具体设备对象和变量)、以及服务器自身信息(Server 对象、命名空间数组等)。命名空间(Namespace)用于隔离不同厂商或不同标准的语义,避免命名冲突。

二、节点与引用:信息模型的基本单元与连接线

节点(Node)是地址空间中的最小可寻址实体,每个节点由 NodeId 唯一标识,并带有 NodeClass、BrowseName、DisplayName、Description 等属性。常见 NodeClass 包括 Object、Variable、Method、ObjectType、VariableType、ReferenceType、DataType 和 View。

引用(Reference)描述节点之间的关系,是有向的。例如 Organizes 表示组织关系,HasComponent 表示组成关系,HasProperty 表示属性关系,HasTypeDefinition 表示实例所属类型。引用使地址空间成为图结构,而不是孤立节点的集合。

OPC UA 地址空间:节点与引用关系 Root FolderType Objects FolderType Types FolderType Views FolderType Organizes Organizes Organizes Machine_01 Object Organizes Temperature Variable · Double Speed Variable · Double Start() Method SerialNumber Property · String HasComponent HasComponent HasComponent HasProperty MachineType ObjectType HasTypeDefinition

三、数据类型、对象、变量与方法

数据类型(DataType)定义变量值的语义和结构。OPC UA 内置了 Boolean、Int32、Double、String、DateTime 等基础类型,也支持枚举、结构体和数组。自定义结构体常用于表达复杂设备状态,例如“温度+压力+时间戳”的组合。

对象(Object)表示现实世界中的实体,如一台机床、一个工位或一个传感器。对象本身不携带值,而是通过 HasComponent 和 HasProperty 引用组织变量、方法和其他对象。

变量(Variable)是携带数据的节点,包含 Value、DataType、ValueRank、AccessLevel 等属性。变量可以是只读的测量值,也可以是可读写的设定值。变量还能通过 Historizing 属性支持历史数据访问。

方法(Method)表示可被客户端调用的操作,例如启动、停止、复位或标定。方法通过 InputArguments 和 OutputArguments 描述参数,调用时使用 Call 服务。方法让信息模型不仅“可看”,还“可操作”。

四、信息模型建模方法

建模通常遵循“类型先行、实例复用”的思路。先定义 ObjectType 和 VariableType,描述设备应具备的变量、方法和子对象;再基于类型创建实例,填入具体 NodeId 和初始值。这样同一类设备可以批量实例化,AI 也能通过类型推断设备能力。

  1. 确定建模范围:明确要表达哪些设备、参数和操作。
  2. 定义类型:创建 ObjectType、VariableType,并声明必选与可选成员。
  3. 建立引用:用 HasComponent、HasProperty、HasTypeDefinition 连接节点。
  4. 实例化:基于类型生成具体对象,绑定实际数据源。
  5. 验证与发布:用客户端浏览地址空间,检查引用完整性和数据类型一致性。

建模示例:定义一个 MachineType,包含 Temperature、Speed 两个变量,Start、Stop 两个方法,以及 SerialNumber 属性。实例 Machine_01 通过 HasTypeDefinition 指向 MachineType,并拥有自己的变量值和方法实现。

五、典型场景与常见误区

在智能制造场景中,产线服务器可以把每台设备建模为 Object,把工艺参数建模为 Variable,把换型、校准建模为 Method。AI 应用读取地址空间后,可以自动生成设备能力清单,或根据变量历史数据做预测性维护。

建模对象 NodeClass 常用引用 典型用途
设备/工位 Object Organizes、HasComponent 组织实体层级
测量值/设定值 Variable HasComponent、HasProperty 读写过程数据
启动/停止操作 Method HasComponent 远程调用控制
设备类型定义 ObjectType HasSubtype、HasComponent 批量实例化模板
结构体数据 DataType HasEncoding 表达复合状态

常见误区:把地址空间当成普通文件夹树,忽略引用方向和多父节点关系;变量只填 Value 而不声明 DataType 和 AccessLevel;方法没有参数定义,导致客户端无法正确调用;类型定义与实例混在一起,后期难以复用。建模时应先画关系图,再落节点。

实践建议:用 UaModeler 或 open62541 的节点集工具生成 NodeSet2.xml,再导入服务器。AI 侧可先解析 NodeSet2.xml 中的类型和引用,构建知识图谱,再与实时变量值关联,实现语义化监控。

NodeSet2.xml 片段示意:
<UAObjectType NodeId="ns=1;i=1001" BrowseName="1:MachineType">
  <DisplayName>MachineType</DisplayName>
  <References>
    <Reference ReferenceType="HasComponent" IsForward="false">i=58</Reference>
    <Reference ReferenceType="HasComponent">ns=1;i=1002</Reference>
  </References>
</UAObjectType>

掌握地址空间、节点、引用、数据类型、对象、变量和方法之后,就能把设备语义完整地映射到 OPC UA 信息模型中。后续无论是做 AI 特征工程、异常检测还是自动编排,都可以直接基于这套模型进行查询和推理,而不必依赖硬编码的寄存器地址。