// LICENSE : GPLv2+
BEGIN
// Run the main FUP block.
CALL "FB_main", "DB_main"
BE
END_ORGANIZATION_BLOCK
]]>
// LICENSE : GPLv2+
VAR_INPUT
PERIOD : S5TIME; // Timer period
T : TIMER; // Timer cell
MINVAL : DWORD; // Minimal #REG value
MAXVAL : DWORD; // Maximal #REG value
END_VAR
VAR_IN_OUT
REG : DWORD; // Shift register
STATE : BOOL; // Timer state
DIR : BOOL; // Shift direction
END_VAR
BEGIN
// Self re-arming timer
U #STATE
L #PERIOD
SV #T
UN #T
= #STATE
// Select sweep direction
L #MINVAL
L #REG
==D // #MINVAL reached?
S #DIR // reverse direction
L #MAXVAL
==D // #MAXVAL reached?
R #DIR // reverse direction
// Shift #REG, if required
L #REG
UD L#-1
L #MINVAL // Initial #REG value
SPZ _001 // #REG is uninitialized?
TAK
U #STATE // Next state?
SPBN _001
U #DIR // Left or right?
SPBN _000
RLD 2 // Next state (left)
_000: RRD 1 // Next state (right)
_001: T #REG
BE
END_FUNCTION
]]>
]]>