西门子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中浮点是什么意思?
在PLC(可编程逻辑控制器)中,浮点数是一种数据类型,用于存储实数(即带有小数点的数字)。浮点数通常用于需要高精度计算的应用程序中,例如控制系统中的PID控...
浮点数精度?
浮点数的精度指的是小数点后的有效数字位数,是由尾数的位数来决定的,对于单精度(float),它的尾数为23位,而2^23=8388608,共7位,也就是说最多能有7位有效...浮...
PLC单精浮点数如何转为十进制数?
看了一下这个问题好像还没有人答对,我来回答一下!结合图片看了你的问题,其实你的问题就是你接收的到的32位数据是450F9000,而且你知道这个数据其实是单精度...
c++设置浮点输出精度是什么意思-FEMALEOTAKU的回答-懂得
std::cout.precision(5);precision--英文意思是精度。这里是设输出数值为十进制数保留5个“有效”数字。有效数字是术语。例如:doublef=123.1415926...
c++能够设置浮点精度的是?
1、包含头文件1、包含头文件,附注manip是manipulator,操控的简写。2、第一种写法:cout<
显卡的浮点精度有什么用?-懂得
游戏卡和作图卡浮点运算不同这个数据只能测出来这个你还是百度去吧,上面给出来的信息内容很多
c语言中三精度浮点数怎么表示?
在C语言中,三精度浮点数可以使用longdouble类型来表示。longdouble类型通常占用12个字节(96位),比double类型的8个字节(64位)要大。它可以提供更高的精度...
定点和浮点有什么区别?
(1)定义:数据中小数点位置固定不变的数(2)种类:定点整数(3)小数点在符号位与有效位之间。注:定点数受字长的限制,超出范围会有溢出。2、浮点数:...注:定...
单精度浮点数整数部分的最大范围?
用来表示带有小数部分的实数,一般用于科学计算。占用4个字节(32位)存储空间,包括符号位1位,阶码8位,尾数23位。其数值范围为-3.4E38~3.4E38,单精度浮点数最...
PLC编程中的进制数该如何表示?相互之间又是如何转换的?
PLC也是一台微电脑,许多功能指令离不开进制转换,同时也是为了增加程序的可读性,想要对PLC进行编程,那么必须得清楚数制的设置以及转化和对应的符号。当然,...1...