PLC ST Basic 5, 6, 7
EP5 Timer & Trigger
---------------------------------
PROGRAM MAIN
VAR
bPizzaInOven : BOOL;
bBuzzer : BOOL;
iTotalPiazzaCooker : UDINT;
fbTimer : TON;
fbTrigger_RTRIG : R_TRIG;
END_VAR
---------------------------------
fbTimer(IN:=bPizzaInOven, PT:=T#3S);
bBuzzer := fbTimer.Q;
fbTrigger_RTRIG(clk:=fbTimer.Q);
IF fbTrigger_RTRIG.Q THEN
iTotalPiazzaCooker := iTotalPiazzaCooker + 1;
END_IF
---------------------------------
EP6 Visualization
Add visualization
Solution Explorer -> VISUs -> add / visulaization -> input name & open
Open toolbox
View -> toolbox
Add "insert piazza" button
toolbox/add button -> Inputconfiguration -> onMouseClick -> Execute ST-code -> click ">"
MAIN.bPizzaInOven := TRUE;
Control piazza display
State variable -> Invisible -> NOT MAIN.bPizzaInOven
Elapsed Time display
rectangle -> text = "Elapsed time: %s" -> text variables -> MAIN.fbTimer.ET
Add buzzer display
ellipse -> change color in Normal & Alarm state -> color varibales / toggle color -> MAIN.bBuzzer
EP7 state machine
CASE iState OF
0: // Wait for pizza in oven.
sStateDesc := 'Waiting on Pizza Now.';
IF stPizzaInOven.bExist THEN
stPizzaInOven.dtTimeEnteredOven := dtCurrentTime;
iState := 10;
END_IF
10: // We just got a pizza! Cook it.
sStateDesc := 'Baking That Pizza Now.';
fbMyTimer(IN:=TRUE,PT:=T#3S);
IF fbMyTimer.Q THEN
fbMyTimer(IN:=FALSE); // reset timer
iState := 20;
END_IF
20: // Can we move the pizza out of the oven? Its going to burn.
sStateDesc := 'PIZZA BURNING!!!!.';
IF NOT stPizzaDone.bExist THEN
stPizzaInOven.dtTimeExitedOven := dtCurrentTime;
stPizzaDone := stPizzaInOven;
stPizzaInOven := stNULL_PIZZA;
bBuzzer := FALSE;
iState := 30;
ELSE
bBuzzer := TRUE;
END_IF
30: // Pizza just removed. on output tray.
stPizzaDone.tTimeInOven := stPizzaDone.dtTimeExitedOven - stPizzaDone.dtTimeEnteredOven;
iTotalPizzasCooked := iTotalPizzasCooked + 1;
iState := 0;
ELSE
sStateDesc := 'Invalid state!';
END_CASE
Last updated
Was this helpful?