![西门子PLC从入门到精通](https://wfqqreader-1252317822.image.myqcloud.com/cover/666/27126666/b_27126666.jpg)
2.6 移位与循环指令
移位与循环指令主要有三大类,分别为移位指令、循环移位指令和移位寄存器指令。其中前两类根据移位数据长度的不同,可分为字节型、字型和双字型三种。
移位与循环指令在程序中可方便地实现某些运算,也可以用于取出数据中的有效位数字。移位寄存器指令多用于顺序控制程序的编制。
2.6.1 移位指令
(1)工作原理
移位指令分为两种,分别为左移位指令和右移位指令。该指令是指在满足使能条件的情况下,将IN中的数据向左或向右移N位后,把结果送到OUT的指定地址。移位指令对移出位自动补0,如果移动位数N大于允许值(字节操作为8,字操作为16,双字操作为32)时,实际移动的位数为最大允许值。移位数据存储单元的移位端与溢出位SM1.1相连,若移位次数大于0时,最后移出位的数值将保存在溢出位SM1.1中;若移位结果为0,零标志位SM1.0将被置1,具体情况如图2-68所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d68.jpg?sign=1739681547-n5NiccQ7JtSXiVuRSPhxuHyLuZXmdlNu-0-41f2678a466618c28512766742c73ee8)
图2-68 移位指令工作原理
(2)指令格式
移位指令的指令格式,如表2-21所示。
表2-21 移位指令的指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/24.jpg?sign=1739681547-4KmV2YyEvjiBqB20ikprhDiOTuD0pfRi-0-24b5552e94cf086090383b3e0fb0b7b6)
(3)应用举例
小车自动往返控制。
① 控制要求 设小车初始状态停止在最左端,当按下启动按钮时小车按图2-69所示的轨迹运动;当再次按下启动按钮时,小车又开始了新的一轮运动。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d69.jpg?sign=1739681547-AjtkzSrV66QQo2kcPmIYRfl45mFAtTtI-0-7950ecfd1046ef24ef1f33a7ed8946a2)
图2-69 小车运动的示意图
② 程序设计 小车自动往返控制顺序功能图与梯形图如图2-70所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d70.jpg?sign=1739681547-dnq0AZxDg5gb3zY6JnpyBuVIDfr4MrAU-0-876eac6f78c10b8b1ee6772901cc12e4)
图2-70 小车自动往返控制顺序功能图与梯形图
a.绘制顺序功能图。
b.将顺序功能图转化为梯形图。
2.6.2 循环移位指令
(1)工作原理
循环移位指令分为两种,分别为循环左移位指令和循环右移位指令。该指令是指在满足使能条件的情况下,将IN中的数据向左或向右移N位后,把结果输出到OUT得指定地址。循环移位是一个环形,即被移出来的位将返回另一端空出的位置。若移动的位数N大于允许值(字节操作为8,字操作为16,双字操作为32)时,执行循环移位之前先对N进行取模操作,例如字节移位,将N除以8后取余数,从而得到一个有效的移位次数。取模的结果对于字节操作是0~7,对于字操作是0~15,对于双字操作是0~31,若取模操作为0,则不能进行循环移位操作。
若执行循环移位操作,移位的最后一位的数值存放在溢出位SM1.1中;若实际移位次数为0,零标志位SM1.0被置1;字节操作是无符号的,对于有符号的双字移位时,符号位也被移位,具体如图2-71所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d71.jpg?sign=1739681547-UmwENx1JLJ14rgCAOFzECADHDlQkdXA1-0-8f6e3e8815100fa5a0e9d023c78e4f4e)
图2-71 移位循环指令工作原理
(2)指令格式
位移循环指令的指令格式如表2-22所示。
表2-22 移位循环指令的指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/25.jpg?sign=1739681547-R00YGfrYtTHwzGXyiZQKGTapT8xXTNF3-0-2c710ec3f7464b5c3ca34a6a296c3101)
(3)应用举例
彩灯移位循环控制。
① 控制要求 按下启动按钮I0.0且选择开关处于1位置(I0.2常闭处于闭合状态),小灯左移循环;搬动选择开关处于2位置(I0.2常开处于闭合状态),小灯右移循环,试设计程序。
② 程序设计 彩灯移位循环控制程序如图2-72所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d72.jpg?sign=1739681547-3iLIQE6MqHw5pt24v9wFbv69EtfChk62-0-d5e125584fa185237811fc6e01b13c73)
图2-72 彩灯移位循环控制程序
2.6.3 移位寄存器指令
移位寄存器指令是移位长度和移位方向可调的移位指令。在顺序控制、物流及数据流控制等场合应用广泛。
(1)指令格式
移位寄存器指令格式如图2-73所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d73.jpg?sign=1739681547-RPxt5Z5rXL7p9enPrKhcQhu6pZg7QCJK-0-42f7f6ddf49f79cf926b2000d0c63e36)
图2-73 移位寄存器指令格式
(2)工作过程
当使能输入端EN有效时,位数据DATA实现装入移位寄存器的最低位S_BIT,此后每当有1个脉冲输入使能端时,移位寄存器都会移动1位。需要说明移位长度和方向与N有关,移位长度范围为1~64;移位方向取决于N的符号,当N>0时,移位方向向左,输入数据DATA移入移位寄存器的最低位S_BIT,并移出移位寄存器的最高位;当N<0时,移位方向向右,输入数据移入移位寄存器的最高位,并移出最低位S_BIT,移出的数据被放置在溢出位SM1.1中,具体如图2-74所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d74.jpg?sign=1739681547-fwY79GMFSeSjyuJq3adSwevdw1lvDCoU-0-d5fffefc8c705d9e696fde75d50ad6d6)
图2-74 移位寄存器指令工作过程
(3)应用举例
喷泉控制。
重点提示
移位寄存器中的N是移位总的长度,即一共移动了多少位;左右移位(循环)指令中的N是每次移位的长度。
① 控制要求 某喷泉由L1~L10十根水柱构成,喷泉水柱布局及喷水花样如图2-75所示。按下启动按钮,喷泉按图2-75所示花样喷水;按下停止按钮,喷水全部停止。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d75.jpg?sign=1739681547-vRsn0hPIHTVdxOrFT6jZSLmsVe9GAeA8-0-29be49a8d71d33260982783d8a58c08b)
图2-75 喷泉水柱布局及喷水花样
② 程序设计
a.I/O分配 喷泉控制I/O分配如表2-23所示。
表2-23 喷泉控制I/O分配表
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/26.jpg?sign=1739681547-OJSQA3BPpe15J6dRQRjykboh9A8NNKNh-0-1c718de07b41ac32b201f38060d41c9e)
b.梯形图 喷泉控制程序如图2-76所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d76.jpg?sign=1739681547-DCX1ZO2fshBnaSBOh6Avl5rqgofDmxL0-0-bca87b8e73a27f06c07dc98a33f02a4b)
图2-76 喷泉控制程序
重点提示
① 将输入数据DATA置1,可以采用启保停电路置1,也可采用传送指令。
② 构造脉冲发生器,用脉冲控制移位寄存器的移位。
③ 通过输出的第一位确定S_BIT,有时还可能需要中间编程元件。
④ 通过输出个数确定移位长度。