浮点值

此信息适用于
CompactLogix
5370、
ControlLogix
5570、
Compact GuardLogix
5370、
GuardLogix
5570、
Compact GuardLogix
5380、
CompactLogix
5380、
ControlLogix
5580、
GuardLogix
5580 和 ControlLogix 5590 控制器。在适用的情况下会注明控制器的差异。
Logix 控制器根据 IEEE 754 浮点数算术标准处理浮点值。该标准规定了浮点数的存储和计算方法。IEEE 754 浮点数运算标准的设计宗旨是,能够在合理的存储空间内迅速处理超大量的数字。
REAL 标签存储单精度型归一化浮点数。
LEAL 标签存储双精度型归一化浮点数。
控制器支持以下基本数据类型:
控制器
数据类型
CompactLogix
5380、
ControlLogix
5580、
Compact GuardLogix
5380、
GuardLogix
5580 和 ControlLogix 5590 控制器
REAL, LREAL
CompactLogix 5370、ControlLogix 5570、Compact GuardLogix 5370 和 GuardLogix 5570 控制器
REAL
非归一化数值和 -0.0 按 0.0 处理
如果计算结果为 NAN 值,则符号位可以为正或负。这种情况下,软件会显示无符号的 1#.NAN。
并非所有十进制数值都能以这种标准格式准确表示,可能会出现精度损失。例如,10.1 减去 10,结果应为 0.1。但在 Logix 控制器中,结果可能是 0.10000038。在本例中,0.1 与 0.10000038 相差 0.000038%,近似为零。对大多数运算而言,这种细微的不精确性并不重要。从更深层次看,将一个浮点值发送给一个模拟输出模块,与发送一个相差 0.000038% 的值相比,不会引起输出电压的差异。
浮点数算术运算法则
运算法则如下:
执行某些浮点算术运算时,可能会因四舍五入误差而造成精度损失。浮点数处理器的内在精度会影响结果值。
不应对金额或累加器函数使用浮点运算。应使用 INT 或 DINT 值,放大数值并跟踪小数位(或者对美元使用一个 INT 或 DINT 值,对美分使用另一个 INT 或 DINT 值)。
不应比较浮点数。但可以检查数值是否在某个范围内。LIM 指令专用于此用途。
累加器示例
REAL 数据类型的精度会影响累加运算,在将超小数与超大数相加时,将出现误差。
例如,在一段时间内,将某个值与 1 累加。到了某个点,由于中间总和值远大于 1,加法运算不再对结果产生影响,而且没有足够的位来存储整个结果。加法运算会存储尽可能多的高位,而丢弃其余的低位。
为解决这个问题,可先累加小数值,直到获得较大结果。然后将结果传输到其他位置,进行进一步的大数值运算。例如:
  • x 为小增量变量。
  • y 为大增量变量。
  • Z 为可在任何位置使用的当前总计数。
  • x = x+1;
  • if x = 100,000;
  • {
  • y = y + 100,000;
  • x = 0;
  • }
  • z = y + x;
另一个示例:
  • x = x + some_tiny_number;
  • if (x >= 100)
  • {
  • z = z + 100;
  • x = x - 100; // there might be a tiny remainder
  • }
提供反馈
对本文档有问题或反馈吗? 请在这里提交您的反馈
Normal