跳到正文
Learn-SCL
SCL 示例库/SCL 指令手册/SCL 移动与填充指令

SCL 移动与填充指令

西门子 SCL 移动/填充:赋值、MOVE_BLK、FILL_BLK、UMOVE_BLK/UFILL_BLK 和 BLKMOV legacy,含完整示例和坑。

SCL 的“移动”分三层:单个赋值 :=、数组块复制 MOVE_BLK/UMOVE_BLK、数组填充 FILL_BLK/UFILL_BLK。

BLKMOV 是 legacy 的按字节/字指针写法,只在维护旧程序时用;新代码优先块移动/填充指令。

数组的 IN/OUT 用起始元素,COUNT 是元素个数,不是字节数。

SCL 移动与填充指令 4

怎么选

需求 写法
单个变量赋值 #Target := #Source;
数组复制 MOVE_BLK / UMOVE_BLK
数组填充 FILL_BLK / UFILL_BLK
旧程序按字节移动 BLKMOV(legacy)

块移动/填充

SCL
1MOVE_BLK(IN := #Source[0], COUNT := #Count, OUT => #Dest[0]);
2FILL_BLK(IN := 0, COUNT := #Count, OUT => #Dest[0]);

需要执行期间不被中断,用 UMOVE_BLK/UFILL_BLK;数据一致,但扫描周期可能变长。

常见问题

MOVE_BLK 和普通赋值有什么区别?

普通赋值一次写一个元素;MOVE_BLK 一次复制一段元素,适合数组/缓冲区。

COUNT 是字节数还是元素个数?

MOVE_BLK/FILL_BLK 的 COUNT 是元素个数;BLKMOV 才是 BYTE/WORD 长度。

UMOVE_BLK 什么时候用?

需要数据一致性、不能被中断打断时;代价是扫描周期可能变长。

← 返回 SCL 指令手册