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子模型属性的定位依据。
三、节点类别与引用:地址空间的骨架
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元模型写入。
五、案例:把一台电机映射到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建立实时数据通道。
六、常见误区与复盘
- 只看DisplayName做映射:不同命名空间下可能存在同名节点,必须结合NodeId和BrowsePath。
- 忽略引用类型:
HasComponent和HasProperty在AAS中对应不同的元素类型,混用会导致结构错误。 - 把结构体当普通变量:结构体应展开为子模型元素集合,否则AAS侧无法表达字段语义。
- 不区分类型与实例:类型用于模板复用,实例用于具体资产,映射配置应分层管理。
- 忽略服务能力:服务器可能不支持Subscribe或Write,映射前应通过
GetEndpoints和ServerCapabilities确认。
复盘时,建议用一张“节点—引用—类型—服务”四列表格逐项核对:每个待映射节点属于哪类节点、通过什么引用被访问、数据类型是什么、需要调用哪些服务。只有这四项都明确,AAS与OPC UA之间的映射才是可执行、可验证、可维护的。