循环与移位指令(FNC30~FNC39)见表6-8。
表6-8 循环与移位指令
1.循环移位指令
右、左循环移位指令ROR、(D)ROR(P)和ROL、(D)ROL(P)编号分别为FNC30和FNC31。执行这两条指令时,各位数据向右(或向左)循环移动n位,最后一次移出来的那一位同时存入进位标志M8022中,如图6-51所示。
X000从OFF到ON每变化一次,则移位n位,最终位被存入进位标志中。
2.带进位的循环移位指令
带进位的循环右、左移位指令RCR(D)、RCR(P)和RCL(D)、RCL(P)编号分别为FNC32和FNC33。执行这两条指令时,各位数据连同进位(M8022)向右(或向左)循环移动n位,如图6-52所示。
X000从OFF到ON每变化一次,则进行n位移位。
使用ROR/ROL/RCR/RCL指令时应该注意:
图6-51 循环移位指令
图6-52 带进位的循环移位指令
1)目标操作数可取KnY、KnM、KnS、T、C、D、V、Z,目标元件中指定位元件的组合只有在K4(16位指令)和K8(32位指令)时有效。
2)16位指令占5个程序步,32位指令占9个程序步。
3)用连续指令执行时,循环移位操作每个周期执行一次。
3.位右移和位左移指令
位右、左移指令SFTR(P)和SFTL(P)的编号分别为FNC34和FNC35,它们使位元件中的状态成组地向右(或向左)移动。n1指定位元件的长度,n2指定移位位数,n1和n2的关系及范围因机型不同而有差异,一般为n2≤n1≤1024。位右、左移指令见表6-9。
表6-9 位右、左移指令
两条指令使位软元件中的状态向右/向左移位,如图6-53和图6-54所示。
图6-53 位右移指令执行
(www.xing528.com)
图6-54 位左移指令执行
使用位右移和位左移指令时应注意:
1)源操作数可取X、Y、M、S,目标操作数可取Y、M、S。
2)只有16位操作,占9个程序步。
4.字右移和字左移指令
字右、字左移指令WSFR(P)和WSFL(P)指令编号分别为FNC36和FNC37。字右移和字左移指令以字为单位,其工作过程与位移位相似,将n1个字右移或左移n2个字。
使用字右移和字左移指令时应注意:
1)源操作数可取KnX、KnY、KnM、KnS、T、C、D,目标操作数可取KnY、KnM、KnS、T、C、D。
2)字移位指令只有16位操作,占用9个程序步。
3)n1和n2的关系为n2≤n1≤512。
【例6-22】 (见图6-55)
图6-55 字右、左移指令
5.移位写入和读出指令
移位写入指令和移位读出指令SFWR(P)和SFRD(P)的编号分别为FNC38和FNC39。
使用SFWR和SFRD指令时应注意:
1)目标操作数可取KnY、KnM、KnS、T、C、D,源操数可取所有的数据类型。
2)指令只有16位运算,占7个程序步。
移位控制示例如图6-56所示。
【例6-23】 登记产品编号时,为了能实现依次入库,物品按照先入先出的原则出库,图6-56所示为输出当前应取出产品编号的梯形图。产品编号是4位以下十六进制数值,最大库存量在99点以下。
来自X000~X017的产品编号被传送到D256。D257作为指针,D258~D356的99点作为产品编号保存用数据寄存器。对应于出库要求,先入产品编号被输出至D357中。应该取出的产品的编号以4位十六进制数方式输出到Y000~Y017中。
图6-56 移位控制示例
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。