Eine Methode ist ein Sprachelement, vergleichbar mit einer Funktion, das im Kontext eines Funktionsbausteins verwendet werden kann. Sie kann als Funktion betrachtet werden, die eine Instanz des jeweiligen Funktionsbausteins beinhaltet. Wie eine Funktion hat eine Methode einen Rückgabewert und einen eigenen Deklarationsteil für temporäre Variablen und Parameter.
Als Mittel der objektorientierten Programmierung können Sie desweiteren Schnittstellen zur Organisation von Methoden in einem Projekt verwenden.
HINWEIS: Beim Kopieren oder Verschieben einer Methode oder Eigenschaft von einer POU in eine Schnittstelle werden die enthaltenen Implementierungen automatisch gelöscht. Beim Kopieren oder Verschieben von einer Schnittstelle in eine POU werden Sie zur Angabe der gewünschten Implementierungssprache aufgefordert.
Um eine Methode einem Funktionsbaustein oder einer Schnittstelle zuzuweisen, wählen Sie den entsprechenden Funktionsbaustein bzw. Schnittstellenknoten in der Anwendungsbaumstruktur aus, klicken Sie auf die grüne Plus-Schaltfläche, und führen Sie den BefehlMethode aus. Sie können auch mit der rechten Maustaste auf den Funktionsbaustein bzw. Schnittstellenknoten klicken und im Kontextmenü den Befehl Objekt hinzufügen > Methode ausführen.
Geben Sie im Dialogfeld Methode hinzufügen einen Namen, den gewünschten Rückgabetypen, die Implementierungssprache und den Zugriffsbezeichner ein (siehe unten). Zum Auswählen des Rückgabetyps kann über die Schaltfläche ... die Eingabehilfe... geöffnet werden.
Zugriffsbezeichner:: Aus Kompatibilitätsgründen sind die Zugriffsbezeichner optional. Der Zugriffsbezeichner PUBLIC ist äquivalent mit dem Angeben keines Bezeichners.
Alternativ kann eine der Optionen aus der Auswahlliste verwendet werden:
oPRIVATE: Der Zugriff auf Methoden ist auf den Funktionsbaustein beschränkt.
oPROTECTED: Der Zugriff auf Methoden ist auf den Funktionsbaustein und seine Ableitungen beschränkt.
oINTERNAL: Der Zugriff auf Methoden ist auf den aktuellen Namespace (die Bibliothek) beschränkt.
Nach der Bestätigung der Einstellungen mit Öffnen wird das Editorfenster für die Methode geöffnet.
Eingabehilfe bei der Erstellung übernehmender Funktionsbausteine
EcoStruxure Machine Expert erleichtert die objektorientierte Programmierung durch die Verwendung der Vererbungsfunktion in den Funktionsbausteinen: Wenn Sie den Befehl Objekt hinzufügen für einen Funktionsbaustein ausführen, der von einem anderen Funktionsbaustein erbt, werden die im Basisfunktionsbaustein verwendeten Elemente Aktion, Methode, Eigenschaft und Transition zur Auswahl gestellt:
oDie Elemente Aktion, Methode, Eigenschaft und Transition, für die im Basisfunktionsbaustein ein Zugriffsmodifizierer = ÖFFENTLICH, GESCHÜTZT oder INTERN definiert wurde, stehen zur Auswahl. Sie können die Definition für das geerbte Objekt anpassen. Im geerbten Objekt wird derselbe Zugriffsmodifizierer wie bei den Quellelementen zugewiesen.
oDie Elemente Aktion, Methode, Eigenschaft und Transition, für die der Zugriffsmodifizierer = PRIVAT definiert wurde, stehen nicht zur Auswahl, da der Zugriff auf den Basisfunktionsbaustein beschränkt ist.
Syntax:
METHOD <Zugriffsbezeichner> <Methodenname> : <Rückgabetyp>VAR_INPUT ... END_VAR
Eine Beschreibung zur Deklaration von Schnittstellen, die Methoden handhaben, erhalten Sie im Kapitel zur Schnittstelle.
Methodenaufrufe werden auch „virtuelle Funktionsaufrufe“ genannt. Weitere Information hierzu finden Sie im Kapitel Methodenaufruf.
Beachten Sie folgenden Hinweis beim Aufrufen einer Methode:
oAlle Daten einer Methode sind temporäre Daten und nur während der Ausführung einer Methode gültig (Stack-Variablen). Das bedeutet, dass die Variablen und Funktionsbausteine, die in einer Methode deklariert werden, bei jedem Methodenaufruf neu initialisiert werden.
oMethoden, die in einer Schnittstelle definiert sind, dürfen nur Eingangs-, Ausgangs- und Ein-/Ausgangs-Variablen, aber keinen Rumpf (Implementierungsteil) enthalten.
oMethoden können wie Funktionen zusätzliche Ausgänge enthalten. Diese müssen während des Methodenaufrufs zugewiesen werden.
Beachten Sie bei der Implementierung einer Methode Folgendes:
oIm Rumpf einer Methode ist der Zugriff auf Variablen der Funktionsbaustein-Instanz erlaubt.
oBei Bedarf ist der THIS-Zeiger zu verwenden, der immer auf die aktuelle Instanz weist.
oAuf VAR_TEMP-Variablen des Funktionsbausteins kann in einer Methode nicht zugegriffen werden.
Spezielle Methoden für einen Funktionsbaustein
Methode |
Beschreibung |
---|---|
Init |
Eine Methode mit Namen FB_init wird immer implizit deklariert, kann aber auch explizit deklariert werden. Sie enthält einen Initialisierungs-Code für den Funktionsbaustein, wie er im Deklarationsteil des Funktionsbausteins definiert ist. Vgl. FB_init Methode. |
Reinit |
Wenn eine Methode mit Namen FB_reinit deklariert ist, wird diese aufgerufen, nachdem die Instanz des Funktionsbausteins kopiert wurde (wie während einer Online-Änderung (Online Change)) und reinitialisiert das neue Instanzmodul. Vgl. FB_init, FB_reinit Methoden. |
Exit |
Wenn eine Methode mit Namen FB_exit benötigt wird, muss sie explizit deklariert werden. Es gibt keine implizite Deklaration. Die Exit-Methode wird für jede Instanz des Funktionsbausteins vor einem erneuten Download, einem Reset oder während einer Online-Änderung für alle verschobenen oder gelöschten Instanzen aufgerufen. Vgl. FB_exit Methode. |
Eigenschaften und Schnittstelleneigenschaften; jede besteht aus einer Set- und/oder Get-Accessor-Methode.
Aufruf einer Methode, auch wenn die Anwendung im STOP-Status ist
In der Gerätebeschreibungsdatei kann definiert werden, dass eine bestimmte Methode von einer bestimmten Funktionsbausteininstanz (eines Bibliotheksbausteins) immer taskzyklisch aufgerufen werden soll. Wenn diese Methode die folgenden Eingabeparameter enthält, wird sie auch abgearbeitet, wenn die aktive Anwendung gerade nicht ausgeführt wird.
Beispiel
VAR_INPUT
pTaskInfo : POINTER TO DWORD;
pApplicationInfo: POINTER TO _IMPLICIT_APPLICATION_INFO;
END_VAR
Der Programmierer kann den Anwendungsstatus über pApplicationInfo abfragen und die weitere Vorgehensweise bestimmen.
IF pApplicationInfo^.state = RUNNING THEN <instructions> END_IF