0
0
FreertosHow-ToIntermediate · 4 min read

How to Implement Hot Standby PLC for Reliable Automation

To implement a hot standby PLC, configure two PLCs where one acts as the primary controller and the other as the standby. The standby PLC continuously monitors the primary and takes over control instantly if the primary fails, ensuring no downtime.
📐

Syntax

Implementing hot standby PLC involves setting up two PLCs with communication and synchronization logic. Key parts include:

  • Primary PLC: Runs the main control program.
  • Standby PLC: Runs the same program but in monitoring mode.
  • Heartbeat Signal: A regular signal sent from primary to standby to confirm it is active.
  • Failover Logic: Detects heartbeat loss and switches control to standby.
structured_text
(* Pseudocode for hot standby PLC logic *)

// Primary PLC
IF system_ok THEN
    send_heartbeat(TRUE);
    run_main_control();
ELSE
    send_heartbeat(FALSE);
END_IF

// Standby PLC
IF receive_heartbeat() = TRUE THEN
    monitor_primary();
ELSE
    activate_standby_control();
END_IF
💻

Example

This example shows a simple hot standby logic in Structured Text for two PLCs communicating via a shared variable Heartbeat. The primary sends a heartbeat signal, and the standby switches control if the heartbeat stops.

structured_text
(* Primary PLC Program *)
VAR
    Heartbeat : BOOL := FALSE;
    SystemOK : BOOL := TRUE;
END_VAR

// Main loop
IF SystemOK THEN
    Heartbeat := TRUE; // Send heartbeat
    // Run main control tasks here
ELSE
    Heartbeat := FALSE; // Stop heartbeat
END_IF

(* Standby PLC Program *)
VAR
    Heartbeat : BOOL;
    ControlActive : BOOL := FALSE;
    HeartbeatLostTimer : TIME := T#0S;
END_VAR

// Monitor heartbeat
IF Heartbeat THEN
    HeartbeatLostTimer := T#0S; // Reset timer
    ControlActive := FALSE; // Standby not active
ELSE
    HeartbeatLostTimer := HeartbeatLostTimer + T#100MS;
    IF HeartbeatLostTimer > T#500MS THEN
        ControlActive := TRUE; // Take control
        // Run standby control tasks here
    END_IF
END_IF
Output
Primary PLC sets Heartbeat TRUE continuously while system is OK. Standby PLC detects Heartbeat FALSE for more than 500ms and activates control.
⚠️

Common Pitfalls

Common mistakes when implementing hot standby PLC include:

  • Not synchronizing data between primary and standby, causing inconsistent states after failover.
  • Using too long or too short heartbeat intervals, leading to delayed or false failovers.
  • Failing to test failover scenarios, which can cause unexpected downtime.
  • Not handling communication errors properly between PLCs.

Always ensure data consistency and test failover under real conditions.

structured_text
(* Wrong approach: No heartbeat check *)
// Standby PLC
IF TRUE THEN
    // Always assume primary is down
    ControlActive := TRUE;
END_IF

(* Correct approach: Heartbeat check with timer *)
IF Heartbeat THEN
    ControlActive := FALSE;
ELSE
    IF HeartbeatLostTimer > T#500MS THEN
        ControlActive := TRUE;
    END_IF
END_IF
📊

Quick Reference

Tips for implementing hot standby PLC:

  • Use a reliable heartbeat signal between PLCs.
  • Synchronize all critical data regularly.
  • Set heartbeat timeout based on system response needs.
  • Test failover and recovery thoroughly.
  • Use communication protocols that support redundancy (e.g., Ethernet/IP, Profinet).

Key Takeaways

Set up two PLCs with one as primary and one as standby for hot standby implementation.
Use a heartbeat signal to monitor primary PLC health and trigger failover.
Synchronize data between PLCs to maintain consistent control states.
Configure appropriate heartbeat intervals to avoid false or delayed failover.
Test failover scenarios regularly to ensure system reliability.