0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深度剖析PLC编程中的浮点数

科技观察员 来源:allaboutcircuits 作者:大卫 ·彼得森 2022-04-29 16:20 次阅读

PLC 必须处理三种主要类型的值:布尔值、整数和浮点数。这些最后的浮点值会给程序员和技术人员带来最大的困惑。

任何包含处理器的数字控制系统都旨在接收输入值,使用这些值计算解决方案,然后使用这些计算向其他设备提供输出。必须仔细选择此过程中每个步骤使用的数字——不仅要足够精确以提供正确的输出值,而且要足够小,以免占用太多有限的可用内存空间。

数字的主要类别

数字数字适合三个主要类别的值:

一位“布尔”数字

多位整数

“浮点小数”数字

一位布尔数字只能保存 0 或 1 的值。这些布尔值非常适合传感器和开关输入以及线圈输出。

多位整数通常是 8、16 或 32 个连续位,并且只能保存整数值。可以使用这些数字存储或计算的最大值受位数限制。较大的数字需要更多的位,但也会消耗更多的内存。

最后一个类别经常出现在表示实际值时,例如温度、速度或压力。这些类型的值不限于整数,因为以某种精度知道值通常至关重要。

例如,测量压力时,了解 15.1 psi 和 15.8 psi 之间的变化可能很重要。如果我们将值限制为整数,它们都将显示为 15 psi,失去该精度。

这种数据类型的名称是“浮点十进制”数字,在编程软件中通常称为“浮点”或“实数”数据类型。

浮点数的结构

通常没有必要理解在实际值和二进制浮点等效值之间进行转换所涉及的每个数学运算。与许多数字转换一样,这是一个复杂的过程,可以根据需要进行研究。但这并不意味着应该忽略整个概念。

在本文中,这些数字将被称为浮点数。但是,如果您是 RSLogix 用户或该术语的任何其他适当头衔,则可以在心理上将其转换为真实的。

浮点数由 PLC 中的 32 位组成。在许多现代计算机处理器中,可能使用 64 位,但对于几乎所有 PLC,32 位是标准。这意味着就内存容量而言,浮点数不会比 32 位整数(例如 double 或 DINT)消耗更多空间。有时,两个 32 位数字可以组合成一个 64 位浮点值。

浮标的一部分

浮点数由三个部分组成,每个部分使用 32 位的一部分。第一位是符号位,用于标识它是正值还是负值。如果将真空表示为仪表值,则温度很容易为负数,压力也可以为负数。速度可能是正的/负的,也可能是使用 CW/CCW 或类似的术语来区分的。第一位标识正面或负面。

下表显示了 32 位浮点数的示例分解。此示例显示可能的最小正值,指数为 1,尾数为 0。

pYYBAGJrn7OAIrqcAAAbz0CxMK4169.png

poYBAGJrn5-AWZS7AAD5WrNe86U957.png

浮点数的限制

与整数值相比,浮点数的主要注意事项可能是计算解的额外时间。在一个具体示例中,根据罗克韦尔自动化针对 ControlLogix 处理器的文档,使用 REAL 数据类型的 ADD 计算的执行时间比 DINT 的相同 ADD 长约 6.5 倍。

pYYBAGJrn9yAeqcrAABHhnQgaS4382.jpg

图 2.数据表摘录比较使用 32 位 DINT 和 32 位 REAL 数据类型的 ADD 指令时间。

有时,浮点数是必要的,但处理指令的额外时间应该是一个坚定的提醒,在合理的情况下考虑使用整数。

某些情况下的另一个潜在问题是无法真正处理绝对精确的值。对于整数,比如数数,你可以数 100 个项目,但你永远不会数到 100.5 个项目。因此,它可以很容易地显示为 100,没有理由显示 100.0000000 个项目。

但是,对于需要非常大精度的值(这意味着尾数非常大),该值可能会被四舍五入。对于许多系统来说这可能不是问题,但是当系统必须定期测量大的模拟值时,舍入误差可能会导致问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • plc
    plc
    +关注

    关注

    5008

    文章

    13150

    浏览量

    462018
  • 浮点数
    +关注

    关注

    0

    文章

    60

    浏览量

    15864
收藏 人收藏

    评论

    相关推荐

    TLV320AIC3106音频芯片怎么发送、接收浮点数呢?

    TLV320AIC3106 音频芯片怎么发送、接收浮点数呢?是把浮点数转成整数吗?如果是该怎么转呢? 经AD采样后得到的是整数,又该怎么转换成原始的浮点数呢?
    发表于 11-05 07:13

    labview浮点数与十六进制字符串相互转化

    与下位机数据交流及通讯时,经常有浮点数与十六进制字符串相互转化的需求,经过两天总结,找到了最简洁的相互转化的方法,萌新欢迎大佬指正,文件也附上。*附件:HEX字符串与浮点数转换.rar
    发表于 10-21 19:51

    TMS320C6745浮点数字信号处理器技术简介

    电子发烧友网站提供《TMS320C6745浮点数字信号处理器技术简介.pdf》资料免费下载
    发表于 10-09 09:34 0次下载
    TMS320C6745<b class='flag-5'>浮点数</b>字信号处理器技术简介

    分享在arduino 单片机浮点数转换位数不够,精度丢失的解决办法

    arduino由于硬件限制,浮点数只有2位小数。但经过这个函数处理可以达到7位
    的头像 发表于 08-27 14:34 559次阅读

    官方例程modbus slave rtu,浮点数精度不对是怎么回事?

    官方例程 modbus slave rtu, 浮点数精度不对,对保持寄存器设置一个浮点数,读取到的浮点数结果精度只能到小数点后两位,根本无法使用,用的是idf 5.1.2版本,开发环境是vscode。
    发表于 07-19 08:10

    请问如何打印浮点数或双精度变量?

    如何打印浮点数或双精度变量?
    发表于 07-12 08:24

    ESP8266_RTOS_SDK如何打印浮点数

    不适用于浮点数; 我的假设是编译器没有启用浮点? 如果是这种情况,我不确定要启用什么标志? 编译器版本: xtensa-lx106-elf-gcc --版本
    发表于 07-09 06:56

    如何关闭ESP32-S3的FPU浮点数计算单元?

    如何关闭ESP32-S3的FPU浮点数计算单元。如题,之前的项目在esp32s2 上面运行良好,但是移植到esp32s3上后由于fpu造成浮点数计算无法在中断中使用,并且也不能跨cpu去使用,对固件性能和稳定性造成了很大的影响
    发表于 06-27 07:32

    STM32CubeIDE printf浮点数浮点数丢失数值的原因?

    1、芯片:STM32F103C8T62、环境:STM32CubeIDE3、问题:printf浮点数浮点数数值丢失如 float A=25.6666;float B=24.7777;实际打印
    发表于 06-03 07:07

    一文带你秒懂IEEE 754浮点数

    一、简介1、常见的浮点数表示方式是IEEE754标准,它规定了浮点数的存储格式和运算规则,这个标准定义了两种浮点数表示:单精度和双精度。2、任何一个浮点数的二进制数可以写为:NUM=(
    的头像 发表于 03-18 08:09 8338次阅读
    一文带你秒懂IEEE 754<b class='flag-5'>浮点数</b>

    modbus浮点数怎么读取

    Modbus是一种通信协议,常用于工业自动化系统的设备之间的通信。它支持多种数据类型,包括整数、浮点数、字符串等。浮点数在工业领域中广泛应用,因此了解如何读取和处理Modbus浮点数
    的头像 发表于 12-28 14:38 5846次阅读

    单精度和双精度浮点数的区别

    单精度和双精度是计算机中表示浮点数的两种不同的精度。在计算机浮点数用来表示带有小数部分的实数,而单精度和双精度用来表示浮点数的精确程度不同。在以下文章
    的头像 发表于 12-15 10:25 5244次阅读

    单精度和双精度浮点数的区别

    在计算机科学和数值计算浮点数是一种用于表示实数的数据类型。浮点数有两种精度级别:单精度和双精度。这两种精度级别在表示范围、精度和存储空间等方面都有所不同。本文将详细介绍单精度和双精度浮点数
    的头像 发表于 12-13 10:55 1w次阅读

    缝缝补补的浮点数进制转换器

    [浮点数]()在计算机科学是一种重要的数据类型,用于表示实数。其中,FP32和FP16是两种常见的浮点数格式,分别占用32位和16位。
    的头像 发表于 12-04 14:00 1422次阅读
    缝缝补补的<b class='flag-5'>浮点数</b>进制转换器

    请问ADSP-21469的汇编指令集ISA/VISA中有没有专门用来进行浮点数和定点数转换的指令?

    得到的ADC数据需要进行定点数浮点数的转换,为了节省开销,想使用汇编程序进行定点和浮点之间的转换。请问ADSP-21469的汇编指令集ISA/VISA中有没有专门用来进行
    发表于 11-29 08:03