跳到主要内容

节点 (Nodes)

OPC UA 把 Address Space 里的所有节点分成 8 个 NodeClass, 每类节点有各自必备的 Attribute.

配套阅读
NodeClass用途
Object1容器 / 设备 / 模块 / 上下文对象
Variable2数据变量 (有 Value Attribute)
Method4服务端方法 (可 Call)
ObjectType8Object 的类型定义
VariableType16Variable 的类型定义
ReferenceType32引用关系的类型定义
DataType64数据类型定义
View128节点子集视图

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");

相关链接