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
| Nombre del bloque de funciones |
| Alcance de las constantes genéricas Puede declarar cualquier número de constantes genéricas en |
| Nombre de variable de las constantes genéricas |
| 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:
|
| Opcional Inicialización ImportanteEl 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
| Alcance |
| Variable; nombre de la instancia del bloque de funciones |
| Escribe la variable con el bloque de funciones Se trata de un bloque de funciones con constantes genéricas. |
| 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 Ejemplo: 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: |
| 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 Los corchetes redondos son necesarios porque está permitido utilizar símbolos como Example: |
| Opcional Escribe la variable con una matriz de bloques de funciones. La longitud de la matriz es:
Se trata de un bloque de funciones con constantes genéricas. Las constantes se utilizan como índices matriciales Ejemplo: |
| 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: |
Ejemplos
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
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
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');