本文给大家详细介绍一下移位寄存器指令和移位指令。
移位寄存器指令
在实际生产中经常要用到次品检测,需要将次品剔除。如果检测出是次品就马上剔除,相对来说所花的时间长效率低,如果我要等待移动到几个工位后再剔除,那么我们应该怎么做呢?这时候就要用到PLC的移位寄存器指令。指令如下图:
EN:每个扫描周期扫描到条件满足指令就执行一次,一般用边沿执行。
DATA:状态移入位(次品检测传感器)。
S_BIT:指定移位寄存器的最低位。
N:指定移位寄存器的长度和方向(N为正数左移,N位负数右移)最大为64位。
左移指由低位向高位移,右移为由高位向低位移。
每次固定移动一位,不可更改。
位排列顺序遵循编号越大越在高位,与其他移位指令排列方式不一致。Q0.7的高位为Q1.0。
执行指令前Q0.0到Q1.1的状态如下图所示:
指令执行一次后,Q0.0到Q1.1左移一位,最高位溢出,最低位以I0.1的状态补入。执行一次指令后状态如下图所示:
左移指令
根据数据类型不同有字节左移指令,字左移指令,双字左移指令。
以字左移为例,说明移位指令的执行过程。VW12包含VB12,VB13两个字节,VB12为高字节,VB13为低字节,左移一位时将V13.7的状态移给V12.0,移出位V13.0直接补零,溢出位V12.7舍去。
右移指令
根据数据类型不同有字节右移指令,字右移指令,双字右移指令。
注意:1)IN和OUT必须同一地址。
2)每个扫描周期检测到EN条件满足都会发生移位,所以需要加边沿指令配合使用。
3)左移和右移指令里移出位直接补零,溢出位直接丢掉。
循环左移指令
循环右移指令
循环左移和循环右移指令将输入数值(IN)向左或向右移动N位,并将结果载入输出数值(OUT)中,将溢出位循环补给移除位。对于字节循环指令,如果移位N大于8,则实际移动位数为N/8取余。
总结
移位寄存器指令可以指定参与移位的位数,但是每次只能固定移一位。
左移,右移,循环左移,循环右移指令每次可以移多位,但是参与移位的位数是固定的。