最近再作一个项目的时候(smart 200,并且再1200上也测试了),发现了1个问题,浮点数相加的指令:
LD T33 // T33通200ms 断200ms
EU
+R VD216, VD310
如果 VD216里是0.0004,VD310是VD8191.9 , 会在VD310累计到 8192后就不再累计了。
有这么几个情况:
如果是VD216里为0.00049 就可以继续累计。
如果VD310里小于8120 也可以累计。
根据手册里说的精确到小数点后6位,不能解释这个问题!
有厂家的技术人员提供了两个方向:
1.整数位和小数位差的太大 会出现这个问题!
2.再运算符点数时 ,涉及到2 或者2的倍数,就会进入死循环(这点完全不懂)
请问这到底是什么问题,有没有技术性的文件可以阅读!
问题补充:
没弄明白这个是不是不能回复答题的人,补充说明一下,现在已经处理了问题,所以这个问题不是要知道处理的方法,是想知道怎么造成的这个问题,是什么原理。谢谢!!!
钻石用户推荐最佳答案
这是实数相加的原理决定的,实数相加,是按科学计数法,先指数对齐,再加前面的小数计数部分。累加器只有8位,能够累加的只有7位,当相加的两个数相差超过10^7时指数对齐后,小数就变成了0,所以不能累加了。为了避免出现这样的问题,可以采用多次累加,sum=sum+pv;
sum>sum_sp则sum1=sum1+sum,sum=0,重新累加。
sum1>sum1_sp则sum2=sum2+sum1,sum1=0,重新累加。
.........
最后总的累加值就是Σsum。
提问者对于答案的评价:
原创文章,作者:ximenziask,如若转载,请注明出处:https://www.zhaoplc.com/plc367697.html