home / skills / benchflow-ai / skillsbench / safety-interlocks

This skill helps you implement and verify safety interlocks in control systems to prevent damage and ensure safe operation.

npx playbooks add skill benchflow-ai/skillsbench --skill safety-interlocks

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
4.0 KB
---
name: safety-interlocks
description: Implement safety interlocks and protective mechanisms to prevent equipment damage and ensure safe control system operation.
---

# Safety Interlocks for Control Systems

## Overview

Safety interlocks are protective mechanisms that prevent equipment damage and ensure safe operation. In control systems, the primary risks are output saturation and exceeding safe operating limits.

## Implementation Pattern

Always check safety conditions BEFORE applying control outputs:

```python
def apply_safety_limits(measurement, command, max_limit, min_limit, max_output, min_output):
    """
    Apply safety checks and return safe command.

    Args:
        measurement: Current sensor reading
        command: Requested control output
        max_limit: Maximum safe measurement value
        min_limit: Minimum safe measurement value
        max_output: Maximum output command
        min_output: Minimum output command

    Returns:
        tuple: (safe_command, safety_triggered)
    """
    safety_triggered = False

    # Check for over-limit - HIGHEST PRIORITY
    if measurement >= max_limit:
        command = min_output  # Emergency cutoff
        safety_triggered = True

    # Clamp output to valid range
    command = max(min_output, min(max_output, command))

    return command, safety_triggered
```

## Integration with Control Loop

```python
class SafeController:
    def __init__(self, controller, max_limit, min_output=0.0, max_output=100.0):
        self.controller = controller
        self.max_limit = max_limit
        self.min_output = min_output
        self.max_output = max_output
        self.safety_events = []

    def compute(self, measurement, dt):
        """Compute safe control output."""
        # Check safety FIRST
        if measurement >= self.max_limit:
            self.safety_events.append({
                "measurement": measurement,
                "action": "emergency_cutoff"
            })
            return self.min_output

        # Normal control
        output = self.controller.compute(measurement, dt)

        # Clamp to valid range
        return max(self.min_output, min(self.max_output, output))
```

## Safety During Open-Loop Testing

During calibration/excitation, safety is especially important because there's no feedback control:

```python
def run_test_with_safety(system, input_value, duration, dt, max_limit):
    """Run open-loop test while monitoring safety limits."""
    data = []
    current_input = input_value

    for step in range(int(duration / dt)):
        result = system.step(current_input)
        data.append(result)

        # Safety check
        if result["output"] >= max_limit:
            current_input = 0.0  # Cut input

    return data
```

## Logging Safety Events

Always log safety events for analysis:

```python
safety_log = {
    "limit": max_limit,
    "events": []
}

if measurement >= max_limit:
    safety_log["events"].append({
        "time": current_time,
        "measurement": measurement,
        "command_before": command,
        "command_after": 0.0,
        "event_type": "limit_exceeded"
    })
```

## Pre-Control Checklist

Before starting any control operation:

1. **Verify sensor reading is reasonable**
   - Not NaN or infinite
   - Within physical bounds

2. **Check initial conditions**
   - Measurement should be at expected starting point
   - Output should start at safe value

3. **Confirm safety limits are configured**
   - Maximum limit threshold set
   - Output clamping enabled

```python
def pre_control_checks(measurement, config):
    """Run pre-control safety verification."""
    assert not np.isnan(measurement), "Measurement is NaN"
    assert config.get("max_limit") is not None, "Safety limit not configured"
    return True
```

## Best Practices

1. **Defense in depth**: Multiple layers of protection
2. **Fail safe**: When in doubt, reduce output
3. **Log everything**: Record all safety events
4. **Never bypass**: Safety code should not be conditionally disabled
5. **Test safety**: Verify interlocks work before normal operation

Overview

This skill implements safety interlocks and protective mechanisms to prevent equipment damage and ensure safe control system operation. It embeds pre-checks, emergency cutoff behavior, output clamping, and logging so agents can enforce safe behavior before and during control actions. The design favors fail-safe responses and layered protection.

How this skill works

The skill inspects sensor measurements and configured safety thresholds before any control output is applied. If a measurement exceeds a high-priority limit, the interlock triggers an emergency cutoff and records an event. Normal control outputs are still clamped to configured min/max bounds, and safety events are logged for post-run analysis.

When to use it

  • Before enabling actuators in closed-loop control to prevent overshoot and equipment damage
  • During open-loop tests or calibration where feedback is absent and risk is higher
  • When running automated sequences that could push system variables beyond safe limits
  • In systems that require strict audit trails of safety-related actions and events
  • Whenever multiple protection layers are required (defense in depth)

Best practices

  • Run pre-control checks: verify sensor values, initial conditions, and configured limits
  • Treat limit checks as highest priority and perform them before any controller compute
  • Clamp outputs to hard min/max and default to a safe output on limit violation
  • Log every safety event with time, measurement, command before/after, and event type
  • Design safety code to be non-bypassable and exercise interlocks in a test regime

Example use cases

  • Wrapping an existing PID controller so it never commands actuators when temperature exceeds safe threshold
  • Running motor calibration routines in open-loop while cutting input immediately on torque or current spikes
  • Adding an interlock layer to a batch process to stop dosing when a level sensor reports overfill
  • Instrumenting safety logs for post-incident analysis and regulatory compliance
  • Creating a pre-flight checklist for robotic systems to ensure sensors and limits are configured

FAQ

What should happen if a sensor reading is NaN or infinite?

Treat it as a safety fault: block outputs, switch to safe output value, and record an event for diagnostics.

Can safety interlocks be disabled for testing?

No. Best practice is never to bypass safety code; instead run tests in a controlled environment or simulate sensor values.