本来打算花一篇文章的篇幅来写数据处理指令的,但写着写着发现,一篇文章根本写不完QAQ。
上篇文章结束得有点突兀,那这里也再不啰嗦,我们直奔主题吧。
01、字交换指令XCH
字交换指令,顾名思义,就是将两个字软元件的数据相互交换。从编程手册的截图可以看到,XCH指令可以用于16位和32位,有脉冲执行型和连续执行型。显然,XCH指令在使用时应采用脉冲执行型,不然采用连续执行型,PLC每一个扫描周期都执行一次,交换来交换去的这是交换了个寂寞。
XCH指令的梯形图形式也很简单,有两个操作数D1.、D2.,当驱动条件成立时,将终址D1和D2的数据相互交换。不知道为什么,这个指令让我想起了一些狗血小说中的灵魂交换情节,emm……
XCH指令理解起来很简单,但有一点要注意,那就是当两个操作数同一个地址时,例如执行XCHP D5 D5 后,D5的数据又是怎样变化的呢?这其实是XCH指令的扩展功能:当终址D1和D2为同一终址且特殊继电器M8160置ON时,XCH指令将对该终址软元件的字节进行交换。
如下图所示就是一段程序的示例,D5、D10、D11的初始值分别为(D5)=H1234,(D11,D10)=H12345678。若M8160=OFF,执行指令XCHP D5 D5和XDXCHP D10 D10,显然D5、D10、D11的数据均没变。
当M8160=ON,再次执行指令XCHP D5 D5和XDXCHP D10 D10,此时D5、D10、D11的数据均发生变化,可以看到,D5的高8位和低8位相互交换,变为H3412,而32位的(D11,D10)也变成H34127856。
从32位的指令DXCHP的执行情况可以看到,此时D10、D11中交换的依然是各自的高低字节,而不是D10和D11的数据相互交换。
如想用XCH指令进行软元件的字节交换,就得先把M8160置1,比较麻烦。而SWAP指令却可以直接对字元件进行字节交换。
02、高低字节交换指令SWAP
高低字节交换指令的功能和XCH的字节交换功能是一样的,包括用于32位时也是对各自的高低字节交换。只不过SWAP指令不需要同时将M8160置1。基于SWAP指令比较简单,再此我就不再啰嗦,直接给段梯形图大家看看就行了。
关于数据交换指令的应用,我能直接想到的就是数值的比较与筛选,例如将D0~D100中存有最大数的寄存器编号找出来,就可以通过XCH指令实现,具体程序我也不再举例了,大家自行尝试吧!接下来我们看一个新的指令ZRST。
高低字节交换指令的功能和XCH的字节交换功能是一样的,包括用于32位时也是对各自的高低字节交换。只不过SWAP指令不需要同时将M8160置1。基于SWAP指令比较简单,再此我就不再啰嗦,直接给段梯形图大家看看就行了。
关于数据交换指令的应用,我能直接想到的就是数值的比较与筛选,例如将D0~D100中存有最大数的寄存器编号找出来,就可以通过XCH指令实现,具体程序我也不再举例了,大家自行尝试吧!接下来我们看一个新的指令ZRST。
03、批次(区间)复位指令ZRST
区间复位指令ZRST显然是复位指令RST的升级版,从编程手册截图可以看到,ZRST指令有脉冲执行型和连续执行型,只能用于16位,这是显然的,既然是批次复位,那32位和16位就没有区别了。
其梯形图形式如上图所示,当驱动条件成立时,将D1~D2之间的所有软元件进行复位,包括将位软元件置零(=OFF),字软元件清零(=K0)。这里的复位,包括了触点状态、线圈状态和字元件所存的数据,所以那些继电器如Y、M,带有触点的字元件如C、T,经ZRST指令复位后,其相应的触点也全部复位。
另外,从适用软元件中可以看到,ZRST指令不能用于组合位元件,这用脚指头想都知道是当然的,因为对批次的位元件复位,和对组合位元件复位没有任何区别。
在使用区间复位指令时,必须要注意以下几点:
1、如截图所示,D1、D2要为同一类型的软元件,不能用不同的软元件,如ZRST D0C1、ZRST M0 D1、ZRST Y0 M10等都是不行的,指令不执行且将M8067置ON,如下图所示。
2、终址D1、D2编号必须为D1≤D2,若D1≥D2,指令ZRSR指令只对D1的数值复位,如下图所示,在执行指令FMOV K10 D0 K8后,D0~D7的所存的数据均为K10,但执行指令ZRST D7 D0后,只有D7被清零,D0~D5的值保持不变。
另外,虽然ZRST指令不能用于32位,但它可以对32位计数器C200~C234进行批量复位,但用于32位计数器时,两个终址D1、D2就必须都是32位计数器,不允许D1是32位计数器,而D2是16位计数器,例如ZRST C200 C0 是不行的。
04、“ON”位数求和指令SUM
众所周知,SUM这个单词本身就是求和的意思,所以SUM指令,显然也是一种求和指令。如编程手册截图所示,其适用软元件为字元件,因为只要字元件才有多个二进制位。结合该指令的梯形图形式,当驱动条件成立时,对源址S中状态为1的二进制位进行统计求和,并将求和结果传送到终址D中。
如上图所示,(D0)=0000 1111 1111 1111,指令指令SUM D0 D10后,计算D0中的“1”共有12位,所以此时D10的值为K12。
SUM指令会影响到零标志位M8020,即当源址S的数据为K0时,执行SUM指令后,M8020会被置ON,如下图所示。
SUM指令还可以用于32位,此时统计的就是源址S、S+1两个软元件中的“1”的总数了,然后将结果传送到终址D中,而D+1的数据保持为K0,所以使用DSUM指令时,注意终址D+1也被占用,即使它不保存结果。知道了ON位数求和指令SUM后,我们继续看一个类似的指令BON。
05、ON位判断指令BON
BON指令的作用是判断软元件的某一个二进制位是否为“1”。从编程手册截图可以看到,BON指令的源址S为字软元件,终址D为位软元件,可用于16位和32位,而n的取值范围根据位数(16位或32位)会有所不同。当源址S为组合位元件时,此时n就为对应编号的位元件,当源址为字软元件时,n就为字元件中对应的二进制位。
结合该指令的梯形图形式,当驱动条件成立时,对源址S的第n位状态进行判断,若该位状态为1,终址D=ON,若该位状态为0时,终址D=OFF。例如执行指令BON D0 D10 K15,如下图所示,若(D0)=H8000,其二进制位b15的值恰好为“1”,此时M0=ON。
显然,BON指令可用于判断一个数的正负,即判断数值的最高位(符号位)是1还是0,若为1,该数就为负数,若为0,则该数为负数。
综上,这次所分享的指令基本比较简单,为了熟练运用这些指令,大家可以试着用它们编写一下有趣的程序哟。
标签:D5,D10,ZRST,32,指令,FXPLC,数据处理,Mitsubishi,元件 From: https://www.cnblogs.com/ybqjymy/p/17606276.html