Als Ergänzung zu den bisherigen Beiträgen würde ich deutlich hervorheben wollen, dass "Anfänger" normalerweise mit direkten Zugriffen auf Globalvariablen arbeiten, weil das so gelehrt wird. Die Verwendung der "Schnittstelle" eines Bausteins wird oft nicht einbezogen.
Ein "direkter Zugriff" wäre zum Beispiel so etwas:
Da eine SPS den Zustand der Merkerbytes speichert, können diese in FCs verwendet werden. Das meint wohl auch der TE.
Wenn man häufiger programmiert bzw. etwas Erfahrung gesammelt hat, versucht man einen Baustein so zu schreiben, dass er keine direkten Zugriffe auf Globalvariablen macht. Dazu kann man entweder einen FC oder einen FB nehmen.
Beide haben eine Schnittstelle, an die Eingänge, Ausgänge oder Ein-/Ausgänge geschaltet werden können. Außerdem können TEMP-Wariablen deklariert werden, die im Programm für Zwischenergebnisse genutzt werden können. Da TEMP-Variablen im nächsten Zyklus der SPS normalerweise durch andere Speicherzugriffe mit anderen Werten überschrieben wurden, kann man diese nicht zum Speichern von Werten oder Bitzuständen nutzen.
Um etwas zu "speichern", muss eine Variable genutzt werden die einen festen Speicherplatz hat und damit über mehrere Zyklen hinweg ihren Wert nicht verändert. Dazu gibt es nun 2 Möglichkeiten, wenn man die o.g. direkten Zugriffe vermeiden möchte.
Möglichkeit 1 (geht mit FC oder FB):
Zu speichernde Variable in der Schnittselle an IN_OUT anschließen und beim Bausteinaufruf eine Globalvariable daran anschließen. Z.B. Db1.DBW10 oder MW20 oder, oder, oder
Das macht man in der Regel dann, wenn das Ergebnis in einem anderen Baustein ebenfalls benötigt wird.
Möglichkeit 2 (geht nur mit FB):
Zu speichernde Variable in der Schnittstelle als STAT-Variable deklarieren. Der Wert wird dann in dem zum FB gehörigen Instanz-DB ("IDB") gespeichert.
Das macht man in der Regel dann, wenn das Ergebnis nur in diesem Baustein benötigt wird.
Wenn man so will, ist ein Nachteil dieser Variante, dass beim Aufruf ein Instanz-DB deklariert werden muss. (Von Multiinstanzen jetzt mal abgesehen)