我的西门子1500程序里写了一段累加计数的程序,就是每一个信号上升沿加0.01,怎么加到262144就不再累加了,是怎么回事啊。ADD指令达到加上限了吗?
最佳答案
从你的表述看,内部计数是使用real(32位浮点数),加到一个大数后(262144),就进入到所谓的浮点数陷阱了。原因就是262144用浮点数表示后,其最小的有效位已经大于0.01了,导致后续累加数据不变。
请参考浮点数的国际标准。
可以在内部采用DINT数据格式,每次加1,输出结果=DINT*0.01。这样最大可以加到21474836.47
若还不够,可以采用64位的数据格式(Lint)。另外,使用64位双精度浮点数(Lreal),也可以延长进入陷阱的时间。S7-1500已经支持64位的数据了。
另外,用浮点数做累加,本身是一个不严谨的做法,这涉及到大数量级差的浮点数相加,从算法原理上,就是一个可能产生大误差的计算过程。
提问者对于答案的评价:
谢谢!答案非常满意!
原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc165557.html