Eine Funktion ist eine POU, die bei ihrer Abarbeitung genau ein Datenelement (das aus mehreren Elementen wie Feldern oder Strukturen bestehen kann) liefert und deren Aufruf in textuellen Sprachen als Operator in Ausdrücken auftreten kann.
Wenn Sie eine Funktion deklarieren, vergessen Sie nicht, dass die Funktion einen Typ erhalten muss. Das bedeutet, dass Sie nach dem Funktionsnamen einen Doppelpunkt gefolgt von einem Typ eingeben müssen.
Beispiel
Eine korrekte Funktionsdeklaration kann wie folgt aussehen:
FUNCTION Fct: INT
Darüber hinaus muss der Funktion ein Ergebnis zugewiesen werden. Das bedeutet, dass der Funktionsname als Ausgangsvariable verwendet wird.
Eine Funktionsdeklaration beginnt mit dem Schlüsselwort FUNCTION. Beachten Sie die Empfehlungen zur Namensgebung⮫ „Empfehlungen für die Benennung von Identifikatoren“.
Aufrufen einer Funktion
In ST kann ein Funktionsaufruf als Operand in einem Ausdruck verwendet werden.
CODESYS erlaubt die Verwendung von globalen Variablen innerhalb einer Funktion. Damit wird bewusst von der Norm IEC61131-3 abgewichen, die vorschreibt, dass der Rückgabewert einer Funktion nur durch die Eingabeparameter verändert wird. Der Unterschied zwischen Funktionen und Programmen besteht also nur darin, dass Funktionen nur einen Rückgabewert liefern und dass ihre Parameter und Rückgabewerte über den Stack abgewickelt werden.
Beispiele für den Aufruf der Funktion Fct
In ST
Ergebnis := Fct(7, 2, 4);
Im FUP





HINWEIS

Wenn eine lokale Variable in einer Funktion als RETAIN deklariert ist, hat dies keinerlei Auswirkungen. Die Variable wird nicht im Bereich "Behalten" gespeichert!
-
Wenn Sie in Ihrem Projekt eine Funktion mit dem Namen CheckBounds definieren, können Sie diese verwenden, um auf Bereichsüberläufe in Arrays⮫ „ARRAY“ zu prüfen.
-
Wenn Sie in Ihrem Projekt Funktionen mit den Namen CheckDivByte, CheckDivWord, CheckDivDWord und CheckDivReal definieren, können Sie diese verwenden, um den Wert des Divisors zu prüfen, wenn Sie den Operator DIV verwenden, zum Beispiel um eine Division durch 0 zu vermeiden⮫ „DIV“.
-
Wenn Sie Funktionen mit den Namen CheckRangeSigned und CheckRangeUnsigned definieren, dann können Bereichsüberschreitungen von Variablen, die mit Unterbereichstypen deklariert sind, abgefangen werden⮫ „Teilbereichstypen“.
Alle diese Namen von Prüffunktionen sind für die beschriebene Verwendung reserviert.