Attributes no_assign, no_assign_warning
Fügen Sie das pragma {attribute 'no assign'} als erste Zeile der Deklaration des Funktionsbausteins ein. Das hat zur Folge, dass in der Ansicht SoMMenu/index.htm ausgegeben werden, wenn eine Instanz des Funktionsbausteins einer anderen Instanz desselben Funktionsbausteins zugewiesen wird. Eine solche Zuweisung möchte man beispielsweise vermeiden, wenn der Funktionsbaustein Zeiger enthält. In einem solchen Fall könnten Probleme auftreten, da die Zeiger kopiert werden, wenn Werte zugewiesen werden.
Das Pragma 'no_assign_warning'
hat dieselben Funktion wie das pragma 'no assign', gibt jedoch Alarme der Kategorie in der Ansicht SoMMenu/index.htm aus.
In diesem Beispiel führt die Wertzuweisung der Funktionsbausteininstanzen zu Problemen, wenn fb_exit
ausgeführt wird:
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
In diesem Fall verwaltet LogRecord
eine Liste mit Zeigern. Für sie werden verschiedene Aktionen ausgeführt, falls fb_exit
zutrifft. Wenn Sie Funktionsbausteininstanzen zuweisen, wird fb_exit
zweimal ausgeführt. Dies führt zu einem Problem. Vermeiden Sie dies, indem Sie das Attribut no_assign
zur Deklaration des Funktionsbausteins TestFB
hinzufügen:
{attribute 'no_assign'}
FUNCTION_BLOCK TestFB
VAR_INPUT
...
Wenn das pragma {attribute 'no assign'} verwendet wird, werden folgende Kompilierungsfehler ausgegeben:
C0328: Assignment not allowed for type TestFB
C0328: Assignment not allowed for type LogRecord
Wenn das pragma no assign_warning für den Funktionsbaustein TestFB
eingesetzt wird, werden ebenfalls die C0328
-Meldungen ausgegeben, jedoch in der Kategorie der Ansicht SoMMenu/index.htm.