三菱

注册

 

发新话题 回复该主题

三菱FXPLC学习之数据处理指令下 [复制链接]

1#

本来打算花一篇文章的篇幅来写数据处理指令的,但写着写着发现,一篇文章根本写不完QAQ。

上篇文章结束得有点突兀,那这里也再不啰嗦,我们直奔主题吧。

一、字交换指令XCH

字交换指令,顾名思义,就是将两个字软元件的数据相互交换。从编程手册的截图可以看到,XCH指令可以用于16位和32位,有脉冲执行型和连续执行型。

显然,XCH指令在使用时应采用脉冲执行型,不然采用连续执行型,PLC每一个扫描周期都执行一次,交换来交换去的这是交换了个寂寞。

XCH指令的梯形图形式也很简单,有两个操作数D1.、D2.,当驱动条件成立时,将终址D1和D2的数据相互交换。不知道为什么,这个指令让我想起了一些狗血小说中的灵魂交换情节,emm……

XCH指令理解起来很简单,但有一点要注意,那就是当两个操作数同一个地址时,例如执行XCHPD5D5后,D5的数据又是怎样变化的呢?这其实是XCH指令的扩展功能:当终址D1和D2为同一终址且特殊继电器M置ON时,XCH指令将对该终址软元件的字节进行交换。

如下图所示就是一段程序的示例,D5、D10、D11的初始值分别为(D5)=H,(D11,D10)=H5678。若M=OFF,执行指令XCHPD5D5和XDXCHPD10D10,显然D5、D10、D11的数据均没变。

当M=ON,再次执行指令XCHPD5D5和XDXCHPD10D10,此时D5、D10、D11的数据均发生变化,可以看到,D5的高8位和低8位相互交换,变为H,而32位的(D11,D10)也变成H7856。

从32位的指令DXCHP的执行情况可以看到,此时D10、D11中交换的依然是各自的高低字节,而不是D10和D11的数据相互交换。

如想用XCH指令进行软元件的字节交换,就得先把M置1,比较麻烦。而SWAP指令却可以直接对字元件进行字节交换。

二、高低字节交换指令SWAP

高低字节交换指令的功能和XCH的字节交换功能是一样的,包括用于32位时也是对各自的高低字节交换。只不过SWAP指令不需要同时将M置1。基于SWAP指令比较简单,再此我就不再啰嗦,直接给段梯形图大家看看就行了。

关于数据交换指令的应用,我能直接想到的就是数值的比较与筛选,例如将D0~D中存有最大数的寄存器编号找出来,就可以通过XCH指令实现,具体程序我也不再举例了,大家自行尝试吧!接下来我们看一个新的指令ZRST。

三、批次(区间)复位指令ZRST

区间复位指令ZRST显然是复位指令RST的升级版,从编程手册截图可以看到,ZRST指令有脉冲执行型和连续执行型,只能用于16位,这是显然的,既然是批次复位,那32位和16位就没有区别了。

其梯形图形式如上图所示,当驱动条件成立时,将D1~D2之间的所有软元件进行复位,包括将位软元件置零(=OFF),字软元件清零(=K0)。这里的复位,包括了触点状态、线圈状态和字元件所存的数据,所以那些继电器如Y、M,带有触点的字元件如C、T,经ZRST指令复位后,其相应的触点也全部复位。

另外,从适用软元件中可以看到,ZRST指令不能用于组合位元件,这用脚指头想都知道是当然的,因为对批次的位元件复位,和对组合位元件复位没有任何区别。

在使用区间复位指令时,必须要注意以下几点:

1、如截图所示,D1、D2要为同一类型的软元件,不能用不同的软元件,如ZRSTD0

C1、ZRSTM0D1、ZRSTY0M10等都是不行的,指令不执行且将M置ON,如下图所示。

2、终址D1、D2编号必须为D1≤D2,若D1≥D2,指令ZRSR指令只对D1的数值复位,如下图所示,在执行指令FMOVK10D0K8后,D0~D7的所存的数据均为K10,但执行指令ZRSTD7D0后,只有D7被清零,D0~D5的值保持不变。

另外,虽然ZRST指令不能用于32位,但它可以对32位计数器C~C进行批量复位,但用于32位计数器时,两个终址D1、D2就必须都是32位计数器,不允许D1是32位计数器,而D2是16位计数器,例如ZRSTCC0是不行的。

四、“ON”位数求和指令SUM

众所周知,SUM这个单词本身就是求和的意思,所以SUM指令,显然也是一种求和指令。如编程手册截图所示,其适用软元件为字元件,因为只要字元件才有多个二进制位。结合该指令的梯形图形式,当驱动条件成立时,对源址S中状态为1的二进制位进行统计求和,并将求和结果传送到终址D中。

如上图所示,(D0)=,指令指令SUMD0D10后,计算D0中的“1”共有12位,所以此时D10的值为K12。

SUM指令会影响到零标志位M,即当源址S的数据为K0时,执行SUM指令后,M会被置ON,如下图所示。

SUM指令还可以用于32位,此时统计的就是源址S、S+1两个软元件中的“1”的总数了,然后将结果传送到终址D中,而D+1的数据保持为K0,所以使用DSUM指令时,注意终址D+1也被占用,即使它不保存结果。知道了ON位数求和指令SUM后,我们继续看一个类似的指令BON。

五、ON位判断指令BON

BON指令的作用是判断软元件的某一个二进制位是否为“1”。从编程手册截图可以看到,BON指令的源址S为字软元件,终址D为位软元件,可用于16位和32位,而n的取值范围根据位数(16位或32位)会有所不同。

当源址S为组合位元件时,此时n就为对应编号的位元件,当源址为字软元件时,n就为字元件中对应的二进制位。

结合该指令的梯形图形式,当驱动条件成立时,对源址S的第n位状态进行判断,若该位状态为1,终址D=ON,若该位状态为0时,终址D=OFF。例如执行指令BOND0D10K15,如下图所示,若(D0)=H,其二进制位b15的值恰好为“1”,此时M0=ON。

显然,BON指令可用于判断一个数的正负,即判断数值的最高位(符号位)是1还是0,若为1,该数就为负数,若为0,则该数为负数。

综上,这次所分享的指令基本比较简单,为了熟练运用这些指令,大家可以试着用它们编写一下有趣的程序哟。

注:本文章内容都是基于三菱FXPLC2N所写选自《三菱FX系列PLC功能指令详解》第五章第21、39~53课时

分享 转发
TOP
发新话题 回复该主题