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_VARFUNCTION_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_VARDer 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 : DINTDeklaration 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');