我在程序中判断块内调用是否属于同一周期的方法是56L提到的第三种,获取CPU上一次循环时间。实际使用了西门子自带的诊断指令RT_INFO,简单描述下实现过程。
调用RT_INFO指令,获取到上周期循环时间,与存储起来的循环时间变量相比较,如果不相同,说明新一个扫描周期的到来,就将调用计数改成1,如果相同,说明在同一周期,就将计数累加。
这样就得到了调用的计数,用它来标识我们每一次的调用。当任务触发时,记忆触发任务的调用序号,来执行程序和输出结果。如果任务已经在执行还没有结束,则不会执行新的任务。
源程序如下:
