Implementieren einer Schnittstelle
Die Implementierung von Schnittstellen basiert auf dem Konzept der objektorientierten Programmierung. Über gemeinsame Schnittstellen können Sie verschiedene aber gleichartige Funktionsbausteine gleichartig implementieren.
Ein Funktionsbaustein, der eine Schnittstelle implementiert, muss für alle mit dieser Schnittstelle definierten Methoden und Eigenschaften einen eigenen Code implementieren.
Wenn Sie einen neuen Funktionsbaustein definieren, der eine Schnittstelle implementiert, werden die Methoden und Eigenschaften dieser Schnittstelle automatisch unterhalb des neuen Funktionsbausteins im Objektbaum eingefügt. Es werden jedoch nicht alle, sondern nur die Methoden und Eigenschaften eingefügt, die für eine fehlerfreie Kompilierung benötigt werden.
Wenn Sie einer Schnittstelle nachträglich weitere Methoden hinzufügen, werden diese Methoden nicht automatisch in die Deklaration der die Schnittstelle implementierenden Funktionsbausteine übernommen. Um dort die Implementierung zu aktualisieren, müssen Sie den Befehl Schnittstellen implementieren aufrufen. Wenn Sie einzelnen Methoden überschreiben wollen, wählen Sie den Befehl Objekt hinzufügen → Methode. Im sich öffnenden Dialog sind dann alle überschreibbaren Methoden aufgelistet. Klicken Sie für eine Auswahl in die Auswahlliste Name.
Bei abgeleiteten Funktionsbausteinen müssen Sie sicherstellen, dass Methoden oder Eigenschaften, die über EXTENDS aus einer Schnittstelle geerbt werden, korrekt implementiert sind. Wird keine eigene Implementierung bereitgestellt, verwendet der Funktionsbaustein automatisch die Basisimplementierung des übergeordneten oder eines verwandten Funktionsbausteins.
Für weitere Informatinen siehe: Schnittstelle aktualisieren, Methode
Schnittstellenvariable verwenden
Wichtig
Einer Variable, die mit dem Typ Schnittstelle definiert wurde, muss eine Funktionsbaustein-Instanz mit typkonformer Schnittstelle zugewiesen werden. Erst dann können Sie Methoden über diese Variable aufrufen.
Eine Variable vom Typ einer Schnittstelle ist immer eine Referenz auf die zugewiesenen Funktionsbaustein-Instanz.
Eine Schnittstellenvariable dient als eine Referenz auf eine Funktionsbaustein-Instanz. Sie kann auf jede Instanz verweisen, die diese Schnittstelle implementiert. Welche konkrete Instanz zugewiesen ist, kann zur Laufzeit variieren. Bis zur ersten Zuweisung enthält die Variable den Wert 0.
Die Schnittstelle I1 enthält die Methode GetName.
Die Funktionsbausteine A und B implementieren jeweils die Schnittstelle I1:
METHOD GetName : STRING
FUNCTION_BLOCK A IMPLEMENTS I1 FUNCTION_BLOCK B IMPLEMENTS I1
Beide Funktionsbausteine können eine Methode mit dem Namen GetName und dem Rückgabetyp STRING enthalten.
Eine Funktion enthält die Deklaration einer Variablen vom Typ der Schnittstelle I1.
FUNCTION DeliverName : STRING
VAR_INPUT
l_i : I1;
END_VARFunktionsbausteine, die die Schnittstelle I1 implementieren, können dieser Eingangsvariablen zugewiesen werden.
Beispiele für Funktionsaufrufe:
DeliverName(l_i := A_instance); // call with instance of type A DeliverName(l_i := B_instance); // call with instance of type B
Aufruf der Schnittstellen-Methode:
In diesem Falle hängt es vom tatsächlichen Typ von l_i ab, ob die Applikation A.GetName oder B.GetName aufruft.
DeliverName := l_i.GetName();
Implementieren einer Schnittstelle in einen neuen Funktionsbaustein
Voraussetzung: Das aktuell geöffnete Projekt hat mindestens ein Schnittstellen-Objekt.
Selektieren Sie das Objekt Applikation im Gerätebaum und wählen Sie den Menübefehl Projekt → Objekt hinzufügen → POU.
Der Dialog POU hinzufügen öffnet sich.
Geben Sie einen Namen für den neuen Funktionsbaustein in das Eingabefeld Name ein, zum Beispiel POU_Im.
Wählen Sie den Typ Funktionsbaustein.
Wählen Sie die Eigenschaft Implementiert und klicken Sie auf die Schaltfläche
.Wählen Sie in der Eingabehilfe die Kategorie Schnittstellen aus und dann beispielsweise die Schnittstelle
ITF1. Klicken Sie anschließend auf OK.Wenn Sie eine weitere Schnittstelle einfügen möchten, klicken Sie erneut auf
. Wählen Sie anschließend die gewünschte Schnittstelle aus.Optional können Sie einen Zugriffsmodifizierer für den neuen Funktionsbaustein aus der Auswahlliste auswählen.
Wählen Sie aus der Auswahlliste Implementierungssprache zum Beispiel Strukturierter Text(ST) aus.
Klicken Sie auf Hinzufügen.
CODESYS fügt den Funktionsbaustein POU_Ex mit den Schnittstellen in den Gerätebaum ein und der Editor öffnet sich.
In der ersten Zeile steht:
FUNCTION_BLOCK POU_Im IMPLEMENTS ITF1
Die Schnittstelle und ihre Methoden und Eigenschaften sind nun im Gerätebaum unter dem Funktionsbaustein eingefügt. Sie können nun Programmcode im Implementierungsteil der Schnittstelle und ihrer Methoden eingeben.
Implementieren einer Schnittstelle in einen bestehenden Funktionsbaustein
Voraussetzung: Das aktuell geöffnete Projekt hat einen Funktionsbaustein, zum Beispiel POU_Im, und mindestens ein Schnittstellen-Objekt, zum Beispiel ITF1.
Doppelklicken Sie im Gerätebaum auf die POU POU_Ex(FB).
Der Editor der POU öffnet sich.
Erweitern Sie den bestehenden Eintrag der obersten Zeile
FUNCTION_BLOCK POU_ImmitIMPLEMENTS ITF1.Der Funktionsbaustein POU_Im implementiert die Schnittstelle ITF1.
Schnittstelle aktualisieren
Wenn Sie einer bereits definierten Schnittstelle später weitere Methoden und Eigenschaften hinzufügen, werden die Funktionsbausteine, die diese Schnittstelle implementieren, nicht automatisch um die neuen Methoden erweitert. Sie müssen die Funktionsbausteine, die eine Schnittstellenimplementierung erhalten sollen, manuell aktualisieren.
Wählen Sie dazu den Befehl Schnittstellen implementieren, um die neuen Objekte einzufügen.
Für weitere Informationen siehe: Schnittstellen implementieren
Methode überschreiben
In Szenarien mit IMPLEMENTS (Schnittstellen) und EXTENDS (Vererbung) kann es nötig sein, Methoden, die in der Schnittstelle schon deklariert sind, in abgeleiteten Funktionsbausteinen erneut zu implementieren, um sie anzupassen oder zu überschreiben.
Wenn Sie einzelne Methoden überschreiben möchten, wählen Sie den Befehl Objekt hinzufügen → Methode. Der sich öffnende Dialog listet alle überschreibbaren Methoden auf, sodass Sie die gewünschte Methode, die eine eigene Implementierung erhalten soll, auswählen können. Diese wird hinzugefügt und Sie können die Implementierung ergänzen.
Für weitere Informationen siehe: Dialog Methode hinzufügen