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
    +关注

    关注

    5045

    文章

    14443

    浏览量

    483582
  • 浮点数
    +关注

    关注

    0

    文章

    62

    浏览量

    16354
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用VScode的PIO开发GD32VF103,但是串口无法打印浮点数怎么解决?

    我最近在使用VScode的PIO开发GD32V,使用的是longan的模板,但是我将串口输出重定义到printf函数,发现无法使用%f输出浮点数,想问问应该怎么配置,我看到的一种说法是在
    发表于 11-06 06:49

    点数表示实数的方法以及定点数在硬件上的运算验证

    ’b110_0000_0000_0000_0000_0000时,表示为十进制小数0.75( 2^(-1)+2^(-2) )。E是指数,为了能够表示负指数、IEEE754标准规定浮点数的实际指数为E-127。从32位浮点数编码结
    发表于 10-28 08:13

    E203添加浮点数方法:译码和派遣模块设计

    的数据来自于整数寄存器还是浮点数寄存器。 派遣模块与其他模块的连接方式如下图: 左图只选取了有代表性的信号展示出来,即只展示了源操作数和写寄存器的地址是如何在这些模块传递的。右图是 dispatch
    发表于 10-24 13:54

    浮点指令(三)

    Convert to Single from Double). R-type, RV32D and RV64D. 把寄存器 f[rs1]的双精度浮点数转化为单精度浮点数,再写入 f[rd]
    发表于 10-24 13:38

    E203添加浮点数方法:FPU控制逻辑

    指令的全部运算都集中在了 FPU 当中。对于指令周期的设计,笔者将除了除法、开方和浮点数存取指令以外的指令都设计为单周期指令(实际为2周期,原因在于 OITF 的原理),这也是为什么原 E203 代码
    发表于 10-24 13:28

    蜂鸟E203扩展浮点指令设计(2)

    fmv.w.x rd, rs1 • fmv.x.w 指令将通用浮点寄存器 rs1的单精度浮点数读出,然后写回通用整数寄存rd。 • fmv.w.x 指令将通用整数寄存器 rs1
    发表于 10-24 11:56

    蜂鸟E203扩展浮点指令设计(1)

    )相加所得。 • flw 指令从存储器读回一个单精度浮点数,写回寄存器 rd 。 • fsw 指令将操作数寄存器 rs2 的单精度浮点数
    发表于 10-24 10:00

    浮点数是如何实现开平方运算的

    1位。 ###### 浮点数的平方根运算步骤为:浮点数的平方根运算步骤为: 1.从指数减去偏置分量,求绝对差。 2.将结果右移一位,然后计算最后的指数。 3.找到尾数的平方根,考虑隐藏的部分
    发表于 10-24 08:42

    risc-v浮点运算单元的使用及其设计考虑

    的应用。 在RISC-V浮点运算单元分为单精度浮点数(32位)和双精度浮点数(64位),通常包括以下几种基本功能: 加法器/减法器:用于执行浮点
    发表于 10-21 14:46

    大彩讲堂:VisualHMI-LUA教程-获取设置单精度浮点数函数的应用

    软件开发各种协议对浮点数数据进行获取和赋值处理。get_float(vtype,addr)读取单精度浮点数(float)寄存器,返回有符号单精度浮点数·vtype:数
    的头像 发表于 10-16 00:00 1237次阅读
    大彩讲堂:VisualHMI-LUA教程-获取设置单精度<b class='flag-5'>浮点数</b>函数的应用

    PRINTF函数无法打印出浮点数内容是为什么?

    1、MCXN947低功耗adc,历程中使用官方提供的PRINTF无法打印出浮点数内容。 2、同样在mcuxpresso ide 也不可以打印浮点数,这是为什么呢? 3、使用的历程是lpadc历程。
    发表于 03-20 08:06

    设计了一个基于浮点数运算的协处理器,使用C语言编程时没法输入float型数据,请问有哪些部分需要修改?

    我设计了一个基于浮点数运算的协处理器,使用C语言编程时没法输入float型数据,请问有哪些部分需要修改?SDK,EXU_decoder浮点寄存器都需要修改吗,谢谢
    发表于 03-07 16:03

    labview数据类型与PLC 数据类型之间的转换(来自于写入浮点数到汇川 PLC的数据转换关键的修改)

    为32位无符号整型U32 2、将U32拆分为两个U16,分高低位写入PLC 3、在PLC,将低位寄存器设置为浮点数数据类型 4、结果:PLC
    发表于 02-24 19:01

    西门子TIA Portal如何比较两个浮点数相等

    概述: 由于浮点数的定义规则,导致浮点数不能通过二进制精确表示,所以在浮点数计算过程,会出现两个值一样的浮点数进行比较相等计算时结果并不相
    的头像 发表于 01-06 10:07 1169次阅读
    西门子TIA Portal如何比较两个<b class='flag-5'>浮点数</b>相等

    ADS1282采集到的数据传到PC上应该怎么转为浮点数

    我最近在用ADS1282,采集到的数据传到PC上应该怎么转为浮点数?比如说通过串口调试助手收到一个采样点的数据为 FF FF 9D 17,它的真实浮点数是多少呢?我知道ADC是以补码形式存的,是要将数据倒转为17 9D FF FF,再与上0xFF,再float()吗?还
    发表于 12-13 06:23