西门子s7-200计秒时钟脉冲的个数累计问题

作者:老电工时间:2020年04月23日 09:57

有关西门子s7-200计秒时钟脉冲的个数累计问题,累计到9321小时不再累计是什么原因,  解决方法是改为双整数的加法,双整数的有效位数为32位,计小时数就足够用了。

西门子s7-200计秒时钟脉冲

问题:西门子plc s7-200程序中,我用一个sm0.5(1秒时钟脉冲)的脉冲上升沿对VD1000进行浮点数加1.0循环累积,然后再对VD1000除以3600.0,即可得出设备运行的小时数时间。

问题:当设备运行时间累积到9321时就不再累积了,程序中发现VD1000的数据不再增加了。3600*9321=33555600,浮点数范围为+1.175495E-38至+3.402823E+38,说明没有超过此范围,这是什么原因呢?

当对VD1000加100.0循环累积时,VD1000的数据又会增加。

解答:

这个问题可以给出精确的数学解释。

浮点数的精度与它的尾数有关,其尾数为二进制小数1.m,m为23位的小数。所以,浮点数的精度为24位二进制有效位数。2的24次方为16777216。

楼主用浮点数能计的最大的数是3600*9321=33555600,该数除以2为16777800,与2的24次方16777216非常接近。

在33555600附近加1.0加不上去,不是因为浮点数不能表示更大的数,而是在做加法时,两个数的指数应该相同,1.0和33555600.0相比太小了,比33555600.0的尾数最低位(也是浮点数的最低位)的值的一半还小,相加时1.0的值被四舍五入忽略掉了,以后的累加值都不会增大。

解决方法:

改为双整数的加法,双整数的有效位数为32位,计小时数够用了。

猜你喜欢

相关文章

西门子plc排行