Attribute pack_mode
El pragma {attribute 'pack_mode'}
define el modo en que se agrupa una estructura de datos mientras se asigna. Defina el atributo en la parte superior de una estructura de datos. Influye en la agrupación de toda la estructura.
{attribute 'pack_mode' := '<value>'}
El marcador de posición <value>
puede contener los siguientes valores:
|
Método de agrupación asociado |
---|---|
0 |
Adaptado |
1 |
Adaptado a 1 byte |
2 |
Adaptado a 2 byte |
4 |
Adaptado a 4 bytes |
8 |
Adaptado a 8 byte |
En función de la estructura, es posible que no exista diferencia alguna en la asignación de memoria de las diferentes modalidades. Por ejemplo, la asignación de memoria de una estructura con pack_mode = 4
puede corresponder a la de pack_mode = 8
.
Si las estructuras se combinan en matrices, se añadirán bytes al final de cada estructura para conseguir que se adapte la estructura siguiente.
'pack_mode'
no se utiliza para una estructura o corresponde a la alineación del procesador del controlador.
En algunos controladores, como Modicon M262 Logic/Motion Controllers y Controladores lógicos Modicon M241, el uso de una alineación no natural para las estructuras puede dar lugar a una excepción en los siguientes casos:
Al tener acceso a elementos de estructuras no alineadas (por ejemplo, una variable de 4 bytes ubicada en una dirección no divisible por 4) con un POINTER variable.
Al compartir dichas variables mediante la
, por ejemplo, para acceder a ellas desde un cliente OPC UA.ADVERTENCIA | |
---|---|
No exponga tampoco estructuras alineadas de forma no natural procedentes de bibliotecas.
No utilice estructuras alineadas de forma no natural dentro de las tramas de visualización. En su lugar, copie esas estructuras en estructuras alineadas de forma natural y transmita esas estructuras a las tramas de visualización.
{attribute 'pack_mode' := '1'}
TYPE myStruct:
STRUCT
Enable: BOOL;
Counter: INT;
MaxSize: BOOL;
MaxSizeReached: BOOL;
END_STRUCT
END_TYPE
Se crea una instancia alineada de la variable de tipo de datos myStruct
.
Si la dirección de su componente Enable
es 0x0100
, el componente Counter
seguirá la dirección 0x0101
, MaxSize
la dirección 0x0103
y MaxSizeReached
la dirección 0x0104
.
Con pack_mode=2
, Counter
se encontraría en 0x0102
, MaxSize
en 0x0104
y MaxSizeReached
en 0x0106
.