
在西门子S7-1200 PLC编程里移位和循环指令是实现顺序控制、流水灯效果、数据位操作的“效率神器”。很多新手写16路彩灯流水灯、多工位顺序启动程序只会一个个写线圈、编定时器16路输出就要写十几段程序代码又长又乱修改起来还特别麻烦。其实用移位和循环指令短短几行程序就能搞定这些需求代码量直接缩减80%逻辑还更清晰。这篇文章就用最通俗的大白话把S7-1200最核心的4种移位、循环指令全讲透不用死记硬背看完就能理解每个指令的用法写程序时直接套用。一、先搞懂核心移位指令到底能干什么在PLC里1个Word字包含16个Bit位正好对应16个开关量输出点比如QW0这个输出字就包含了Q0.0~Q1.7一共16个输出位每个位对应一个彩灯、电磁阀、接触器。移位和循环指令的核心就是对这个字里的所有位按指定的位数整体向左/向右移动一次性实现多路输出的顺序切换、数据位的批量处理。比如我们要让16个彩灯从第一个到最后一个依次点亮不用一个个写线圈用循环左移指令每1秒移动一位一行程序就搞定了。二、2种基础移位指令详解基础移位指令的核心特点是移位过程中被移出去的位会直接丢失空出来的位用0或符号位填充适合单次顺序控制、数据运算处理。1. 左移指令SHL- 核心规则将输入IN里的数值按位向左移动N位结果输出到OUT中右侧因移位空出来的位统一用0填充。如果N0输入值直接复制到输出。- 通俗理解就像一排人排队向左走最左边的人走出队伍直接离队队伍最右边空出来的位置用新人0补上。- 举个例子Word类型的输入值IN16#0001二进制0000 0000 0000 0001设置N1向左移动1位输出OUT16#0002二进制0000 0000 0000 0010再左移1位就变成16#0004以此类推。- 典型应用1数值乘法运算左移1位相当于数值乘以2快速实现整数倍放大2多路输出顺序置位实现设备工位的依次启动、流水灯步进点亮3数据位提取分离出数值中的高位数据做信号筛选。2. 右移指令SHR- 核心规则将输入IN里的数值按位向右移动N位结果输出到OUT中无符号数值移位时左侧空出来的位用0填充有符号数值移位时左侧空出来的位用符号位正数填0负数填1填充。如果N0输入值直接复制到输出。- 通俗理解就像一排人排队向右走最右边的人走出队伍直接离队队伍最左边空出来的位置无符号数补新人0有符号数补和队首一样的人。- 举个例子Word无符号数IN16#0008二进制0000 0000 0000 1000设置N1向右移动1位输出OUT16#0004二进制0000 0000 0000 0100再右移1位变成16#0002。- 典型应用1数值除法运算右移1位相当于数值除以2快速实现整数倍缩小2低位数据提取分离出数值中的低位数据做信号解析3数据位右移控制实现设备从后往前的顺序停止、反向流水灯。三、2种循环移位指令详解循环移位指令的核心特点是移位过程中被移出去的位不会丢失会直接补到另一端空出来的位上实现无限循环是做循环流水灯、循环顺序控制的核心指令。1. 循环左移ROL- 核心规则将输入IN里的数值按位向左循环移动N位结果输出到OUT中从左侧移出去的位会直接补到右侧空出来的位上所有位都不会丢失。如果N0输入值直接复制到输出。- 通俗理解就像旋转木马一排人排队向左转圈最前面的人走到队伍的最后面所有人都在队伍里循环不会有人离队。- 举个例子Word类型的输入值IN16#0001二进制0000 0000 0000 0001设置N1循环左移1位输出OUT16#0002持续左移直到移15位后变成16#8000二进制1000 0000 0000 0000再左移1位最左侧的1会补到最右侧数值变回16#0001完成一次完整循环。- 典型应用1循环流水灯控制实现彩灯从第一个到最后一个依次点亮无限循环2生产线工位循环控制多工位按顺序循环触发动作3循环数据校验对通讯数据做循环移位校验提升数据稳定性。2. 循环右移ROR- 核心规则将输入IN里的数值按位向右循环移动N位结果输出到OUT中从右侧移出去的位会直接补到左侧空出来的位上所有位都不会丢失。如果N0输入值直接复制到输出。- 通俗理解和循环左移正好相反一排人排队向右转圈最后面的人走到队伍的最前面无限循环。- 举个例子Word类型的输入值IN16#8000二进制1000 0000 0000 0000设置N1循环右移1位输出OUT16#4001最右侧移出的1补到了最左侧。- 典型应用1反向循环流水灯实现彩灯从最后一个到第一个反向循环点亮2设备反向循环控制多工位从后往前循环触发动作3反向数据解析对通讯数据做反向循环移位还原原始数据。核心区别速记移位VS循环移位指令类型移出位的处理核心特点典型场景左移SHL/右移SHR移出位直接丢失空出位补0/符号位单次移位数值会发生根本性变化数据运算、单次顺序控制循环左移ROL/循环右移ROR移出位补到另一端空出位位不丢失循环移位数值可回到初始状态无限循环循环流水灯、循环顺序控制新手必记的避坑红线1.数据类型必须匹配参与运算的IN、OUT参数必须是相同的数据类型Word和Word运算、DWord和DWord运算不能混用不然会出现移位位数错误。2.必须用上升沿触发移位移位指令一定要用信号上升沿触发如果不用上升沿每个扫描周期都会执行一次移位会导致输出位飞速切换根本达不到预期的控制效果这是新手最容易踩的坑。3.分清有符号数和无符号数右移SHR指令对有符号数和无符号数的处理规则不同做数值运算时一定要选对数据类型避免出现符号位填充导致的数值错误。4.移位位数N要和数据长度匹配Word类型最多16位DWord类型最多32位移位位数不要超过数据总长度避免出现无效移位。5.循环移位注意初始值循环移位的初始值一定要设置正确比如流水灯初始值要给1不能给0不然移位后始终是0没有输出效果。以上就是西门子S7-1200最核心的移位和循环指令学会了这些指令多路顺序控制、流水灯、数据位处理的程序你都能写得又简洁又高效。新手不用死记硬背把每个指令的移位规则和适用场景理解透多写多练很快就能上手。