Rockwell Automation Publication 1789-UM002K-EN-P - January 2015 143
Develop External Routines Chapter 7
Packing in Structures
Take care when designing user-defined structures that are shared between the
SoftLogix controller and external routines. The packing mechanisms vary
between the Visual Studio compiler and the Logix Designer compiler. This table
and guidelines help illustrate this situation.
• Aggregates like arrays and structures start on 4-byte boundaries.
• Consecutive BOOLs are bit-packed, as are boolean arrays.
• SINTs and BOOLs are one-byte aligned unless noted above.
• INT is 2-byte aligned.
• REAL and DINT are 4-byte aligned.
• Gaps of one or more bytes may exist between items.
This table shows the Microsoft packing for Visual Studio software, version 6.0. If
you are not using this version of Visual Studio software, consult your
documentation for appropriate packing information.
Logix Designer Application Structure Storage
Member Data Type Alignment Packing Storage
Consecutive BOOLs 4 byte boundaries bit packed across storage ((N-1 bits / 32) + 1) * 4 bytes
Array <BOOL> 4 byte boundaries bit packed across storage ((N-1 bits / 32) + 1) * 4 bytes
BOOL 1 byte boundaries 1 per byte of storage 1 byte
SINT 1 byte boundaries 1 per byte of storage 1 byte
INT 2 byte boundaries 1 per 2 bytes of storage 2 bytes
DINT 4 byte boundaries 1 per 4 bytes of storage 4 bytes
REAL 4 byte boundaries 1 per 4 bytes of storage 4 bytes
Array <nonBOOL> 4 byte boundaries 1 per N bytes of storage (eleSize * eleCount) bytes
<StructureT> (such as, UDT) 4 byte boundaries 1 per N bytes of storage Ceiling (sizeof(StructureT) / 4) * 4 bytes
Microsoft Win32 Structure Storage (default n=8)
Member Data Type Alignment Packing Storage
BOOL Min(1,n) byte boundaries 1 per byte of storage 1 byte
Char Min(1,n) byte boundaries 1 per byte of storage 1 byte
Short Min(2,n) byte boundaries 1 per 2 bytes of storage 2 bytes
Int Min(4,n) byte boundaries 1 per 4 bytes of storage 4 bytes
Long Min(4,n) byte boundaries 1 per 4 bytes of storage 4 bytes
Float Min(4,n) byte boundaries 1 per 4 bytes of storage 4 bytes
Array <AnyT> Min(eleAlignment,n) byte boundaries 1 per N bytes of storage (eleSize * eleCount) bytes
<StructureT> (such as, struct) Min(largestOfMember,n) byte boundaries 1 per N bytes of storage Sizeof(StructureT) bytes