Introduction
A star-delta starter helps start big motors smoothly by reducing the starting current using timers to switch from star to delta connection.
PROGRAM StarDeltaStarter VAR TimerStar: TON; // Timer for star connection TimerDelta: TON; // Timer for delta connection MotorStar: BOOL := FALSE; // Motor connected in star MotorDelta: BOOL := FALSE; // Motor connected in delta StartButton: BOOL; // Input to start motor MotorRunning: BOOL := FALSE; // Motor running status END_VAR // Start motor sequence IF StartButton THEN TimerStar(IN:=TRUE, PT:=T#5S); // Start star timer for 5 seconds MotorStar := TRUE; MotorDelta := FALSE; MotorRunning := TRUE; IF TimerStar.Q THEN TimerDelta(IN:=TRUE, PT:=T#2S); // Start delta timer for 2 seconds MotorStar := FALSE; MotorDelta := TRUE; END_IF IF TimerDelta.Q THEN TimerDelta(IN:=FALSE); MotorDelta := TRUE; // Motor runs in delta END_IF ELSE TimerStar(IN:=FALSE); TimerDelta(IN:=FALSE); MotorStar := FALSE; MotorDelta := FALSE; MotorRunning := FALSE; END_IF END_PROGRAM
StartButton := FALSE;
// Motor is off, timers are reset
TimerStar(IN:=FALSE);
TimerDelta(IN:=FALSE);
MotorStar := FALSE;
MotorDelta := FALSE;
MotorRunning := FALSE;StartButton := TRUE; // Motor starts in star connection for 5 seconds TimerStar(IN:=TRUE, PT:=T#5S); MotorStar := TRUE; MotorDelta := FALSE;
IF TimerStar.Q THEN
TimerDelta(IN:=TRUE, PT:=T#2S);
MotorStar := FALSE;
MotorDelta := TRUE;
END_IFIF TimerDelta.Q THEN TimerDelta(IN:=FALSE); MotorDelta := TRUE; END_IF
PROGRAM StarDeltaStarter VAR TimerStar: TON; TimerDelta: TON; MotorStar: BOOL := FALSE; MotorDelta: BOOL := FALSE; StartButton: BOOL := FALSE; MotorRunning: BOOL := FALSE; TimeElapsed: TIME := T#0S; END_VAR // Simulate pressing start button StartButton := TRUE; // Simulate time passing in 1 second steps FOR i := 1 TO 10 DO // Update star timer TimerStar(IN:=StartButton AND NOT TimerStar.Q, PT:=T#5S); IF TimerStar.Q THEN // Start delta timer after star timer finishes TimerDelta(IN:=NOT TimerDelta.Q, PT:=T#2S); MotorStar := FALSE; MotorDelta := TRUE; ELSE MotorStar := TRUE; MotorDelta := FALSE; END_IF IF TimerDelta.Q THEN MotorDelta := TRUE; END_IF MotorRunning := MotorStar OR MotorDelta; // Print status IF MotorStar THEN WriteLn(CONCAT('Second ', INT_TO_STRING(i), ': Motor in STAR connection')); ELSIF MotorDelta THEN WriteLn(CONCAT('Second ', INT_TO_STRING(i), ': Motor in DELTA connection')); ELSE WriteLn(CONCAT('Second ', INT_TO_STRING(i), ': Motor OFF')); END_IF END_FOR END_PROGRAM
IF Start THEN
TimerStar(IN:=TRUE, PT:=T#10s);
IF TimerStar.Q THEN
TimerDelta(IN:=TRUE, PT:=T#5s);
END_IF
END_IFIF Start THEN
TimerStar(IN:=Start, PT:=T#10s);
IF TimerStar.Q THEN
TimerDelta(IN:=Start, PT:=T#5s);
END_IF
END_IFPass the test and this pattern moves unknown