台達智能伺服為硬即時多工系統,採4個時槽(Slot)平分1毫秒的概念進行設計
如果你想更清楚多工切換的時序,首先你必須先把握下列多工切換三原則
- Task-Switching Rules
1. 時槽已有指定的工作則執行該工作
下圖是系統內定Slot與Task的對應圖,當時間進入到Slot 0時開始運行Task 0,緊接著當時間進入到Slot 1時則切換至Task 1 運行,依此類推。
2. 時槽未有指定的工作則執行前一時槽的工作
當Task內並未安排Program時,則原定的執行時間會讓給前一時槽的Task進續運行
3. 工作已完成或須等待,該時槽尚有剩餘時間,則執行該工作對應的候補工作
系統內定的候補順序為 Task 1, 2, 3 → Task 0 → Task B
多工時序情境 1
下圖Task 0為掃描周期1 ms,因此每當時間進到Slot 0時都會開始運行Task 0。
而Task 1, 2, 3為Trigger類型的工作,當有Program需要執行時它分別會於Slot 1, 2, 3時間點開始進行運作,若某些時刻並未安排有Program則不進行Task切換。
多工時序情境 2
第一個cycle的Task 1 於時間點進到Slot 1 時開始執行,然而時間進入到Slot 2時,Task 2並沒有任何Program需執行,則根據rule 2 將繼續執行前一時槽(Slot 1)的工作 (Task 1),
同理,當時間點進去slot 3時由於Task 3 並沒有任何Program需要執行,則根據rule 2 將繼續執行前一時槽(Slot 2)的工作 (Task B)
多工時序情境 3
該情境演示了當Task 1所運行的Program中含有等待指令時,它會根據rule 3 切換給Task B運行,待等待事件結束,再於下個Slot 1循環中啟動運行剩餘Program。
多工時序情境 4
當Task 0改為2 ms的掃描周期會如下圖進行多工切換,而每個slot依然保持 0.25 ms。
多工時序情境 5
該情境Task 0掃描周期保持預設的 1 ms,但Task 1改為掃描周期為2 ms的Cyclic類型。
多工時序情境 6
Task 0有較多的工作量,而Task 2在第二個cycle時被動態觸發執行一段Program,很巧的是由於Task 2運行的Program所需要的時間已經擠壓了Task 0的運行時間進而導致Task 0發生Timeout,而逾時所需執行的T0_TOUT將於原Program被執行完畢後立即接續執行,並在T0_TOUT結束後再重新運行原Program
寫的非常好!將加到 M-R 產品專頁中 …
更正,加到 ezASD 軟體專頁 裡的 “多工機制”