-> Hier kostenlos registrieren
Hallo liebe Programmierer!
In Vorbereitung auf meine Matura/Abitur, programmiere ich gerade eine Jalousiesteuerung. Ich will bei einmaligem Drücken des Tasters automatisch hoch oder runter fahren und bei längerem gedrückt halten (2s) in den Handbetrieb-State gehen. Der Wind-State wird nur durch einen Schalter ausgelöst, das funktioniert aber.
Ich habe das mithilfe von R_TRIG gelöst, allerdings wechselt mein Programm nicht in den nächsten State. Könntet ihr mir vielleicht den Fehler sagen? Dankeschön!
LG Tim
PROGRAM _INIT
S1_Rauf := 0;
S2_Runter := 0;
END_PROGRAM
PROGRAM _CYCLIC
R_TRIG_0(CLK := S1_Rauf);
R_TRIG_1(CLK := S2_Runter);
Rauf := R_TRIG_0.Q;
Runter := R_TRIG_1.Q;
TON_0(IN := (Jalousie = Z1_Auto_Rauf), PT := T#2s);
TON_1(IN := (Jalousie = Z2_Auto_Runter), PT := T#2s);
CASE Jalousie OF
Z0_Stopp:
A0_Rauf := 0;
A1_Runter := 0;
IF(Rauf AND NOT S4_Oben AND NOT S2_Runter) THEN
Jalousie := Z1_Auto_Rauf;
END_IF;
IF(Runter AND NOT S5_Unten AND NOT S1_Rauf) THEN
Jalousie := Z2_Auto_Runter;
END_IF;
Z1_Auto_Rauf;
A0_Rauf := 1;
A1_Runter := 0;
IF(TON_0.Q AND S1_Rauf AND NOT S2_Runter) THEN
Jalousie := Z3_Hand_Rauf;
END_IF;
IF(S2_Runter OR S4_Oben) THEN
Jalousie := Z0_Stopp;
END_IF;
Z2_Auto_Runter;
A0_Rauf := 0;
A1_Runter := 0;
IF(TON_1.Q AND S2_Runter AND NOT S1_Rauf) THEN
Jalousie := Z4_Hand_Runter;
END_IF;
IF(S1_Rauf OR S5_Unten) THEN
Jalousie := Z0_Stopp;
END_IF;
Z3_Hand_Rauf:
A0_Rauf := 1;
A1_Runter := 0;
IF( NOT S1_Rauf OR S4_Oben) THEN
Jalousie := Z0_Stopp;
END_IF;
Z4_Hand_Runter:
A0_Rauf := 0;
A1_Runter := 0;
IF( NOT S2_Runter OR S5_Unten) THEN
Jalousie := Z0_Stopp;
END_IF;
Z5_Wind_Rauf:
A0_Rauf := 1;
A1_Runter := 0;
IF(S4_Oben) THEN
Jalousie := Z6_Wind_Oben;
END_IF;
Z6_Wind_Oben:
A0_Rauf := 0;
A1_Runter := 0;
IF(NOT S3_Wind) THEN
Jalousie := Z0_Stopp;
END_IF;
END_CASE
IF(S3_Wind) THEN
Jalousie := Z5_Wind_Rauf;
END_IF;
END_PROGRAM
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM
In Vorbereitung auf meine Matura/Abitur, programmiere ich gerade eine Jalousiesteuerung. Ich will bei einmaligem Drücken des Tasters automatisch hoch oder runter fahren und bei längerem gedrückt halten (2s) in den Handbetrieb-State gehen. Der Wind-State wird nur durch einen Schalter ausgelöst, das funktioniert aber.
Ich habe das mithilfe von R_TRIG gelöst, allerdings wechselt mein Programm nicht in den nächsten State. Könntet ihr mir vielleicht den Fehler sagen? Dankeschön!
LG Tim
PROGRAM _INIT
S1_Rauf := 0;
S2_Runter := 0;
END_PROGRAM
PROGRAM _CYCLIC
R_TRIG_0(CLK := S1_Rauf);
R_TRIG_1(CLK := S2_Runter);
Rauf := R_TRIG_0.Q;
Runter := R_TRIG_1.Q;
TON_0(IN := (Jalousie = Z1_Auto_Rauf), PT := T#2s);
TON_1(IN := (Jalousie = Z2_Auto_Runter), PT := T#2s);
CASE Jalousie OF
Z0_Stopp:
A0_Rauf := 0;
A1_Runter := 0;
IF(Rauf AND NOT S4_Oben AND NOT S2_Runter) THEN
Jalousie := Z1_Auto_Rauf;
END_IF;
IF(Runter AND NOT S5_Unten AND NOT S1_Rauf) THEN
Jalousie := Z2_Auto_Runter;
END_IF;
Z1_Auto_Rauf;
A0_Rauf := 1;
A1_Runter := 0;
IF(TON_0.Q AND S1_Rauf AND NOT S2_Runter) THEN
Jalousie := Z3_Hand_Rauf;
END_IF;
IF(S2_Runter OR S4_Oben) THEN
Jalousie := Z0_Stopp;
END_IF;
Z2_Auto_Runter;
A0_Rauf := 0;
A1_Runter := 0;
IF(TON_1.Q AND S2_Runter AND NOT S1_Rauf) THEN
Jalousie := Z4_Hand_Runter;
END_IF;
IF(S1_Rauf OR S5_Unten) THEN
Jalousie := Z0_Stopp;
END_IF;
Z3_Hand_Rauf:
A0_Rauf := 1;
A1_Runter := 0;
IF( NOT S1_Rauf OR S4_Oben) THEN
Jalousie := Z0_Stopp;
END_IF;
Z4_Hand_Runter:
A0_Rauf := 0;
A1_Runter := 0;
IF( NOT S2_Runter OR S5_Unten) THEN
Jalousie := Z0_Stopp;
END_IF;
Z5_Wind_Rauf:
A0_Rauf := 1;
A1_Runter := 0;
IF(S4_Oben) THEN
Jalousie := Z6_Wind_Oben;
END_IF;
Z6_Wind_Oben:
A0_Rauf := 0;
A1_Runter := 0;
IF(NOT S3_Wind) THEN
Jalousie := Z0_Stopp;
END_IF;
END_CASE
IF(S3_Wind) THEN
Jalousie := Z5_Wind_Rauf;
END_IF;
END_PROGRAM
PROGRAM _EXIT
(* Insert code here *)
END_PROGRAM