谈及移位指令,我第一个想到的,是信号灯的轮流点亮,还有红绿灯的控制,即使我在此之前并没有学过移位指令。
在三菱FXPLC2N中,移位指令有ROR、ROL、RCR、RCL、SFTR、SFTL、WSFR、WSFL等,看看这些指令,大家可以发现,它们都是成对的!天呐,单身狗是没有人权了吗?连学个指令都是满满的狗粮扑面而来。
那么,我们开始今天的学习分享吧!
首先,是第一对夫妇,啊呸,笔误,第一对指令ROR、ROL。
一、循环移位指令ROR、ROL
ROR指令和ROL指令中的R、L分别表示右移和左移,R、L的含义类似我们的耳机,戴左耳的标有字母L,戴右耳的标有字母R。
ROR指令和ROL指令都是对字元件中的二进制位进行移位。从上图的编程手册截图可
以看到,它们有连续执行型和脉冲执行型,可以用于16位,也可用于32位。把一个字元件看成有16个位置,ROR指令和ROL指令可以对这16个位置进行调整。那它又是怎么调整的呢?
我们以ROR右移指令为例,如上图所示,当驱动条件X0接通后,执行指令RORD0K4,把D0的16个二进制数依次向右移动4位,右边为低位,也就是说,移出了低4位。移出的低4位二进制数循环进入到D0的高位(左边),最后移出的1位二进制数同时被传送到进位标志位M,如上图“”中的“0”。
每执行1次RORD0K4指令D0的数据就右移4位,这是一个循环的过程。显然,执行4次该指令后,D0的数据又变得和原来一样。
所以,在用到移位指令时,最好用脉冲执行型RORP、ROLP。
左移指令ROL和右移指令ROR大同小异,如图所示,执行指令ROLD0K4,把D0的数据一次向左移4位,左边为高位,也就是说,移出了高4位。
移出的高4位二进制数循环进入到D0的低位(右边),最后移出的1位二进制数同时被传送到进位标志位M,如上图“”中的“0”。
另外要注意的一点是,在ROR指令和ROL指令中,当终址D是16位的组合位元件时,n=K4;当终址D是32位的组合位元件时,n=K8,否则指令不执行。
知道了ROR指令、ROL指令后,我脑海里立即浮现几种不同的控制信号灯轮流点亮的梯形图,具体怎么实现,我就不在此班门弄斧了,自己私底下悄咪咪地尝试,错了也不至于被耻笑。
ROR指令、ROL指令理解起来相对简单,接下来的这对指令就没这么简单了。
二、带进位循环移位指令RCR、RCL
同样的,RCR指令和RCL指令都是对字元件中的二进制位进行移位。从上图的编程手册截图可以看到,它们有连续执行型和脉冲执行型,可以用于16位,也可用于32位。其中RCR指令和RCL指令中的R、L和上文的含义一样,一个表示右移,一个表示左移。
所谓“带进位”,是指在移位的同时,捎带上进位标志位M。那又是在怎样捎带的呢?我们以RCR右移指令为例。
当驱动条件X0接通,执行指令RCRD0K4,类似于ROR指令,但不一样的是,用胶水把进位标志位M和D0粘起来,此时最右边的4位,显然不仅仅是属于D0,还有1位是属于M。
执行指令RCRD0K4,进位标志位M的数首先被右移,再轮到把D0的16个二进制数依次向右移动。移出的4位二进制数(包括最先被右移的进位)循环进入到D0的高位(左边)。
显然,移动4位后,M的值恰好为D0中b3的值。
同理,带进位左移指令RCL的执行我们直接以下图展示。执行指令RCLD0K4,同样把进位标志位和D0粘连起来,此时M的值依然是首先被移动的那位,它也太可怜了吧。另外,执行完指令后,此时M的值为D0中b12的值。
和ROR指令和ROL指令一样,在RCR指令、RCL指令中,当终址D是16位的组合位元件时,n=K4;当终址D是32位的组合位元件时,n=K8,否则指令不执行,且在用到移位指令时,最好用脉冲执行型RCRP、RCLP。
以上两种指令,都是基于字元件的二进制位移动,接下来我们继续看位元件组合的位移动。
三、位元件的位移指令SFTR、SFTL
根据编程手册的截图,SFTR指令、SFTL指令的操作数有4个,其中源址S指所移动的位元件组合的首址,终址D指被移入数值的位元件组合的首址,S、D的适用软元件为位元件。n1指终址D的长度(位数),n2指S的位数,且n2n。
SFTR指令、SFTL指令操作数不少,看得人头皮发麻,那它们的具体执行到底是怎样的呢?我们以SFTR指令为例。
当驱动条件X10接通,执行指令SFTRX0M0K12K4。根据定义,X的位元件组合X3~X0为源操作数,共4位,目的操作数为M的位元件组合M11~M0,共12位。
指令执行后,X3~X0的分别向M11~M0右移,顺便把M3~M0原来的值给挤掉。显然,在指令执行完毕后,X3~X0的值保持不变,而M11~M0中的M11~M8的值被X3~X0的覆盖,且M3~M0原来的值被舍去,变为。
知道了右移是怎么一回事,对左移的理解想必也是不在话下。我们直接用一张图概括。
当驱动条件X10接通,执行指令SFTLX0M0K12K4。指令执行后,X3~X0的分别向M3~M0左移,顺便把M11~M9原来的值向左给挤掉。显然,在指令执行完毕后,X3~X0的值保持不变,M3~M0的值被X3~X0的覆盖,且M11~M9原来的值被舍去,变为。
在应用SFTR指令、SFTL指令时,最好使用脉冲执行型SFTRP、SFTLP。另外,源址S、终址D可以用同种位元件,此时应注意它们的编号不能重叠,否则会发生运算错误。
知道了位元件的位移指令是怎么回事之后,还有两个指令正在嗷嗷待哺,等着我们去学习呢!事不宜迟,我们继续往下看。
四、字元件移动指令WSFR、WSFL
跟据编程手册的截图,WSFR指令、WSFL指令的操作数也有4个,其中源址S指所移动的字元件组合的首址,终址D指被移入数值的字元件组合的首址,S、D的适用软元件为字元件。n1指终址D的长度(元件个数),n2指S的元件个数,且n2n。
类似于SFTR指令和SFTL指令,WSFR指令、WSFL指令的差别在于其操作软元件为字元件,而SFTR指令和SFTL指令操作软元件是位元件。
WSFR指令、WSFL指令的执行和位元件的位移指令非常相似,我们以SFTR指令为例。
当驱动条件X10接通,执行指令WSFRD20D0K12K4。根据定义,D的字元件组合D23~D20为源操作数,共4个,目的操作数为D的位元件组合D11~D0,共12个。
指令执行后,D23~D20的数据分别向D11~D0右移,顺便把D3~D0原来的数据给挤掉。显然,在指令执行完毕后,D23~D20的值保持不变,而D11~D0中的D11~D8的值被D23~20的数据覆盖,且D3~D0原来的数据被舍去。显然和SFTR指令的执行大同小异。
看到这里,关于WSFL指令的执行,我想不用我说,大家也已经知道了。为了成双成对,我在这里也给出WSFL指令的执行图示如下。
还是同样的道理,在应用WSFR指令、WSFL指令时,最好使用脉冲执行型WSFRP、WSFLP。
另外,源址S、终址D可以用同种字元件,此时应注意它们的编号不能重叠,否则会发生运算错误。
除了以上我所提及的移动指令,还有移位读写指令SFWR、SFRD,在这里我就不再展开阐述,因为它们在实际的梯形图中应用非常少,大家想知道的,可以去看相应的课程。
那么,这次的学习分享就到这里吧!
注:本文章内容都是基于三菱FXPLC2N所写
选自《三菱FX系列PLC功能指令详解》第四章第22~26课时
(技成培训原创,作者:杨思慧,未经授权不得转载,违者必究!)