Objekt: Methode
Symbol:
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 Methode hinzufügen.
, dann öffnet sich der DialogZur 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 ( |
<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. |
<scope list> | Gültigkeitsbereiche:
|
<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.
|
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>
|
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.
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
Deklarationen automatisch implizit, aber auch explizite Deklaration möglich Enthält Initialisierungscode für den Funktionsbaustein, so wie im Deklarationsteil des Funktionsbausteins definiert | |
Explizite Deklaration notwendig Aufruf, nachdem die Instanz des Funktionsbausteins kopiert wurde (wie während eines Online-Changes). Reinitialisiert das neue Instanzmodul. | |
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 | |
Stellt |
Dialog Methode hinzufügen
Funktion: Definiert eine Methode, die mit Beenden des Dialogs unterhalb des selektierten Programmierbausteins angeordnet wird.
Aufruf: , 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: Die Standardmethoden |
Rückgabetyp | Standarddatentyp oder strukturierter Datentyp des Rückgabewerts Beispiel: |
Implementierungssprache | Beispiel: Strukturierter Text (ST) |
Zugriffsmodifizierer | Regelt den Zugriff auf die Daten.
|
Abstrakt |
|
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,
