S7-300 主程序OB1的局部变量#OB1_PREV_CYCLE提供了上一扫描周期的时间,单位为ms。将它累加可以得到PLC的运行时间。
为了了解累加的时间值的精度,我编写了下面的程序来作了一个小实验。该程序的主体部分(PID程序)在OB35中,OB1原来只有很简单的几条指令。
在初始化组织块OB100中增加了几条指令:
L L#0
T MD 100 //累加和单元清零
L LD 16
T MD 104 //保存调用OB100时的分、秒、毫秒值和星期代码
在OB1中增加了几条指令:
L #OB1_PREV_CYCLE
L MD 100
+D
T MD 100 //累加前一次的扫描时间
L LD 16
T MD 108 //保存调用OB1时的分、秒、毫秒值和星期代码
下图是实验结果,MD100是进入和离开RUN模式的扫描时间的累加值(ms)。
http://blog.gkong.com/uploadfile4/2011627646835.jpg
MD104和MD108分别是调用OB100时和进入STOP模式时的实时时间的分、秒、毫秒值和星期代码(BCD码),毫秒占3位,最后一位是星期代码。MD108中的时间值减去MD104中的时间值,得2min37s119ms=157119ms,与MD100中累加的运行时间相同。由此验证了这种累计方法的精度能到ms级。
其实我们有时要得出正确的答案花不了多少时间。
真正需要花极大的时间和精力才能得到的是医学上的结论,但是现在中国漫天飞舞的养生秘诀基本上都是毫无实验依据的胡说八道,和骗您钱财的弥天大谎。善良的人们,不要轻信啊!