工控编程吧

标题: 一个比较大的浮点数累加一个较小的浮点数之和却没有增加 [打印本页]

作者: baikhgmv    时间: 2016-9-27 13:36
标题: 一个比较大的浮点数累加一个较小的浮点数之和却没有增加
一个比较大的浮点数累加一个较小的浮点数之和却没有增加

在S7-400PLC  在OB35(0.01s周期)中进行介质消耗的累加,累积量加上0.01s的瞬时流量再赋给累积量。

在实际使用中当累积量过大时,瞬时量过小时,累积量一点都不增加。同时计算每半小时的累积量发给L2的服务器做累加。

让我感到疑惑的是 L2统计的每天消耗竟然比PLC累计的当天量小。我自己观察半天都没弄明白,PLC的累积量半小时走100多,总的累积量一点都没有增加,怎么L2比PLC的每天累计量小。

后来把PLC中的程序累计量也改成先计算半小时的累计量,再将累积量加到总的累积量上L2和PLC累积量就能对上了。


------这是浮点数的分辨率有限造成的。浮点数太大,新加上的数小于它的分辨率。

10ms累加一次也太频繁了吧?瞬时流量变化有那么快吗?建议保存1秒内的瞬时流量看看累加间隔取多大好一些。


--------300/400的累加器有效位是6位,如果相加的两个数相差10^7数量级,则指数对齐后,小的数就变成了,所以不能累加,为了实现你的要求你可以多次累加:sum=sum+pv,sum>sum_sp则sum1=sum1+sum,sum=0。sum1>sum1_sp,则sum2=sum2+sum1,sum1=0......最后的累计值是所有的sum的和。


---------浮点数分辨率大与小的问题,所以楼主后面做的方法才是方法之一


--------瞬时累加不能时基太小




------这个问题我记得在西门子的那个资料上专门提到了的


-------呵呵好几年前我就说了这个方法。










欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4