技术论坛

 simotion中的task和时间片

返回主题列表
作者 主题
ihui
游士

经验值:261
发帖数:205
精华帖:2
楼主    2009-02-18 23:44:04
主题:simotion中的task和时间片
PLC中程序的执行是靠一遍又一遍的扫描整个程序,而Simotion中情况要复杂很多。
首先Simotion中有task的概念,不同的task处于不同的优先级。撇开ipo、servo以及中断等task不说,backgroundtask和motiontask的执行时序就有点让人不清白,呵呵
ipo、servo task在每个DP CYCLE中都是要执行一次的,谁叫它们的优先级那么高呢。而时间中断硬件中断等是在中断被触发的时候执行,当然中断的执行肯定也是在Dp Cycle中的某个时候。那么每个DP Cycle中除了刚刚说的这些task 之外一般还会剩下不少时间,这些时间就是用来处理BackgroundTask 和Motiontask。
在某一个DP Cycle中剩下的时间里(注意这个条件哦),Simotion的规则是BackgroundTask 先执行,接着执行32个Motiontask(如果32个都被使用了的话)。
有的BackgroundTask中的程序很长很长,长得在一个DP Cycle中高级任务执行后剩下的时间里都没有办法执行完,这时候BackgroundTask的程序就会在第二个DP Cycle中剩下的时间里继续执行,如果第二个DpCycle中还没执行完就地三个。。。直到把BackgroundTask 中的程序都执行一遍,从而又开始新一轮的执行。当然,如果你的BackgroundTask 中的程序执行了100年还没有执行完,那么Simotion会疯掉的,所以Simotion中可以设置BackgroundTask的watchdog,狗狗在你设置的时间到了如果BackgroundTask还没有执行完那么系统就报警了。
还有另一个规则,就是针对MotionTask。 Simotion中规定MotionTask必须在每个DpCycle中执行最多两个时间片。
先解释一下时间片的概念。时间片是simotion中的嵌入式实时操作系统分配给各个进程执行的一小段时间。可能一个MotionTask需要很多个时间片才能执行完,又可能两个时间片完全够了,到底需要多少时间Who knows? Nobody Knows!Motiontask是不限时间的,它没有watchdog。时间片的长度是操作系统设置的,具体是多少不知道。操作系统在各个任务之前切换也需要时间,如果时间片设置得太短了,那么用于任务切换的时间反而比程序本身执行的时间还要多,这样效率就太低了; 如果时间片设置得太长了,那么一个程序的响应速度就太慢了。
Simiton不给太多的时间片给MotionTask,每个DpCycle中只有两个。BackgroundTask使用的时间片个数是可以设置的,例如设置为5个时间片,那么就是说5个时间片用于BackgroundTask后不管BackgroundTask有没有执行完,都会切换到执行MotionTask去了,而且每个MotionTask各2个时间片,依次执行,直到最后一个MotionTask执行了两个时间片之后又开始执行BackgroundTask。
所以从上面的分析来说,BackgroundTask和MotionTask从宏观上来看是并行的,但从微观上来看是依次执行的,只不过一次执行每个的一小部分,直到都执行完。
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。