Beckhoff First Scan: Bit
PROGRAM Example VAR FirstScan : BOOL; END_VAR
In Beckhoff TwinCAT (2 and 3), there is no single "magic" global bit like the S:FS in Allen-Bradley . Instead, you can access the "First Scan" status through built-in system variables or by creating a custom initialization flag. 1. Using Built-in System Info ( FirstCycle )
If you set outputs on the first scan before the EtherCAT bus is fully operational (state OP ), your writes may be ignored or cause errors. Always wait for EtherCAT Master State = OP before critical I/O initialization.
To illustrate the utility of the first scan bit, here are a few common industrial automation use cases: beckhoff first scan bit
IF fbFirstScan.bFirstScan THEN (* Force reset retain values on fresh download *) rMotorPosition := 0.0; // Even if retain, reset on first scan bRecipeLoaded := FALSE; END_IF
Does not waste execution time checking an IF statement during normal cyclic operation. Critical Use Cases for First Scan Logic
Don't cram too much heavy processing into the first scan. If you have massive data to load, consider a dedicated "Initialization" state that spans multiple cycles. PROGRAM Example VAR FirstScan : BOOL; END_VAR In
Unlike a physical switch, this "bit" is a logical pulse that remains TRUE for exactly one task cycle. The Role of Initialization
To use the First Scan Bit in a Beckhoff PLC, you need to access the PLC's system variables. The First Scan Bit is typically represented by a specific system variable, such as FirstScan or InitDone .
// -- Wait for EtherCAT sync -- nState := fbEcMaster.GetState(); IF nState <> 8 THEN RETURN; // Don't run logic until bus is operational END_IF Using Built-in System Info ( FirstCycle ) If
: If the CycleCount is 1 , it is the first scan. This is useful if you need to know the first scan of a specific task rather than the entire PLC. Method 3: Initialization in POUs (FB_init)
END_IF
Network interfaces, serial buffers, or fieldbus master configurations may contain stale data after a restart.