Skip to main content

SA0170: No se debe utilizar la dirección de una variable de salida

Detecta las ubicaciones del código donde se encuentra la dirección de una variable de salida (VAR_OUTPUT, VAR_IN_OUT) de un bloque de funciones.

Justificación: No está permitido utilizar la dirección de salida de un bloque de funciones de la siguiente manera:

  • Por medio del ADR operador

  • Por medio de REF=

Excepción: no se informa ningún error si la variable de salida se usa dentro del mismo bloque de funciones.

Importancia: Media

ejemplo 128. Ejemplo

Bloque de funciones FB1 tiene el VAR_OUTPUT variable iOutVal : INT;

El siguiente acceso en otra POU genera el Error SA0170:

//FB1_inst is of type FB1
addr1 := ADR(FB1_inst.iOutVal);    //SA0170
refINT REF= FB1_inst.iOutVal;    //SA0179

El siguiente acceso directamente dentro del FB1 bloque de funciones también genera el error:

//other is a POINTER TO FB1
ptr := ADR(other^.iOutVal);    //SA0170

El siguiente acceso directamente dentro del FB1 bloque de funciones no genera errores:

//iInputVal is a VAR_INPUT of FB1
iOutVal := iInputVal; 
//ptr is a POINTER TO INT
ptr := ADR(THIS^.iOutVal); 
ptr := ADR(iOutVal);

Salida en el Mensajes vista:

  • sa_icon_message.png SA0170: No debe tomar la dirección de una variable de salida