1、TwinCAT 3中的PLC编程语言可以支持1、2、4、8字节内存对齐,使用{attribute 'pack_mode' := '<value>'}实现。该命令只影响一个结构体的对齐方式,因此多个结构体可以每个来指定对齐方式
例如2字节对齐,就在结构体最上方加上一段注释:{attribute 'pack_mode' := '2'},单引号中的2就表示2字节对齐;
2、当没有指定对齐字节数时,按照结构体内占内存字节数最大的变量对齐
3、当指定对齐的字节数大于结构体内占内存字节数最大的变量时,按后者对齐
4、当指定对齐的字节数小于结构体内占内存字节数最大的变量时,按前者对齐
ps C#读取结构体出现错误FatalExecutionEngineError,代码0x00000005时对其方式改为1字节对齐。
https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2529746059.html&id=
如果需要使用结构体来对应对方使用位数据时,不能使用bool类型声明,因为它占用的是BYTE,必须使用bit这个类型。
https://infosys.beckhoff.com/content/1033/tc3_plc_intro/2529481355.html?id=5034243832068230001
5、对于CX7000系列的控制器,其默认为4字节对齐。同样可以使用Attribute 'pack_mode'指令更改对齐规则,但考虑到CX7000为ARM架构的CPU,为提高内存访问效率,建议采用四字节对齐方式,降低内存占用。
https://infosys.beckhoff.com/content/1033/cx7000/10697920651.html?id=4649706536644025192