Objekt Funktion

Eine Funktion ist eine POU, die bei der Ausführung genau ein Datenelement liefert und dessen Aufruf in textuellen Sprachen als Operator in Ausdrücken vorkommen kann. Das Datenelement kann auch ein Array oder eine Struktur sein.

Im SPS-Projektbaum haben Funktions-POUs das Suffix (FUN). Der Editor einer Funktion besteht aus dem Deklarationsteil und dem Implementierungsteil.

Objekt Funktion 1:

Alle Daten einer Funktion sind temporäre Daten und sind nur während der Ausführung einer Funktion gültig (Stack-Variablen). Das bedeutet, dass TwinCAT alle Variablen, die Sie in einer Funktion deklariert haben, bei jedem Aufruf der Funktion neu initialisiert.

Objekt Funktion 2:

Aufrufe einer Funktion mit denselben Eingabevariablen-Werten liefern immer denselben Ausgabewert. Deshalb dürfen Funktionen keine globalen Variablen und Adressen verwenden!

Die oberste Zeile des Deklarationsteils enthält folgende Deklaration:

FUNCTION <function> : <data type>

Darunter deklarieren Sie die Eingabe- und Funktionsvariablen.

Die Ausgabevariable einer Funktion ist der Funktionsname.

Objekt Funktion 3:

Wenn Sie eine lokale Variable in einer Funktion als RETAIN deklarieren, hat dies keinen Effekt. In diesem Fall gibt TwinCAT einen Compilerfehler aus.

Objekt Funktion 4:

In TwinCAT 3 können Sie explizite und implizite Parameterzuweisungen in Funktionsaufrufen nicht mischen. Das bedeutet, dass Sie entweder nur explizite oder nur implizite Parameterzuweisungen in Funktionsaufrufen verwenden. Die Reihenfolge der Parameterzuweisungen beim Funktionsaufruf ist beliebig.

Funktion aufrufen

In ST können Sie den Aufruf einer Funktion als Operand in Ausdrücken verwenden.

In AS können Sie einen Funktionsaufruf nur innerhalb von Schrittaktionen oder Transitionen verwenden.

Beispiele:

Funktion mit Deklarationsteil und einer Zeile Implementierungs-Code:

Objekt Funktion 5:

ST:

nRes := F_Sample(5,3,22)

AWL:

Objekt Funktion 6:

FUP:

Objekt Funktion 7:

Funktionen mit zusätzlichen Ausgängen

Nach der Norm IEC 61131-3 können Funktionen zusätzliche Ausgänge haben. Die zusätzlichen Ausgänge deklarieren Sie in der Funktion zwischen den Schlüsselwörtern VAR_OUTPUT und END_VAR. Die Funktion rufen Sie gemäß folgender Syntax auf:

<function> (<function output variable1> => <output variable 1>, <function output variable n> => <output variable n>)

Beispiel:

Die Funktion F_Fun ist mit zwei Eingabevariablen nIn1 und nIn2 definiert. Der Ausgabevariablen der Funktion F_Fun wird auf die lokal deklarierten Ausgangsvariablen nLoc1 und nLoc2 geschrieben.

F_Fun(nIn1 := 1, nIn2 := 2, nOut1 => nLoc1, nOut2 => nLoc2);

Zugriff auf ein einzelnes Element eines strukturierten Rückgabetyps beim Methoden-/Funktions-/Eigenschaftenaufruf

Um direkt bei einem Methoden-, Funktions- oder Eigenschaftenaufruf auf ein einzelnes Element des strukturierten Datentyps, welcher von der Methode/Funktion/Eigenschaft zurückgeliefert wird, zugreifen zu können, kann folgende Umsetzung verwendet werden. Ein strukturierter Datentyp ist beispielsweise eine Struktur oder ein Funktionsbaustein.

  1. Der Rückgabetyp der Methode/Funktion/Eigenschaft wird als „REFERENCE TO <structured type>“ definiert (anstelle von lediglich „<structured type>“).
  2. Bei einem solchen Rückgabetyp ist zu beachten, dass – falls beispielsweise eine FB-lokale Instanz des strukturierten Datentyps zurückgeliefert werden soll – der Referenzoperator REF= anstatt des „normalen“ Zuweisungsoperators := verwendet werden muss.

Die Erklärungen und das Beispiel dieses Abschnitts beziehen sich auf den Aufruf einer Eigenschaft. Sie sind aber genauso auf andere Aufrufe übertragbar, die Rückgabewerte liefern (z. B. Methoden oder Funktionen).

Beispiel

Deklaration der Struktur ST_Sample (strukturierter Datentyp):

TYPE ST_Sample :
STRUCT
    bVar  : BOOL;
    nVar  : INT;
END_STRUCT
END_TYPE

Deklaration des Funktionsbausteins FB_Sample:

FUNCTION_BLOCK FB_Sample
VAR
    stLocal     : ST_Sample;
END_VAR

Deklaration der Eigenschaft FB_Sample.MyProp mit dem Rückgabetyp „REFERENCE TO ST_Sample“:

PROPERTY MyProp : REFERENCE TO ST_Sample

Implementierung der Get-Methode von der Eigenschaft FB_Sample.MyProp:

MyProp REF= stLocal;

Implementierung der Set-Methode von der Eigenschaft FB_Sample.MyProp:

stLocal := MyProp;

Aufruf der Get- und Set-Methoden im Hauptprogramm MAIN:

PROGRAM MAIN
VAR
    fbSample    : FB_Sample;
    nSingleGet  : INT;
    stGet       : ST_Sample;
    bSet        : BOOL;
    stSet       : ST_Sample;
END_VAR
// Get - single member and complete structure possible
nSingleGet := fbSample.MyProp.nVar;
stGet      := fbSample.MyProp;
 
// Set - only complete structure possible
IF bSet THEN
    fbSample.MyProp REF= stSet;
    bSet            := FALSE;
END_IF 

 

Durch die Deklaration des Rückgabetyps der Eigenschaft MyProp als „REFERENCE TO ST_Sample“ und durch die Verwendung des Referenzoperators REF= in der Get-Methode dieser Eigenschaft, kann direkt beim Aufruf der Eigenschaft auf ein einzelnes Element des zurückgelieferten strukturierten Datentyps zugegriffen werden.

VAR
    fbSample    : FB_Sample;
    nSingleGet  : INT;
END_VAR
nSingleGet := fbSample.MyProp.nVar;

Wenn der Rückgabetyp nur als „ST_Sample“ deklariert wäre, müsste die von der Eigenschaft zurückgelieferte Struktur zunächst einer lokalen Strukturinstanz zugewiesen werden. Die einzelnen Strukturelemente könnten dann anhand der lokalen Strukturinstanz abgefragt werden.

VAR
    fbSample    : FB_Sample;
    stGet       : ST_Sample;
    nSingleGet  : INT;
END_VAR
stGet      := fbSample.MyProp;
nSingleGet := stGet.nVar;