首页 理论教育移位指令:分类与应用

移位指令:分类与应用

【摘要】:指令有右移位指令、左移位指令、循环右移位指令、循环左移位指令。循环移位指令类别见表1-12。SHRB指令如图1-15所示,移位寄存器以功能框的形式编程,指令名称为SHRB。在语句表中,移位寄存器的指令格式为SHRB DATA,S_BIT,N。例如,移位寄存器指令的应用如图1-16所示。图1-16 移位寄存器指令应用从图1-16中可以看出,S_BIT=V10.0,N=4>0,最高位为V10.3。

1.左移和右移指令

移位指令在PLC控制中是比较常用的,根据移位的数据长度可分为字节型移位、字型移位和双字型移位;根据移位的方向可分为左移和右移,还可进行循环移位。指令有右移位指令、左移位指令、循环右移位指令、循环左移位指令。

移位指令的类别见表1-11。左移或右移指令的特点如下:

1)被移位的数据是无符号的。

2)在移位时,存放被移位数据的编程元件的移出端与特殊继电器SM1.1连接,移出位进入SM1.1(溢出),另一端自动补0。

3)移位次数N与移位数据的长度有关,如N小于实际的数据长度,则执行N次移位;如N大于数据长度,则执行移位的次数等于实际数据长度的位数。

4)移位次数N为字节型数据。

影响允许输出ENO正常工作的出错条件是,SM4.3(运行时间)、0006(间接寻址)。

1-11 移位指令

978-7-111-59315-7-Chapter01-24.jpg

(续)

978-7-111-59315-7-Chapter01-25.jpg

2.循环左移和循环右移指令

循环移位的特点如下:

1)被移位时的数据是无符号的。

2)在移位时,存放被移位数据的编程元件的移出端既与另一端连接,又与特殊继电器SM1.1连接,移出位在被移到另一端的同时,也进入SM1.1(溢出)。

3)移位次数N与移位数据的长度有关,如N小于实际的数据长度,则执行N次移位;如N大于数据长度,则执行移位的次数为N除以实际数据长度的余数。

4)移位次数N为字节型数据。

如果执行循环移位操作,移出的最后一位的数值存放在溢出位SM1.1。如果实际移位次数为0,零标志位SM1.0被置为1。字节操作是无符号的,如果对有符号的字或双字操作,符号位也一起移动。循环移位指令类别见表1-12。

1-12 循环移位指令

978-7-111-59315-7-Chapter01-26.jpg

(续)

978-7-111-59315-7-Chapter01-27.jpg

3.传送类指令与循环指令应用实例

控制要求:用1个按钮控制彩灯循环,方法是第一次按下按钮为起动循环,第二次按下为停止循环,以此为奇数次起动、偶数次停止。用另一个按钮控制循环方向,第一次按下左循环,第二次按下右循环,由此交替。假设彩灯初始状态为00000101,循环移动周期为1s。

I/O分配:I0.0为起动、停止按钮,I0.1为左、右循环按钮,Q0.0~Q0.7为彩灯对应位(一个字节)。

程序注释:参见图1-14,程序中SM0.1是个特殊继电器,利用它从STOP转为RUN只ON一个扫描周期的特点为彩灯设置初始值00000101(16#05),在这用了字节传送指令MOV_B将16#05送到QB0中,按起动按钮I0.0为ON,使M0.0置位,时间继电器T37开始计时,时间为1s,到时后是左循环还是右循环要看M0.1是否吸合,如吸合为左循环,所用指令为ROL_B,如没吸合为右循环,所用指令为ROR_B,而M0.1是否吸合由I0.1决定,I0.1单数次ON时左循环,I0.1双数次ON时右循环,每隔1s循环移动1位。

978-7-111-59315-7-Chapter01-28.jpg

图1-14 单按钮控制彩灯循环梯形图程序

4.移位寄存器指令SHRB

在顺序控制或步进控制中,应用移位寄存器编程是很方便的。

SHRB指令如图1-15所示,移位寄存器以功能框的形式编程,指令名称为SHRB。它有3个数据输入端:DATA为移位寄存器的数据输入端;S_BIT为组成移位寄存器的最低位;N为移位寄存器的长度。

978-7-111-59315-7-Chapter01-29.jpg

图1-15 SHRB指令

(1)移位寄存器的特点

移位寄存器的特点如下:

1)移位寄存器的数据类型无字节型、字型、双字型之分,移位寄存器的长度N(≤64)由程序指定。

N>0时,为正向移位,即从最低位向最高位移位。

N<0时,为反向移位,即从最高位向最低位移位。

2)移位寄存器的移出端与SM1.1(溢出)连接。

移位寄存器指令影响的特殊继电器:SM1.0(零),当移位操作结果为0时,SM1.0自动置位;SM1.1(溢出)的状态由每次移出位的状态决定。

在语句表中,移位寄存器的指令格式为SHRB DATA,S_BIT,N。

(2)移位寄存器的组成

①最低位:S_BIT。

②最高位的计算方法:MSB={|N|-1+(S_BIT的位号)}/8。

③最高位的字节号:MSB的商(不包括余数)+S_BIT的字节号。

④最高位的位号:MSB的余数。

例如,S_BIT=V21.2,N=14,则MSB=(14-1+2)/8=15/8=1…7,其中最高位的字节号为21+1=22,最高位的位号为7,最高位为V22.7。

⑤包括V21.2~V21.7、V22.0~V22.7,共14位。

(3)移位寄存器指令的功能

当允许输入端EN有效时,如果N>0,则在每个EN的前沿,将数据输入DATA的状态移入移位寄存器的最低位S_BIT;如果N<0,则在每个EN的前沿,将数据输入DATA的状态移入移位寄存器的最高位,移位寄存器的其他位按照N指定的方向(正向或反向),依次串行移位。

例如,移位寄存器指令的应用如图1-16所示。

978-7-111-59315-7-Chapter01-30.jpg

图1-16 移位寄存器指令应用

从图1-16中可以看出,S_BIT=V10.0,N=4>0,最高位为V10.3。每当按下I0.0时,I1.0的状态将从V10.0开始移入移位寄存器中,在这里假设移位之前V10.0已处于ON状态,当第二次按下I0.0时,V10.0的状态已移动到V10.2,使V10.2变为ON状态,从而使Q0.0也变为ON状态。

5.填充指令FILL

填充指令FILL用于处理字型数据,指令功能是将字型输入数据IN填充到从OUT开始的N个字存储单元N为字节型数据。

FILL指令如图1-17所示,FILL指令以功能框的形式编程,指令名称为FILL_N。当允许输入EN有效时,开始填充操作。例如,将VW100~VW109这10个字都清0。那除了有效端EN,0应放在IN端、10应放在N端、VW100应放在OUT端。这样当EN端有效时,这10个字就都清0了。在语句表中,FILL指令的指令格式为FILLIN,OUT,N。

978-7-111-59315-7-Chapter01-31.jpg

图1-17 FILL指令