西门子PLC处理64位浮点数几个方法
01主程序调用:
64位浮点数保存于VB0开始的存储区之中,转换得出的32位浮点数保存于VD100存储区中。
02子程序符号表:
03子程序网络1:
1、把64位精度浮点数的高16位读取出来;2、左移1位,右移5位之后取到64位浮点数的指数部分;3、用64位浮点数的指数减去1023,再加上127得到32位浮点数的指数部分。
04子程序网络2:
取出64位浮点数的高8位
05子程序网络3:
把64位浮点数指针后移一个字节
06子程序网络4:
左移4位,右移8位得到32位浮点数的小数部分
07子程序网络5:
把32位浮点数的指数部分加上,右移1位空出符号位
08子程序网络6:
传送浮点数的符号位
09子程序网络7:
最终结果暂存于LD4中
获取“(西门子系列)PLC原理及应用.pdf”资料方法--->(西门子系列)电气控制与PLC原理及应用第二版 关注电子技术控!点赞和在看
了解 PLC 编程中的浮点数
PLC 必须处理三种主要类型的数值:布尔值、整数和浮点数。这些最后的浮点数可能会给程序员和技术人员带来最大的困惑。
任何包含处理器的数字控制系统都被设计为接收输入值,使用这些值计算解决方案,然后使用这些计算向其他设备提供输出。此过程中每个步骤使用的数字必须仔细选择 - 不仅足够精确以提供正确的输出值,而且还足够小,以免消耗太多有限的可用内存空间。
数字的主要类别
数字属于三个主要的值类别:
一位二进制数 多位整数 浮点数单位布尔值只能保存 0 或 1 值。这些布尔值非常适合传感器和开关输入以及线圈输出。
多位整数通常是 8、16 或 32 个连续位,并且只能保存整数值。使用这些数字可以存储或计算的最大值受到位数的限制。较大的数字需要更多的位数,但也会消耗更多的内存。
图 1.PLC上的模拟输入需要使用浮点数,以确保正确读取温度、压力或光线等实际值。
最后一个类别经常出现在表示现实生活中的值时,例如温度、速度或压力。这些类型的值不限于整数,因为以一定的精度了解该值通常很重要。
例如,测量压力时,了解 15.1 Mpa 和 15.8 Mpa 之间的变化可能很重要。如果我们将值限制为整数,它们都会显示为 15 Mpa,从而失去精度。
这种数据类型的名称是“浮点十进制”数字,在编程软件中通常称为“浮点数”或“实数”数据类型。
32 位浮点数的 IEEE 754 结构
通常没有必要理解与实际值和二进制浮点等效值之间转换相关的每个数学运算。与许多数字转换的情况一样,这是一个复杂的过程,如果需要可以进行研究。但这并不意味着整个概念应该被忽略。
在本文中,这些数字将被称为浮点数。但是,如果您是 RSLogix 用户或该术语的任何其他适当的标题,您可以在心里将其转换为真实的。
PLC 中的浮点数由 32 位组成。在许多现代计算机处理器中,可以使用 64 位,但对于几乎所有 PLC,32 位是标准。这意味着就内存容量而言,浮点数不会比 32 位整数(例如 double 或 DINT)消耗更多空间。有时,两个 32 位数字可以组合起来形成一个 64 位浮点值。
浮点数的组成部分
浮点数由三个部分组成,每个部分使用 32 位的一部分。
符号位
第一位是符号位,用于标识它是正值还是负值。温度很容易为负值,如果真空表示为表压值,压力也可能为负值。速度可以是正/负,也可以使用 CW/CCW 或类似术语来区分。第一位标识正或负。
下表显示了 32 位浮点数的示例细分。此示例显示了可能的最小正值,指数为 1,尾数为 0。
表 1. 32 位浮点数的示例细分
符号位
指数
尾数
0
00000001
00000000000000000000000
正指数和负指数
浮点数的第二部分是使用 8 位的指数。数字的这一部分负责小数点的实际位置,因为这会对数字的大小产生巨大的差异。考虑数字 375 - 没有小数位,它是一个整数,一个整数,一个整数。如果我们把小数点放在开头,它是 0.375,但换个位置,它可能是 37.5——小数点的位置非常重要。
指数可以是正数或负数。正指数表示数字大于 1。负指数表示小于 1。在 32 位浮点数中,八个指数位给出的值范围是 0 到 255。但是,正值和负值都必须是可能的,因此指数实际上计算如下:
2^(指数 - 127)
0 和 255 的极端指数值保留给 0 和无穷大,因此对于数字转换,我们可以使用 1 到 254。
尾数
使用剩余 23 位的浮点数的最后也是最大的部分实际上显示了该值中包含的数字。这在技术上称为“尾数”,由任何浮点数中小数点后面的数字组成。当所有位都为 0 时,或者当所有位都为 1 时,通过使用二进制逆来找到尾数的极限范围,如下所示:
2 - 2^(0)
和
2 - 2^(-23)
PLC 数据类型表中浮点数的总范围是通过尾数乘以指数得出的。两者中的最小者找到最小的浮点值。两者中最大的找到最大的浮点值。
2 - 2^0 x 2^(1-127) = 1.1754944*10^-38
和
2 - 2^(-23) x 2^(256-127) = 3.4028235*10^38
浮点数的限制
与整数值相比,浮点数的主要谨慎考虑可能是计算解决方案的额外时间。在一个具体示例中,根据 Rockwell Automation 针对 ControlLogix 处理器的文档,执行 REAL 数据类型的 ADD 计算所需的时间比执行 DINT 相同 ADD 的时间长约 6.5 倍。
图 2.数据表摘录,在罗克韦尔自动化的 ControlLogix 或 CompactLogix 处理器上使用 32 位 DINT 与 32 位 REAL 数据类型的 ADD 指令时间。
有时,浮点数是必要的,但是处理指令的额外时间应该强烈提醒我们在合理的情况下考虑使用整数。
某些情况下的另一个潜在问题是无法真正处理绝对精确的值。对于整数,例如数数,您可以数 100 个项目,但最终永远不会数到 100.5 个项目。因此,它很容易显示为 100,没有理由显示 100.0000000 个项目。
然而,对于需要非常大精度的值(这意味着尾数非常大),该值可能会被舍入。对于许多系统来说,这可能不是问题,但当系统必须定期测量大模拟值时,舍入误差可能会导致问题。
相关问答
PLC单精浮点数如何转为十进制数?
看了一下这个问题好像还没有人答对,我来回答一下!结合图片看了你的问题,其实你的问题就是你接收的到的32位数据是450F9000,而且你知道这个数据其实是单精度...
plc浮点数用法?
PLC浮点数用法是指在PLC编程中使用浮点数数据类型的方法。浮点数是一种用于表示带有小数部分的数值的数据类型。在PLC编程中,浮点数通常用于处理需要精确计算...
三菱PLC的串点比较指令可以比较浮点数吗?-ZOL问答
三菱PLC的串点比较指令可以比较浮点数吗就目前来说三菱FX3系列的PLC不支持浮点数的触点比较指令,只支持整型数据的触点比较,不过这个我们采用浮点数比较指令EC...
西门子plc浮点数表示方法?
西门子的PLC浮点数表示方法采用IEEE754标准,分为单精度和双精度浮点数。单精度浮点数占用四个字节,双精度浮点数占用八个字节。在PLC编程中,浮点数用于表示小...
单精度浮点数整数部分的最大范围?
Float.MAX_VALUE,即(2-2-23)·2127。Double.MAX_VALUE,最大正有限值为(2-2-52)·21023。用来表示带有小数部分的实数,一般用于科学计算。占用4...
plc中浮点是什么意思?
1.在PLC中,浮点是一种数据类型,用于表示带有小数部分的数值。2.原因是浮点数可以用于处理需要更高精度的计算,例如涉及到测量、控制和科学计算等领域。相比...
三菱PLC二进制浮点数怎么计算的,高低位怎么处理?
浮点就是小数运算FLT整数转为小数INT是小数变为整数浮点就是小数运算FLT整数转为小数INT是小数变为整数
欧姆龙PLC浮点数怎么比较?特别是有正负号时怎么处理?
没明白你什么意思,就是正常的比较指令啊,只不过指令加了个F表示浮点而已。同样可以调用寄存器或者直接同常数进行比较啊。什么正负号怎么处理,不用处理啊,你...
三菱plc的脉冲数用浮点运算怎么写?
在三菱PLC中,脉冲数可以用浮点数进行运算。具体实现方法为,将脉冲数先作为整数数据类型进行输入,然后将其转换为浮点数类型,即可进行各种浮点数的计算。要注...
plc中实数是如何存储的?
在PLC(可编程逻辑控制器)中,实数(浮点数)通常使用IEEE754标准进行存储。IEEE754是一种广泛应用于计算机和PLC系统中的浮点数表示方法。根据IEEE754标准...