节点 (Nodes)
OPC UA 把 Address Space 里的所有节点分成 8 个 NodeClass, 每类节点有各自必备的 Attribute.
| NodeClass | 值 | 用途 |
|---|---|---|
| Object | 1 | 容器 / 设备 / 模块 / 上下文对象 |
| Variable | 2 | 数据变量 (有 Value Attribute) |
| Method | 4 | 服务端方法 (可 Call) |
| ObjectType | 8 | Object 的类型定义 |
| VariableType | 16 | Variable 的类型定义 |
| ReferenceType | 32 | 引用关系的类型定义 |
| DataType | 64 | 数据类型定义 |
| View | 128 | 节点子集视图 |
Browse 时可以通过 NodeClass filter 精确拿一类节点.
Object — 容器节点
最常见节点类型, 没有 Value, 用来组织 Variable / Method:
Calculator (Object)
├── Add (Method)
├── Subtract (Method)
└── LastResult (Variable)
特征 Attribute: EventNotifier — 是否能产生事件.
Variable — 数据变量
有 Value 的节点, 是 Read/Write/Subscribe 的主要目标:
特征 Attribute:
- Value (13) — 当前值
- DataType (14) — 数据类型 NodeId
- ValueRank (15) — 标量 / 一维数组 / 多维数组
- ArrayDimensions (16) — 多维数组的维度
- AccessLevel (17) — 当前 / 历史读写权限位掩码
- 1: CurrentRead, 2: CurrentWrite, 4: HistoryRead, 8: HistoryWrite
- MinimumSamplingInterval (19) — 服务端能多频繁更新该值
- Historizing (20) — 是否在记录历史
Method — 可调用方法
NodeClass: Method
InputArguments → Property (Variable, ns=0;s=InputArguments)
OutputArguments → Property (Variable, ns=0;s=OutputArguments)
特征 Attribute: Executable (21) / UserExecutable (22). Browse 该方法节点的子 Property 可以拿到入参出参签名.
ObjectType / VariableType — 类型定义
OPC UA 是面向对象的, 服务端可以定义"电机类型 MotorType", 然后实例化多个 Motor 对象, 每个都自动有相同的 Variable / Method 结构. 客户端 Browse 时跟着 HasTypeDefinition 引用就能找到该实例的类型.
ReferenceType — 引用类型定义
引用关系本身也是"节点". 标准 ReferenceType 包括:
- HasComponent — 父节点拥有子组件
- HasProperty — 父节点拥有属性
- Organizes — 文件夹式组织
- HasTypeDefinition — 实例 → 类型
- HasSubtype — 类型继承
- ...
DataType — 数据类型
服务端可以自定义 Struct DataType (类似 C struct), 客户端通过 Browse + Read DataType 节点拿到字段定义, 再正确解析 ExtensionObject.
View — 视图
把 Address Space 的子集打包成一个"视图" (类似数据库 VIEW). 主要用于大规模 Server (10万+ 节点) 给客户端提供"领域子集".
NodeClass filter (实战)
// 只浏览方法
var methods = ua.Browse("ns=2;s=Calculator", filter: NodeClass.Method);
// 只浏览变量
var vars = ua.Browse("ns=2;s=Folder", filter: NodeClass.Variable);
// 浏览全部 (默认)
var all = ua.Browse("ns=2;s=Folder");
相关链接
- 引用 — 节点之间的关系
- 服务 — 怎么操作节点
- C# SDK Browse API