Ermittelt ungepackte Strukturen, die in gepackten Strukturen verwendet werden.
Begründung: Eine ungepackte Struktur legt der Compiler normalerweise auf eine Adresse, die alignten Zugriff auf alle Elemente innerhalb der Struktur erlaubt. Wenn Sie diese Struktur in einer gepackten Struktur anlegen, dann ist ein alignter Zugriff nicht mehr möglich, und ein Zugriff auf ein Element in der ungepackten Struktur kann zu einer "Misalignment Exception" führen.
Wichtigkeit: Hoch
Beispiel
Die Struktur structSingleDataRecord ist gepackt, enthält jedoch die ungepackte Strukturen struct4Byte und struct9Byte.
{attribute 'pack_mode' := '1'}
TYPE structSingleDataRecord :
STRUCT
str9ByteData: struct9Byte; (* 9 BYTE *)
str4ByteData: struct4Byte; (* 4 BYTE *)
udi1: UDINT;
udi2: UDINT;
udi3: UDINT;
usi4: USINT;
END_STRUCT
END_TYPE
(* 9 BYTE *) TYPE struct9Byte : STRUCT usiRotorSlots: USINT; (* 1 BYTE *) uiMaxCurrent: UINT; (* 2 BYTE *) usiVelocity: USINT; (* 1 BYTE *) uiAcceleration: UINT; (* 2 BYTE *) uiDeceleration: UINT; (* 2 BYTE *) usiDirectionChange: USINT; (* 1 BYTE *) END_STRUCT END_TYPE
TYPE struct4Byte : STRUCT //udiDummy : UDINT; rRealDummy : REAL; END_STRUCT END_TYPE --> SA0161: Deklaration einer nicht gepackten Struktur 'struct9ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord' --> SA0161: Deklaration einer nicht gepackten Struktur 'struct4ByteData' innerhalb einer gepackten Struktur 'structSingleDataRecord'