如何将倍福EL6851的DMX分块数组合并为单512元素数组
倍福EL6851模块DMX分块数组合并为单数组的实现方法
在倍福EL6851模块上分配DMX通道到变量时,直接定义512元素数组需手动分配512次变量,操作不可行;拆分为8个64元素分块数组后,若想合并为可直接操作的单512元素数组,直接循环赋值的方式无效,可通过内存共享映射实现:
实现步骤
- 保留已完成变量分配的分块数组定义:
bEL6851_DmxChannelsChunk1 AT %Q* : ARRAY[1..64] OF USINT; bEL6851_DmxChannelsChunk2 AT %Q* : ARRAY[65..128] OF USINT; bEL6851_DmxChannelsChunk3 AT %Q* : ARRAY[129..192] OF USINT; bEL6851_DmxChannelsChunk4 AT %Q* : ARRAY[193..256] OF USINT; bEL6851_DmxChannelsChunk5 AT %Q* : ARRAY[257..320] OF USINT; bEL6851_DmxChannelsChunk6 AT %Q* : ARRAY[321..384] OF USINT; bEL6851_DmxChannelsChunk7 AT %Q* : ARRAY[385..448] OF USINT; bEL6851_DmxChannelsChunk8 AT %Q* : ARRAY[449..512] OF USINT;
- 定义单512元素数组,通过
AT %Q*语法映射到与分块数组相同的输出地址空间:
bEL6851_DmxChannels AT %Q* : ARRAY[1..512] OF USINT;
原理说明
TwinCAT中,使用AT语法的变量会直接映射到指定的I/O内存区域。当单数组与分块数组映射到同一输出地址块时,二者共享同一段内存空间:
- 修改
bEL6851_DmxChannels[X]会直接同步到对应的分块数组元素(例如修改第100个元素,等同于修改bEL6851_DmxChannelsChunk2[36]) - 无需手动循环赋值,操作单数组即可直接控制DMX通道,效果与直接定义512元素数组完全一致
为什么直接赋值无效
之前的循环赋值只是将分块数组的数值读取到普通变量bEL6851_DmxChannels中,该变量并未映射到输出I/O地址,因此修改它不会同步到实际的DMX输出通道,自然无效。
内容的提问来源于stack exchange,提问作者Arkadiusz Rycyk
相关产品推荐
相关产品推荐

