Wie schon einer gesagt hat, haben FB ein Gedächtnis. Ihre Instanz. Bei Siemens ist das ein DB.
Dieser bekommt schon in der Entwicklungsumgebung (TIA oder Step7V5 oder noch älteres Zeug -- und auch bei
CodeSys) Werte, welche auf die AS geladen werden. Damit sind die immer initialisiert.
Wenn der Strom wieder kommt, dann ist es bei S. möglich die Werte wieder aus dem Ladespeicher zu holen. Also sind sie auch da wieder initialisiert.
FB Parameter müssen nicht verschaltet werden, da diese Werte ja in der Instanz liegen. Außer bei komplizierten Datentypen im IN-OUT. Dort werden im DB nur Pointer hinterlegt, der eigentliche Wert liegt wo anders.
Und jetzt kommt mal wieder Siemens-Spezialverwirrung:
Wenn also kein einziger FB Aufruf den komplizierten IN-OUT versorgt, dann steht da ein Null-Pointer drim. Beim Zugriff auf diesem IN-OUT innerhalb des FB geht die CPU in STOP (oder OB121).
Vollprofis (oder sollte ich hier Vollpfosten sagen) haben noch die Möglichkeit im DB-Editor in den Pointer was rein zu schreiben. Also mit dieser grottigen Syntax P#DBa.DBXb.c den Zeiger auf einen hoffentlich vorhandenen DB zu lenken. Schlechter Stil, gaaaanz schlechter Stil sowas. Wenn das nicht klappt, dann suchst du stundenlang nach etwas was nicht da ist (da sucht man ja bekanntlich am längsten nach)
Eine Struktur im IN-OUT (per Referenz übergeben) wird mit Peripherie versorgt. Bloß unterscheidet der Pointer nicht zwischen PE und PA. Der kennt nur P. Der Befehl im FB entscheidet dann ob von PE gelesen oder nach PA geschrieben wird. Du denkst, dass du da ein PEW angelegt hat, aber drinnen schreibt er dir auf das PAW mit der Nummer. HEUL
Das mit den Peripheriezugriffen sollte man bei Siemens bleiben lassen.
Noch schlimmer ist das bei FC. In Step7V5 ist es erlaubt an einen Input eines FC vom Typ sagen wir mal DWORD z.B. ein PAD20 dran zu schreiben. Im FC darfst du sowohl auf den Input schreiben als auch von ihm Lesen. D.h. wenn du liest bekommst du PED20, wenn du schreibst PAD20. Bei Siemens werden bei den CPU 300 und 400 auch FC Parameter immer per Referenz übergeben. noch mehr heul.
Bei einfachen Datentypen verhält sich der Siemens FB eher so, wie es die Begriffe IN OUT und INOUT suggerieren.