Generische konstante Variablen - VAR_GENERIC CONSTANT
Eine generische Konstante ist eine Variable im Deklarationsbereich VAR_GENERIC CONSTANT eines Funktionsbausteins, der erst bei der Deklaration der Funktionsbaustein-Instanz definiert wird.
Verfügbar ab TC3.1 Build 4026 |
Syntax
Deklaration des Funktionsbausteins:
FUNCTION_BLOCK <function block name>
VAR_GENERIC CONSTANT
<generic constant name> : <integer data type> := <initial value>; //Initialwert wird überschrieben
END_VAR
Die generische Konstante (ganzzahliger Datentyp) kann innerhalb eines Funktionsbausteins wie üblich verwendet werden. Beispielsweise können Sie die Konstante für die Definition der Größe von Arrays oder der Länge von Strings verwenden. Der Initialwert wird nur für Compile-Prüfungen benötigt. Zur Laufzeit wird der Wert überschrieben.
Deklaration des Funktionsbaustein-Instanz:
PROGRAM MAIN
VAR
<fb instance name> : <function block name> < <literal> >;
<fb instance name> : <function block name> <( <expression> )>;
END_VAR
Bei der Deklaration der Funktionsbaustein-Instanzen wird der Konstanten ein spezifischer Wert zugewiesen, der nur für diese Instanz gültig ist. Dafür wird dem als Datentyp fungierenden Funktionsbaustein der Wert (<literal>) in spitzen Klammern angehängt.
Alternativ dazu kann ein Ausdruck (<expression>) angehängt werden. Dieser muss allerdings in runden Klammern stehen, da es bei einem Ausdruck erlaubt ist, Symbole wie < oder > zu verwenden. Sonst ist die Eindeutigkeit des Codes nicht mehr gewährleistet.
Beispiel
Generischer Funktionsbaustein mit parametrierbarer Arrayvariable
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_Sample
VAR_GENERIC CONSTANT
nMaxLen : UDINT := 1;
END_VAR
VAR
aSample : ARRAY[0..nMaxLen-1] OF BYTE;
END_VAR
PROGRAM MAIN
VAR CONSTANT
cConst : DINT := 10;
END_VAR
VAR
fbSample1 : FB_Sample<100>;
fbSample2 : FB_Sample<(2*cConst)>;
aSample : ARRAY[0..5] OF FB_Sample<10>;
END_VAR
Vererbung
Ein Funktionsbaustein mit generischen Konstanten kann auch die Vererbungskonstrukte EXTENDS und IMPLEMENTS verwenden.
Achten Sie beim Implementieren darauf, dass erst die Deklaration der generischen Konstanten eingefügt wird und dann EXTENDS und IMPLEMENTS nachfolgen. Das hat den Grund, dass generische Konstanten auch bei Basisklassen verwendet werden können.
Beispiel
INTERFACE I_Sample
FUNCTION_BLOCK FB_Sample
VAR_GENERIC CONSTANT
nMaxLen : UDINT := 1;
END_VAR
IMPLEMENTS I_Sample
VAR
aSample : ARRAY[0..nMaxLen-1] OF BYTE;
END_VAR
FUNCTION_BLOCK FB_Sub_1 EXTENDS FB_Sample<100>
FUNCTION_BLOCK FB_Sub_2
VAR_GENERIC CONSTANT
nMaxLen2 : UDINT := 1;
END_VAR
EXTENDS FB_Sample<nMaxLen2>
PROGRAM MAIN
VAR
fbSample1 : FB_Sample<10>;
fbSub1 : FB_Sub_1;
fbSub2 : FB_Sub_2<20>;
END_VAR