Attributes no_assign, no_assign_warning
Inserte el pragma {attribute 'no assign'} como la primera línea de la parte de declaración de un bloque de funciones. Esto tiene el efecto de que se generan de compilación en la vista (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea) si se asigna una instancia de bloque de funciones a otra instancia del mismo bloque de funciones. Se recomienda evitar por ejemplo este tipo de asignaciones si el bloque de funciones contiene punteros. Esta situación podría provocar problemas, ya que estos se copian cuando se asignan los valores.
El pragma 'no_assign_warning'
tiene las mismas funciones que el pragma 'no assign', pero emite alertas detectadas como de categoría en la vista (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).
En este ejemplo, la asignación de valores de las instancias del bloque de funciones provoca problemas al ejecutar fb_exit
:
VAR_GLOBAL
inst1 : TestFB;
awsBufferLogFile : ARRAY [0..9] OF WSTRING(66);(* Area: 0, Offset: 0x1304 (4868)*)
LogFile : SEDL.LogRecord := (sFileName := 'LogFile.log', pBuffer := ADR(awsBufferLogFile), udiMaxEntriesFile := UDINT#10000, udiMaxBuffered := UDINT#10, uiLineSize := UINT#64, wsSep := " ", xCircular := TRUE, siDateFormat := SINT#0, siTimeFormat := SINT#0);
END_VAR
PROGRAM PLC_PRG
VAR
inst2 : TestFB := inst1;
LogFileNew : LogRecord := LogFile;
END_VAR
En este caso, LogRecord
gestiona una lista de punteros. Si se aplica fb_exit
, se ejecutarán diversas acciones para dichos punteros. Al asignar instancias del bloque de funciones, fb_exit
se ejecutará dos veces, lo cual provocará un problema. Para evitarlo, añada el atributo no_assign
a la declaración del bloque de funciones TestFB
:
{attribute 'no_assign'}
FUNCTION_BLOCK TestFB
VAR_INPUT
...
Se informa de los siguientes errores de compilación cuando se usa el pragma {attribute 'no assign'}:
C0328: Assignment not allowed for type TestFB
C0328: Assignment not allowed for type LogRecord
Si se usa el pragma no assign_warning para el bloque de funciones TestFB
, también se emiten los mensajes C0328
, pero como de categoría en la vista (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).