Skip to main content

Variable: VAR_GENERIC CONSTANT

Variable constante genérica

Una constante genérica es una variable en VAR_GENERIC CONSTANT alcance de un bloque de funciones. La variable se define solo cuando se declara la instancia del bloque de funciones.

Se permite el uso de constantes genéricas en los métodos. Esto puede resultar particularmente útil en VAR_IN_OUT o VAR_IN_OUT CONSTANT alcance.

Sintaxis de la declaración de tipo

Sintaxis de la declaración de tipo de un bloque funcional con constantes genéricas

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>

Nombre del bloque de funciones

VAR_GENERIC CONSTANT

END_VAR

Alcance de las constantes genéricas

Puede declarar cualquier número de constantes genéricas en VAR_GENERIC CONSTANT alcance.

<generic constant name>

Nombre de variable de las constantes genéricas

: <integer data type>

Construye el tipo de la constante genérica.

Se permite un tipo de datos entero o el subámbito de un tipo de datos entero.

Ejemplo:

maxlen1 : INT := 4;

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

:= <initial value>

Opcional

Inicialización

Importante

El valor inicial solo es necesario para las comprobaciones de compilación. En tiempo de ejecución, el valor se sobrescribe

La constante genérica se puede usar como de costumbre en la implementación del bloque de funciones. Este tipo de constantes se pueden usar, por ejemplo, para los índices de matrices o las longitudes de cadenas

Sintaxis de la declaración de variables

Sintaxis de la declaración de variables (instanciación del bloque de función) con una constante especificada

Son posibles las siguientes opciones:

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
tabla 9. Declaración de variables

<scope>

END_...

Alcance

<fb instance name>

Variable; nombre de la instancia del bloque de funciones

: <function block name>

Escribe la variable con el bloque de funciones

Se trata de un bloque de funciones con constantes genéricas.

< <literal> >

Opcional

Asigna un valor específico al tipo de datos que solo es válido para esta instancia de bloque de funciones. El valor se inserta formalmente in angle brackets como sufijo del tipo de datos.

Ejemplo: fbMyString1 : FB_MyString<100&>;

Si múltiple se han declarado constantes genéricas para el bloque funcional que define el tipo y, a continuación, se pasa una lista de valores separados por comas entre corchetes angulares. Hay un valor para cada

Example: fbPou : FB_Pou<100, 1000>;

<( <expression> )>

Opcional

Asigna una expresión específica al tipo de datos que solo es válida para esta instancia de bloque de funciones. Se inserta la expresión in angle brackets como sufijo del tipo de datos. La expresión en sí misma debe estar incluida entre corchetes .

Los corchetes redondos son necesarios porque está permitido utilizar símbolos como < o > en una expresión. De lo contrario, la unicidad del código ya no está garantizada

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

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

Opcional

Escribe la variable con una matriz de bloques de funciones. La longitud de la matriz es:

<end index> - <start index> + 1

Se trata de un bloque de funciones con constantes genéricas. Las constantes se utilizan como índices matriciales

Ejemplo: arrMyString

< <array length> >

Asigna una longitud de matriz específica al tipo de datos que es válida especialmente para esta instancia de bloque de funciones.

La longitud de la matriz especificada se inserta formalmente entre corchetes angulares como sufijo del tipo de datos. El valor especificado debe coincidir con la longitud de la matriz definida por el índice inicial y el índice final

Example: arrMyString : ARRAY[0..5] OF FB_MyString<6>;



Ejemplos

ejemplo 92. Example of using multiple generic constants
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


ejemplo 93. Ejemplo: constante genérica de un tipo de subámbito
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


ejemplo 94. Ejemplo: Bloque de función genérico con variable de matriz parametrizable

El siguiente código demuestra cómo definir un bloque de funciones que puede procesar matrices de longitud arbitraria. El bloque de funciones tiene una matriz con una longitud genérica pero constante. «Constante» significa que, aunque la longitud de la matriz de cada instancia del bloque funcional varía, es constante durante la vida útil del objeto.

Este tipo de construcción es beneficioso, por ejemplo, para un programador de bibliotecas que quiera implementar una POU de biblioteca genérica.

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
;


Herencia

Un bloque funcional puede heredar de un bloque funcional base con una constante genérica (EXTENDS). El bloque de funciones heredado requiere su propia constante genérica. Luego, un valor específico se puede transferir externamente

Sintaxis:

FUNCTION_BLOCK <function block name> 
VAR_GENERIC CONSTANT        
    <generic constant name> : <integer data type> ; 
END_VAR 
EXTENDS <function block base> < <generic constant name> >

Un bloque de función con una constante genérica puede implementar una interfaz (IMPLEMENTS). La interfaz declara una propiedad (PROPERTY) con el que se puede acceder externamente al valor especificado. La interfaz en sí misma no debe declarar ninguna constante genérica o variable local. Las interfaces no tienen implementación

Sintaxis:

FUNCTION_BLOCK <function block name>
VAR_GENERIC CONSTANT
    <generic constant name> : <integer data type> ;
END_VAR
IMPLEMENTS <interface name>

Sugerencia

Al codificar, asegúrese de que la declaración de las constantes genéricas se inserte primero, seguida de EXTENDS y IMPLEMENTS. Lleva un tiempo acostumbrarse a esto, pero la razón es que las constantes genéricas también se pueden usar con las clases base

ejemplo 95. Ejemplo

Definición del IString interfaz para un bloque de funciones genérico.

It is strongly recommended to define an interface for generic function blocks. The interface should allow the generic function block instance to be used without knowledge of the generic constants.

El Length la propiedad permite el acceso a la constante genérica.

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

Declaración del bloque de funciones FB_MyString con la constante genérica maxlen

FUNCTION_BLOCK FB_MyString 
VAR_GENERIC CONSTANT        
    maxlen : UDINT; 
END_VAR 
IMPLEMENTS IString 

El bloque de funciones FB_LongString es una extensión del bloque de funciones especificado FB_MyString.

FUNCTION_BLOCK FB_LongString EXTENDS FB_MyString<1000>

Declaración del bloque de funciones FB_MySpecialString con la constante genérica maxlen2 como una extensión del bloque de funciones especificado FB_MyString. El bloque de funciones se amplía mediante el método 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

Instanciación de los bloques de funciones con constantes específicas

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 

Convocatorias

string1.METH_Assign ('Welt'); 
string2.METH_Assign ('Hallo '); 
string2.METH_Append(string1); 
derived2.METH_ToLatin('Hello World');