Skip to main content

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

<function block name>

Name des Funktionsbausteins

VAR_GENERIC CONSTANT

END_VAR

Gültigkeitsbereich für generische Konstanten

Sie können im VAR_GENERIC CONSTANT-Bereich beliebig viele generische Konstanten deklarieren.

<generic constant name>

Variablenname der generischen Konstanten

: <integer data type>

Konstrukt, das die generische Konstante typisiert.

Erlaubt ist ein ganzzahliger Datentyp oder der Teilbereich eines ganzzahligen Datentyps.

Beispiel:

maxlen1 : INT := 4;

maxlen2 : INT(5..10) := 5;

:= <initial value>

Optional

Initialisierung

Wichtig

Der 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
Tabelle 9. Variablendeklaration

<scope>

END_...

Gültigkeitsbereich

<fb instance name>

Variable, Name der Funktionsbaustein-Instanz

: <function block name>

Typisiert die Variable mit dem Funktionsbaustein

Es handelt sich um einen Funktionsbaustein mit generischen Konstanten.

< <literal> >

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 in spitzen Klammern eingefügt.

Beispiel: fbMyString1 : FB_MyString<100&>;

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: fbPou : FB_Pou<100, 1000>;

<( <expression> )>

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 in spitzen Klammern eingefügt. Der Ausdruck selbst muss in runde Klammern gesetzt werden.

Die runde Klammer ist nötig, da es bei einem Ausdruck erlaubt ist, Symbole wie < oder > zu verwenden. Sonst ist die Eindeutigkeit des Codes nicht mehr gewährleistet.

Beispiel: fbMyString2 : FB_MyString<(2 * cconst)>;

ARRAY [ <start index start> .. <end index> ] OF <function block name>

Optional

Typisiert die Variable mit einem Array von Funktionsbausteinen. Die Länge des Arrays ist:

<end index> - <start index> + 1

Es handelt sich um einen Funktionsbaustein mit generischen Konstanten. Die Konstanten werden als Arrayindizes verwendet.

Beispiel: arrMyString

< <array length> >

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: arrMyString : ARRAY[0..5] OF FB_MyStrin<6>;



Beispiele

Beispiel 92. Beispiel für die Verwendung mehrerer generischer Konstanten
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


Beispiel 93. Beispiel: Generische Konstante eines Teilbereich-Typs
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


Beispiel 94. 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_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.

Beispiel 95. Beispiel

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');