# OmniGraph node reference

> Look up every OmniGraph node of the Wandelbots NOVA extension with its inputs and outputs. Use the nodes in Action Graph to read and write IOs and to attach parts to a gripper.

The Wandelbots NOVA extension adds seven nodes to Action Graph.
Find them in the node library under the category `Wandelbots NOVA`.

| Node | Node type | Purpose |
| - | - | - |
| [On IO Change](#on-io-change) | `wandelbots.omni.OgnOnIOChange` | Trigger the graph when a controller IO changes. |
| [Read IO](#read-io) | `wandelbots.omni.OgnReadIO` | Read the value of a controller IO. |
| [Write IO](#write-io) | `wandelbots.omni.OgnWriteIO` | Write the value of a virtual controller IO. |
| [On Bus IO Change](#on-bus-io-change) | `wandelbots.omni.OgnOnBusIOChange` | Trigger the graph when a Bus IO of the cell changes. |
| [Read Bus IO](#read-bus-io) | `wandelbots.omni.OgnReadBusIO` | Read the value of a Bus IO. |
| [Write Bus IO](#write-bus-io) | `wandelbots.omni.OgnWriteBusIO` | Write the value of a Bus IO. |
| [Contact Gripper](#contact-gripper) | `wandelbots.omni.OgnContactGripper` | Attach prims that touch a sensor volume. |

For examples, see [Connect IO signals with OmniGraph nodes](/simulation/omnigraph-nodes/connect-ios) and [Add contact gripper](/simulation/build-scene/contact-gripper).

## IO nodes

All IO nodes share these rules:

- They work only while the simulation runs.
- `Robot` targets a robot prim with a connected motion group. The node reads the cell and the controller from this prim.
- If the motion group is not included in the simulation, the node does nothing.
- An IO has one value type. Only the output of that type changes, so connect the matching output.

### On IO Change

Triggers the graph when the value of a controller IO changes.

| Input | Type | Description |
| - | - | - |
| `Robot` | target | Root prim of the robot. |
| `IO` | string | Identifier of the controller IO. |

| Output | Type | Description |
| - | - | - |
| `Change` | execution | Fires when the IO value changes. |
| `Boolean` | bool | New value of a boolean IO. |
| `Integer` | int | New value of an integer IO. |
| `Float` | float | New value of a float IO. |

### Read IO

Reads the current value of a controller IO each time it runs.

| Input | Type | Description |
| - | - | - |
| `Exec In` | execution | Runs the node. |
| `Robot` | target | Root prim of the robot. |
| `IO` | string | Identifier of the controller IO. |

| Output | Type | Description |
| - | - | - |
| `Exec Out` | execution | Fires after the node ran. |
| `Boolean` | bool | Value of a boolean IO. |
| `Integer` | int | Value of an integer IO. |
| `Float` | float | Value of a float IO. |

### Write IO

Writes a value to a virtual controller IO.
Physical inputs are read-only.

| Input | Type | Description |
| - | - | - |
| `Exec In` | execution | Runs the node. |
| `Robot` | target | Root prim of the robot. |
| `IO` | string | Identifier of the controller IO. |
| `Boolean` | bool | Value to write to a boolean IO. |
| `Integer` | int | Value to write to an integer IO. |
| `Float` | float | Value to write to a float IO. |

| Output | Type | Description |
| - | - | - |
| `Exec Out` | execution | Fires after the node sent the value. |
| `Boolean` | bool | The value that the node sent. |
| `Integer` | int | The value that the node sent. |
| `Float` | float | The value that the node sent. |

The node does not wait for the controller to confirm the value.

### On Bus IO Change

Triggers the graph when the value of a Bus IO changes, for example a PROFINET signal.
[Set up the Bus IO device in Wandelbots NOVA](/nova/latest/communication-protocols/profinet) first.

| Input | Type | Description |
| - | - | - |
| `Robot` | target | Root prim of a robot in the cell. The node uses its cell. |
| `Bus IO` | string | Identifier of the Bus IO. |

| Output | Type | Description |
| - | - | - |
| `Change` | execution | Fires when the Bus IO value changes. |
| `Boolean` | bool | New value of a boolean Bus IO. |
| `Integer` | int | New value of an integer Bus IO. |
| `Float` | float | New value of a float Bus IO. |

### Read Bus IO

Reads the current value of a Bus IO each time it runs.

| Input | Type | Description |
| - | - | - |
| `Exec In` | execution | Runs the node. |
| `Robot` | target | Root prim of a robot in the cell. The node uses its cell. |
| `Bus IO` | string | Identifier of the Bus IO. |

| Output | Type | Description |
| - | - | - |
| `Exec Out` | execution | Fires after the node ran. |
| `Boolean` | bool | Value of a boolean Bus IO. |
| `Integer` | int | Value of an integer Bus IO. |
| `Float` | float | Value of a float Bus IO. |

### Write Bus IO

Writes a value to a Bus IO.

| Input | Type | Description |
| - | - | - |
| `Exec In` | execution | Runs the node. |
| `Robot` | target | Root prim of a robot in the cell. The node uses its cell. |
| `Bus IO` | string | Identifier of the Bus IO. |
| `Boolean` | bool | Value to write to a boolean Bus IO. |
| `Integer` | int | Value to write to an integer Bus IO. |
| `Float` | float | Value to write to a float Bus IO. |

| Output | Type | Description |
| - | - | - |
| `Exec Out` | execution | Fires after the node sent the value. |
| `Boolean` | bool | The value that the node sent. |
| `Integer` | int | The value that the node sent. |
| `Float` | float | The value that the node sent. |

## Contact Gripper

Attaches prims that touch a sensor volume and keeps them at the sensor until release.
A prim touches the sensor when its geometry overlaps the world bounds of the sensor prim.
For a step-by-step setup, see [Add contact gripper](/simulation/build-scene/contact-gripper).

| Input | Type | Default | Description |
| - | - | - | - |
| `Exec In` | execution | | Evaluates `Fix`. Trigger it once; the node keeps the prims attached by itself. |
| `Sensor Prim` | target | | Prim whose world bounds define the sensor volume. |
| `Fix` | bool | `false` | `true` attaches the touching prims and holds them. `false` releases them. |
| `Fix All` | bool | `false` | Attach every touching prim on each run, not only the first one. |
| `Candidate Prim Paths` | token\[] | `[]` | Prims that the node may attach. Empty means the whole stage. |
| `Exclude Prim Paths` | token\[] | `[]` | Prims that the node never attaches, including their children. |

| Output | Type | Description |
| - | - | - |
| `Exec Attached` | execution | Fires when the node attaches at least one new prim. |
| `Exec Released` | execution | Fires when the node releases the attached prims. |
| `Is Attached` | bool | `true` while at least one prim is attached. |
| `Attached Prim Path` | token | Path of the prim attached last. Empty when nothing is attached. |
| `Attached Prim Paths` | token\[] | Paths of all attached prims in the order of attachment. |

Paths in `Candidate Prim Paths` and `Exclude Prim Paths` accept wildcards:

- `*` matches any part of a path, including `/`.
- A pattern without a leading `/` matches at any depth.
- If a group prim matches, the node attaches the whole group.
- Exclusions win over candidates.

The node never attaches an articulation or a prim that contains one, so the robot stays free.
With `Fix All`, every run scans the stage. In large scenes, trigger the node from an event instead of every frame.
When the simulation stops, the node releases all prims and restores their original positions.
