Deklaration eines Interfaces mit Methoden-Prototypen

Syntax
INTERFACE name_1 ( * optional_begin *) EXTENDS interface_2, interface_3, ... interface_n (* optional_end *)
 
(* optional: declarations of method prototypes *)
 
END_INTERFACE

Bedeutung

Deklaration eines →Interfaces (ein Feature der →objektorientierte Programmierung) , wobei name_1 ein →IEC-Bezeichner sein muss
Die Deklaration ist in einem ST-Objekt möglich – die Deklaration erfolgt im globalen →Namespace oder in einem deklarierten Namespace. INTERFACE und END_INTERFACE sind die →Schlüsselwört er für die Deklaration der Schnittstelle.

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg In der Objektorientierten Programmierung trennen Sie mit Hilfe eines Interfaces die Interface-Spezifikation von ihrer Implementierung als eine →Klasse. Das erlaubt unterschiedliche Implementierungen einer gemeinsamen Interface-Spezifikation.

Das Schlüsselwort EXTENDS ist optional. Geben Sie EXTENDS an, falls Sie das Interface von anderen Interfaces ableiten wollen (auch als Basis-Interfaces bekannt). Die Namen dieser Basis-Interfaces geben Sie hinter EXTENDS an (durch einen Beistrich voneinander getrennt).
Die Namen der Methoden-Prototypen im Interface und in den Basis-Interfaces müssen eindeutig sein. Mehrfach vorhandene Methoden-Prototypen aus dem gleichem Interface werden jedoch ignoriert (siehe Methoden-Prototyp UP im folgenden Beispiel 2).

Gut zu wissen

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg In einem Interface dürfen Sie nur →Methoden-Prototypen deklarieren. Siehe folgender Abschnitt "Deklaration eines Methoden-Prototyp".

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg Ein Interface kann als Typ für eine Variable verwendet werden (siehe "Deklaration von Variablen, die auf einem Interface basieren"). Zusätzlich kann ein Funktionsbaustein die Interfaces implementieren (siehe "Deklaration eines Funktionsbausteins in ST").

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/lightbulb.svg Ein Interface verhält sich wie ein →Funktionsbaustein.

Deklaration eines Methoden-Prototyp

Ein Methoden-Prototyp ist eine eingeschränkte Deklaration einer →Methode (mit dem impliziten Modifizier PUBLIC) zur Verwendung bei einem Interface.

Übersicht zur Syntax
METHOD name_1 (* optional_begin *) : type (* optional_end *)
 
(* optional: declaration of variables but only input variables, output variables and in-out variables are allowed in method prototypes *)
 
END_METHOD

Im Unterschied zur Methode (siehe "Deklaration einer Methode" für Details) darf ein Methoden-Prototyp nur diese Elemente enthalten:

Beachten Sie, dass Sie bei einem Methoden-Prototyp keine Schlüsselwörter (z.B. Modifizierer) und auch keinen Body (also Code zum Ausführen) definieren, wie dies bei einer Methode möglich ist.

Beispiel 1: Interface mit 2 Methoden-Prototypen
INTERFACE COUNT
METHOD UP : UINT
VAR_INPUT
INC: UINT;
END_VAR
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
 
METHOD UP5 : UINT
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
END_INTERFACE
Beispiel 2: Wie Beispiel 1 mit abgeleiteten Interfaces
INTERFACE COUNT_Original
(* In "COUNT_Original" sind die Methoden-Prototypen "UP" und "UP5" vorhanden. *)
 
METHOD UP : UINT
VAR_INPUT
INC: UINT;
END_VAR
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
METHOD UP5 : UINT
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
END_INTERFACE
 
INTERFACE COUNT_BASE
(* In "COUNT_BASE" ist der Methoden-Prototyp "UP" vorhanden. *)
 
METHOD UP : UINT
VAR_INPUT
INC: UINT;
END_VAR
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
END_INTERFACE
 
INTERFACE COUNT EXTENDS COUNT_BASE
(* In "COUNT" ist der Methoden-Prototyp "UP5" vorhanden. Aufgrund von "EXTENDS COUNT_BASE" ist auch der Methoden-Prototyp "UP" vorhanden. *)
 
METHOD UP5 : UINT
VAR_OUTPUT
QU: BOOL;
END_VAR
END_METHOD
END_INTERFACE
 
INTERFACE COUNT3 EXTENDS COUNT_BASE, COUNT_Original
(* In "COUNT3" ist der Methoden-Prototyp "UP10" vorhanden. Aufgrund von "EXTENDS COUNT_BASE, COUNT_Original" sind auch die Methoden-Prototypen "UP5" und "UP" vorhanden. *)
(* Hier wird ein Fehler gemeldet. Grund: "UP" ist mehrfach vorhanden, und zwar in den unterschiedlichen Interfaces "COUNT_BASE" und "COUNT_Original". *)
METHOD UP10 : UINT
END_METHOD
END_INTERFACE
 
INTERFACE Sample EXTENDS COUNT_BASE, COUNT_BASE
(* Aufgrund von "EXTENDS COUNT_BASE, COUNT_Original" ist der Methoden-Prototyp "UP" vorhanden. *)
(* Das ist OK, obwohl "UP" eigentlich mehrfach vorhanden ist. Das 2. Vorkommen von "UP" in "COUNT_BASE" wird ignoriert, da "UP" aus dem gleichen Interface "COUNT_BASE" stammt. *)
END_INTERFACE
 
INTERFACE COUNT2 EXTENDS COUNT_BASE, COUNT
(* In "COUNT2" ist der Methoden-Prototyp "UP10" vorhanden. Aufgrund von "EXTENDS COUNT_BASE, COUN" sind auch die Methoden-Prototypen "UP5" und "UP" vorhanden. *)
(* Das ist OK, obwohl "UP" eigentlich mehrfach vorhanden ist. Das 2. Vorkommen von "UP" in "COUNT" wird ignoriert, da "UP" aus dem gleichen Interface "COUNT_BASE" stammt. Hintergrund: Das Interface "COUNT" ist ebenfalls vom Interface "COUNT_BASE" abgeleitet. *)
METHOD UP10 : UINT
END_METHOD
END_INTERFACE
Beispiel 3
INTERFACE I_Motor
/*
* Returns the current speed of the motor in RPM.
*/
METHOD GetCurrentSpeed : UINT
END_METHOD
/*
* Sets the desired speed of the motor.
* The desired ramp-up time can be specified by an input parameter.
* Returns the current motor speed as an output parameter.
*/
METHOD SetSpeed
VAR_INPUT
i_RampUpTime : TIME := T#1s;
i_DesiredSpeed : UINT;
END_VAR
VAR_OUTPUT
o_CurrentSpeed : UINT;
END_VAR
END_METHOD
END_INTERFACE

Weitere Beispiele für Interfaces finden Sie unter "Beispiele für Verwendung von Interfaces und Variablen basierend auf diesen Interfaces (inkl. Zuweisungen)".