4. OPC UA核心概念

在AAS与OPC UA的数据映射工程中,理解OPC UA的核心概念是建立映射规则的前提。AAS的资产管理壳强调“资产—子模型—属性”的语义分层,而OPC UA则通过信息模型、地址空间和节点网络来表达设备与数据。两者要对接,必须先把OPC UA这套“对象化、图结构、服务化”的机制讲清楚,否则映射只能停留在字段对字段的浅层匹配。

一、信息模型:把设备世界抽象成对象与类型

OPC UA信息模型的核心思想是:一切可访问的对象都建模为节点(Node),节点之间通过引用(Reference)连接,形成有向图。信息模型不是简单的变量列表,而是带有类型系统、语义关系和继承机制的完整对象模型。它由两部分构成:

  • 类型模型:定义对象类型、变量类型、数据类型、引用类型等,描述“这类东西应该长什么样”。
  • 实例模型:类型模型的具体实例,例如某台电机、某个温度传感器、某条产线的运行状态。

类型与实例之间通过HasTypeDefinition、HasSubtype等引用关联。例如,一个Motor_1对象是MotorType的实例,而MotorType又继承自BaseObjectType。这种继承关系让映射工具可以按类型批量处理,而不是逐个字段手工配置。

二、地址空间:节点、属性与浏览路径

地址空间是OPC UA服务器对外暴露的全部节点集合。每个节点由NodeId唯一标识,NodeId包含命名空间索引和标识符,常见形式有数值、字符串、GUID和不透明字节串。节点还带有NodeClass、BrowseName、DisplayName、Description等属性。

地址空间不是平铺的,而是通过引用组织成层次结构。客户端通常从Root节点出发,经Objects、Types、Views等标准入口浏览。浏览时返回的是ReferenceDescription,其中包含目标节点的NodeId、BrowseName、NodeClass和引用类型。映射工程中,地址空间浏览路径往往就是AAS子模型属性的定位依据。

关键点:NodeId是寻址标识,BrowseName是语义名称,DisplayName是展示名称。映射时不能只看DisplayName,必须结合BrowsePath和NodeId,否则重名节点会导致映射错位。

三、节点类别与引用:地址空间的骨架

OPC UA定义了八类标准节点,它们共同构成地址空间的骨架:

节点类别作用映射中的典型用途
Object表示对象实例,如设备、产线、工位对应AAS中的Asset或Submodel实例
Variable表示可读写的数据值对应AAS属性Property
Method表示可调用的方法对应AAS操作Operation
ObjectType定义对象的类型对应AAS子模型模板
VariableType定义变量的类型约束属性数据类型
ReferenceType定义引用语义决定节点间关系如何映射
DataType定义数据类型系统与AAS数据类型做转换
View地址空间的子集视图按场景裁剪映射范围

引用是节点之间的连接线,分为层次引用和非层次引用。层次引用如Organizes、HasComponent、HasProperty,用于表达包含和组成关系;非层次引用如HasTypeDefinition、HasSubtype,用于表达类型和继承关系。映射时,HasComponent通常对应AAS的HasPart或子模型元素,HasProperty对应属性,HasTypeDefinition则用于判断实例属于哪个类型。

四、数据类型与服务通信栈

OPC UA内置了丰富的数据类型体系,包括基本类型(Boolean、Int32、Double、String、DateTime等)、枚举、结构体和数组。结构体通过StructureDefinition描述字段顺序和类型,映射到AAS时通常展开为多个Property或一个SubmodelElementCollection。数组则对应AAS的List或Collection。

服务是客户端与服务器交互的契约。常用服务集包括:

  • SecureChannel服务:建立安全通道,协商加密和签名。
  • Session服务:创建、激活、关闭会话。
  • View服务:浏览地址空间、翻译BrowsePath。
  • Attribute服务:读写节点属性。
  • MonitoredItem与Subscription服务:订阅数据变化和事件。

通信栈自下而上分为:传输层(TCP、HTTPS、WebSocket)、消息安全层(签名、加密)、编码层(UA Binary、JSON、XML)、服务层和应用层。映射工具通常通过Read、Browse、Subscribe三类服务获取数据,再按AAS元模型写入。

OPC UA 信息模型 · 地址空间 · 服务通信栈 信息模型 类型模型 ObjectType / VariableType 实例模型 Object / Variable / Method 引用关系 HasComponent / HasProperty 数据类型 基本类型 / 结构体 / 数组 节点类别 8类标准节点 地址空间 NodeId / BrowsePath 映射桥 Browse Read Subscribe 类型匹配 路径转换 值转换 服务与通信栈 应用层:AAS映射引擎 / 客户端应用 调用服务、组织映射规则 服务层:Read / Browse / Subscribe / Write Session、SecureChannel、MonitoredItem 编码层:UA Binary / JSON / XML 消息序列化与反序列化 安全层:签名 / 加密 / 证书 X.509、AES、RSA 传输层:TCP / HTTPS / WebSocket opc.tcp://host:4840 物理网络与设备 PLC、传感器、网关、服务器

五、案例:把一台电机映射到AAS子模型

假设OPC UA服务器中有一台电机,地址空间路径为Objects/ProductionLine1/Motor_1。其节点结构如下:

Motor_1 (Object, TypeDefinition=MotorType)
 ├─ HasProperty → SerialNumber (Variable, String)
 ├─ HasProperty → RatedPower (Variable, Double, kW)
 ├─ HasComponent → Temperature (Variable, Double, °C)
 ├─ HasComponent → Speed (Variable, Double, rpm)
 └─ HasComponent → Start (Method)

映射到AAS时,Motor_1对应一个Asset实例,MotorType对应子模型模板,SerialNumber和RatedPower映射为Property,Temperature和Speed映射为带实时值的Property,Start映射为Operation。映射工具通过Browse获取节点树,通过Read获取属性值,通过Subscribe建立实时数据通道。

建议在映射配置中同时记录NodeId、BrowsePath、DataType和AccessLevel。NodeId用于稳定寻址,BrowsePath用于人工核对,DataType用于类型转换,AccessLevel用于判断是否可写。

六、常见误区与复盘

  • 只看DisplayName做映射:不同命名空间下可能存在同名节点,必须结合NodeId和BrowsePath。
  • 忽略引用类型:HasComponent和HasProperty在AAS中对应不同的元素类型,混用会导致结构错误。
  • 把结构体当普通变量:结构体应展开为子模型元素集合,否则AAS侧无法表达字段语义。
  • 不区分类型与实例:类型用于模板复用,实例用于具体资产,映射配置应分层管理。
  • 忽略服务能力:服务器可能不支持Subscribe或Write,映射前应通过GetEndpoints和ServerCapabilities确认。

复盘时,建议用一张“节点—引用—类型—服务”四列表格逐项核对:每个待映射节点属于哪类节点、通过什么引用被访问、数据类型是什么、需要调用哪些服务。只有这四项都明确,AAS与OPC UA之间的映射才是可执行、可验证、可维护的。