龙空技术网

例说西门子200PLC中的移位寄存器指令

控制研究控 784

前言:

目前朋友们对“左移右移指令”大致比较重视,大家都想要剖析一些“左移右移指令”的相关文章。那么小编也在网上网罗了一些对于“左移右移指令””的相关知识,希望兄弟们能喜欢,大家一起来学习一下吧!

这两天在悟空问答看到一个题目是说,一个按钮依次控制3个灯的亮与灭,看到有人的回答是利用计数器来做,其实我第一个想到的也是计数器去做,但是既然有人答了计数器的做法,那么我如果要答,就应该去给一个另外的做法,因此就写了本文,给小伙伴们分享一下。

还是先看一下我做的HMI动画吧:

一个按钮控制三盏灯依次点亮后依次熄灭的HMI动画

这是我在台达的HMI软件上做的动画,然后把电脑的显示屏模拟成台达的触摸,和西门子200的PLC连接后的监控动画截图。最下边的数值框中的变量是MW10用来记录M0.0按钮被按下的次数,可以看到按下的次数为1,2,3的时候,Q0.0,Q0.1,Q0.2三盏灯是被依次点亮的;当按钮按下的次数为4,5,6的时候,可以看到Q0.0-Q0.3是被依次熄灭!

当系统启动按钮M0.1没有被按下的时候,M0.0按钮按下也不会造成灯被点亮!

当M0.1系统启动按钮被按下的时候,MW10=9开始,三盏灯有开始依次点亮和依次熄灭了!

图中的M0.2相当于灯被点亮的标志,M0.3相当于灯被熄灭的标志!

最终的效果就是这样,应该能满足使用需求!

再来看一下程序是怎么写的吧:

利用位移寄存器实现灯的依次点亮与熄灭程序

如图,程序很简单就主程序的这么一个网络行,当然因为我使用SM0.0节点,将很多行连贯起来了,你也可以写在很多个网络中,程序比较简单,配合上边的运行画面和我在图片上的简单注释,大家应该能看明白。

实现3盏灯依次亮和依次灭,其实都是靠SHRB这个指令,所以本文最终就归结到来讲这个SHRB移位寄存器指令,它在指令树中的位置如下图:

移位寄存器指令在指令树中的位置

如图,可见SHRB指令在指令工具中的移位/循环指令文件的最下边。

看一下这个指令的功能和格式

西门子200PLC中提供了数据的左移和右移指令,以及循环的左移和右移指令,所以连我自己都经常忘记这移位寄存器指令,这是一个很好的指令,大家有必要深刻记忆起来!插了一句题外话,还是来说SHRB移位寄存器指令的特点和用法吧。

SHRB移位寄存指令管脚解释

如图可以看到SHRB指令主要就3个操作数。

DATA因为是规定必须是bool型的位变量,它是要写入数据段中的数值,所以就只能是写入1或者0,这里就是M0.2的状态,M0.2为1就往Q0.0-Q0.2这3个位的数据段中写入1;M0.2为0的话就写入0!

这里需要强调的一点是,SHRB指令需要配合边沿指令就是P和N这样的上升沿或者下降沿指令,这样才能保证EN处在一个扫描周期只接通1次;如果没有边沿指令,那么数据会一直写进去!

S_BIT也是规定必须是bool变量,而且它是一个数据段的起始地址。

N是一个字节型变量,它的最大范围是-64--+64,也就是说数据段的长度最大64个位!这里的+号和﹣号,是代表DATA数据写入S_BIT和N决定的这个数据段的方向,+的话就是正方向,- 的话就是负方向。这里的正方向是Q0.0到Q0.1到Q0.2这样的低位到高位的变化,就是正方向;如果是负号,那就代表负方向,即Q0.2-Q0.1-Q0.0这样的变化就是负方向。---因为我程序中都是+3,所以灯点亮的时候,顺序是Q0.0-Q0.2;熄灭的时候顺序也是Q0.0-Q0.2,如果我把灯熄灭那里的程序该为-3,那么熄灭的顺序就变为了Q0.2-Q0.1-Q0.0这样的顺序了,这里就不再上图了!

说到这里,我想大家对程序和指令都有了更深入的了解了,希望能对可能会用到的小伙伴们有所帮助,文章至此就结束了,谢谢大家的阅读!

如果有问题,请关注+留言,我会及时回复,谢谢!

标签: #左移右移指令