1.循环移位指令(左/右)
(1)循环移位指令用法要点
这一类指令共有四条:ROR、ROL、RCR、RCL,循环移位指令使用注意事项如下:
1)这一类指令可以执行16位和32位操作数,执行32位操作数时须在指令前加D。
2)这一类指令可以采用连续执行方式,也可以采用脉冲执行方式。
注:在使用时建议采用脉冲执行方式。
3)操作数[D]是保存循环左/右移数据的字软元件的编号。其对象软元件为KnM、KnY、KnS、T、C、D、R、V、Z。
注:在16位运算中,只能使用K4Y□□□、K4M□□□、K4S□□□。如K4Y010、K4M20、K4S10有效,其他非用K4组合的无效;在32位运算中,只能使用K8Y□□□、K8M□□□、K8S□□□。如K8Y000、K8M50、K8S100有效,其他非用K8组合的无效。
4)指令中n为循环移动的位数。16位指令时n≤16,32位指令时n≤32。
(2)指令动作说明
1)左循环(ROL)指令。图5-64所示为左循环(ROL)指令,X0每次由OFF→ON时,各位数据向左循环移动n位(n=4),最后移出位的状态存入进位标志M8022中。指令执行情况如图5-65所示。当用连续方式执行指令时,循环移位操作每个周期执行一次。
图5-64 左循环(ROL)指令示例
图5-65 左循环指令执行情况
2)右循环(ROR)指令。图5-66所示为右循环(ROR)指令示例,当X0每次由OFF→ON时,各位数据向右旋转n位(n=4),最后移出位的状态存入进位标志M8022中。指令执行情况如图5-67所示。
图5-66 右循环指令示例
图5-67 右循环指令执行情况
以下为某舞台灯光控制示例:某舞台灯光系统有16个灯接于K4Y000上,要求当X000为ON时,灯先以正序Y0→Y1→…Y17的顺序每隔1s轮流点亮,当Y017亮后,停止2s,然后以反序Y17→Y16→…Y0的顺序每隔1s轮流点亮,当Y000再次点亮后,停止2.5s,循环上述过程。当X001为ON时,停止工作。
根据要求编写梯形图程序,如图5-68所示。
此例中,如果不是16只灯,如用到K4Y000时,就要考虑在合适的有灯位置停止,否则不能用K4Y000,因为左/右循环指令在16位操作时,只能用K4Y。
2.位左/右移指令
位左/右移指令可使指定长度的位软元件每次左/右移指定长度。
(1)指令表现形式
位左移指令(SFTL)和位右移指令(SFTR)分别如图5-69、图5-70所示。指令使用说明如下:
1)指令只能执行16位操作数。
2)指令可以采用连续执行方式,也可以采用脉冲执行方式,建议采用脉冲执行方式。
3)指令中操作数说明:
①[S•]:右移后在移位数据中保存的起始位软元件编号。操作数种类:X、Y、M、S。
②[D.]:右移的起始位软元件编号。操作数种类:Y、M、S。
③n1:移位数据的位数据长度(或者说目标D的数据位数)。
④n2:右移的位点数(或者说为源数据的位数)。n2≤n1≤1024。
图5-68 灯组移位控制梯形图程序
图5-69 位左移指令表现形式
图5-70 位右移指令表现形式
(2)功能动作
图5-69所示位左移指令执行情况如图5-71所示,当X000为ON时,对于Y10开始的9位数据(n1=K9),左移3位(n2=K3),移位后,将X10开始的3位(n2=K3)数据传送到Y10开始的3位中。指令在执行过程中,源的内容不会发生改变。
图5-71 位左移指令执行情况
3.字左/右移指令
字左/右移指令是将n1个字长的字软元件左/右移n2个字的指令。
(1)指令表现形式
字左移指令(WSFL)和字右移指令(WSFR)的表现形式分别如图5-72、图5-73所示。指令使用说明如下:
图5-72 位移指令表现形式
图5-73 位右移指令表现形式
1)指令只能执行16位操作数。
2)指令可以采用连续执行方式,也可以采用脉冲执行方式,建议采用脉冲执行方式。
3)指令中操作数说明:(www.xing528.com)
①[S•]:右移后在移位数据中保存的起始字软元件编号。操作数种类:KnX、KnY、KnM、KnS、T、C、D、U□/G□。
②[D.]:右移的起始字软元件编号。操作数种类:KnY、KnM、KnS、T、C、D、U□/G□。
③n1:移位数据的字数据长度(或者说目标D的数据位数)。
④n2:右移的字点数(或者说为源数据的位数)。n2≤n1≤512。
4)指令中使用组合的字软元件时,源和目标中必须采用相同的位数。图5-73中的K1X0和K1Y0,其中的K1必须相同。
5)传送源[S]和传送目标[D]不能重复,否则传送会发生错误,错误代码为K6710。
(2)功能动作
图5-74所示为字左移指令执行情况,当图5-72中的X000为ON时,以目标D20开始的9个字软元件(n1=K9)左移3位(n2=K3),移位后,将D10开始的3位(n2=K3)数据传送到D20开始的3个数据寄存器中。
指令在执行过程中,源的内容不会发生改变。
图5-74 字左移指令执行情况
图5-73所示的字右移指令的执行情况如图5-75所示,这里的K1X0和K1Y0对于n来说就是1,也就是一个K1代表4位。
图5-75 字右移指令执行情况
4.移位写入/移位读出指令(SFWR/SFRD)
SFWR和SFRD指令分别是控制写入和读出的指令,按照先入先出、后进后出的原则执行。
(1)SFWR指令表现形式
SFWR指令表现形式如图5-76所示。
1)指令使用说明:
①指令只能执行16位操作数。
②指令可以采用连续执行方式,也可以采用脉冲执行方式,建议采用脉冲执行方式。
图5-76 SFWR指令表现形式
2)指令中操作数说明:
①[S•]:保存想先入的数据的字软元件编号。操作数种类:KnX、KnY、KnM、KnS、T、C、D、U□/G□。
②[D•]:保存数据并移位的起始字软元件编号(目标中首元件用于指针)。操作数种类:KnY、KnM、KnS、T、C、D、U□/G□。
③n:保存数据的点数(用于指针时,为+1后的值)。操作数种类:K、H,2≤n≤512。
④传送源[S]和传送目标[D]不能重复,否则传送会发生错误。
3)功能动作。图5-76所示移位写入指令执行情况如图5-77所示,当X020为ON时,每次脉冲执行时,将D257中的内容传到D258开始的n-1点(100-1=99)数据寄存器中,其中的D257作为指针用来计数,本例中最多能计n-1点(99点)。
由于SFWR采用连续执行方式时,每个运算周期源操作数都依次被保存,因此本指令用脉冲执行方式编程较好。
(2)移位读出指令(SFRD)
SFRD指令表现形式如图5-78所示。
1)指令使用说明:
①指令只能执行16位操作数。
②指令可以采用连续执行方式,也可以采用脉冲执行方式,建议采用脉冲执行方式。
2)指令中操作数说明:
①[S•]:保存想先出数据的起始字软元件编号(最前端为指针,数据从[S•]+1开始)。操作数种类:KnY、KnM、KnS、T、C、D、U□/G□。
②[D•]:保存先出数据的字软元件编号。操作数种类:KnY、KnM、KnS、T、C、D、V、Z、U□/G□。
③n:保存数据的点数。操作数种类:K、H,2≤n≤512。
图5-77 移位写入指令动作示意图
④传送源[S]和传送目标[D]不能重复,否则传送会发生错误。
图5-78 SFRD指令表现形式
3)功能动作:图5-78所示移位读出指令执行情况如图5-79所示,当X021为ON时,每次脉冲执行时,依次将D258~D356中的内容读到D357中。每执行一次,从D258+1开始的n-1点数据逐字右移。
图5-79 移位读出指令动作示意图
由于SFRD采用连续执行方式时,每个运算周期数据都依次被保存,因此本指令用脉冲执行方式编程较好。
以下为产品出入库控制示例:某产品生产线,当入库请求信号接通时,通过X0~X17输入产品编号;当出库请求信号接通时,按产品入库先后顺序进行出库并将产品编号显示出来。
分析:产品入库时,通过X0~X17数字式拨码开关,采用MOV指令先将数据送到某寄存器中,再采用移位写入和读出指令可完成控制要求。编制参考程序如图5-80所示,程序执行情况如图5-81所示。
图5-80 编制参考程序
图5-81 程序执行情况示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。