inkMacSystemFont, "segoe ui", Roboto; padding: 0px; margin-top: 0px; margin-bottom: 0px; color: rgb(51, 51, 51);">测试环境:TIA V16+PLCSIM
种思路是每次读取一次程序运行的cycle time ,然后用PT 时间去除一下,得到需要运行的次数;
种方法因为会有累积误差,所以只适合时间比较短的场合,比如1分钟内。后面也是针对此缺陷的改进。
种改进是把过去的所有循环时间进行累积,误差就被控制在了后的一次比较上了,然后和目标值进行比较;结果有明显改善;
第二种改进是通过相同的中断间隔时间来代替不那么稳定的cycletime来计时;理论上来说,2种改进的方法应该可以把误差控制在5ms 内,然并*;
第三种更直接一点,直接用循环中断的方式,通过中断的次数来计算,需要注意的是不是设定的时间越小越准,因为要考虑中断程序的处理时间,同时减少使用浮点数的运算;
可以看到几种的ET 时间比较,时间还是比较接近的,但是也没有那么完美,可能有2个原因:
1:用的模拟的PLC;
2 :没有用一个准确的时间参照物(是的,我有点怀疑系统的定时器准不准了);
再说一个额外的发现,我用手机定时作为参照物发现,发现PLCSIM 的TON 定时器大约慢15s/5min,也就是大约每20min 慢1 min;
对于长时间的定时,可以通过读取系统时间+NTP 服务器同步的方式来确保误差在可以接受的范围内;以上只是为了拓展思路,不拘泥于现有条件;
有兴趣的可以拿实际的PLC 试一下;
inkMacSystemFont, "segoe ui", Roboto; padding: 0px; margin-top: 0px; margin-bottom: 0px; color: rgb(51, 51, 51);">
inkMacSystemFont, "segoe ui", Roboto; padding: 0px; margin-top: 0px; margin-bottom: 0px; color: rgb(51, 51, 51);">