Attributes no_assign, no_assign_warning

Descripción general

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 errores de compilación en la vista Mensajes (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.

NOTA: Utilice el {attribute 'no assign'} en bloques de funciones con punteros internos para evitar que se asigne una instancia del bloque de funciones a otra instancia del mismo bloque.

El pragma 'no_assign_warning' tiene las mismas funciones que el pragma 'no assign', pero emite alertas detectadas como advertencias de categoría en la vista Mensajes (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).

Asignación de instancias de bloques de funciones que contienen punteros

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 advertencia de categoría en la vista Mensajes (consulte EcoStruxure Machine Expert, Comandos de menú, Ayuda en línea).