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
operadorPor 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
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:
SA0170: No debe tomar la dirección de una variable de salida