OPC UA Nodes
This page describes the OPC UA concepts involved in the OPC UA standard interface, including the server, address space, nodes, attributes, and references, and provides the complete node list of this interface. For how the nodes are used by commands, see OPC UA Commands.
OPC UA Basic Concepts
Server and Client
-
Server: holds data and provides access to it. The Communication Component is the OPC UA server.
-
Client: connects to the server to read and write data, such as robots, PLCs, and debugging tools.
-
The connection address is called an endpoint (Endpoint), in the form of opc.tcp://<ip>:50010.
Address Space and Nodes
The server organizes everything that can be accessed into a tree-like structure called the address space; each element in it is a node.
Nodes are connected by references (for example, "contains" HasComponent and "organizes" Organizes).
Each node has several key identifiers:
| Concept | Meaning | Example in this interface |
|---|---|---|
NodeId |
Globally unique ID of a node, composed of the "namespace index + identifier" |
ns=2;i=… (automatically assigned by asyncua) |
BrowseName |
Name used for browsing, qualified by the namespace |
2:COMMAND, 2:SEND_POSE |
DisplayName |
Display name |
COMMAND, etc. |
NodeClass |
Node class |
Object / Variable |
Namespace
To avoid name conflicts between vendors, nodes belong to a namespace URI, which is referenced by an integer index in the connection.
-
The index is obtained after registration (usually 2; ns=0 is the OPC UA standard namespace, and ns=1 is the server-local namespace).
-
The client needs to call get_namespace_index(URI) to obtain the index, and then browse with ns:Name.
Node Class
Common classes:
-
Object: serves as a "folder / group" and stores no value itself. MechMind in this interface is an Object.
-
Variable: a node that stores data and has a Value attribute. Most nodes in this interface are Variables.
-
Method (can be called), ObjectType / VariableType (type definitions), etc. are not used in this interface.
Attributes
An attribute is a metadata field that comes with a node (note that it is not the same thing as "the value of the variable"). Common attributes of a Variable node:
| Attribute | Meaning | How it is set in this interface |
|---|---|---|
Value |
The current value of the node (scalar or array) |
This is what the server/client reads and writes |
DataType |
Data type of the value |
Determined by the VariantType: Boolean / Int32 / Float |
ValueRank |
Scalar or array (-1 = scalar, 1 = one-dimensional array) |
Array nodes are set to 1 |
ArrayDimensions |
Size of the array dimensions |
For example, SEND_POSE is [240] |
AccessLevel (writability) |
Whether the client can write |
set_writable(True/False). Input nodes are writable and output nodes are read-only |
|
In short: a node is a "thing", attributes are the "property fields" of that thing, and the value is only one of the attributes. "Reading/writing a node" at the protocol level means "reading/writing its Value attribute". |
Address Space Structure of This Interface
All variable nodes are attached under the MechMind object, as shown below:
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)
| Label in the figure | Description |
|---|---|
ns=0 / ns=2 |
ns=0 is the OPC UA standard namespace; ns=2 is the namespace index registered by this interface |
writable |
Input nodes, writable by the client. See Input Nodes for the node list |
read-only |
Output nodes, written by the server and read-only to the client. See Output Nodes for the node list |
Node List
Input Nodes (Written by the Client, Read by the Server, Writable)
| Node name | Data type | Meaning |
|---|---|---|
CMD_TRIGGER |
Boolean |
Trigger bit (level): set to 1 to issue a command, and reset to 0 after reading the results |
COMMAND |
Int32 |
Command code (cmd_type, for example 101 = RUN_VISION) |
POINT_TYPE |
Int32 |
Point type / requested pose type |
POSE_COUNT_REQ |
Int32 |
Expected number of poses (0 = all) |
PROJECT_NUM |
Int32 |
Mech-Vision project ID |
MODEL_NUM |
Int32 |
Parameter recipe ID |
ROBOT_JPS |
Float[6] |
Robot joints J1 to J6 |
ROBOT_POSE |
Float[6] |
Robot flange pose (XYZ + Euler angles) |
BRANCH_NAME |
Int32 |
Branch name (SET_BRANCH) |
BRANCH_OUTPORT |
Int32 |
Branch exit port (SET_BRANCH) |
INDEX_NAME |
Int32 |
Index name (SET_INDEX) |
INDEX_ORDER |
Int32 |
Index order (SET_INDEX) |
BOX_SIZE |
Float[3] |
Outer bounding box dimensions (XYZ) |
OUTER_POSE |
Float[6] |
Outer pose |
ROBOT_MOVE_STATUS |
Int32 |
Robot motion status during calibration |
DO_NUM_PER_GROUP |
Int32 |
Number of DO signals per group |
Output Nodes (Written by the Server, Read by the Client, Read-only)
| Node name | Data type | Meaning |
|---|---|---|
TRIGGER_ACKNOWLEDGE |
Boolean |
Trigger acknowledge: set to 1 when the server accepts the command, and reset to 0 after the command is completed (falling edge = completed) |
CUSTOM_MSG |
Int32 |
Custom message code |
HEARTBEAT |
Boolean |
Heartbeat, toggles periodically |
STATUS_CODE |
Int32 |
Command status code (success/error) |
SEND_POSE_STATUS |
Boolean |
Flag indicating that data has been sent |
SEND_POSE_COUNT |
Int32 |
Number of poses returned this time |
VISUAL_MOVE_POSITION |
Int32 |
Index of the vision move position |
SEND_POSE |
Float[240] |
Pose block: up to 40 waypoints × 6 (sliced by SEND_POSE_COUNT) |
SEND_LABEL |
Int32[40] |
Label of each waypoint |
SEND_TOOL_INDEX |
Int32[40] |
Tool number of each waypoint |
DO_LIST |
Int32[64] |
DO signal list |
CUSTOM_DATA |
Float[400] |
Custom vision data: 40 rows × 10 (used by commands 110/210) |
PLANNING_VISUAL_MOVE_INDEX |
Int32[120] |
Planning merge area: is_visual_move / move_type / speed, 40 each |
PLANNING_VISUAL_RESULT |
Float[1600] |
Planning vision results: 40 rows × 40 (used by command 210) |