Skip to content

Commit 854e687

Browse files
committed
docs(opcua): dated CHANGELOG, issue-linked Future work, node ID discovery section
- ``CHANGELOG.rst``: replace "Forthcoming" header with the dated ``0.4.0 (2026-04-11)`` form used by other medkit packages so the catkin release scripts do not have to ask. Expand the bullet list to cover the fixes from this cleanup pass (per-entity capabilities, connection-state propagation, deterministic entity order, all four OPC-UA node ID identifier types). - ``design/index.rst``: rewrite the Future work section to link tracked issues (#366 open62541pp vendoring, #367 certificate auth, #368 optional browse CLI) directly, and split the list into "tracked in the issue tracker" and "untracked, open an issue if you hit the pain". - ``README.md``: add a new "Finding Node IDs on your PLC" section between ``SOVD Entity Model`` and ``Configuration`` pointing at UaExpert, ``python -m asyncua.tools.uals`` and vendor toolchain exports. This was the main quickstart gap flagged by reviewers - without it, a new integrator reading the README would not know how to populate the ``node_id`` field for a real PLC. The already-rich inline comment block in ``config/tank_demo_nodes.yaml`` is now discoverable from the main docs.
1 parent 6c59389 commit 854e687

3 files changed

Lines changed: 54 additions & 8 deletions

File tree

src/ros2_medkit_plugins/ros2_medkit_opcua/CHANGELOG.rst

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,19 @@
22
Changelog for package ros2_medkit_opcua
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5-
Forthcoming
6-
-----------
5+
0.4.0 (2026-04-11)
6+
------------------
77
* Initial release
88
* ``OpcuaPlugin`` implementation of ``GatewayPlugin`` and ``IntrospectionProvider`` that bridges OPC-UA capable PLCs into the SOVD entity tree
99
* REST endpoints via the new ``get_routes()`` plugin API: ``x-plc-data``, ``x-plc-operations``, ``x-plc-status``
10-
* ``NodeMap`` driven by YAML configuration - same binary serves any PLC by changing the node map file
10+
* Vendor capabilities registered per entity - only PLC-backed apps and the PLC runtime component advertise the ``x-plc-*`` endpoints
11+
* Full OPC 10000-6 section 5.3.1.10 node identifier support (``i=`` numeric, ``s=`` string, ``g=`` GUID, ``b=`` opaque ByteString); example node maps for OpenPLC, Siemens S7-1500 TIA Portal, Beckhoff TwinCAT 3, Allen-Bradley via Kepware and KUKA KR C5
12+
* ``NodeMap`` driven by YAML configuration - same binary serves any OPC-UA compliant server by changing the node map file
13+
* Deterministic entity ordering in ``IntrospectionResult`` output (entries sorted by id)
1114
* Threshold-based PLC alarm detection routed to SOVD faults via ``ros2_medkit_msgs`` services ``ReportFault`` / ``ClearFault``
1215
* Optional bridging of numeric PLC values to ROS 2 ``std_msgs/Float32`` topics from ``set_context()``
1316
* Type-aware writes with per-node range validation
17+
* Robust connection-loss detection: all three OPC-UA client paths (``read_value``, ``read_values``, ``write_value``) mark the connection as dropped on terminal status codes so ``OpcuaPoller`` reconnect kicks in without stalling
1418
* Polling mode (default) and OPC-UA subscription mode, backed by ``open62541pp`` v0.16.0
1519
* Integration test suite against an OpenPLC IEC 61131-3 tank demo container
16-
* Contributors: @mfaferek
20+
* Contributors: @mfaferek93

src/ros2_medkit_plugins/ros2_medkit_opcua/README.md

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,34 @@ GET /api/v1/components/openplc_runtime/x-plc-status
119119
}
120120
```
121121

122+
## Finding Node IDs on your PLC
123+
124+
The plugin identifies PLC tags by OPC-UA node IDs in the canonical string
125+
format (`ns=N;i=M` numeric, `ns=N;s=tag` string, `ns=N;g=...` GUID, or
126+
`ns=N;b=...` opaque). To discover the correct node IDs for a real PLC
127+
without guessing, use one of the standard OPC-UA browser tools:
128+
129+
- **UaExpert** - free GUI browser from Unified Automation. Download at
130+
<https://www.unified-automation.com/downloads/uaexpert.html>. Connect
131+
to your PLC's `opc.tcp://` endpoint, navigate the address space tree,
132+
right-click any Variable node, copy the NodeId property into the YAML
133+
map below.
134+
135+
- **`asyncua` command line** - `pip install asyncua` and then
136+
`python -m asyncua.tools.uals -u opc.tcp://your-plc:4840` walks the
137+
address space from a terminal, no GUI required.
138+
139+
- **Vendor toolchains** - Siemens TIA Portal's OPC-UA configuration
140+
exports DB/variable node IDs in the `ns=3;s="..."` format. Beckhoff
141+
TwinCAT 3 XAE displays them as `ns=4;s=MAIN.Tank.level`. Allen-Bradley
142+
users typically deploy Kepware or Ignition as an OPC-UA gateway which
143+
auto-maps tag names.
144+
145+
`config/tank_demo_nodes.yaml` ships a commented example with
146+
ready-to-paste templates for OpenPLC, Siemens S7-1500, Beckhoff TwinCAT,
147+
Allen-Bradley via Kepware and KUKA KR C5. Copy one of those blocks as a
148+
starting point.
149+
122150
## Configuration
123151

124152
### Node Map (YAML)

src/ros2_medkit_plugins/ros2_medkit_opcua/design/index.rst

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,23 @@ What the plugin can NOT do today (regardless of vendor):
158158
Future work
159159
===========
160160

161-
- Certificate-based OPC-UA authentication (Basic256Sha256)
161+
Tracked issues in the `ros2_medkit issue tracker
162+
<https://github.com/selfpatch/ros2_medkit/issues>`_:
163+
164+
- `#367 <https://github.com/selfpatch/ros2_medkit/issues/367>`_
165+
Certificate-based OPC-UA authentication (Basic256Sha256)
166+
- `#368 <https://github.com/selfpatch/ros2_medkit/issues/368>`_
167+
Optional auto-browse of the OPC-UA address space to seed the node map
168+
(deferred pending validated user demand; UaExpert and ``python -m
169+
asyncua.tools.uals`` are recommended for now)
170+
- `#366 <https://github.com/selfpatch/ros2_medkit/issues/366>`_
171+
Vendor ``open62541pp`` inline so the package can be added to the
172+
rosdistro release list
173+
174+
Untracked (open the issue if you hit the pain):
175+
162176
- Hot-reload of the node map without restarting the plugin
163-
- Optional auto-browse of the OPC-UA address space to seed the node map
164177
- Complex OPC-UA type support (structures, arrays, enums)
165-
- Native AlarmCondition event subscription as a complement to threshold
166-
polling
178+
- Native ``AlarmCondition`` event subscription as a complement to
179+
threshold polling
180+
- Vendor information model bindings (Euromap 77, Siemens DI, PA-DIM)

0 commit comments

Comments
 (0)