登录
首页
PLC论坛
PLC论坛
回帖
发帖
正文
主题:30X1000=29999.994是认真的么
点击:176 回复:8
楼主
编辑
引用
管理
czhaii
FX3U 32位浮点数 怎么会算出29999.994来的呢
不知道点了什么地方 每次编译程序要提示无法与PLC通信
而且输入行注释也不好使了
运行DDRVI 会出现+1 或者-1我也忍了
不知道高手会遇到多少不可理喻的过程
简直不能想象
25-06-02 07:52
1楼
编辑
引用
管理
bnnyygy
三菱 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
2楼
编辑
引用
管理
cvlsam
引用
czhaii
在 2025/6/2 7:52:28 发言
【内容省略】
你可以看下:
https://www.cnblogs.com/ofnoname/p/15839927.html
了解一下IEEE754浮点数的精度和误差。
Good Luck~
25-06-02 08:16
3楼
编辑
引用
管理
YXBK
不知道点了什么地方 每次编译程序要提示无法与PLC通信
点击 工具 选项,是不是红圈位置打勾了
关于注释的设置也在 工具 选项 里面
最后修改:
2025/6/2 8:25:11
25-06-02 08:20
4楼
编辑
引用
管理
981183833
是不是版本不对,还是你程序上哪里赋值不对,你单写一小段程序试试看
25-06-02 08:45
5楼
编辑
引用
管理
ytleaderplc
没有看到这样的问题
25-06-02 09:35
6楼
编辑
引用
管理
czhaii
我是把1000和5存储在寄存器中的
代表伺服电机每圈1000脉冲数
每圈5mm螺距
因为出现了小数点
所以导致DDRVI不能执行完毕
有时+1,有时-1.
25-06-02 10:20
7楼
编辑
引用
管理
YXBK
监看一下实际数据到底是多少,在监看里可以看到小数点后面很多位的
我把5改成5.00001就变成29999.994了
最后修改:
2025/6/2 10:41:07
25-06-02 10:39
8楼
编辑
引用
管理
czhaii
我都没有勾选那选项
不知道咋点上了
去掉就好了
现在我DDRVI暂时用等于来停机
好像小数点0.006也可以通过
有时间再想办法
谢谢大家
25-06-02 21:47
工控新闻
重新定义性价比!兆易创新GD32C231系列MCU强势推出
双展联动 台达以数智化赋能行业转型升级
皮尔磁:创新的传感器技术打造高效自动化
手机厂商纷纷布局机器人业务
华南工博会直击丨具身集合齐登场,仙工智能展台全场景解锁
上市十年首现巨亏后 埃斯顿寻求“A+H”股上市
机器视觉龙头IPO获受理
上海电气与三菱电机共谋合作发展新增长极
更多新闻资讯