FX2N PLC循环与移位指令是使位数据或字数据向指定方向循环、位移的指令。
1.左、右循环指令
左、右循环指令可以完成数据的左、右循环操作。
(1)指令格式
指令编号及助记符:循环右移指令FNC30 ROR[D·]n;循环左移指令FNC31 ROL[D·]n。
●[D·]为要移位目的软元件。
●n为每次移动的位数。
●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。移动位数n为K和H指定的常数。
(2)指令用法
循环右移指令ROR的功能是将指定的目的软元件中的二进制数按照指令中n规定的移动的位数由高位向低位移动,最后移出的那一位将进入进位标志位M8022。循环右移指令梯形图格式如图5-47所示。
执行一次ROR指令,“n”位的状态量向右移一次,最右端的“n”位状态循环移位到最左端“n”位处,特殊辅助继电器M8022表示最右端的“n”位中向右移出的最后一位的状态。
假设D10中的数据为HFF00,执行这条循环右移指令的示意图如图5-48所示。由于指令中K4指示每次循环右移4位,所以最低4位被移出,并循环回补进入高4位中。所以循环右移4位D10中的内容将变为H0FF0。最后移出的是第3位的“0”,它除了回补进入最高位外,同时进入进位标志M8022中。
循环左移指令ROL的功能是将指定的目的软元件中的二进制数按照指令规定的移动的位数由低位向高位移动,最后移出的那一位将进入进位标志位M8022。循环左移指令梯形图格式如图5-49所示。ROL指令的执行类似于ROR,只是移位方向相反。
图5-47 循环右移指令ROR举例
图5-48 循环右移指令ROR示意图
图5-49 循环左移指令ROL举例
2.带进位的左、右循环指令
带进位的左、右循环指令可以完成数据的带进位的左、右循环操作。
(1)指令格式
指令编号及助记符:带进位的循环右移指令FNC32 RCR[D·]n;带进位的循环左移指令FNC33 RCL[D·]n。
●[D·]为要移位目的软元件。
●n为每次移动的位数。
●目的操作数可取KnY、KnM、KnS、T、C、D、V和Z。
●移动位数n为K和H指定的常数。
(2)指令用法
带进位的循环右移指令RCR的功能是将指定的目的软元件中的二进制数按照指令规定的每次移动的位数由高位向低位移动,最低位移动到进位标志位M8022。M8022中的内容则移动到最高位。
带进位的循环左移指令RCL的功能是将指定的目的软元件中的二进制数按照指令规定的每次移动的位数由低位向高位移动,最高位移动到进位标志位M8022。M8022中的内容则移动到最低位。
这两条指令的执行基本上与ROL和ROR相同,只是在执行RCL、RCR时,标志位M8022不再表示向左或向右移出的最后一位的状态,而是作为循环移位单元中的一位处理。
3.位元件左移、位元件右移指令
位元件左移、位元件右移指令指令可以完成位元件左移、位元件右移的操作。
(1)指令格式
指令编号及助记符:位元件右移指令FNC34 SFTR[S·][D·]n1 n2;位元件左移指令FNC35 SFTL[S·][D·]n1 n2。
●[S·]为移位的源位元件首地址。
●[D·]为移位的目位元件首地址。
●n1为目位元件个数。
●n2为源位元件移位个数。
●源操作数是Y、X、M、S。
●目的操作数为Y、M、S。
●n1和n2为常数K和H。
(2)指令用法
位元件右移指令SFTR的功能是将指定的源位元件的低位从目的高位移入,目位元件向右移n2位,源位元件中的数据保持不变。位元件右移指令执行后,n2个源位元件中的数被传送到了目的高n2位中,目位元件中的低n2位数从其低端溢出。
位元件左移指令SFTL的功能是指源位元件的高位从目的低位移入,目位元件向左移n2位,源位元件中的数据保持不变。位元件左移指令执行后,n2个源位元件中的数被传送到了目的低n2位中,目位元件中的高n2位数从其高端溢出。两条指令的示意图分别如图5-50和图5-51所示。
图5-50中,如果X010断开,则不执行这条SFTR指令,源、目中的数据均保持不变。如果X010接通,则将执行位元件的右移操作,即源中的4位数据X003~X000将被传送到目位元件中的M15~M12。目位元件中的16位数据M15~M0将右移4位,M3~M04位数据从目的低位端移出,所以M3~M0中原来的数据将丢失,但源中X003~X000的数据保持不变。如图5-51所示SFTL指令功能与SFTR指令功能类似,由读者自行分析,在此不再赘述。
图5-50 位元件右移指令SFTR举例(www.daowen.com)
图5-51 位元件左移指令SFTL举例
4.字元件右移、字元件左移指令
字元件左移、字元件右移指令可以完成字元件左移、字元件右移的操作。
(1)指令格式
指令编号及助记符:字右移指令FNC36 WSFR(P)[S·][D·]n1n2;字左移指令FNC37 WSFL(P)[S·][D·]n1 n2。
●[S·]为移位的源字元件首地址。
●[D·]为移位的目的字元件首地址。
●n1为目的字元件个数。
●n2为源字元件移位个数。
●源操作数可取KnX、KnY、KnM、KnS、T、C和D。
●目的操作数可取KnY、KnM、KnS、T、C和D。
●n1,n2为常数K和H。
(2)指令用法
字元件右移指令WSFK和字元件左移指令WSFL以字为单位,其工作的过程与位移位相似,是将n1个字右移或左移n2个字。字元件右移和字元件左移指令的操作过程示意图如图5-52和图5-53所示。
5.移位寄存器写入与读出指令
移位寄存器又称为先入先出(First in First out,FIFO)堆栈,堆栈的长度范围为2~512个字。移位寄存器写入与读出包括两条指令。
图5-52 字元件右移指令WSFR举例
图5-53 字元件左移指令WSFL举例
(1)指令格式
指令编号及助记符:写入指令FNC38SFWR(P)[S·][D·]n;读出指令FNC39 WSFR(P)[S·][D·]n。
●[S·]为移位的源字元件首地址。
●[D·]为移位的目的字元件首地址。
●n为目的字元件个数。
●源操作数可取KnX、KnY、KnM、KnS、T、C和D。
●目的操作数可取KnY、KnM、KnS、T、C和D。
●n1,n2为常数K和H。
用于FIFO堆栈的读写,先写入的数据先读出。具体使用说明如表5-1所示。
表5-1 FIFO指令使用说明
(2)指令用法
使用方法如图5-54所示。
【实例5-18】移位寄存器写入与读出指令应用
图5-54 移位寄存器写入与读出指令FIFO使用说明
a)移位寄存器写入 b)移位寄存器读出
图5-54a中:
●目的元件D1是FIFO堆栈的首地址,也是堆栈的指针,移位寄存器未装入数据时应将D1清0。
●在X000由OFF变为ON时,指针的值加1后写入数据。第一次写入时,源操作数D0中的数据写入D2。
●如果X000再次由OFF变为ON,D1中的数变为2,D0中的数据写入D3。依此类推,源操作数D0中的数据依次写入堆栈。
●当D1中的数据等于n-1(n为堆栈的长度)时,不再执行上述处理,进位标志M8022置1。
图5-54b中:
●X000由OFF变为ON时,D2中的数据送到D20,同时指针D1的值减1,D3~D9的数据向右移一个字。
●数据总是从D2读出,指针D1为0时,FIFO堆栈被读空,不再执行上述处理,零标志M8020为ON。
●执行本指令的过程中,D9的数据保持不变。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。