OPC UA节点说明
本文说明OPC UA标准接口涉及的OPC UA核心概念,包括服务端、地址空间、节点、属性、引用等,并给出本接口完整的节点清单。各节点在指令中的使用方式,请参考 OPC UA指令说明。
OPC UA基础概念
服务端与客户端
-
服务端:持有数据、对外提供访问。通信组件为OPC UA的服务端。
-
客户端:连接服务端读写数据,如机器人、PLC、调试工具。
-
连接地址称为端点(Endpoint),例如opc.tcp://<ip>:50010。
地址空间与节点
服务端把所有可访问的东西组织成一棵图状结构,叫地址空间;其中每个元素是一个节点。
节点之间用“引用”连接(如“包含”HasComponent、“组织”Organizes)。
每个节点有几个关键标识:
| 概念 | 含义 | 本接口示例 |
|---|---|---|
NodeId |
节点全局唯一ID,由“命名空间索引 + 标识符”组成 |
ns=2;i=…(asyncua自动分配) |
BrowseName |
浏览用的名字,带命名空间限定 |
2:COMMAND、2:SEND_POSE |
DisplayName |
显示名 |
COMMAND等 |
NodeClass |
节点类别 |
对象/变量 |
命名空间
为避免不同厂商的名字冲突,节点归属于某个命名空间URI,在连接里用一个整数索引引用。
-
注册后得到索引(通常是2,ns=0是OPC UA标准空间,ns=1是服务端本地空间)。
-
客户端要先get_namespace_index(URI)拿到这个索引,再用ns:Name浏览。
节点类别
常见的几类:
-
对象(Object):起“文件夹/分组”作用,本身不存值。本接口的MechMind就是一个对象。
-
变量(Variable):存数据的节点,有值属性。本接口绝大多数节点都是变量。
-
方法(Method,可被调用)、对象类型/变量类型(ObjectType/VariableType,类型定义)等,本接口未使用。
属性
属性是节点自带的元数据字段。一个变量节点的常用属性:
| 属性 | 含义 | 本接口如何设置 |
|---|---|---|
Value |
节点当前的值(标量或数组) |
服务端/客户端读写的对象 |
DataType |
值的数据类型 |
由VariantType决定:Boolean/Int32/Float |
ValueRank |
标量还是数组(-1=标量,1=一维数组) |
数组节点设为1 |
ArrayDimensions |
数组维度大小 |
如SEND_POSE为[240] |
AccessLevel(可写性) |
客户端能否写 |
set_writable(True/False),输入区可写、输出区只读 |
|
一句话区分:节点是“东西”,属性是这个东西的“属性字段”,值只是其中一个属性。“读写一个节点”在协议层面就是“读写它的值”。 |
本接口的地址空间结构
所有变量节点都挂在MechMind对象下,结构如下:
Objects (ns=0, standard root object)
└── MechMind (ns=2, Object)
├── CMD_TRIGGER (Variable, Boolean, writable)
├── COMMAND (Variable, Int32, writable)
├── ...
├── SEND_POSE (Variable, Float[240], read-only)
└── ... (all other variable nodes under MechMind)
| 标注 | 说明 |
|---|---|
ns=0/ns=2 |
ns=0是OPC UA标准命名空间;ns=2是本接口注册的命名空间索引。 |
writable |
输入区节点,客户端可写,节点清单见 输入区。 |
read-only |
输出区节点,服务端写、客户端只读,节点清单见 输出区。 |
节点清单
输入区(客户端写、服务端读,可写)
| 节点名 | 类型 | 含义 |
|---|---|---|
CMD_TRIGGER |
Boolean |
触发位(电平):置1发起命令,读完结果后置0 |
COMMAND |
Int32 |
命令号(cmd_type,如101=RUN_VISION) |
POINT_TYPE |
Int32 |
点位类型/请求位姿类型 |
POSE_COUNT_REQ |
Int32 |
需求位姿数(0=全部) |
PROJECT_NUM |
Int32 |
Mech-Vision工程编号 |
MODEL_NUM |
Int32 |
参数配方编号 |
ROBOT_JPS |
Float[6] |
机器人关节角J1~J6 |
ROBOT_POSE |
Float[6] |
机器人法兰位姿XYZ+欧拉角 |
BRANCH_NAME |
Int32 |
分支名(SET_BRANCH) |
BRANCH_OUTPORT |
Int32 |
分支出口(SET_BRANCH) |
INDEX_NAME |
Int32 |
索引名(SET_INDEX) |
INDEX_ORDER |
Int32 |
索引序(SET_INDEX) |
BOX_SIZE |
Float[3] |
外参包围盒XYZ |
OUTER_POSE |
Float[6] |
外部位姿 |
ROBOT_MOVE_STATUS |
Int32 |
标定时机器人运动状态 |
DO_NUM_PER_GROUP |
Int32 |
DO每组数量 |
输出区(服务端写、客户端读,只读)
| 节点名 | 类型 | 含义 |
|---|---|---|
TRIGGER_ACKNOWLEDGE |
Boolean |
触发应答:服务端接单置1,命令完成后置0(下降沿=完成) |
CUSTOM_MSG |
Int32 |
自定义消息码 |
HEARTBEAT |
Boolean |
心跳,定时翻转 |
STATUS_CODE |
Int32 |
命令状态码(成功/错误) |
SEND_POSE_STATUS |
Boolean |
发送完成标志 |
SEND_POSE_COUNT |
Int32 |
本次返回的位姿数量 |
VISUAL_MOVE_POSITION |
Int32 |
视觉移动位置索引 |
SEND_POSE |
Float[240] |
位姿块:最多40点位 × 6(按SEND_POSE_COUNT切片) |
SEND_LABEL |
Int32[40] |
每个点位的标签 |
SEND_TOOL_INDEX |
Int32[40] |
每个点位的工具号 |
DO_LIST |
Int32[64] |
DO信号列表 |
CUSTOM_DATA |
Float[400] |
自定义视觉数据:40行 × 10(指令110/210用) |
PLANNING_VISUAL_MOVE_INDEX |
Int32[120] |
规划合并区:is_visual_move/move_type/speed各40 |
PLANNING_VISUAL_RESULT |
Float[1600] |
规划视觉结果:40行 × 40(指令210用) |