登录
首页 PLC论坛 PLC论坛
回帖 发帖
正文

主题:30X1000=29999.994是认真的么

点击:176 回复:8


附件 负数.jpg
FX3U 32位浮点数  怎么会算出29999.994来的呢
附件 写警告.jpg
不知道点了什么地方 每次编译程序要提示无法与PLC通信
而且输入行注释也不好使了
附件 余-1.jpg
运行DDRVI 会出现+1 或者-1我也忍了
不知道高手会遇到多少不可理喻的过程
简直不能想象
25-06-02 07:52
三菱 PLC 中出现30*1000=29999.994的计算误差,主要与浮点数在计算机中的二进制表示方式有关。以下是详细解释和解决方案:
原因分析
浮点数二进制存储的精度限制
浮点数(如三菱 PLC 使用的 IEEE 754 单精度浮点数)在计算机中以二进制形式存储,无法精确表示所有十进制小数。例如,某些十进制小数会转换为无限循环的二进制小数,导致舍入误差。
舍入误差的累积
乘法运算可能放大这种误差。当两个浮点数相乘时,中间结果可能超出精度范围,最终导致结果偏离预期。
浮点数比较的陷阱
直接比较浮点数是否 “等于” 某个值(如29999.994 == 30000)通常是不可靠的,因为即使微小的误差也会导致比较失败。
解决方案
1. 使用整数运算替代浮点数
如果精度要求高,尽量使用整数运算。例如:
plaintext
// 原错误计算:30.0 * 1000.0(浮点数)
// 修正为:30 * 1000(整数)
// 结果:30000(无误差)
2. 调整浮点数精度
如果必须使用浮点数,可通过以下方式减少误差:
设置容差值(Epsilon):在比较浮点数时,允许一个极小的误差范围。例如:
plaintext
// 判断两个浮点数是否“近似相等”
if (|A - B| < 0.001) {
   // A和B在误差范围内相等
}
四舍五入处理结果:在显示或使用结果前,将浮点数舍入到所需精度。
3. 检查 PLC 程序中的数据类型
确保参与运算的变量均为浮点数类型(如三菱 PLC 中的D寄存器 + 浮点数指令)。
避免在整数和浮点数之间频繁转换,可能导致额外的精度损失。
4. 优化运算顺序
对于复杂计算,调整运算顺序以减少误差累积。例如,先进行除法再乘法,可能比先乘后除更精确。
示例代码(三菱 FX 系列 PLC)
以下是使用整数运算替代浮点数的示例:
plaintext
// 错误示例:浮点数运算
LD D0      // 假设D0=30.0(浮点数)
MUL D2     // 假设D2=1000.0(浮点数)
OUT D4     // 结果:D4=29999.994
// 正确示例:整数运算
LD K30     // 30(整数)
MUL D100   // 假设D100=1000(整数)
OUT D102   // 结果:D102=30000(无误差)
总结
浮点数误差是计算机运算的固有特性,无法完全消除,但可以通过合理的数据类型选择和算法优化来控制。在工业控制场景中,建议优先使用整数运算以确保精度。
25-06-02 08:12

引用 czhaii 在 2025/6/2 7:52:28 发言【内容省略】

你可以看下:https://www.cnblogs.com/ofnoname/p/15839927.html
了解一下IEEE754浮点数的精度和误差。
Good Luck~
25-06-02 08:16
不知道点了什么地方 每次编译程序要提示无法与PLC通信
点击 工具  选项,是不是红圈位置打勾了
附件 微信截图_20250602081850.jpg
关于注释的设置也在 工具 选项  里面
附件 微信截图_20250602082412.jpg
最后修改:2025/6/2 8:25:11
25-06-02 08:20
附件 微信图片_20250602084410.jpg
是不是版本不对,还是你程序上哪里赋值不对,你单写一小段程序试试看
25-06-02 08:45
附件 250602.jpg
没有看到这样的问题
25-06-02 09:35
我是把1000和5存储在寄存器中的
代表伺服电机每圈1000脉冲数
每圈5mm螺距
因为出现了小数点
所以导致DDRVI不能执行完毕
有时+1,有时-1.
25-06-02 10:20
监看一下实际数据到底是多少,在监看里可以看到小数点后面很多位的
我把5改成5.00001就变成29999.994了
附件 微信截图_20250602103619.jpg
最后修改:2025/6/2 10:41:07
25-06-02 10:39
我都没有勾选那选项
不知道咋点上了
去掉就好了
现在我DDRVI暂时用等于来停机
好像小数点0.006也可以通过
有时间再想办法
谢谢大家
25-06-02 21:47

工控新闻

更多新闻资讯