-> Hier kostenlos registrieren
Hallo zusammen,
ich habe das untere SCL-Code geschrieben. Beim Simulieren ergibt mir Pumpe1_Ein 1 TRUE, wenn ich z.B Fuellstand1 = 11.0 setze und Valve1_Auf = FALSE. Ich habe erwartet, dass Pumpe1_Ein = FALSE für Valve1_Auf = FALSE. Was mache ich Falch???
CODE:
FUNCTION_BLOCK Wasserquelle
//Deklaration und Initialisierung
VAR_INPUT //Eingansparameter
//Start : BOOL := FALSE;
//Stop : BOOL := FALSE;
Fuellstand1 : REAL := 0.0;
Fuellstand2 : REAL := 0.0;
FuellDigit1 : REAL := 0.0;
FuellDigit2 : REAL := 0.0;
Valve1_Auf : BOOL := FALSE;
Valve2_Auf : BOOL := FALSE;
Valve3_Auf : BOOL := FALSE;
Valve4_Auf : BOOL := FALSE;
END_VAR
VAR //Durchgansparameter
Fullst_Voll_1 : BOOL := FALSE;
Fullst_Voll_2 : BOOL := FALSE;
Fullst_Leer_1 : BOOL := FALSE;
Fullst_Leer_2 : BOOL := FALSE;
Pumpe1_Ein : BOOL := FALSE;
Pumpe2_Ein : BOOL := FALSE;
Pumpe3_Ein : BOOL := FALSE;
Pumpe4_Ein : BOOL := FALSE;
END_VAR
VAR_OUTPUT//Ausgansparameter
Aufbe_laueft : BOOL := FALSE;
SB1_Befu : BOOL := FALSE;
SB2_Befu : BOOL := FALSE;
SB1_Ent : BOOL := FALSE;
SB2_Ent : BOOL := FALSE;
END_VAR
BEGIN
//Funktion Füllstand Voll
IF ABS(Fuellstand1) >=100 THEN
Fullst_Voll_1 := TRUE;
ELSE
Fullst_Voll_1 := FALSE;
END_IF;
//Funktion Pumpe 1 Ein
Pumpe1_Ein := Valve1_Auf AND (NOT Fullst_Voll_1);
//Funktion Befüllen
SB1_Befu := Pumpe1_Ein;
//Funktion Füllstand Leer 1
IF ABS(Fuellstand1) <=10 THEN
Fullst_Leer_1 := TRUE;
ELSE
Fullst_Leer_1 := FALSE;
END_IF;
//Funktion Pumpe 2 Ein
Pumpe2_Ein := Valve2_Auf AND (NOT Fullst_Leer_1);
//Funktion Entleeren
SB1_Ent := Pumpe2_Ein;
//Funktion Füllstand Voll 2
IF ABS(Fuellstand2) >=100 THEN
Fullst_Voll_2 := TRUE;
ELSE
Fullst_Voll_2 := FALSE;
END_IF;
//Funktion Pumpe 3 Ein
Pumpe3_Ein := Valve3_Auf AND (NOT Fullst_Voll_2);
//Funktion Befüllen
SB2_Befu := Pumpe3_Ein;
//Funktion Füllstand Leer 2
IF ABS(Fuellstand2) <=10 THEN
Fullst_Leer_2 := TRUE;
ELSE
Fullst_Leer_2 := FALSE;
END_IF;
//Funktion Pumpe 4 Ein
Pumpe4_Ein := Valve4_Auf AND (NOT Fullst_Leer_2);
//Funktion Entleeren
SB2_Ent := Pumpe4_Ein;
Aufbe_laueft := SB1_Ent OR SB2_Ent;
END_FUNCTION_BLOCK
ORGANIZATION_BLOCK OB1
VAR_TEMP
Info : ARRAY[0..19] OF BYTE;
END_VAR
BEGIN
SB1_Befu := Pumpe1_Ein;
SB2_Befu := Pumpe3_Ein;
SB1_Ent := Pumpe2_Ein;
SB2_Ent := Pumpe4_Ein;
Aufbe_laueft := SB1_Ent OR SB2_Ent;
END_ORGANIZATION_BLOCK
ich habe das untere SCL-Code geschrieben. Beim Simulieren ergibt mir Pumpe1_Ein 1 TRUE, wenn ich z.B Fuellstand1 = 11.0 setze und Valve1_Auf = FALSE. Ich habe erwartet, dass Pumpe1_Ein = FALSE für Valve1_Auf = FALSE. Was mache ich Falch???
CODE:
FUNCTION_BLOCK Wasserquelle
//Deklaration und Initialisierung
VAR_INPUT //Eingansparameter
//Start : BOOL := FALSE;
//Stop : BOOL := FALSE;
Fuellstand1 : REAL := 0.0;
Fuellstand2 : REAL := 0.0;
FuellDigit1 : REAL := 0.0;
FuellDigit2 : REAL := 0.0;
Valve1_Auf : BOOL := FALSE;
Valve2_Auf : BOOL := FALSE;
Valve3_Auf : BOOL := FALSE;
Valve4_Auf : BOOL := FALSE;
END_VAR
VAR //Durchgansparameter
Fullst_Voll_1 : BOOL := FALSE;
Fullst_Voll_2 : BOOL := FALSE;
Fullst_Leer_1 : BOOL := FALSE;
Fullst_Leer_2 : BOOL := FALSE;
Pumpe1_Ein : BOOL := FALSE;
Pumpe2_Ein : BOOL := FALSE;
Pumpe3_Ein : BOOL := FALSE;
Pumpe4_Ein : BOOL := FALSE;
END_VAR
VAR_OUTPUT//Ausgansparameter
Aufbe_laueft : BOOL := FALSE;
SB1_Befu : BOOL := FALSE;
SB2_Befu : BOOL := FALSE;
SB1_Ent : BOOL := FALSE;
SB2_Ent : BOOL := FALSE;
END_VAR
BEGIN
//Funktion Füllstand Voll
IF ABS(Fuellstand1) >=100 THEN
Fullst_Voll_1 := TRUE;
ELSE
Fullst_Voll_1 := FALSE;
END_IF;
//Funktion Pumpe 1 Ein
Pumpe1_Ein := Valve1_Auf AND (NOT Fullst_Voll_1);
//Funktion Befüllen
SB1_Befu := Pumpe1_Ein;
//Funktion Füllstand Leer 1
IF ABS(Fuellstand1) <=10 THEN
Fullst_Leer_1 := TRUE;
ELSE
Fullst_Leer_1 := FALSE;
END_IF;
//Funktion Pumpe 2 Ein
Pumpe2_Ein := Valve2_Auf AND (NOT Fullst_Leer_1);
//Funktion Entleeren
SB1_Ent := Pumpe2_Ein;
//Funktion Füllstand Voll 2
IF ABS(Fuellstand2) >=100 THEN
Fullst_Voll_2 := TRUE;
ELSE
Fullst_Voll_2 := FALSE;
END_IF;
//Funktion Pumpe 3 Ein
Pumpe3_Ein := Valve3_Auf AND (NOT Fullst_Voll_2);
//Funktion Befüllen
SB2_Befu := Pumpe3_Ein;
//Funktion Füllstand Leer 2
IF ABS(Fuellstand2) <=10 THEN
Fullst_Leer_2 := TRUE;
ELSE
Fullst_Leer_2 := FALSE;
END_IF;
//Funktion Pumpe 4 Ein
Pumpe4_Ein := Valve4_Auf AND (NOT Fullst_Leer_2);
//Funktion Entleeren
SB2_Ent := Pumpe4_Ein;
Aufbe_laueft := SB1_Ent OR SB2_Ent;
END_FUNCTION_BLOCK
ORGANIZATION_BLOCK OB1
VAR_TEMP
Info : ARRAY[0..19] OF BYTE;
END_VAR
BEGIN
SB1_Befu := Pumpe1_Ein;
SB2_Befu := Pumpe3_Ein;
SB1_Ent := Pumpe2_Ein;
SB2_Ent := Pumpe4_Ein;
Aufbe_laueft := SB1_Ent OR SB2_Ent;
END_ORGANIZATION_BLOCK