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.
Zur Organisation von Methoden können Sie Schnittstellen verwenden.
Sie können unterhalb eines Programms oder eines Funktionsbausteins eine Methode hinzufügen. Verwenden Sie dafür den Befehl „Projekt Objekt hinzufügen Methode“, um den Dialog „Methode hinzufügen“ zu öffnen.
Deklaration
-
Die Variablen einer Methode 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.
-
Methoden können wie Funktionen zusätzliche Ausgänge haben. Diese zusätzlichen Ausgänge müssen Sie im Methodenaufruf zuweisen.
-
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. BeiPUBLIC
kann die Methode überall aufgerufen werden.
Schnittstellenmethoden können Eingabe-, Ausgabe- und VAR_IN_OUT
-Variablen deklariert haben, enthalten aber keine Implementierung.
Siehe auch
Implementierung
-
In der Implementierung der Methode ist der Zugriff auf Funktionsbaustein-Instanzen oder auf 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




HINWEIS

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.
Methodenaufruf
Syntax bei Aufruf
<return value variable> := <POU name> . <method name> ( <method input name> := <variable name> (, <further method input name> := <variable name> )* );
Beim Methodenaufruf weisen Sie an die Eingabevariablen der Methode Übergabeparameter zu. Beachten Sie dabei die Deklaration. Es genügt, wenn Sie die Namen der Eingangsvariablen angeben, ohne deren Reihenfolge in der Deklaration zu beachten.
Beispiel
Deklaration
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR
Autruf
bFinishedMethod := fbInstance.DoIt(sInput_3 := 'Hello World ', iInput_2 := 16#FFFF, iInput_1 := 16);
Bei Aufruf der Methode wird der Rückgabewert der Methode der beispielsweise lokal deklarierten Variablen zugewiesen. Wenn Sie die Namen der Eingabevariablen weglassen, müssen Sie die Deklarationsreihenfolge beachten.
Beispiel
Deklaration
METHOD PUBLIC DoIt : BOOL VAR_INPUT iInput_1 : DWORD; iInput_2 : DWORD; sInput_3 : STRING(12); END_VAR
Autruf
bFinishedMethod := fbInstance.DoIt( 16, 16#FFFF,'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.
-
THIS^. <method name> ( <parameter transfer of all input and output variables> )
Direkter Aufruf der betroffenen Funktionsbaustein-Instanz mit dem
THIS
-Pointer -
VAR fb_Temp : <function block name>; END_VAR
Aufruf über eine lokale Variable der Methode, die temporär den betroffenen Funktionsbaustein instanziert
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 |
Eigenschaften |
Stellt |
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.
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.
Beispiel
