-> Hier kostenlos registrieren
Hallo Leute,
ich habe folgende SCL-Code geschrieben. Es enthält keine Fehler aber beim Simulieren werden die Timer nicht gestartet. Ich habe mich damit erwartet, dass der Timer 1(T1) genau starten würde, wenn "Aufbe_laueft AND Aut_Aufbe" 1 oder TRUE liefert.
Was mache ich falsch???
SCL-Code:
FUNCTION_BLOCK FB1
VAR_TEMP
Spch_fertig : BOOL; // temporäre Variablen
Aufbe_laueft : BOOL;
END_VAR
VAR
Valve5 : BOOL;// statische Variablen
Valve6 : BOOL;
Valve7 : BOOL;
Valve8 : BOOL;
Valve9 : BOOL;
Valve10 : BOOL;
Valve11 : BOOL;
Valve12 : BOOL;
Valve13 : BOOL;
Valve14 : BOOL;
Valve15 : BOOL;
Valve16 : BOOL;
Valve17 : BOOL;
Valve18 : BOOL;
Valve19 : BOOL;
Valve20 : BOOL;
Valve21 : BOOL;
Valve22 : BOOL;
MessungW1 : REAL;
MessungW2 : REAL;
MessungW3 : REAL;
MessungW4 : REAL;
MessungW5 : REAL;
MessungW6 : REAL;
MessungL1 : REAL;
MessungL2 : REAL;
MessungL3 : REAL;
OX_F_Zeit1 : S5TIME;
OX_F_Zeit2 : S5TIME;
OX_F_Zeit3 : S5TIME;
Komp_Zeit1 : S5TIME;
Komp_Zeit2 : S5TIME;
Tz1 : BOOL;
Tz2 : BOOL;
Tz3 : BOOL;
Tz4 : BOOL;
Tz5 : BOOL;
BiVal1 : WORD;
BiVal2 : WORD;
BiVal3 : WORD;
BiVal4 : WORD;
BiVal5 : WORD;
change : BOOL;
Aut_Aufbe : BOOL;
END_VAR
// Anweisungsteil
BEGIN
Spch_fertig := FALSE;
Aufbe_laueft := FALSE;
Valve5 := FALSE;
Valve6 := FALSE;
Valve7 := FALSE;
Valve8 := FALSE;
Valve9 := FALSE;
Valve10 := FALSE;
Valve11 := FALSE;
Valve12 := FALSE;
Valve13 := FALSE;
Valve14 := FALSE;
Valve15 := FALSE;
Valve16 := FALSE;
Valve17 := FALSE;
Valve18 := FALSE;
Valve19 := FALSE;
Valve20 := FALSE;
Valve21 := FALSE;
Valve22 := FALSE;
MessungW1 := 0.0;
MessungW2 := 0.0;
MessungW3 := 0.0;
MessungW4 := 0.0;
MessungW5 := 0.0;
MessungW6 := 0.0;
MessungL1 := 0.0;
MessungL2 := 0.0;
MessungL3 := 0.0;
WHILE Spch_fertig = FALSE DO
Tz1 := FALSE;
Tz2 := FALSE;
Tz3 := FALSE;
Tz4 := FALSE;
Tz5 := FALSE;
OX_F_Zeit1 := S_OFFDT(T_NO:=T1, S:=Aufbe_laueft AND Aut_Aufbe,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz1);
OX_F_Zeit2 := S_OFFDT(T_NO:=T2, S:=Tz1,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz2);
OX_F_Zeit3 := S_OFFDT(T_NO:=T3, S:=Tz2,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz3);
Komp_Zeit1 := S_OFFDT(T_NO:=T4, S:=Aufbe_laueft AND Aut_Aufbe,TV:=T#180s,R :=FALSE,BI:=BiVal1,Q:=Tz4);
Komp_Zeit2 := S_OFFDT(T_NO:=T5, S:=Tz4,TV:=T#180s,R :=FALSE,BI:=BiVal1,Q:=Tz5);
Valve5 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve6 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve16 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve19 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve7 := TZ1 AND (NOT Tz2);
Valve8 := TZ1 AND (NOT Tz2);
Valve17 := TZ1 AND (NOT Tz2);
Valve20 := TZ1 AND (NOT Tz2);
Valve9 := Tz2 AND (NOT Tz3);
Valve10 := Tz2 AND (NOT Tz3);
Valve18 := Tz2 AND (NOT Tz3);
Valve21 := Tz2 AND (NOT Tz3);
Valve22 := Aufbe_laueft AND Aut_Aufbe AND (NOT Spch_fertig);
IF Aufbe_laueft=TRUE AND Aut_Aufbe=TRUE AND Tz1=TRUE THEN
MessungW1 := MessungW1 + 1.0;
MessungW4 := MessungW4 + 1.0;
ELSE
MessungW1 := MessungW1;
MessungW4 := MessungW4;
END_IF;
IF Tz2=TRUE THEN
MessungW2 := MessungW2 + 1.0;
MessungW5 := MessungW5 + 1.0;
ELSE
MessungW2 := MessungW2;
MessungW5 := MessungW5;
END_IF;
IF Tz3=TRUE THEN
MessungW3 := MessungW3 + 1.0;
MessungW6 := MessungW6 + 1.0;
ELSE
MessungW3 := MessungW3;
MessungW6 := MessungW6;
END_IF;
IF MessungW4 + MessungW5 + MessungW6 >= 30 THEN
Spch_fertig := TRUE;
ELSE
Spch_fertig := FALSE;
END_IF;
END_WHILE;
END_FUNCTION_BLOCK
ich habe folgende SCL-Code geschrieben. Es enthält keine Fehler aber beim Simulieren werden die Timer nicht gestartet. Ich habe mich damit erwartet, dass der Timer 1(T1) genau starten würde, wenn "Aufbe_laueft AND Aut_Aufbe" 1 oder TRUE liefert.
Was mache ich falsch???
SCL-Code:
FUNCTION_BLOCK FB1
VAR_TEMP
Spch_fertig : BOOL; // temporäre Variablen
Aufbe_laueft : BOOL;
END_VAR
VAR
Valve5 : BOOL;// statische Variablen
Valve6 : BOOL;
Valve7 : BOOL;
Valve8 : BOOL;
Valve9 : BOOL;
Valve10 : BOOL;
Valve11 : BOOL;
Valve12 : BOOL;
Valve13 : BOOL;
Valve14 : BOOL;
Valve15 : BOOL;
Valve16 : BOOL;
Valve17 : BOOL;
Valve18 : BOOL;
Valve19 : BOOL;
Valve20 : BOOL;
Valve21 : BOOL;
Valve22 : BOOL;
MessungW1 : REAL;
MessungW2 : REAL;
MessungW3 : REAL;
MessungW4 : REAL;
MessungW5 : REAL;
MessungW6 : REAL;
MessungL1 : REAL;
MessungL2 : REAL;
MessungL3 : REAL;
OX_F_Zeit1 : S5TIME;
OX_F_Zeit2 : S5TIME;
OX_F_Zeit3 : S5TIME;
Komp_Zeit1 : S5TIME;
Komp_Zeit2 : S5TIME;
Tz1 : BOOL;
Tz2 : BOOL;
Tz3 : BOOL;
Tz4 : BOOL;
Tz5 : BOOL;
BiVal1 : WORD;
BiVal2 : WORD;
BiVal3 : WORD;
BiVal4 : WORD;
BiVal5 : WORD;
change : BOOL;
Aut_Aufbe : BOOL;
END_VAR
// Anweisungsteil
BEGIN
Spch_fertig := FALSE;
Aufbe_laueft := FALSE;
Valve5 := FALSE;
Valve6 := FALSE;
Valve7 := FALSE;
Valve8 := FALSE;
Valve9 := FALSE;
Valve10 := FALSE;
Valve11 := FALSE;
Valve12 := FALSE;
Valve13 := FALSE;
Valve14 := FALSE;
Valve15 := FALSE;
Valve16 := FALSE;
Valve17 := FALSE;
Valve18 := FALSE;
Valve19 := FALSE;
Valve20 := FALSE;
Valve21 := FALSE;
Valve22 := FALSE;
MessungW1 := 0.0;
MessungW2 := 0.0;
MessungW3 := 0.0;
MessungW4 := 0.0;
MessungW5 := 0.0;
MessungW6 := 0.0;
MessungL1 := 0.0;
MessungL2 := 0.0;
MessungL3 := 0.0;
WHILE Spch_fertig = FALSE DO
Tz1 := FALSE;
Tz2 := FALSE;
Tz3 := FALSE;
Tz4 := FALSE;
Tz5 := FALSE;
OX_F_Zeit1 := S_OFFDT(T_NO:=T1, S:=Aufbe_laueft AND Aut_Aufbe,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz1);
OX_F_Zeit2 := S_OFFDT(T_NO:=T2, S:=Tz1,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz2);
OX_F_Zeit3 := S_OFFDT(T_NO:=T3, S:=Tz2,TV:=T#60s,R :=FALSE,BI:=BiVal1,Q:=Tz3);
Komp_Zeit1 := S_OFFDT(T_NO:=T4, S:=Aufbe_laueft AND Aut_Aufbe,TV:=T#180s,R :=FALSE,BI:=BiVal1,Q:=Tz4);
Komp_Zeit2 := S_OFFDT(T_NO:=T5, S:=Tz4,TV:=T#180s,R :=FALSE,BI:=BiVal1,Q:=Tz5);
Valve5 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve6 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve16 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve19 := Aufbe_laueft AND Aut_Aufbe AND (NOT Tz1);
Valve7 := TZ1 AND (NOT Tz2);
Valve8 := TZ1 AND (NOT Tz2);
Valve17 := TZ1 AND (NOT Tz2);
Valve20 := TZ1 AND (NOT Tz2);
Valve9 := Tz2 AND (NOT Tz3);
Valve10 := Tz2 AND (NOT Tz3);
Valve18 := Tz2 AND (NOT Tz3);
Valve21 := Tz2 AND (NOT Tz3);
Valve22 := Aufbe_laueft AND Aut_Aufbe AND (NOT Spch_fertig);
IF Aufbe_laueft=TRUE AND Aut_Aufbe=TRUE AND Tz1=TRUE THEN
MessungW1 := MessungW1 + 1.0;
MessungW4 := MessungW4 + 1.0;
ELSE
MessungW1 := MessungW1;
MessungW4 := MessungW4;
END_IF;
IF Tz2=TRUE THEN
MessungW2 := MessungW2 + 1.0;
MessungW5 := MessungW5 + 1.0;
ELSE
MessungW2 := MessungW2;
MessungW5 := MessungW5;
END_IF;
IF Tz3=TRUE THEN
MessungW3 := MessungW3 + 1.0;
MessungW6 := MessungW6 + 1.0;
ELSE
MessungW3 := MessungW3;
MessungW6 := MessungW6;
END_IF;
IF MessungW4 + MessungW5 + MessungW6 >= 30 THEN
Spch_fertig := TRUE;
ELSE
Spch_fertig := FALSE;
END_IF;
END_WHILE;
END_FUNCTION_BLOCK