Este tipo de datos está disponible en la extensión a la norma IEC 61131-3.
Una referencia almacena la dirección de un objeto (una variable) que se encuentra en otro punto de la memoria; en este sentido, el comportamiento es idéntico al de un puntero.
A diferencia de un puntero, una variable se comporta como un objeto cuando se hace referencia a la sintaxis. Además, las variables declaradas como REFERENCE ofrecen las siguientes ventajas en comparación con POINTERS:
Las referencias no tienen que quitarse de manera explícita (con ^
) para poder acceder al contenido del objeto referenciado.
Al transmitir valores a los parámetros de entrada de funciones, bloques de funciones o métodos, se aplica lo siguiente: si se declara una entrada como REFERENCE TO
<data type>
, podrá transmitirse una variable del <data type>
correspondiente (variable refInput :=
en lugar de ptrInput :=ADR
[variable]).
El compilador verifica que las referencias de un mismo tipo de datos se asignen mutuamente.
Para obtener más información, consulte la descripción de operador de asignación REF.
También puede usar una función de supervisión de puntero implícita, como se describe en la sección función CheckPointer.
A : REFERENCE TO DUT;
B : DUT;
C : DUT;
A REF= B; // corresponds to A := ADR(B);
A := C; // corresponds to A^ := C;
Puede utilizar el operador __ISVALIDREF
para comprobar si una referencia apunta a un valor válido distinto de 0.
Sintaxis
<Boolean variable name> := __ISVALIDREF( <reference name> );
<reference name>
: identificador declarado con tipo REFERENCE TO
<data type>
.
La variable booleana es TRUE si la referencia apunta a un valor válido. De lo contrario, es FALSE.
Ejemplo
Declaración
ivar : INT;
ref_int : REFERENCE TO INT;
ref_int0: REFERENCE TO INT;
testref: BOOL := FALSE;
Implementación
ivar := ivar +1;
ref_int REF= ivar;
ref_int0 REF= 0;
testref := __ISVALIDREF(ref_int); (* will be TRUE, because ref_int points to ivar, which is unequal 0 *)
testref := __ISVALIDREF(ref_int0); (* will be FALSE, because ref_int is set to 0 *)