Funktion FC oder SFC
Funktionen werden oft mit dem Kürzel FC und bezeichnet. SFC sind Systemfunktionen, die im Betriebssystem der CPU integriert sind. Funktionen sind Unterprogramme, die in strukturierten Programmen eine Teilaufgabe übernehmen und für immer wieder kehrende Aufgaben eingesetzt werden können. Funktionen werden entweder von Organisationsbausteinen (z.B. OB1) oder von anderen Funktionen oder Funktionsbausteinen aufgerufen. Funktionen besitzen im Gegensatz zu Funktionsbausteinen keinen Speicherbereich, die über den Bausteinaufruf hinaus gültig sind. Nach der Bearbeitung der Funktion gehen die lokalen Daten (z.B. Temperatur) verloren.
In Funktionen können z.B. Operanden natürlich direkt eingesetzt werden, jedoch ist diese Methode nicht empfehlenswert und so auch nicht vorgesehen. Im Idealfall werden Funktionen mit Formalparametern parametriert. Erst beim Aufruf werden sie mit Aktualparametern versorgt. Die Deklaration der Formalparameter erfolgt im Deklarationsteil der Funktion. Hier werden lokale Variablen definiert, die in der Funktion eingesetzt werden können. Erst beim Aufruf des Bausteins werden die Variablen mit echten Werten versorgt.
Dabei wird zwischen zwei Variablentypen unterschieden:
- Lokale Variablen
- Bausteininterne Lokalvariablen
Lokale Variablen
Zu den lokalen Variablen gehören die Bausteinparameter IN, OUT und IN_OUT.
- IN: Hier werden Eingangsvariablen deklariert. Diese werden im Baustein nur abgefragt.
- OUT: Hier werden die Ausgangsvariablen deklariert. Diese werden nur beschrieben.
- IN_OUT: Am IN_OUT werden die Variablen deklariert, die sowohl beschrieben als auch abgefragt werden können.
Bausteininterne Lokalvariablen
Diese gehören nicht zu den Bausteinvariablen. Beim FC gibt es nur eine bausteininterne Lokalvariable. Das ist TEMP und wird als interner Speicher, z.B. zum Zwischenspeichern von Ergebnissen, benutzt. Sie sind nur innerhalb eines Programmzyklus gültig, haben also keine Gedächtnisfunktion.
Die Vorgehensweise beim Einsatz von Funktionen ist im Idealfall wie folgt:
- Deklaration der Variablen im Deklarationsteil
- Erstellung des Programms mit Variablen
- Aufruf der Funktion im Organisationsbaustein oder in einer anderen Funktion oder Funktionsbaustein
- Zuweisung von Aktualparameter (Operanden, Zeitwerte etc.)
Der Rückgabewert RET_VAL im Deklarationsteil
Im Deklarationsteil einer Funktion kann der Datentyp des Rückgabewerts definiert werden. Bei den vielen Systemfunktionen oder auch Organisationsbausteinen wie z.B. der Weckalarm OB10 wird der Rückgabewert RET_VAL dafür benutzt, um Fehlercodes zu schreiben. Diese können dann über die Variable RET_VAL ausgelesen werden. Bei selbsterstellten Funktionen kann, muss aber nicht, ein Wert in RET_VAL geschrieben werden. Soll kein Rückgabewert im RET_VAL geschrieben werden, können Sie im Deklarationsteil beim RET_VAL den Datentyp auf Void setzen.
Funktionen können über Codebausteine aufgerufen werden und erhalten auf diese Art und Weise als Ergebnis einen Rückgabewert, sozusagen als Antwort auf den Funktionsaufruf. Neben dem RET_VAL sind natürlich noch weitere Ausgänge deklarierbar. Die Norm EN 61131-3 sieht jedoch vor, dass nur der Rückgabewert an den aufrufenden Codebaustein übergeben wird. Wird der RET_VAL nicht genutzt, so muss zumindest ein anderer Ausgang definiert werden. Wenn Funktionen oder Funktionsbausteine z.B. über den ENO verkettet werden, dann wird ebenfalls der RET_VAL für die Verkettung benutzt. In dem Fall braucht man jedoch nichts deklarieren, das geschieht alles intern und automatisch.
Freigabeeingang EN und Freigabeausgang ENO
Diese beiden Dinge wurden ausführlich unter Freigabeein- und -ausgang EN und ENO beschrieben.
Systemfunktionen SFC
Im Betriebssystem sind bereits viele vordefinierte Funktionen vorhanden, die für unterschiedliche Aufgaben eingesetzt werden können. Sie befinden sich z.B. in den beiden Bibliotheksordnern STDLIBS und Standard Library.
Sollte eine Funktion nicht direkt aus der Bibliothek per Drag and Drop im Programm einfügbar sein (das betriff z.B. den Ordner stdlibs/builtin), dann gehen Sie wie folgt vor. Öffnen Sie im Simatic Manager die Bibliotheken. Ziehen Sie die Funktion in Ihr Projekt (unter Bausteine). Danach ist die Funktion je nach dem was es ist im Ordner FC oder SFC verfügbar und kann per Drag and Drop in z.B. OB1 gezogen werden.