Variable: VAR_GENERIC CONSTANT
Konstante generische Variable
Eine generische Konstante ist eine Variable im Gültigkeitsbereich VAR_GENERIC CONSTANT
eines Funktionsbausteins. Die Variable wird erst bei der Deklaration der Funktionsbaustein-Instanz definiert.
Es ist erlaubt in Methoden generische Konstanten zu verwenden. Insbesondere in VAR_IN_OUT
oder VAR_IN_OUT CONSTANT
-Bereichen kann das hilfreich sein.
Syntax der Typdeklaration
Syntax der Typdeklaration eines Funktionsbausteins mit generischen Konstanten
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> := <initial value> ; //Initial value will be overwritten END_VAR
| Name des Funktionsbausteins |
| Gültigkeitsbereich für generische Konstanten Sie können im |
| Variablenname der generischen Konstanten |
| Konstrukt, das die generische Konstante typisiert. Erlaubt ist ein ganzzahliger Datentyp oder der Teilbereich eines ganzzahligen Datentyps. Beispiel:
|
| Optional Initialisierung WichtigDer Initialwert wird nur für Compile-Prüfungen benötigt. Zur Laufzeit wird der Wert überschrieben. |
Die generische Konstante kann in der Implementierung des Funktionsbausteins wie üblich verwendet werden. Solche Konstanten können beispielsweise für die Indizes von Arrays oder die Länge von Strings verwendet werden.
Syntax der Variablendeklaration
Syntax der Variablendeklaration (Instanziierung des Funktionsbausteins) mit spezifizierter Konstante
Es sind folgende Optionen möglich:
PROGRAM <program name> VAR <fb instance name> : <function block name> < <literal> > ; <fb instance name> : <function block name> <( <expression> )> ; <fb instance name> : ARRAY [ <index start > .. <index end> ] OF <function block name> < <array length> > ; END_VAR
| Gültigkeitsbereich |
| Variable, Name der Funktionsbaustein-Instanz |
| Typisiert die Variable mit dem Funktionsbaustein Es handelt sich um einen Funktionsbaustein mit generischen Konstanten. |
| Optional Weist dem Datentyp einen spezifischen Wert zu, der nur für diese Funktionsbaustein-Instanz gültig ist. Der Wert wird formal als Anhängsel des Datentyps Beispiel: Wenn beim typgebenden Funktionsbaustein mehrere generische Konstanten deklariert wurden, wird eine mit Komma separierte Liste an Werten in spitzen Klammern übergeben. Ein Wert für jede Konstante. Beispiel: |
| Optional Weist dem Datentyp einen spezifischen Ausdruck zu, der nur für diese Funktionsbaustein-Instanz gültig ist. Der Ausdruck wird als Anhängsel des Datentyps Die runde Klammer ist nötig, da es bei einem Ausdruck erlaubt ist, Symbole wie Beispiel: |
| Optional Typisiert die Variable mit einem Array von Funktionsbausteinen. Die Länge des Arrays ist:
Es handelt sich um einen Funktionsbaustein mit generischen Konstanten. Die Konstanten werden als Arrayindizes verwendet. Beispiel: |
| Weist dem Datentyp eine spezifische Arraylänge zu, die speziell für diese Funktionsbaustein-Instanz gültig ist. Die spezifische Arraylänge wird formal als Anhängsel des Datentyps in spitzen Klammern eingefügt. Der spezifizierte Wert muss mit der Arraylänge übereinstimmen, die durch Startindex und Endindex definiert ist. Beispiel: |
Beispiele
FUNCTION_BLOCK FB_Pou VAR_GENERIC CONSTANT lnstring : DINT := 10; numstring : DINT := 100; END_VAR VAR arraystring : ARRAY[0..numstring-1] OF STRING(lnstring); END_VAR ;
PROGRAM PLC_PRG VAR fbPou : FB_Pou<100, 1000>; END_VAR
FUNCTION_BLOCK FB_SrString VAR_GENERIC CONSTANT maxlen2 : INT(5..10) := 5; //subrange data type END_VAR VAR arrTest : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM SrMain VAR CONSTANT cconst: INT(5..10) := 5; END_VAR VAR fbMyString1 : FB_SrString<5>; fbMyString2 : FB_SrString<(2 * cconst)>; arrMyString : ARRAY [0..5] OF FB_SrString<6>; END_VAR
Der folgende Code zeigt, wie ein Funktionsbaustein zu definieren ist, der Arrays beliebiger Länge verarbeiten kann. Der Funktionsbaustein verfügt über ein Array mit einer generischen, aber konstanten Länge. Mit "konstant" ist gemeint, dass, obwohl jede Funktionsbaustein-Instanz in ihrer Arraylänge variiert, diese während der Lebensdauer des Objekts konstant ist.
Ein solches Konstrukt ist beispielsweise für einen Bibliotheksprogrammierer von Vorteil, der einen generischen Bibliotheksbaustein implementieren möchte.
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT := 1; END_VAR VAR test : ARRAY[0..maxlen-1] OF BYTE; END_VAR ;
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR fbMyString1 : FB_MyString<100>; fbMyString2 : FB_MyString<(2 * cconst)>; arrMyString : ARRAY[0..5] OF FB_MyString<6>; END_VAR ;
Vererbung
Ein Funktionsbaustein kann von einem Basis-Funktionsbaustein mit generischer Konstante (EXTENDS
) erben. Der erbende Funktionsbaustein benötigt eine eigene generische Konstante. Von außen kann dann ein spezifischer Wert übergeben werden.
Syntax:
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR EXTENDS <function block base> < <generic constant name> >
Ein Funktionsbaustein mit generischer Konstante kann eine Schnittstelle implementieren (IMPLEMENTS
. Die Schnittstelle deklariert eine Eigenschaft (PROPERTY
) mit der von außen auf den spezifizierten Wert zugegriffen werden kann. Die Schnittstelle selbst darf keine generischen Konstanten oder lokale Variablen deklarieren. Schnittstellen haben keine Implementierung.
Syntax:
FUNCTION_BLOCK <function block name> VAR_GENERIC CONSTANT <generic constant name> : <integer data type> ; END_VAR IMPLEMENTS <interface name>
Tipp
Achten Sie beim Kodieren darauf, dass erst die Deklaration der generischen Konstanten eingefügt wird und dann EXTENDS
und IMPLEMENTS
nachfolgen. Das ist gewöhnungsbedürftig, hat aber den Grund, dass generische Konstanten auch bei Basisklassen verwendet werden können.
Definition der Schnittstelle IString
für einen generischen Funktionsbaustein.
Es wird dringend empfohlen für generische Funktionsbausteine eine Schnittstelle zu definieren. Die Schnittstelle soll die Verwendung der generischen Funktionsbaustein-Instanz ohne Kenntnis der generischen Konstanten ermöglichen.
Die Eigenschaft Length
ermöglicht den Zugriff auf die generische Konstante.
INTERFACE IString METHOD Append : BOOL VAR_INPUT strAppend : IString; END_VAR METHOD Assign : BOOL VAR_INPUT stringIn : STRING; END_VAR METHOD ToString : STRING VAR_INPUT END_VAR PROPERTY Length : DINT
Deklaration des Funktionsbausteins FB_MyString
mit der generischen Konstanten maxlen
FUNCTION_BLOCK FB_MyString VAR_GENERIC CONSTANT maxlen : UDINT; END_VAR IMPLEMENTS IString
Der Funktionsbaustein FB_LongString
ist eine Erweiterung des spezifizierten Funktionsbausteins FB_MyString
.
FUNCTION_BLOCK FB_LongString EXTENDS FB_MyString<1000>
Deklaration des Funktionsbausteins FB_MySpecialString
mit der generischen Konstanten maxlen2
als Erweiterung des spezifizierten Funktionsbausteins FB_MyString
. Der Funktionsbaustein ist erweitert um die Methode METH_ToLatin
.
FUNCTION_BLOCK FB_MySpecialString VAR_GENERIC CONSTANT maxlen2 : UDINT:= 1; END_VAR EXTENDS FB_MyString<maxlen2>
METHOD METH_ToLatin : STRING VAR_INPUT END_VAR
Instanziierung der Funktionsbausteine mit spezifischen Konstanten
PROGRAM PLC_PRG VAR CONSTANT cconst: DINT := 1000; END_VAR VAR string1 : FB_MyString<100>; string2 : FB_MyString<(2 * cconst)>; derived1 : FB_LongString; derived2 : FB_MySpecialString<100>; END_VAR
Aufrufe
string1.METH_Assign ('Welt'); string2.METH_Assign ('Hallo '); string2.METH_Append(string1); derived2.METH_ToLatin('Hello World');