Atributo: no_virtual_actions
El pragma se usa para bloques de funciones que se derivan de un bloque de funciones implementado en SFC y usan la secuencia SFC fundamental de esta clase base. Las acciones llamadas desde él exhiben el mismo comportamiento virtual que los métodos. Esto significa que las implementaciones de las acciones en la clase base pueden ser reemplazadas por la clase derivada con sus propias implementaciones específicas.
Si aplica el pragma a la clase base, sus acciones están protegidas contra la sobrecarga.
Sintaxis:
{attribute 'no_virtual_actions'}
Insertar ubicación: Línea superior en la parte de declaración del bloque de función
El bloque de funciones POU_SFC
es la clase base para el bloque de función derivado POU_child
. La clase derivada POU_child
llama a la secuencia de la clase base escrita en SFC con la variable especial SUPER
.


La implementación ejemplar de esta secuencia se limita al paso inicial, seguido de un solo paso con una acción de paso vinculado ActiveAction
. Este paso con una acción de paso vinculada se encarga de la configuración de las variables de salida.
an_int := an_int+1; // Counting the action calls test_act := 'father_action'; METH(); // Call of the method METH in order to set the string variable test_meth
En el caso de la clase derivada POU_child
la acción de paso se reemplaza por una implementación especial de ActiveAction
. Active Action
difiere del original solo por la asignación de la cadena 'child_action'
en lugar de 'father_action'
en la variable test_act
.
Así mismo, el método METH
, que asigna la cadena 'father_method'
a la variable test_meth
en la clase base, se sobrescribe para que test_meth
ahora obtiene el valor 'child_method'
.El programa principal PLC_PRG
llama a una instancia del bloque de función POU_child
, nombrada Child
. Como era de esperar, el valor de las cadenas refleja la llamada de la acción y el método de la clase derivada:

Ahora, sin embargo, colocas el pragma {attribute 'no_virtual_actions'}
delante de la clase base:
{attribute 'no_virtual_actions'} FUNCTION_BLOCK POU_SFC...
Esto cambia el comportamiento: mientras que la implementación de la clase derivada todavía se usa para el método METH
, la llamada de la acción del paso ahora da como resultado una llamada de la acción ActiveAction
de la clase base. Por lo tanto test_act
ahora se le da el valor 'father_action'
:
