Skip to main content

Objekt: Methode

Symbol: _cds_icon_method.png

Schlüsselwort: METHOD

Methoden sind eine Erweiterung der Norm IEC 61131-3 und ein Mittel der objektorientierten Programmierung, das der Datenkapselung dient. Eine Methode enthält eine Deklaration und eine Implementierung. Eine Methode ist jedoch im Gegensatz zu einer Funktion kein unabhängiger Programmierbaustein, sondern ist einem Funktionsbaustein oder Programm untergeordnet. Eine Methode kann auf alle gültigen Variablen des übergeordneten Programmierbausteins zugreifen.

Sie können unterhalb eines Programms oder eines Funktionsbausteins eine Methode hinzufügen. Verwenden Sie dafür den Befehl Projekt → Objekt hinzufügen → Methode , dann öffnet sich der Dialog Methode hinzufügen.

Zur Organisation von Methoden können Sie Schnittstellen verwenden.

Für weiter Informationen siehe: Implementieren einer Schnittstelle

Wichtig

Wenn Sie eine Methode, die unterhalb eines Programmierbausteins ist, kopieren und unter einer Schnittstelle einfügen, oder die Methode dahin verschieben, wird automatisch die enthaltene Implementierung entfernt.

Deklaration

Syntax:

METHOD <access specifier> <method name> : <type of return value>

<access specifier>

Optional

Zugriffsmodifizierer

Je nach deklariertem Zugriffsmodifizierer kann eine Methode nur innerhalb des eigenen Namensraums (INTERNAL), nur innerhalb des eigenen Programmierbausteins und seinen Ableitungen (PROTECTED) oder nur innerhalb des eigenen Programmierbausteins (PRIVATE) aufgerufen werden. Bei PUBLIC kann die Methode überall aufgerufen werden.

<method name>

Bezeichner der Methode

<type of retur value>

Optional

Rückgabetyp der Methode

Hinweis: Bei Methoden, die keinen expliziten Rückgabetyp haben, wird die erste deklarierte Ausgabe als Rückgabewert verwendet. Nur wenn weder Rückgabetyp noch Ausgabe deklariert sind, liefert eine Methode keinen Wert zurück. Ein Compilerfehler wird aber in keinem der beiden Fälle erzeugt.

Tabelle 59. Mögliche Gültigkeitsbereiche mit Variablendeklaration (Parameter)

<scope list>

Gültigkeitsbereiche:

  • VAR_IN_OUT <variable declaration list> END_VAR

    für Variablendeklaration bei Ein- /Ausgabevariablen

  • VAR_INPUT <variable declaration list> END_VAR

    für Variablendeklaration für Eingaben

  • VAR_OUTPUT <variable declaration list> END_VAR

    für Variablendeklaration für Ausgaben

    Methoden können wie Funktionen zusätzliche Ausgaben haben. Den zusätzlichen Ausgaben müssen Sie beim Methodenaufruf ebenfalls Argumente (Variablen) übergeben.

  • VAR <variable declaration list> END_VAR

    für Variablendeklaration für lokale Zwecke

<variable declaration list>

Variablendeklaration

<variable name> : <data type> := <initial value> ;

Mit Strichpunkt separierte Liste mit Variablen (Parameter), die einem Gültigkeitsbereich entsprechend ihrem Zweck zugeordnet sind.

  • Variablen für Eingabe und Ein- /Ausgabe können einen Initialwert zugewiesen haben

    Die Zuweisung eines Initialwerts ist optional. Wenn aber einer angegeben ist, kann beim Methodenaufruf auf eine Argumentübergabe für diesen Parameter verzichtet werden. Solche Parameter werden optionale Parameter genannt.

  • Die Variablen einer Methode (Parameter) enthalten temporäre Daten, die nur während der Ausführung der Methode gültig sind (Stack-Variablen). Alle Variablen, die in einer Methode deklariert und implementiert sind, werden bei jedem Aufruf der Methode neu initialisiert.



Beispiel 517. Beispiel

Deklaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR


Implementierung

Optional

  • Bei der Implementierung der Methode ist der Zugriff auf Funktionsbaustein-Instanzen oder Programmvariablen erlaubt

  • Der THIS-Pointer ermöglicht den Zugriff auf die eigene Funktionsbaustein-Instanz. Der Pointer ist somit nur in Methoden erlaubt, die einem Funktionsbausteins zugeordnet sind.

  • Eine Methode kann nicht auf VAR_TEMP-Variablen des Funktionsbausteins zugreifen

  • Eine Methode kann sich selbst rekursiv aufrufen

  • Bei Schnittstellenmethoden gibt es keine Implementierung

    Schnittstellenmethoden können Eingabe-, Ausgabe- und VAR_IN_OUT-Variablen deklariert haben, enthalten aber keine Implementierung.

Methodenaufruf

Syntax bei Aufruf

<return value variable> := <POU name> . <method name> ( <argument passing> );

<return value variable>

Variabel für den Rückgabewert

Der Typ muss mit dem Rückgabetyp der Methode übereinstimmen.

Hinweis: Bei Methoden, die keinen expliziten Rückgabetyp haben, wird die erste deklarierte Ausgabe als Rückgabewert verwendet. Nur wenn weder Rückgabetyp noch Ausgabe deklariert sind, liefert eine Methode keinen Wert zurück. Ein Compilerfehler wird aber in keinem der beiden Fälle erzeugt.

<POU name>

Bezeichner der Funktionsbaustein-Instanz, unter der die Methode angeordnet ist

<method name>

Bezeichner der Methode

<argument passing>

Komma separierte Liste mit den tatsächlichen Argumenten

An jeden Parameter (Variable) der Methode wird ein Argument übergeben:

<parameter name> := <actual argument>

  • Jeder deklarierten Ein-/Ausgabe oder Eingabe wird das tatsächliche Argument zugewiesen. Das Argument kann ein Wert (Literal), ein Ausdruck oder eine Variable mit passendem Typ sein.

  • Jeder deklarierten Ausgabe wird das tatsächliche Argument (Variable gleichen Typs) zugewiesen. Das Argument muss eine Variable mit passendem Typ sein.

  • Eine Argumentübergabe für eine Eingaben oder eine Ein- /Ausgaben kann fehlen.

    Die Anzahl der Argumente in der Liste darf somit kleiner sein als die Anzahl der Parameter (Gültigkeitsbereich Eingabe oder Ein-/Ausgabe). Insbesondere, wenn es sich um einen optionalen Parameter handelt, für den in der Deklaration ein Default- oder Initialwert angegeben wurde, kann auf eine Argumentübergabe verzichtet werden.

    Tipp: Wenn Sie sich beim Methodenaufruf von der Eingabehilfe unterstützen lassen, werden Sie dort über bestehende Initialwerte informiert.

  • Eine Argumentübergabe mit Angabe des Parameters mit Namen und Zuweisungsoperator ist optional.

    Es genügt, nur das Argument anzugeben. Aus der Reihenfolge der Variablen in der Deklaration ergibt sich dann, welches Argument an welchen Parameter übergeben wird.

Beispiel 518. Beispiel

Deklaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR

Aufruf mit Argumentübergabe an Parameter

bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);

Bei Aufruf der Methode wird der Rückgabewert der Methode an eine lokal deklarierte Variable zugewiesen.



Beispiel 519. Beispiel

Wenn Sie die Namen der Eingabevariablen weglassen, ergibt sich die Zuordnung der Argumente aus der Deklarationsreihenfolge.

Deklaration

METHOD PUBLIC DoIt : BOOL
VAR_INPUT
        iInput_1 : DWORD;
        iInput_2 : DWORD;
        sInput_3 : STRING(12);
END_VAR
IF iInput_1 = iInput_2 THEN
	DoIt := TRUE; // explicit return value
END_IF

Aufruf mit Argumentübergabe nach Reihenfolge in der Deklaration

bFinishedMethod := fbInstance.DoIt( 16, 16#0010,'Hello World ');


Rekursiver Methodenaufruf

Innerhalb der Implementierung kann eine Methode sich selbst aufrufen: entweder direkt mit Hilfe des THIS-Pointers, oder mit Hilfe einer lokalen Variablen für den zugeordneten Funktionsbaustein.

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Direkter Aufruf der betroffenen Funktionsbaustein-Instanz mit dem THIS-Pointer

  • <return value variable> := <POU name> . <method name> ( <argument passing> );

    Aufruf über eine lokale Variable der Methode, die temporär den betroffenen Funktionsbaustein instanziiert

Bei einem rekursiven Aufruf wird eine Compilerwarnung ausgegeben. Wenn die Methode mit dem Pragma {attribute 'estimated-stack-usage' := '<estimated stack size in bytes>'} versehen ist, wird die Compilerwarnung unterdrückt.

Im Kapitel „Attribut 'estimated-stack-usage'“ finden Sie ein Implementierungsbeispiel.

Um Methoden rekursiv aufzurufen, genügt es also nicht, nur den Methodennamen anzugeben. Wenn nur der Methodenname angegeben ist, wird ein Compilerfehler ausgegeben: Programmname, Funktion oder Funktionsbaustein-Instanz erwartet statt …

Spezielle Methoden eines Funktionsbausteins

FB_Init

Deklarationen automatisch implizit, aber auch explizite Deklaration möglich

Enthält Initialisierungscode für den Funktionsbaustein, so wie im Deklarationsteil des Funktionsbausteins definiert

FB_Reinit

Explizite Deklaration notwendig

Aufruf, nachdem die Instanz des Funktionsbausteins kopiert wurde (wie während eines Online-Changes). Reinitialisiert das neue Instanzmodul.

FB_Exit

Explizite Deklaration notwendig

Aufruf für jede Instanz des Funktionsbausteins vor einem erneuten Download oder einem Reset oder während eines Online-Changes für alle verschobenen oder gelöschten Instanzen

Eigenschaften

Stellt Set- und/oder Get-Accessormethoden bereit

Dialog Methode hinzufügen

Funktion: Definiert eine Methode, die mit Beenden des Dialogs unterhalb des selektierten Programmierbausteins angeordnet wird.

Aufruf: Projekt → Objekt hinzufügen → Methode , Kontextmenü

Voraussetzung: In Ansicht POUs oder Ansicht Geräte ist ein Programm (PRG) oder ein Funktionsbausteins (FUNCTION_BLOCK) selektiert.

Hinweis

Die Schnittstelle einer unter einem Basis-Funktionsbaustein eingefügten Methode wird beim Einfügen einer Methode gleichen Namens unter einem abgeleiteten Baustein übernommen.

Name

Beispiel: meth_DoIt.

Die Standardmethoden FB_Init und FB_Exit werden in einer Auswahlliste angeboten, wenn sie nicht bereits unterhalb des Bausteins eingefügt sind. Wenn es sich um einen abgeleiteten Funktionsbaustein handelt, bietet die Auswahlliste außerdem alle Methoden des Basisbausteins an.

Rückgabetyp

Standarddatentyp oder strukturierter Datentyp des Rückgabewerts

Beispiel: BOOL

Implementierungssprache

Beispiel: Strukturierter Text (ST)

Zugriffsmodifizierer

Regelt den Zugriff auf die Daten.

  • PUBLIC oder keine Angabe: Der Zugriff ist nicht eingeschränkt.

  • PRIVATE: Der Zugriff ist auf das Programm, den Funktionsbaustein oder die GVL beschränkt.

    Im POUs- oder Gerätebaum ist das Objekt mit (private) gekennzeichnet. Die Deklaration enthält das Schlüsselwort PRIVATE.

  • PROTECTED: Der Zugriff ist auf das Programm, die GVL oder den Funktionsbaustein mit seinen Ableitungen beschränkt. Die Deklaration enthält das Schlüsselwort PROTECTED.

    Im POUs- oder Gerätebaum ist das Objekt mit (protected) gekennzeichnet.

  • INTERNAL: Der Zugriff auf die Methode ist auf den Namensraum ( Bibliothek) beschränkt.

    Im POUs- oder Gerätebaum ist das Objekt mit (internal) gekennzeichnet. Die Deklaration enthält das Schlüsselwort INTERNAL.

Abstrakt

standard icon: Kennzeichnet, dass die Methode keine Implementierung hat und die Implementierung durch den abgeleiteten FB bereitgestellt wird.

Hinzufügen

Fügt unterhalb des selektierten Objekts eine neue Methode hinzu.

Eingabeunterstützung beim Erzeugen von erbenden Bausteinen

Wenn Sie objektorientiert programmieren und die Vererbung (Schlüsselwort EXTENDS) von Bausteinen nutzen, können Sie folgendermaßen Unterstützung erhalten:

Wenn Sie unterhalb eines von einem Basisbaustein abgeleiteten Bausteins eine Aktion, Eigenschaft, Methode oder Transition einfügen, öffnet sich der Dialog … hinzufügen. Dort ist das Eingabefeld für den Namen erweitert zu einer Combobox. Die Auswahlliste der Combobox enthält eine gültige Auswahl aus den im Basisbaustein vorhandenen Aktionen, Eigenschaften, Methoden oder Transitionen. Nun können Sie beispielsweise eine Methode des Basisbausteins auf einfache Weise zunächst übernehmen, um sie dann entsprechend für die abgeleitete Funktion des Bausteins anzupassen.

Methoden und Eigenschaften mit dem Zugriffsmodifizierer PRIVATE erscheinen in dieser Auswahl nicht, da sie auch nicht vererbt werden. Methoden und Eigenschaften mit dem Zugriffsmodifizierer PUBLIC erhalten beim Übernehmen in den abgeleiteten Baustein automatisch ein leeres Zugriffsmodifiziererfeld, was funktional das Gleiche bedeutet.

Für weitere Informationen siehe: Eigenschaft, Methode, Transition, Aktion,

Beispiel 520. Beispiel
_cds_img_input_wizzard_for_blocks.png