- 西门子PLC从入门到精通
- 刘振全 韩相争 王汉芝编著
- 1691字
- 2021-03-26 05:41:30
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=1739372597-QfsFkm8udaVYkG2KMztdMXkXqETi6Egp-0-1ae1a5acbd61b3bc390c17220898404d)
图2-68 移位指令工作原理
(2)指令格式
移位指令的指令格式,如表2-21所示。
表2-21 移位指令的指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/24.jpg?sign=1739372597-APmTadULkEmrfULq51EoNAXqdYnUiqU4-0-213afe508902bc63e4dc604126e62afc)
(3)应用举例
小车自动往返控制。
① 控制要求 设小车初始状态停止在最左端,当按下启动按钮时小车按图2-69所示的轨迹运动;当再次按下启动按钮时,小车又开始了新的一轮运动。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d69.jpg?sign=1739372597-WJ29wP3j7H4iTF0gxo4Z0WmRwqS03Dvy-0-7a6fd912e16bb60717b66b7b3e050ec5)
图2-69 小车运动的示意图
② 程序设计 小车自动往返控制顺序功能图与梯形图如图2-70所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d70.jpg?sign=1739372597-1DhDwyqCHP792fGqW5HxI2ohgbZ85b14-0-4d6dc445b85ab63d978552765119e099)
图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=1739372597-FjfQC4nqDgAdoKPfH4bFjs4kCr7aALsR-0-7c133927c5c6e2d3dea022293c802f88)
图2-71 移位循环指令工作原理
(2)指令格式
位移循环指令的指令格式如表2-22所示。
表2-22 移位循环指令的指令格式
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/25.jpg?sign=1739372597-ITD9kiIki9bLDGkvjKSpBlgPi2HizCbS-0-3410def1b2e4aba1f54dfd954bc7ed7b)
(3)应用举例
彩灯移位循环控制。
① 控制要求 按下启动按钮I0.0且选择开关处于1位置(I0.2常闭处于闭合状态),小灯左移循环;搬动选择开关处于2位置(I0.2常开处于闭合状态),小灯右移循环,试设计程序。
② 程序设计 彩灯移位循环控制程序如图2-72所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d72.jpg?sign=1739372597-Rlv131GHgN6lOzMCxQ0ffN3Hh7SkNHxu-0-0457d18ffc3351757863552232afda70)
图2-72 彩灯移位循环控制程序
2.6.3 移位寄存器指令
移位寄存器指令是移位长度和移位方向可调的移位指令。在顺序控制、物流及数据流控制等场合应用广泛。
(1)指令格式
移位寄存器指令格式如图2-73所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d73.jpg?sign=1739372597-mhRJQ25wD5pCxAkIVP1Iig8RG7WLd1jQ-0-5839a4a691912ab970a8566e7991c7f7)
图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=1739372597-kBM4BvvDuEtjjfX1IgDuvTmWJNOkETTC-0-3aabbfa455eb86c61733b4f7ebcf639c)
图2-74 移位寄存器指令工作过程
(3)应用举例
喷泉控制。
重点提示
移位寄存器中的N是移位总的长度,即一共移动了多少位;左右移位(循环)指令中的N是每次移位的长度。
① 控制要求 某喷泉由L1~L10十根水柱构成,喷泉水柱布局及喷水花样如图2-75所示。按下启动按钮,喷泉按图2-75所示花样喷水;按下停止按钮,喷水全部停止。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d75.jpg?sign=1739372597-9x8C461AjAbqZEfHEYeR7cdcOMNNFgZJ-0-2387aad7a73eaebda2d1bc368a2fb12b)
图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=1739372597-tkRt9KhH8lX4XJJ8MURII80ZMZr2rr4F-0-0e4c8239cb47638c331402fafb4c5f03)
b.梯形图 喷泉控制程序如图2-76所示。
![](https://epubservercos.yuewen.com/F85FDE/15489090305496506/epubprivate/OEBPS/Images/2d76.jpg?sign=1739372597-GxBU5hqXyIcfGb9FGl5f3isLU9MmyJkH-0-ba20dd4bebca570caaed7261d0d93cb4)
图2-76 喷泉控制程序
重点提示
① 将输入数据DATA置1,可以采用启保停电路置1,也可采用传送指令。
② 构造脉冲发生器,用脉冲控制移位寄存器的移位。
③ 通过输出的第一位确定S_BIT,有时还可能需要中间编程元件。
④ 通过输出个数确定移位长度。