🎓 Lesson 19
D5
Integrating PLC-Controlled Workcell Signals into ROS 2 Lifecycle Nodes
It's like giving a robot a set of clear, reliable 'on/off' signals from industrial machines (like blast-hole drills or conveyor sensors) and letting ROS 2 manage them safely—starting, stopping, and recovering—just like a real factory controller would.
🎯 Learning Objectives
-
✓
Design a ROS 2 Lifecycle Node that synchronizes its state transitions with PLC signal changes (e.g., 'Ready', 'Fault', 'Emergency_Stop')
-
✓
Analyze and map PLC tag addresses (e.g., BOOL array %R100.0–%R100.7) to ROS 2 topic interfaces using OPC UA PubSub or ros2_control hardware_interface
-
✓
Explain the impact of lifecycle transition timeouts on blast-site safety interlocks and apply timeout tuning per ISO 13849-1 PLd requirements
-
✓
Apply diagnostic message propagation from PLC faults (e.g., 'Drill Over-Torque') into ROS 2 LifecycleNode’s on_error() callback with standardized diagnostic_status messages
📖 Why This Matters
In surface mining, blast-hole drilling rigs, muck-handling conveyors, and detonation sequencers rely on PLCs for hard real-time, safety-certified control. When integrating robotic survey drones or autonomous drill path planners using ROS 2, blindly subscribing to raw sensor topics risks race conditions, missed emergency stops, or unsafe activation during PLC reboots. Lifecycle Nodes fix this by enforcing strict state coordination—so your drone only initiates surveying *after* the PLC confirms ‘Workcell_Safe = TRUE’ and *immediately suspends* when ‘E-Stop_Active = TRUE’. This isn’t theoretical: at BHP’s South Flank mine, mismatched lifecycle semantics caused three near-miss incidents during early ROS 2 pilot deployments.
📘 Core Principles
Lifecycle management in ROS 2 decouples node behavior from process lifetime—enabling explicit control over initialization, activation, deactivation, and cleanup. Industrial integration adds two critical layers: (1) Deterministic signal acquisition—PLC I/O must be sampled at known jitter bounds (<10 ms for safety interlocks), typically via time-synchronized OPC UA PubSub over DDS or vendor-specific drivers (e.g., ros2_control’s ‘siemens_ros2_driver’); and (2) State contract enforcement—each Lifecycle Node transition (e.g., ‘activate’) must await confirmation from the PLC’s corresponding state variable (e.g., ‘PLC_Workcell_State == 3’ meaning ‘READY_TO_RUN’), verified via handshake polling or event-triggered callbacks. Crucially, transitions must be idempotent and fault-recoverable: if a PLC reboot drops the ‘active’ signal mid-blast sequence, the ROS 2 node must auto-transition to ‘cleanup’ and emit a diagnostic error—not hang or silently continue.
📐 Lifecycle Transition Timeout Validation
The maximum allowable transition timeout must satisfy both ROS 2 middleware constraints and functional safety requirements. It is derived from the PLC’s worst-case response time plus network jitter and must not exceed the safety-related stop time defined in ISO 13849-1.
Maximum Safe Transition Timeout
T_max = T_stop_budget − (T_PLC_scan + T_jitter) × (1 − margin)
Calculates longest permissible ROS 2 lifecycle transition timeout to maintain functional safety compliance.
Variables:
| Symbol | Name | Unit | Description |
| T_max |
Maximum safe transition timeout |
ms |
Longest time ROS 2 node may wait for PLC confirmation before triggering safety fallback |
| T_stop_budget |
Total safety stop time budget |
ms |
Maximum allowed time from fault detection to safe stop, per ISO 13849-1 performance level |
| T_PLC_scan |
PLC program scan time |
ms |
Worst-case time for PLC to evaluate safety logic and update output tags |
| T_jitter |
Network timing jitter |
ms |
Maximum deviation in OPC UA PubSub message delivery latency |
| margin |
Safety margin coefficient |
unitless |
Fractional buffer (e.g., 0.2 for 20%) applied to account for unmodeled delays |
Typical Ranges:
PLd-rated blast-zone interlock: 75 - 95 ms
PLe-rated detonation sequencer: 20 - 40 ms
💡 Worked Example
Problem: A blast-hole positioning system uses a Siemens S7-1500 PLC communicating via OPC UA PubSub over DDS. Measured PLC scan time = 8 ms, network round-trip jitter = ±3 ms, and ISO 13849-1 PLd-rated emergency stop circuit requires ≤120 ms total stop time. What is the maximum safe timeout for the ROS 2 LifecycleNode’s ‘activate’ transition?
1.
Step 1: Identify worst-case PLC response = scan time + max jitter = 8 ms + 3 ms = 11 ms
2.
Step 2: Subtract PLC response from total stop budget to reserve time for ROS 2 internal processing and DDS delivery: 120 ms − 11 ms = 109 ms
3.
Step 3: Apply 20% safety margin (per IEC 61508 SIL2 guidance) → 109 ms × 0.8 = 87.2 ms
Answer:
The result is 87 ms (rounded), which falls within the safe range of 75–95 ms for PLd-compliant blast-zone interlocks.
🏗️ Real-World Application
At Rio Tinto’s Gudai-Darri mine, a ROS 2-based autonomous drill path verifier node integrates with a Rockwell ControlLogix PLC managing a Boart Longyear LF90 drill rig. The PLC exposes tags: ‘Rig_Ready’ (BOOL), ‘Rig_Fault_Code’ (UINT16), and ‘Rig_Position_Valid’ (BOOL) via OPC UA. The ROS 2 Lifecycle Node implements: (1) ‘configure()’ reads rig calibration parameters from PLC memory-mapped tags; (2) ‘activate()’ waits for ‘Rig_Ready == TRUE && Rig_Position_Valid == TRUE’ with 85 ms timeout; (3) ‘deactivate()’ triggers PLC ‘Hold_Sequence’ command and verifies ‘Rig_Holding == TRUE’ before releasing control; (4) On ‘Rig_Fault_Code != 0’, the node calls on_error(), publishes diagnostic_status to /diagnostics, and forces transition to ‘cleanup’. This design reduced unplanned drill interruptions by 63% and passed third-party TÜV SÜD functional safety audit for SIL2 alignment.