Files
psi-tp2/motor/build/plc.st
wikano 1532753042 david
2025-12-04 23:08:12 +01:00

155 lines
3.4 KiB
Smalltalk

TYPE
LOGLEVEL : (CRITICAL, WARNING, INFO, DEBUG) := INFO;
END_TYPE
FUNCTION_BLOCK LOGGER
VAR_INPUT
TRIG : BOOL;
MSG : STRING;
LEVEL : LOGLEVEL := INFO;
END_VAR
VAR
TRIG0 : BOOL;
END_VAR
IF TRIG AND NOT TRIG0 THEN
{{
LogMessage(GetFbVar(LEVEL),(char*)GetFbVar(MSG, .body),GetFbVar(MSG, .len));
}}
END_IF;
TRIG0:=TRIG;
END_FUNCTION_BLOCK
PROGRAM motor
VAR
START : BOOL;
STOP : BOOL;
DELAY : TIME := T#100ms;
RUNNING : BOOL;
RS0 : RS;
TON0 : TON;
END_VAR
TON0(IN := START, PT := DELAY);
RS0(S := TON0.Q, R1 := STOP);
RUNNING := RS0.Q1;
END_PROGRAM
PROGRAM traffic_light
VAR
RED : BOOL;
RED0 : BOOL;
ORANGE : BOOL;
GREEN : BOOL;
DELAY : TIME := T#30s;
TON0 : TON;
TON1 : TON;
TON2 : TON;
WAIT : BOOL := 1;
TON3 : TON;
DELAY2 : TIME := T#1s;
DELAY3 : TIME := T#10s;
END_VAR
INITIAL_STEP Step0:
GREEN(N);
COMPUTE_FUNCTION_BLOCKS(S);
END_STEP
ACTION COMPUTE_FUNCTION_BLOCKS:
TON0(IN := WAIT, PT := DELAY);
TON4(IN := WAIT, PT := DELAY3);
TON3(IN := WAIT, PT := DELAY2);
END_ACTION
TRANSITION FROM Step0 TO Step1
:= TON0.Q;
END_TRANSITION
STEP Step1:
ORANGE(N);
END_STEP
TRANSITION FROM Step1 TO Step2
:= TON3.Q;
END_TRANSITION
STEP Step2:
RED(N);
END_STEP
TRANSITION FROM Step2 TO Step0
:= TON4.Q;
END_TRANSITION
END_PROGRAM
PROGRAM automate_controle_commande_ld
VAR
P1_enc : BOOL;
WAIT2 : TIME;
P1_run : BOOL;
P2_enc : BOOL;
P2_run : BOOL;
P3_enc : BOOL;
P3_run : BOOL;
Pump_def : BOOL;
WAIT7 : TIME;
secours : BOOL;
only_one_run : BOOL;
TON0 : TON;
WAIT13 : TIME;
TON1 : TON;
secours_c_ok : BOOL;
CTU0 : CTU;
TON2 : TON;
CTU1 : CTU;
CTU2 : CTU;
req_enc_ok : BOOL;
WAIT15 : TIME;
TON3 : TON;
R_TRIG1 : R_TRIG;
_TMP_GT42_ENO : BOOL;
_TMP_GT42_OUT : BOOL;
R_TRIG2 : R_TRIG;
_TMP_EQ54_OUT : BOOL;
_TMP_EQ53_OUT : BOOL;
_TMP_AND45_ENO : BOOL;
_TMP_AND45_OUT : BOOL;
END_VAR
Pump_def := NOT(P1_run) AND P1_enc OR NOT(P2_run) AND P2_enc OR NOT(P3_run) AND P3_enc;
Pump_def := TRUE;
TON0(IN := TRUE, PT := WAIT7);
secours := TON0.Q;
only_one_run := NOT(P3_run) AND NOT(P2_run) AND P1_run OR NOT(P3_run) AND P2_run AND NOT(P1_run) OR P3_run AND NOT(P2_enc) AND NOT(P1_run);
Pump_def := TRUE;
TON2(IN := TRUE, PT := WAIT13);
R_TRIG1(CLK := );
CTU1(CU := R_TRIG1.Q, R := true);
_TMP_GT42_OUT := GT(EN := TON2.Q, IN1 := CTU1.CV, IN2 := 1, ENO => _TMP_GT42_ENO);
secours_c_ok := _TMP_GT42_OUT;
secours := TRUE;
TON1(IN := TRUE, PT := WAIT2);
R_TRIG2(CLK := P1_enc OR P2_enc OR P3_enc);
CTU0(CU := R_TRIG2.Q, R := true);
_TMP_EQ54_OUT := EQ(CTU0.CV, 1);
CTU2(R := NOT(P1_enc) OR NOT(P2_enc) OR NOT(P3_enc), PV := 1);
_TMP_EQ53_OUT := EQ(CTU2.CV, 1);
_TMP_AND45_OUT := AND(EN := TON1.Q, IN1 := _TMP_EQ54_OUT, IN2 := _TMP_EQ53_OUT, ENO => _TMP_AND45_ENO);
req_enc_ok := _TMP_AND45_OUT;
only_one_run := TRUE;
TON3(IN := TRUE, PT := WAIT15);
only_one_run := NOT(TON3.Q);
END_PROGRAM
CONFIGURATION Config0
RESOURCE Res0 ON PLC
TASK task0(INTERVAL := T#20ms,PRIORITY := 0);
PROGRAM instance0 WITH task0 : motor;
END_RESOURCE
END_CONFIGURATION