Palabras clave de atributo para los tipos de variables

Descripción general

Puede añadir las palabras clave de atributo siguientes a la declaración del tipo de variable para especificar el ámbito:

Variables remanentes - RETAIN, PERSISTENT

Las variables remanentes pueden conservar sus valores durante el periodo de ejecución del programa habitual. Declárelas como variables Retain o, para una mayor exigencia, como variables persistentes.

La declaración determina el grado de resistencia de una variable remanente en caso de restablecimientos, descargas o un reinicio del controlador. En las aplicaciones se utiliza principalmente la combinación de ambos indicadores remanentes (consulte Variables persistentes).

NOTA: Las declaraciones VAR PERSISTENT se interpretan de la misma manera que una VAR PERSISTENT RETAIN o VAR RETAIN PERSISTENT.
NOTA: Utilice el comando Agregar todas las rutas de instancia (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea) para llevar variables declaradas como persistentes al objeto Lista persistente.

La persistencia se consigue con los siguientes procedimientos:

  • Determinar las tareas cíclicas que acceden a la variable.

  • Copiar la variable en la listas de variables globales persistentes al final de la primera tarea cíclica (en cada ciclo).

  • Copiar el valor de la variable persistente en la variable normal cuando se reinicia el controlador.

Como la memoria se asigna tanto en la ruta de instancia como en la declaración, esta variable persistente requiere doble asignación de memoria en cada ciclo. Esto puede aumentar el tiempo de procesamiento, sobre todo con valores estructurados grandes.

Variables Retain

Las variables declaradas como Retain se almacenan en un área de memoria no volátil. Para declarar este tipo de variable, utilice la palabra clave RETAIN en la parte de declaración de una POU o en una lista de variables globales.

Ejemplo

VAR RETAIN
 iRem1 : INT; (* 1. Retain variable*)
END_VAR

Las variables Retain conservan su valor incluso después de un apagado imprevisto del controlador o después de una operación de apagado y encendido normal del controlador (o cuando se ejecuta el comando En línea Reset caliente). Al reiniciar el programa, los valores conservados se seguirán procesando. Las otras variables (que no son Retain) se inicializan de nuevo, ya sea con sus valores de inicialización o con sus valores de inicialización predeterminados (en el caso de que no se haya declarado un valor de inicialización).

Por ejemplo, puede utilizar un valor conservado cuando una operación (por ejemplo, el conteo de piezas en una máquina de producción) debe continuar tras un corte en el suministro eléctrico.

Las variables Retain, sin embargo, se reinicializan al ejecutar el comando En línea Reset origen y, a diferencia de las variables persistentes, al ejecutar el comando En línea Reset frío o durante la descarga de una aplicación.

NOTA: Solamente las variables definidas como VAR RETAIN se almacenan en la memoria no volátil. Sin embargo, las variables locales definidas como VAR RETAIN en las funciones NO se almacenan en la memoria volátil. La definición de VAR RETAIN localmente en las funciones no tiene efecto alguno.

Si utiliza interfaces o bloques de funciones que no provienen de las bibliotecas de configuración del sistema en la sección del programa de retención (VAR_RETAIN), provocará excepciones en el sistema que podrían dejar al controlador inoperativo, por lo que sería necesario un reinicio.

 ADVERTENCIA
FUNCIONAMIENTO IMPREVISTO DEL EQUIPO
  • No utilice interfaces fuera de la biblioteca SystemConfigurationItf en la sección del programa de retención (VAR_RETAIN).
  • No utilice bloques de funciones fuera de la biblioteca SystemConfiguration en la sección del programa de retención (VAR_RETAIN).
Si no se siguen estas instrucciones, pueden producirse lesiones graves, muerte o daños en el equipo.
NOTA: Las bibliotecas SystemConfigurationItf y SystemConfiguration solo están disponibles para controladores PacDrive (PacDrive LMC Eco, PacDrive LMC Pro/Pro2).
NOTA: Si una variable de un bloque de funciones se marca con RETAIN, la instancia del bloque de funciones con sus variables se almacena en la memoria remanente. Esta función no está disponible para todos los controladores. Consulte la guía de programación específica de su controlador para obtener más detalles.

Variables persistentes

Las variables persistentes se identifican por palabra clave PERSISTENT (VAR_GLOBAL PERSISTENT). Solamente se reinicializan al ejecutar el comando En línea Reset origen. A diferencia de las variables Retain, conservan sus valores después de una descarga.

NOTA: No utilice la declaración AT en combinación con VAR PERSISTENT.

Ejemplo de aplicación:

Un contador de horas de funcionamiento, que debe continuar contando incluso después de un corte en el suministro eléctrico o una descarga. Consulte la tabla sinóptica referente al comportamiento de las variables remanentes.

Las variables persistentes solamente se pueden declarar en una lista de variables globales especial de variables persistentes de tipo de objeto, que se asigna a una aplicación. Solamente se puede añadir una única lista de este tipo a una aplicación.

NOTA: Una declaración con VAR_GLOBAL PERSISTENT tiene el mismo efecto que una declaración con VAR_GLOBAL PERSISTENT RETAIN o VAR_GLOBAL RETAIN PERSISTENT.
NOTA: Se añaden rutas de instancia para las variables marcadas con la palabra clave PERSISTENT fuera del editor de lista persistente. Si desea más información, consulte el comando.

Al igual que las variables Retain, las variables persistentes se almacenan en un área de la memoria por separado.

Ejemplo

VAR_GLOBAL PERSISTENT RETAIN
  iVarPers1 : DINT; (* 1. Persistent+Retain Variable App1 *)
  bVarPers : BOOL;  (* 2. Persistent+Retain Variable App1 *)
END_VAR
NOTA: Las variables persistentes solamente se pueden declarar dentro del objeto Lista persistente. Si se declaran en otro lugar, se comportarán como variables Retain y se notificarán como un error de Compilar detectado en la vista Mensajes. (Las variables Retain se pueden declarar en las listas de variables globales o en las POU).

Cada vez que la aplicación se vuelva a cargar, la lista de variables persistentes del controlador se comparará con la del proyecto. La lista del controlador se identifica por la aplicación. En caso de discrepancias, se le pedirá que reinicialice todas las variables persistentes de la aplicación. La discrepancia puede ser el resultado de cambiar el nombre de las declaraciones existentes en la lista, de eliminar dichas declaraciones o de realizar otro tipo de modificaciones en ellas.

NOTA: Reflexione detenidamente sobre cualquier modificación en la parte de declaración de la lista de variables persistentes y el efecto de los resultados en lo que respecta a la reinicialización.

Puede añadir declaraciones nuevas únicamente al final de la lista. Durante una descarga, se detectarán como nuevas y no exigirán una reinicialización de toda la lista. Si modifica el nombre o el tipo de datos de una variable, esta se gestionará como una nueva declaración, lo cual provocará la reinicialización de la variable en la próxima descarga o modificación que se realice en línea.

NOTA: Si una variable de un bloque de funciones se marca con PERSISTENT, la instancia de bloque de funciones con sus variables se almacena en la memoria remanente, pero solo la variable se trata como persistente.

Comportamiento de las variables remanentes

Consulte la guía de programación específica de su controlador para obtener más información sobre el comportamiento de las variables remanentes.

Constantes - CONSTANT

Las constantes se identifican mediante la palabra clave CONSTANT. Puede declararlas localmente (programming object unit) o globalmente (lista de variables globales). Puede acceder a las variables de constante con acceso de solo lectura en la parte de implementación de una POU.

Sintaxis

<scope> CONSTANT <identifier>:<type> := <initialization>;
END_VAR

Con <scope> : VAR | VAR_INPUT | VAR_STAT | VAR_GLOBAL

Asegúrese de asignar un valor de inicialización cuando declare una variable de constante.

Ejemplo

VAR CONSTANT
c_iCon1:INT:=12; (* 1. Constant*)
END_VAR

Consulte el capítulo Operandos para ver una lista de las constantes posibles.

Constantes - VAR_GENERIC CONSTANT

Una constante genérica es una variable en el VAR_GENERIC CONSTANT área de declaración de un bloque de funciones a la que no se asigna un valor de inicialización hasta que se asigna la instancia del bloque de funciones.

Sintaxis: Declaración del bloque de funciones:

FUNCTION_BLOCK <function block name>
VAR_GENERIC CONSTANT
    <generic constant name> : <integer data type> := <initial value>; //Initial value will be overwritten
END_VAR
;

Puede utilizar la constante genérica (tipo de datos entero) de un bloque de funciones para el tamaño de las matrices o la longitud de las cadenas, por ejemplo. El valor inicial <initial value> solo es necesario para las comprobaciones de compilación. En tiempo de ejecución, el valor se sobrescribe.

Sintaxis: Declaración de la instancia del bloque de funciones:

PROGRAM PLC_PRG
VAR
    <fb instance name> : <function block name> < <literal> >;
    <fb instance name> : <function block name> <( <expression> )>;
END_VAR
;

Cuando se declaran las instancias del bloque de funciones, se asigna a la constante un valor específico que es válido exclusivamente para esta instancia. Con este fin, el valor <literal> entre paréntesis angulares se agrega al bloque de funciones <function block name> que actúa como tipo de datos.

Como alternativa, se puede agregar una expresión <expression>. Colóquelo entre paréntesis para permitir el uso de símbolos como < o > en una expresión y para que ayude a conservar la exclusividad del código.

Ejemplo: Bloque de funciones genérico con variable de matriz parametrizable:

En el ejemplo de código siguiente se muestra 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. En este contexto, el término constante significa que, aunque cada instancia del bloque de funciones varía en la longitud de su matriz, permanece constante durante la vida útil del objeto.

Esto puede resultar útil en la programación de bibliotecas, por ejemplo, para 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<100>;
END_VAR
;

Herencia

Un bloque de funciones con constantes genéricas también puede utilizar las construcciones de herencia EXTENDS y IMPLEMENTS.

NOTA: Asegúrese de insertar primero la declaración de las constantes genéricas seguida de EXTENDS y IMPLEMENTS, ya que las constantes genéricas también se pueden utilizar con clases básicas.

Ejemplo de herencia:

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
FUNCTION_BLOCK MyString 
VAR_GENERIC CONSTANT        
    maxlen : UDINT; 
END_VAR 
IMPLEMENTS IString
FUNCTION_BLOCK LongString EXTENDS MyString<1000>
FUNCTION_BLOCK MySpecialString 
VAR_GENERIC CONSTANT        
    maxlen2 : UDINT:= 1; 
END_VAR 
EXTENDS MyString<maxlen2>
METHOD ToLatin1: STRING
PROGRAM PLC_PRG 
VAR CONSTANT     
    cconst: DINT := 1000; 
END_VAR
VAR     
    string1 : MyString<100>;
    string2 : MyString<(2 * cconst)>;
    derived1 : LongString;
    derived2 : MySpecialString<100>;
END_VAR 
string1.Assign ('Welt'); 
string2.Assign ('Hallo '); 
string2.Append(string1); 
derived2.ToLatin1('Hello World');

Literales con tipo

Básicamente, al usar constantes IEC, se utilizará el tipo de datos más pequeño posible. Si tiene que utilizarse otro tipo de datos, se puede hacer con la ayuda de literales con tipo sin necesidad de declarar explícitamente las constantes. Para ello, la constante se proporcionará con un prefijo que indica el tipo.

Sintaxis

<tipo>#<literal>;

<tipo>

Especifica el tipo de datos que se desea.

Entradas posibles: BOOL, SINT, USINT, BYTE, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, LREAL

Escriba el tipo con letras mayúsculas.

<literal>

Especifica la constante.

Introduzca datos que se ajusten al tipo de datos especificado en <tipo>.

Ejemplo

iVar1:=DINT#34;

Si la constante no se puede convertir al tipo de destino sin sufrir una pérdida de datos, aparece un mensaje.

Puede utilizar los literales con tipo allí donde se pueda utilizar una constante normal.

Constantes en modalidad en línea

Siempre que la configuración predeterminada Replace constants (Archivo > Configuración del proyecto > Opciones de compilación) esté activada, las constantes en modalidad en línea tendrán un símbolo delante del valor en la columna Valor de la vista de supervisión o declaración. En este caso, no se puede acceder a ellas mediante forzado o escritura, por ejemplo.