恭喜,你发布的帖子
发布于 2018-03-12 08:46:14
24楼
to Zane : 你讲的问题,正是我在首楼提出的问题! 问题的根源在于T_DIFF的结果使用了Time类型, 而偏偏系统默认的又不是四舍五入,反而是去尾留整。 所以导致计算得到的扫描周期会比平均扫描周期要小! 最大的误差就是是1ms 。 所以当我的平均扫描周期为10ms时,加速度偏差为10%, 而我的平均扫描周期为3ms,那么最大误差可能达到50%了!
那么问题的解决方法就是后来我直接的,直接用DTL.NANOSECOND去做减法, 这样精确到纳秒级别。 由于1毫秒=1000 000纳秒! 绝多数的扫描周期都是毫秒级以上, 所以精确到纳秒后,整个的误差就可以完全忽悠不计!
顶多顶多, 在#iTemp0 := RD_SYS_T(OUT=>#ACTUAL_TIME); 这一句刚扫描完,来了一个更高级别的中断, 那么这一个扫描周期的计算值就会有偏差了(偏差值就是高优先级中断的执行时间)。 而这种概率可以忽略不计,因为我的加减速会有上百个扫描周期。 而且即使是用定时中断,碰到更高级别的中断也一样存在这问题... ...
请填写推广理由:
分享
只看
楼主