浔之漫智控技术(上海)有限公司总部
主营西门子模块 , PLC模块 , 变频器模块 , 触摸屏模块
邢台西门子授权PLC模块总代理(中国代理商)

邢台西门子授权PLC模块总代理(中国代理商)      邢台西门子授权PLC模块总代理(中国代理商)

邢台西门子授权PLC模块总代理(中国代理商)邢台西门子授权PLC模块总代理(中国代理商)

浮点数是什么,我在上上篇文章就提到过,简单来说就是小数。BIN数有四则运算指令,同样的,浮点数也有四则运算指令:加、减、乘、除。


一、浮点数的加减乘除指令

浮点数四则运算指令和整点数对应指令的运算过程大同小异,不同点在于,前者是小数,后者是整数。运算过程虽然基本相同,但指令的运用还是有所区别的,接下来我们重点看一下指令运用的区别。


1、浮点数的EADD(加)、ESUB(减) EMUL(乘)、EDIV(除)指令




从编程手册的截图中,可以看到,浮点数的四则运算指令只能用于32位,不能用于16位。这4个指令都有2个源操作数(S1·)、(S2·)和1个目的操作数(D·),且适用软元件只有常数K、H和数据寄存器D。


它们的梯形图形式如下图所示,因为都是32位的错作数,所以在运用指令时助记符前面要加上字母“D”。


从梯形图可以看到,不管是加减还是乘除,不管是源址还是终址,它们都32位,这和我们在上篇文章所分享的整数四则运算指令有一定的差别,例如整数的32位乘法指令,目的操作数有4个,但浮点数的是2个。



其实这是很显然的,因为浮点数的表示方式和整点数完全不一样,这在上上一篇文章就已经有说明,所以在此不再赘述,大家不了解的可以回看以往的文章。另外,浮点数的四则运算指令不会影响到3个标志位M8020、M8021、M8022。


和整数运算指令一样,,PLC每扫描一个周期,这些指令就执行一次,此时,重复执行运算可能不是我们需要的,所以应该选择脉冲执行型指令或边沿触发型驱动条件。


总的来说,浮点数的四则运算指令和整点数差不多,需要用的时候直接用就是。我们接下来继续看2个与浮点数相关的其他指令。



2、浮点数与整数相互转换的FLT、INT指令

FLT指令和INT指令分别是整数转浮点数、浮点数转整数的一对互为逆变换的指令。


从编程手册的截图可以看到,这两个指令的适用软元件只有数据寄存器D,不能是其他的软元件。有因为浮点数是32位的,所以在转换的过程中,一定要注意数据寄存器D的地址。

那么,FLT指令和INT指令有什么用呢?


这是因为有的PLC不能直接输入浮点数,例如FX 2N的PLC,但它又能进行浮点数运算。所以FX 2N的PLC想进行浮点数运算,就得先输入整数,再通过FLT指令将整数转换为浮点数,进而参与浮点数运算。


另外,虽然有的PLC不能直接输入浮点数,但如果输入的是K、H常数,浮点数运算指令会直接将其转换为浮点数。例如DEADD K10 H10 D0可以在FX 2N的PLC中输入,但DEADD E10.0 H10 D0却不能输入。



这里有一点要注意的是,常数通过FLT指令转换为浮点数之后,它原本的值其实是没有变的,例如把10转换为浮点数就是10.000。但有时候我们要输入的本身就是小数,如0.5,显然直接用FLT指令是不行的,那这该怎么办呢?


这时候我们可以先把0.5乘以10变为整数5,然后再用FLT指令转换为浮点数5.000,后除以10就是0.500了,如下图所示。




而INT指令实则为取整指令,也就是说将浮点数的小数部分去掉,只取整数部分的值。但在这里也要注意的一点是,INT指令的执行会影响到3个标志位。例如,若浮点数整数部分为0,用INT指令取整后结果为“0”,同时借位标志位M8021=ON,如下图所示。




若浮点数本身为0.000,用INT指令取整后结果亦为“0”,同时标志位M8020=ON,如下图所示。当然,若取整后结果溢出,标志位M8022=ON,在此不再举例。




除此之外,与浮点数相关的指令还有十进制浮点数与二进制浮点数相互转换指令EBCD、EBIN,但因为对于目前还是小白的我而言,它们的应用比较**,我也就不展开讲解了。简单来说,EBCD指令就是将二进制浮点数转换为十进制浮点数,而EBIN指令就是将十进制浮点数转换为二进制浮点数。


分享完浮点数运算指令后,我们继续往下看逻辑位运算的相关指令。


二、逻辑位运算指令

在学习逻辑位运算指令之前,我们先来了解一下什么是逻辑位运算。


所谓逻辑位运算,简单来说就是将数据按位处理,而“运算”其实就是我在初所分享的数字电路基础中所提到的与、或、非、异或、同或等的逻辑运算。至于什么是与或非,在此我也不再赘述,不知道的,可以去看我之前写的第1篇有关数字电路基础的文章。


1、位与、位或、按位异或◤位与,就是将参与运算的字软元件的各个二进制位相与,如下图所示,相对应的两位都为1(11) ,结果就为1,其余时候结果为0。同理,位或,就是将参与运算的字软元件的各个二进制位相或,如下图所示,相对应的两位只要有一个1(01、10、11) ,结果就为1,其余时候结果为0。按位异或,就是将参与运算的字软元件的各个二进制位相异或,如下图所示,相对应的两位不同(10、10) ,结果就为1,其余时候结果为0




2、逻辑位运算的对应的指令◤逻辑位运算的对应指令有逻辑字与指令WAND、逻辑字或指令WOR、逻辑字异或指令WXOR,其在编程手册的截图如下所示。




从编程手册截图中可以看到,这几个指令可以用于16位,也可以用于32位,可以是连续执行型,也可以是脉冲执行型。它们的适应软元件为对应字元件。


WAND、WOR、WXOR指令的梯形图形式如下图所示,例如对WEND指令有,当驱动条件成立,(S1)与(S2)=(D),将S1中的16个二进制位和S2中的对应16个二进制位相与,然后把结果存放到D中。WOR、WXOR指令同理。




总的来说,逻辑位指令的理解比较简单,前提是我们要理解与、或、异或的运算过程。逻辑位运算指令的应用也相对简单,例如可以用WAND指令对数据寄存器的内容清零,用WOR指令对数据寄存器的内容置1等。


即执行指令WAND K0 D0 D0 ,将D0的内容清零;指令指令WAND H00FF D0 D10,将D0的高8位存到D10中;执行指令WOR HFFFF D0 D0,将D0的内容置全1。


异或指令WXOR对数据的处理不是很直观,例如指令指令WXOR H00FF D0 D0,我们不能直接简单地说这是将D0的内容置1、清0,但可以用一句话总结它的规律:与1异或,该位翻转;与0异或,该位不变。也就是说,用1异或,就可以将对应位的值取反;用0异或,则表示保留对应位的值,使其不变,如下图所示。




类似以上的逻辑位运算指令,即将字软元件的内容按位进行处理,其实还有我在上篇文章所提到的求补码指令NEG。

邢台西门子授权PLC模块总代理(中国代理商)                              邢台西门子授权PLC模块总代理(中国代理商)

展开全文