Tipos de variables

Descripción general

En este capítulo se proporciona información sobre los tipos de variables siguientes:

Variables locales - 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

Variables de entrada - 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

Variables de salida - 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);

Variables de entrada y salida - 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.

NOTA: Con variables de tipo 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>
NOTA: No asigne símbolos de tipo bit (tales como variables %MXaa.b o BOOL que están situadas en una dirección de dicho tipo bit) a parámetros BOOL de tipo VAR_IN_OUT de bloques de funciones. Si se detecta cualquiera de esas asignaciones, se comunica como un error de Compilar detectado en la vista Mensajes (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).

Ejemplo

VAR_IN_OUT
 iInOut1:INT; (* 1. Inputoutputvariable *)
END_VAR

Variable de transferencia - 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.

NOTA: Si se selecciona la opción Replace constants en el cuadro de diálogo Configuración del proyecto > Opciones de compilación (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea), el compilador genera un mensaje de error cuando se pasan parámetros de una constante con tipo de datos básico o una variable de constante con tipo de datos básico.

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.

Variables globales - 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 Añadir objeto (de forma predeterminada en el menú Proyecto).

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 Añadir objeto (de forma predeterminada en el menú Proyecto).

NOTA: Una variable definida localmente en una POU con el mismo nombre que una variable global tendrá prioridad dentro de la POU.
NOTA: Las variables globales se inicializan antes de las variables locales de las POU.

Variables temporales - 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

NOTA: Puede utilizar 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).

Variables estáticas - 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.

Variables externas - 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.

NOTA: No es necesario definir las variables como externas. Estas palabras clave se proporcionan para mantener la compatibilidad con IEC 61131-3.

Ejemplo

FUNCTION_BLOCK FB_DoSomething 
VAR_EXTERNAL
 iVarExt1:INT; (* 1st external variable *)
END_VAR

Variables de instancia - 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;