Mitsubishi 三菱FXPLC学习之数据处理指令(上)

发布时间 2023-08-04 15:58:26作者: 一杯清酒邀明月

  数据处理,包括对数据的采集存储、加工计算、检索排序、变换和传输等。所以,其实前面所分享的数值运算指令也算是数据处理指令,相对于庞大的计算机系统,PLC中有关数据的处理还是相对简单的。那么,数据处理指令有哪些呢?

二进制与十进制转换指令

  这里所提及的的十进制,其实是BCD码,我在系列文章的第一篇中就有讲到几种数制和码制,而8421BCD码是十进制代码中最常用的一种,用4位二进制码表示十进制数的0~9。

  二进制与十进制转换指令有两个,分别是将二进制转换为BCD的BCD指令和将BCD转换为二进制的BIN指令,如上图的编程手册截图所示,它们的适用软元件没有常数K、H。

  显然,BCD指令和BIN指令是一对互逆的指令,它们的梯形图形式如下图所示,有两个操作数(S·)、(D·)。。

   其中,对BCD指令有,当驱动条件成立时,将源址S中的二进制数转换为BCD码数,并存放至终址D中;对BIN指令有,当驱动条件成立时,将源址S中的BCD码数转换为二进制数,并存放至终址D中。

  想要理解BCD指令和BIN指令,就得先理解8421BCD码数和二进制数的含义。上文提到,BCD码中,每1位十进制数都要用4位二进制数表示,如上图所示,这个有点类似十六进制数,因为每4位二进制数恰好能表示1位十六进制数。区别在于,BCD码中的最大数是9,用二进制数表示就是1001(8+1),而十六进制数中的最大数是F(15),用二进制数表示就是1111(8+4+2+1)。

  知道了BCD码是怎么回事,那么BCD指令和BIN指令就很好理解了,例如执行指令 BCD D0 D10,若(D0)=0000 0001 0000 0101,经BCD指令转换后,D10中的内容应该是多少?

  如上图所示,(D0)=0000 0001 0000 0101=K261,将十进制数261转换为BCD码数就是0261BCD=0000 0010 0110 0001,即(D10)=0000 0010 0110 0001=K609。

  当用16位BCD码表示4位十进制数时,这4位十进制数的最高位就为千位,此时16位二进制数的每一位的大小,就不能直接按二进制转十进制的规则计算,例如若b14=1,它的大小并不是等于1×214,而是表示十进制数中的千位为4。

  同理,执行指令 BIN D0 D10,若(D0)=0000 0001 0000 0101,此时D0的数据为BCD码数,即0000 0001 0000 0101=0106BCD=K106,将K106转换为二进制数,即K106=0000 0000 0110 1010,所以(D10)=0000 0000 0110 1010=K106。

  根据BCD码的定义,16位(32位)二进制位所能表示的最大值为K9999(K99999999),所以在应用BCD指令时,显然要注意源址S的内容不能大于K9999,否则将会运算出错,T同理,在应用BIN指令时,源址S的数据表示的是BCD码,所以要符合BCD码的格式,例如不能出现0000 0000 0000 1111等非BCD码,否则将会运算出错,有出错时特殊继电器M8076=ON。

  处理二进制与BCD码转换指令外,还有二进制换格雷码指令GRY和格雷码转二进制指令GBIN,这里就不展开阐述,大家感兴趣的可以去看相关书籍或课程。

译码指令和编码指令

  说到译码,很容易就会想到译码器,译码器是数字电路常用的器件,例如74138译码器、显示译码器等。译码器又叫解码器,它将多位输入编码的不同逻辑组合翻译成对应的输出状态,每一种逻辑组合就对应一个输出。

  而编码就是译码的逆过程,类似电路的整流和逆变,译码和编码就是一对互逆的过程。编码和译码的更多内容在此我也不再过多的讲解,因为这不是重点,重点是我们如何理解这个译码指令和编码指令。

  基于PLC的译码指令,我在这里简单讲一下译码,如上图所示,以二进制译码(变量译码器)为例,有3个变量A、B、C,每个变量都有两种状态“0”和“1”,三个变量的不同状态总共会有8中不同的逻辑组合。每一种逻辑组合对应一个输出,此时输出就有8个,例如此时ABC的状态为010,对应的输出Y2=ON。

  同理,若变量有n个,对应的输出最多可以有2n个。编码是译码的逆过程,也就是此时的输出变为输入,输入变为输出,如下图所示,每一个输入,都对应输出的一种逻辑组合状态,例如当X7=ON时,Y2 Y1 Y0=111。显然,此时X7~X0不可能有同时为1的情况,这就像电机不可能同时正反转一个道理。

   简单了解译码和编码后,接下来就看看这个译码指令DECO和编码指令ENCO是怎么一回事。

1.译码指令DECO

  PLC中的译码指令DECO,其原理其实就和上文所举的例子一样,将n位二进制编码的不同逻辑组合转换为2n种输出状态,其编程手册截图如下图所示。

  该指令不能用于32位,有连续执行型和脉冲执行型两种,不能用组合位元件。其梯形图的形式如上图所示,其中n表示输入二进制编码有n位,即当源址S为字元件地址时,该n位二进制位就(S)的低n位;当S为位元件组合的首址时,表示它是n位位元件的组合终址D的位数指定为2n位 。

  这里要注意的是,因为字元件为16位,所以当终址D是字元件时,1≤n≤4;当终址D为位元件时,1≤n≤8;当n=0,指令出错。

  当驱动条件成立时,由S中的n位二进制数值m,使D中编号为m的位元件或bm位置ON。例如执行指令DECO X0 D0 K3,此时输入编码由X2、X1、X0组成,对应输出为D0中的b7~b0共8位。若(X2,X1,X0)=010=K2,此时D0中的b2位就会置ON,如下图所示。另外,当驱动条件为OFF后,指令不再执行,但之前执行的输出会保持不变,如下图中的b2位会保持为ON状态。

   译码指令EDNO的实际应用有哪些呢?其实我也不知道,也没办法产生联想,不过根据这个指令的特点,大家会不会有什么想法?欢迎留言评论哟!知道了译码指令,我们继续看编码指令ENCO。

2.编码指令ENCO

  编码指令ENCO为译码指令DECO的逆指令,它的功能正好和DECO指令相反,其编程手册截图如下图所示。基于大家已经理解译码指令的前提下,我想编码指令理解起来是问题不大的。

  和译码指令一样,编码指令ENCO也不能用于32位,有连续执行型和脉冲执行型两种,不能用组合位元件。其梯形图的形式如上图所示,其中n表示二进制编码有n位,显然,与译码指令相反,此时源址S的位数就指定为2n位,当终址D为字元件地址时,该n位二进制位就(D)的低n位;当D为位元件组合的首址时,表示它是n位位元件的组合。

  其指令的执行也与译码指令相反,当驱动条件成立时,由S中的置1的二进制位的位置编号值m,转换为二进制数传送到终址D中。例如执行指令ENCO M0 D0 K4,由于n=K4,所以源址S由16位的M15~M0组成,若此时M7=ON,转换为二进制数为0111,传送到D0后,使得(D0)=0000 0000 0000 0111,如下图所示。

  这里要注意的一点是,源址中原则上是只能有一个1的,但若有多个1,ENCO指令会对在高位的1进行编码,而把其他位的1忽略,例如执行指令ENCO M0 D0 K4,若此时M7、M4、M0都为ON状态,指令执行后D0的内容仍为H0007。

  编码指令是实际应用应该比译码指令的多,例如红绿灯的控制是我能联想到的。总的来说,译码指令和编码指令不算常用指令,我们能理解它们的功能就行。

  这次的分享先到这了,大家先消化一下,下篇文章继续。