☰
PLC编程必学!S7-1200移位和循环指令4种核心用法,一篇讲透
2026/10/7 2:45:30 网站建设 项目流程

在西门子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填充。如果N=0,输入值直接复制到输出。

- 通俗理解:就像一排人排队向左走,最左边的人走出队伍直接离队,队伍最右边空出来的位置,用新人(0)补上。

- 举个例子:Word类型的输入值IN=16#0001(二进制0000 0000 0000 0001),设置N=1向左移动1位,输出OUT=16#0002(二进制0000 0000 0000 0010);再左移1位,就变成16#0004,以此类推。

- 典型应用:

(1)数值乘法运算:左移1位相当于数值乘以2,快速实现整数倍放大;

(2)多路输出顺序置位:实现设备工位的依次启动、流水灯步进点亮;

(3)数据位提取:分离出数值中的高位数据,做信号筛选。

2. 右移指令SHR

- 核心规则:将输入IN里的数值,按位向右移动N位,结果输出到OUT中;无符号数值移位时,左侧空出来的位用0填充;有符号数值移位时,左侧空出来的位用符号位(正数填0,负数填1)填充。如果N=0,输入值直接复制到输出。

- 通俗理解:就像一排人排队向右走,最右边的人走出队伍直接离队,队伍最左边空出来的位置,无符号数补新人(0),有符号数补和队首一样的人。

- 举个例子:Word无符号数IN=16#0008(二进制0000 0000 0000 1000),设置N=1向右移动1位,输出OUT=16#0004(二进制0000 0000 0000 0100);再右移1位,变成16#0002。

- 典型应用:

(1)数值除法运算:右移1位相当于数值除以2,快速实现整数倍缩小;

(2)低位数据提取:分离出数值中的低位数据,做信号解析;

(3)数据位右移控制:实现设备从后往前的顺序停止、反向流水灯。

三、2种循环移位指令详解

循环移位指令的核心特点是:移位过程中,被移出去的位不会丢失,会直接补到另一端空出来的位上,实现无限循环,是做循环流水灯、循环顺序控制的核心指令。

1. 循环左移ROL

- 核心规则:将输入IN里的数值,按位向左循环移动N位,结果输出到OUT中;从左侧移出去的位,会直接补到右侧空出来的位上,所有位都不会丢失。如果N=0,输入值直接复制到输出。

- 通俗理解:就像旋转木马,一排人排队向左转圈,最前面的人走到队伍的最后面,所有人都在队伍里循环,不会有人离队。

- 举个例子:Word类型的输入值IN=16#0001(二进制0000 0000 0000 0001),设置N=1循环左移1位,输出OUT=16#0002;持续左移,直到移15位后变成16#8000(二进制1000 0000 0000 0000);再左移1位,最左侧的1会补到最右侧,数值变回16#0001,完成一次完整循环。

- 典型应用:

(1)循环流水灯控制:实现彩灯从第一个到最后一个依次点亮,无限循环;

(2)生产线工位循环控制:多工位按顺序循环触发动作;

(3)循环数据校验:对通讯数据做循环移位校验,提升数据稳定性。

2. 循环右移ROR

- 核心规则:将输入IN里的数值,按位向右循环移动N位,结果输出到OUT中;从右侧移出去的位,会直接补到左侧空出来的位上,所有位都不会丢失。如果N=0,输入值直接复制到输出。

- 通俗理解:和循环左移正好相反,一排人排队向右转圈,最后面的人走到队伍的最前面,无限循环。

- 举个例子:Word类型的输入值IN=16#8000(二进制1000 0000 0000 0000),设置N=1循环右移1位,输出OUT=16#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最核心的移位和循环指令,学会了这些指令,多路顺序控制、流水灯、数据位处理的程序,你都能写得又简洁又高效。新手不用死记硬背,把每个指令的移位规则和适用场景理解透,多写多练,很快就能上手。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询