Zuweisung "True" direkt in FB in INPUT

ssyn

Level-2
Beiträge
124
Reaktionspunkte
12
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe in einem alten Projekt seltsame Deklaration gefunden.

Code:
FUNCTION_BLOCK My_FB

VAR_INPUT
    mybool1: BOOL:=TRUE;
    mybool2: BOOL:=TRUE;
END_VAR

....

-----Programm

If mybool1 and mybool2 then
...

So, es gibt zuweisung ":=TRUE" direkt in FB INPUT und meiner Meinung nach es wird überhaupt NIE funktioniert. Das ist aber keine interne Daten und bei Aufruf bleiben beide Bool-Variables FALSE. Oder ich verstehe hier etwas nicht?
 
Bei FBs müssen die Eingänge im aufrufenden Baustein nicht unbedingt mit einem Operanden belegt werden.
In diesem Fall bekommen sie den zugewiesenen Standardwert.

Noch üblicher ist das bei INTs & Co., dass man einen Standardwert hat, wenn man den Eingang außen nicht belegt.


PS:
Ist dann an der grauen Farbe des unbelegten Eingangs zu erkennen:
1691401695672.png

Wenn man das TRUE z.B. deutlich häufiger braucht, muss man es nicht dauernd dran schreiben, sondern nur in den wenigen Fällen dann das FALSE.
Oder halt ggf. einen Operanden verknüpfen.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
So, es gibt zuweisung ":=TRUE" direkt in FB INPUT und meiner Meinung nach es wird überhaupt NIE funktioniert.
Das ist keine Zuweisung (zur Laufzeit), sondern die Festlegung des Startwertes bei der Initialisierung von Instanzen des FB.
Werden die Eingänge beim Aufruf der Instanz beschaltet, dann sieht der FB die Initialwerte gar nicht, sondern die Aktualwerte dessen, was da angeschaltet ist. Wird die Instanz später mal aufgerufen, ohne daß der Eingang beschaltet ist, dann bleibt der letzte Aktualwert erhalten.

Harald
 
Das ist keine Zuweisung (zur Laufzeit), sondern die Festlegung des Startwertes bei der Initialisierung von Instanzen des FB.

Hmm, wenn ich richtig verstanden, solche Festlegung wird funktionieren, nur wenn:

Mache Aufruf von FB, aber ohne Input Variables in Programm selbst.

Dann wird Instanz-FB aufgerufen und StartWert wird übergenommen.

z.B.

Code:
FUNCTION_BLOCK My_FB

VAR_INPUT
    mybool1: BOOL:=TRUE;
    mybool2: BOOL:=TRUE;
END_VAR

Var_out
num : INT;

End_Var

---Programm

If mybool1 and mybool2 then
num := num +1;

mybool1 := FALSE;
mybool2 := FALSE;
End_If


----- PLC_PRG
PROGRAM PLC_PRG
VAR

myFBI : My_FB;
mynum : INT;


END_VAR

myFBI ( mynum => num);
 
Zuletzt bearbeitet:
Hmm, wenn ich richtig verstanden, solche Festlegung wird funktionieren, nur wenn:

Mache Aufruf von FB, aber ohne Input Variables in Programm selbst.

Dann wird Instanz-FB aufgerufen und StartWert wird übergenommen.
Der Startwert wird nur beim Initialisieren übernommen.
Im Programm des FB wird mit dem Aktualwert gearbeitet. Der Aktualwert kann der Startwert sein, wenn noch nie ein Wert zugewiesen wurde.

Code:
num := num +1;

mybool1 := FALSE;
mybool2 := FALSE;
Das Rücklesen von OUTPUT und das Schreiben auf INPUT im Baustein ist gaaanz schlechter Programmierstil, falls es überhaupt vom Compiler zugelassen wird.

Harald
 
Zurück
Oben