En este capítulo se proporciona información sobre los tipos de variables siguientes:
VAR_INPUT
variables de entrada
VAR_OUTPUT
variables de salida
VAR_IN_OUT
variables de entrada y salida
VAR_IN_OUT CONSTANT
variable de transferencia
VAR_GLOBAL
variables globales
VAR_TEMP
variables temporales
VAR_STAT
variables estáticas
VAR_EXTERNAL
variables externas
VAR_INST
variables de instancia
VAR
Entre las palabras clave VAR
y END_VAR
todas las variables locales de una POU se declaran. No tienen conexión externa; esto es, no pueden escribirse desde el exterior.
Considere la posibilidad de añadir un atributo a VAR
.
Ejemplo
VAR
iLoc1:INT; (* 1. Local Variable*)
END_VAR
VAR_INPUT
Entre las palabras clave VAR_INPUT
y END_VAR
se declaran todas las variables que sirven como variables de entrada para una POU. Por lo tanto, en la posición de llamada, el valor de las variables se puede proporcionar junto con una llamada.
Considere la posibilidad de añadir un atributo.
Ejemplo
VAR_INPUT
iIn1:INT (* 1. Inputvariable*)
END_VAR
VAR_OUTPUT
Entre las palabras clave VAR_OUTPUT
y END_VAR
se declaran todas las variables que sirven como variables de salida de una POU. Por lo tanto, estos valores se devuelven a la POU que hace la llamada.
Considere la posibilidad de añadir un atributo a VAR_OUTPUT
.
Ejemplo
VAR_OUTPUT
iOut1:INT; (* 1. Outputvariable*)
END_VAR
Variables de salida en funciones y métodos:
Conforme al borrador 2 de la IEC 61131-3, las funciones (y los métodos) pueden tener salidas adicionales. Puede asignarlas en la llamada de la función como se muestra en el ejemplo siguiente.
Ejemplo
fun(iIn1 := 1, iIn2 := 2, iOut1 => iLoc1, iOut2 => iLoc2);
VAR_IN_OUT
Entre las palabras clave VAR_IN_OUT
y END_VAR
se declaran todas las variables que sirven como variables de entrada y salida para una POU.
IN_OUT
, se cambia el valor de la variable transferida (transferida como puntero, llamar-por-referencia). Por lo tanto, el valor de entrada para esas variables no puede ser una constante. Por este motivo, incluso las variables VAR_IN_OUT
de un bloque de funciones no se pueden leer o escribir directamente desde el exterior a través de <FBinstance>.<InOutVariable>
VAR_IN_OUT
de bloques de funciones. Si se detecta cualquiera de esas asignaciones, se comunica como un error de detectado en la vista (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).
Ejemplo
VAR_IN_OUT
iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR
VAR_IN_OUT CONSTANT
Una variable VAR_IN_OUT CONSTANT
actúa como un parámetro de pase por referencia de constante. Una variable o una constante (literal) de tipo STRING o WSTRING pueden pasarse a este parámetro. El parámetro es de solo lectura. El pase de propiedades no está permitido.
Sintaxis
VAR_IN_OUT CONSTANT
<variable name> : <data type>; // formal parameter
END_VAR
Las variables VAR_IN_OUT CONSTANT
se declaran sin asignar un valor de inicialización.
Uso
Al llamar a la POU, una variable de constante o literal de tipo STRING o WSTRING pueden pasarse. El acceso de escritura no está permitido.
Al pasar parámetros de una constante STRING, la longitud de la cadena no está limitada. La longitud de la cadena no depende de la longitud de la cadena de las variables VAR_IN_OUT CONSTANT
.
La variable se admite en EcoStruxure Machine Expert V2.0 y versiones posteriores.
Ejemplo: pase de parámetros de constantes STRING y variables STRING
FUNCTION funManipulate : BOOL
VAR_IN_OUT
sReadWrite : STRING(16); (* Can be read or written here in POU *)
dwVarReadWrite : DWORD; (* Can be read or written here in POU *)
END_VAR
VAR_IN_OUT CONSTANT
c_sReadOnly : STRING(16); (* Constant string variable can only be read here in POU *)
END_VAR
sReadWrite := 'String_from_POU';
dwVarReadWrite := STRING_TO_DWORD(c_sReadOnly);
PROGRAM PRG_A
VAR
sVarFits : STRING(16);
sValFits : STRING(16) :='1234567890123456';
dwVar: DWORD;
END_VAR
// The following line of code causes the compiler error C0417:
// C0417: VAR_IN_OUT parameter 'sReadWrite' needs a variable with write access as input.
funManipulate(sReadWrite:='1234567890123456', c_sReadOnly:='1234567890123456', dwVarReadWrite := dwVar);
// Correct code
funManipulate(sReadWrite := sValFits, c_sReadOnly := '23', dwVarReadWrite := dwVar);
funManipulate(sReadWrite := sVarFits, c_sReadOnly := sValFits, dwVarReadWrite :=dwVar);
En el ejemplo de código, se pasan cadenas a la función funManipulate mediante diferentes variables VAR_IN_OUT
:
Al pasar un literal de cadena a una variable VAR_IN_OUT
, se emite un error de compilador.
Al pasar una variable de constante a una variable VAR_IN_OUT CONSTANT
, se genera código correcto. Esto también se aplica al pase de variables de cadena.
VAR_GLOBAL
Puede declarar variables normales, constantes, externas o variables remanentes que se conocen en todo el proyecto como variables globales. Para declarar variables globales, utilice las listas de variables globales (GVL). Puede añadir una GVL ejecutando el comando
(de forma predeterminada en el menú ).
Declare las variables localmente entre las palabras clave VAR_GLOBAL
y END_VAR
Considere la posibilidad de añadir un atributo a VAR_GLOBAL
.
Se reconoce una variable como variable global porque va precedida de un punto; por ejemplo, .iGlobVar1
.
Para obtener más información sobre el uso múltiple de nombres de variables, el operador de ámbito global dot (.)
y los espacios de nombres, consulte el capítulo Operador de ámbito global.
Las variables globales solo se pueden declarar en las listas de variables globales (GVL). Sirven para gestionar variables globales dentro de un proyecto. Puede añadir una GVL ejecutando el comando
(de forma predeterminada en el menú ).VAR_TEMP
Esta función es una extensión de la norma IEC 61131-3.
Las variables temporales se (re)inicializan en cada llamada de la POU. Las declaraciones VAR_TEMP
solo son posibles dentro de programas y bloques de funciones. Estas variables son también solo accesibles dentro del cuerpo de la POU del programa o el bloque de funciones.
Declare las variables localmente entre las palabras clave VAR_TEMP
y END_VAR
VAR_TEMP
en lugar de VAR
para reducir el espacio en memoria que requiere una POU (por ejemplo, dentro de un bloque de funciones si la variable solo se utiliza temporalmente).
VAR_STAT
Esta función es una extensión de la norma IEC 61131-3.
Las variables estáticas se pueden usar en bloques de funciones, métodos y funciones. Declárelas localmente entre las palabras clave VAR_STAT
y END_VAR
. Se inicializan en la primera llamada de la POU correspondiente.
Al igual que las variables globales, las variables estáticas no pierden su valor tras dejar la POU en que se declaran. Se comparten entre las POU en que se declaran (por ejemplo, varios métodos, funciones e instancias de los bloques de funciones comparten la misma variable estática). Por ejemplo, se pueden utilizar en una función como contador del número de llamadas de función.
Considere la posibilidad de añadir un atributo a VAR_STAT
.
VAR_EXTERNAL
Son variables globales que se importan a la POU.
Declárelas localmente entre las palabras clave VAR_EXTERNAL
y END_VAR
y en la lista de variables globales (GVL). La declaración y la declaración global deben ser idénticas. Si la variable global no existe, se mostrará un mensaje.
Ejemplo
FUNCTION_BLOCK FB_DoSomething
VAR_EXTERNAL
iVarExt1:INT; (* 1st external variable *)
END_VAR
VAR_INST
Si declara una variable de un método como una variable de instancia mediante el atributo VAR_INST
, esta variable no se guardará en la pila del método, sino en la pila de la instancia del bloque de funciones. Por lo tanto, se comporta como otras variables de la instancia del bloque de funciones y no se reinicializa al llamar el método.
Las variables VAR_INST
solo se permiten en métodos. Solo podrá acceder a este tipo de variables desde dentro del método. Los atributos como CONST
o RETAIN
no se permiten en la declaración. Los valores de las variables pueden supervisarse en la parte de declaración del método.
Ejemplo
METHOD meth_last : INT
VAR_INPUT
iVar : INT;
END_VAR
VAR_INST
iLast : INT := 0;
END_VAR
meth_last := iLast;
iLast := iVar;