quote:以下是引用n次看你的背影在2011-06-01 10:16:30的发言:
我个人认为(仅供参考):
2、(“#OB1_PREV_CYCLE”)OB1上一个程序周期执行的时间不包含各种中断执行的时间。
3、当然,在每一次OB1执行前、执行后,PLC的操作系统还需要化时间来做一些其它工作,这个时间消耗无法得知!也许是纳秒级的,也许可以或略,也许是个迷了!呵呵!
n次看你的背影老弟:根据扫描时间的定义,我认为#OB1_PREV_CYCLE应该包含各种中断执行的时间,和操作系统完成的其他所有工作的时间。
为了验证这一结论,我用我编的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)。

MD104和MD108分别是调用OB100时和进入STOP模式时的实时时间的分、秒、毫秒值和星期代码(BCD码),毫秒占3位,最后一位是星期代码。MD108中的时间值减去MD104中的时间值,得2min37s119ms=157119ms。由此验证了这种累计方法的精度是能到ms级的。此外验证了#OB1_PREV_CYCLE包含各种中断执行的时间,和操作系统完成的其他所有工作的时间。因为OB35的执行时间远大于OB1的执行时间。
其实我们有时要得出正确的答案花不了多少时间。
真正需要花极大的时间和精力才能得到的是医学上的结论,但是现在中国漫天飞舞的养生秘诀基本上都是毫无实验依据的胡说八道,和骗您钱财的弥天大谎。善良的人们,不要轻信啊!