Attribute pack_mode

概述

pragma {attribute 'pack_mode'} 定义分配数据结构时的打包模式。独立于数据结构设置属性:它会影响整个结构的打包。

注: 如果编程代码中使用了 pragma {attribute 'pack_mode'},请勿选择符号配置 编辑器中的兼容性布局选项。

语法

{attribute 'pack_mode' := '<value>'}

占位符 <value> 可以具有以下值:

'pack_mode'

相关的打包方法

0

已分配

1

1 字节分配

2

2 字节分配

4

4 字节分配

8

8 字节分配

根据结构,各模式的内存映射可能没有区别。例如,包含 pack_mode = 4 的结构的内存分配可能与 pack_mode = 8 的内存分配一致。

如果将结构组合成了数组,则会在每个结构的末尾添加字节,以实现下一个结构的对齐。

注: 我们所说的“自然”对齐是指 'pack_mode' 不用于结构或对应于控制器处理器的对齐方式。

在某些控制器上,如 Modicon M262 Logic/Motion ControllersModicon M241 逻辑控制器,对结构使用非自然对齐方式可能导致在以下情况下出现异常:

  • 访问未对齐的此类结构的元素时(例如,位于不可被 4 整除的地址上的 4 字节变量),使用 POINTER 变量。

  • 使用符号配置共享此类变量时,例如,从 OPC UA 客户端访问这些变量。

 警告
意外的设备操作
使用 Modicon M262M241 控制器的“自然”对齐的变量。
未按说明操作可能导致人身伤亡或设备损坏等严重后果。

此外,请勿从库中暴露非自然对齐结构。

请勿在视图边框内部使用非自然对齐结构。而是应将这些结构复制到自然对齐的结构中,并将这些结构传递到视图框架。

示例

{attribute 'pack_mode' := '1'}
TYPE myStruct:
STRUCT
 Enable: BOOL;
 Counter: INT;
 MaxSize: BOOL;
 MaxSizeReached: BOOL;
END_STRUCT
END_TYPE

数据类型为 myStruct 的变量被实例化为对齐。

如果其组件的地址 Enable0x0100,则组件 Counter 将跟随地址 0x0101MaxSize 位于 0x0103 以及 MaxSizeReached 位于 0x0104

pack_mode=2 时,可在 0x0102 上找到 Counter,在 0x0104 上找到 MaxSize,在 0x0106 上找到 MaxSizeReached