15.5循环与移位指令循环右移指令循环左移指令带进位的循环右移指令带进位的循环左移指令位右移指令位左移指令字右移指令字左移指令移位写入指令移位读出指令25.5.1循环右移指令循环右移指令ROR(RotationRight)的功能编号为FNC30,执行该指令时,各位数据向右移动(从高位向低位)n位,最后一次移出来的那一位同时存入进位标志M8022中。RORPK4X0[D.]nD001000000111100000100000011101000080228022D0D0图5-37循环右移指令的使用35.5.1循环右移指令注意事项:★1)16位指令和32位指令中n应分别小于16和32。★2)ROR指令的目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。★3)ROR(P)占5个程序步,DROR(P)占9个程序步。45.5.2循环左移指令循环右移指令ROL(RotationLeft)的功能编号为FNC31,执行该指令时,各位数据向左移动(从低位向高位)n位,最后一次移出来的那一位同时存入进位标志M8022中。ROLPK4X0[D.]nD00100000011110000080228022D0D00000111100000100图5-38循环左移位指令的使用55.5.2循环左移指令注意事项:★1)16位指令和32位指令中n应分别小于16和32。★2)ROL指令的目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。★3)ROL(P)占5个程序步,DROL(P)占9个程序步。65.5.2循环左移指令【例5-10】按1-2相激磁方式控制一个四相步进电动机。可正反转控制,每步为1s。电动机运行时,指示灯亮。四相步进电动机的1-2相激磁方式波形和程序如图5-39所示。75.5.2循环左移指令T0M8002T0X0ZRSTY0Y3H13264C89D0K4D0M8000T0将D0中的低4位传送到Y3~Y0以驱动步进电动机DMOVDROLD0DROR当X0=1(启动)T0产生1s的脉冲当X0=0(停止)A相B相A相B相13264C8913264CY0Y1Y2Y3→正转←反转K10D0K1Y0MOVENDK4T0X0X1X1将产生1-2相激励波形值H13264C89初始值传送到32位数据寄存器D1D0中当X1=0时,D1D0每1s左移4位(正转)当X1=1时,D1D0每1s右移4位(反转)图5-39四相步进电动机的1-2相激磁方式波形图和梯形图85.5.3带进位的循环右移指令带进位的循环右移指令RCR(RotationRightwithCarry)的功能编号为FNC32,执行该指令时,将各位数据连同进位标志M8022一起右移。RCRPK4X0[D.]nD0图5-40带进位的循环右移指令的使用95.5.3带进位的循环右移指令注意事项:★1)在循环右移过程中,移出的位将送入进位标志,原进位标志又被送回目标操作数的另一端。★2)RCR指令的目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。★3)RCR(P)占5个程序步,DRCR(P)占9个程序步。105.5.4带进位的循环左移指令带进位的循环左移指令RCL(RotationLeftwithCarry)的功能编号为FNC33,执行该指令时,将各位数据连同进位标志M8022一起左移。RCLPK4X0[D.]nD0图5-41带进位的循环左移指令的使用115.5.4带进位的循环左移指令注意事项:★1)在循环左移过程中,移出的位将送入进位标志,原进位标志又被送回目标操作数的另一端。★2)RCL指令的目标操作数可取KnY、KnM、KnS、T、C、D、V和Z。★3)RCL(P)占5个程序步,DRCL(P)占9个程序步。125.5.5位右移指令位右移指令SFTR(ShiftRight)的功能编号为FNC34,该指令使位元件中的状态成组地向右移动,由n1指定位元件的长度,n2指定移动的位数,一般n2≤n1≤1024。X0M0X1SFTRP[S.][D.]K16n1K40000000000001000M15~M01000X3~X01000000000001001M15~M01001X3~X0右移4位→n2图5-42位右移指令的使用135.5.5位右移指令注意事项:★1)如果采用连续型指令,每个扫描周期都移动n2位。★2)SFTR指令源操作数可取X、Y、M和S,目标操作数可取Y、M、S。★3)SFTR(P)只有16位操作数,占9个程序步。145.5.6位左移指令位左移指令SFTL(ShiftLeft)的功能编号为FNC35,该指令使位元件中的状态成组地向左移动,由n1指定位元件的长度,n2指定移动的位数,一般n2≤n1≤1024。X0M0X2SFTLP[S.][D.]K16n1K4000000000010000M15~M01000X3~X00000010010100000M15~M01001X3~X0←左移4位n20图5-43位左移指令的使用155.5.6位左移指令注意事项:★1)如果采用连续型指令,每个扫描周期都移动n2位。★2)SFTL指令源操作数可取X、Y、M和S,目标操作数可取Y、M、S。★3)SFTL(P)只有16位操作数,占9个程序步。165.5.6位左移指令【例5-11】4台水泵轮流工作。四台水泵轮流运行,由四台三相异步电动机M1~M4驱动。正常要求是两台运行两台备用。为了防止备用水泵长时间不用造成锈蚀等问题,要求四台水泵中两台运行,并每隔8h切换一台,使四台水泵轮流运行。175.5.6位左移指令Y0Y1Y2Y3C0X08h8h8h8h8h8hY3Y2Y1Y0COM1X1X0COMSA停止运行KM4→(M4)KM3→(M3)KM2→(M2)KM1→(M1)M0C0X0Y1M0Y0K4C0X1RSTC0Y0ZRSTY3X0M8014K1SFTLPK480Y3Y2Y1Y00000000100110110M01100110010010011110循环(a)四台水泵运行时序图(b)电动机PLC接线图(c)四台水泵运行梯形图图5-44四台水泵轮流工作实例185.5.7字右移指令字右移指令WSFR(WordShiftRight)的功能编号为FNC36,该指令以字为单位,对n1位[D.]所指的字元件进行n2位[S.]字的向右移位,其工作过程与位右移指令类似。D20D0X1WSFRP[S.][D.]K16n1K4n2图5-45字右移指令的使用195.5.7字右移指令注意事项:★1)一般情况下n2≤n1≤512。★2)WSFR指令源操作数可取KnX、KnY、KnM、KnS、T、C和D,目标操作数可取KnY、KnM、KnS、T、C和D。★3)WSFR(P)只有16位操作数,占9个程序步。205.5.8字左移指令字左移指令WSFL(WordShiftLeft)的功能编号为FNC37,该指令以字为单位,对n1位[D.]所指的字元件进行n2位[S.]字的向左移位,其工作过程与位左移指令类似。D20D0X1WSFLP[S.][D.]K16n1K4n2图5-46字左移指令的使用215.5.8字左移指令注意事项:★1)一般情况下n2≤n1≤512。★2)WSFL指令源操作数可取KnX、KnY、KnM、KnS、T、C和D,目标操作数可取KnY、KnM、KnS、T、C和D。★3)WSFL(P)只有16位操作数,占9个程序步。225.5.9移位写入指令移位寄存器写入指令SFWR(ShiftRegisterWrite)的功能编号为FNC38,该指令将[S.]中的数据依次传送到[D.]中。D0D1X0SFWRP[S.][D.]K8nD0D7D6D5D4D3D2D1D8②③④⑤⑥⑦①图5-47移位写入指令的使用235.5.9移位写入指令注意事项:★1)一般情况下2≤n≤512。★2)源操作数可取所有数据类型,目标操作数可取KnY、KnM、KnS、T、C和D。★3)SFWR(P)只有16位操作数,占7个程序步。245.5.10移位读出指令移位寄存器写入指令SFRD(ShiftRegisterRead)的功能编号为FNC39,该指令将[S.]中的数据依次读出到[D.]中。D1D10X1SFRDP[S.][D.]K8nD10D7D6D5D4D3D2D1D8图5-48移位写入指令的使用255.5.10移位读出指令移位寄存器又称为FIFO(FirstInFirstOut,先入先出)堆栈,堆栈的长度范围为2~512字。移位寄存器写入指令SFWR和移位寄存器读出指令SFRD用于FIFO堆栈的读写,先写入的数据先读出。注意事项:★1)一般情况下2≤n≤512。★2)源操作数可取所有数据类型,目标操作数可取KnY、KnM、KnS、T、C和D。★3)SFRD(P)只有16位操作数,占7个程序步。265.5.10移位读出指令【例5-12】入库物品FIFO。写入99个物品的产品编号(4位十进制数),依次存放在D2~D100中,按照先入库的物品先出库的原则,读取出库物品的产品编号,并用4位数码管显示产品编号。D2X1M8000X0D0D1K100D101K4Y0K100SFRDPBCDBINK4X0D0SFWRPD101入库出库4位十进制编号0~9999→D0存放99个产品编号D0→D2~D100把产品编号读到D101中用4位BCD数码管显示产品编号图5-49移位写入和读出物品编号实例