Skip to main content

SA0167: Instancias de bloques de funciones temporales

La comprobación detecta instancias de bloques de funciones que se declaran como variables temporales. Esto afecta a las instancias que se declaran en un método o función o como VAR_TEMP, y por lo tanto se reinicializan en cada ciclo de procesamiento o para cada llamada de POU.

Justificación:

  • Los bloques de funciones tienen un estado que normalmente se mantiene durante múltiples ciclos del PLC. Una instancia en la pila existe solo mientras dura la llamada a la función. Por lo tanto, rara vez tiene sentido crear una instancia como variable temporal.

  • En segundo lugar, las instancias de bloques de funciones suelen ser grandes y necesitan mucho espacio en la pila (que normalmente está restringido a los controladores).

  • En tercer lugar, la inicialización y, a menudo, también la programación de un bloque de funciones puede llevar mucho tiempo.

Importancia: Media

ejemplo 125. Ejemplo
PROGRAM PLC_PRG
VAR
END_VAR
VAR_TEMP
    yafb: AFB;
END_VAR
FUNCTION Fun : INT
VAR_INPUT
END_VAR
VAR
    funafb: AFB;
END_VAR
METHOD METH : INT
VAR_INPUT
END_VAR
VAR
    methafb: AFB;    // SA0167
END_VAR

Salida en el Mensajes vista:

  • sa_icon_message.png SA0167: Instancia de bloque de función temporal: 'methafb'