一次搞懂多工排程

台達智能伺服為硬即時多工系統,採4個時槽(Slot)平分1毫秒的概念進行設計

如果你想更清楚多工切換的時序,首先你必須先把握下列多工切換三原則

 

  • Task-Switching Rules

1. 時槽已有指定的工作則執行該工作

下圖是系統內定Slot與Task的對應圖,當時間進入到Slot 0時開始運行Task 0,緊接著當時間進入到Slot 1時則切換至Task 1 運行,依此類推。

slot_task_

 

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切換。

task_timing_diagram0

 

多工時序情境 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)

task_timing_diagram5

 

多工時序情境 3

該情境演示了當Task 1所運行的Program中含有等待指令時,它會根據rule 3 切換給Task B運行,待等待事件結束,再於下個Slot 1循環中啟動運行剩餘Program。

task_timing_diagram1

 

多工時序情境 4

當Task 0改為2 ms的掃描周期會如下圖進行多工切換,而每個slot依然保持 0.25 ms。

task_timing_diagram2

 

多工時序情境 5

該情境Task 0掃描周期保持預設的 1 ms,但Task 1改為掃描周期為2 ms的Cyclic類型。

task_timing_diagram3

 

多工時序情境 6

Task 0有較多的工作量,而Task 2在第二個cycle時被動態觸發執行一段Program,很巧的是由於Task 2運行的Program所需要的時間已經擠壓了Task 0的運行時間進而導致Task 0發生Timeout,而逾時所需執行的T0_TOUT將於原Program被執行完畢後立即接續執行,並在T0_TOUT結束後再重新運行原Program

task_timing_diagram4_

2 thoughts on “一次搞懂多工排程

  • 2016-10-29 at 20:43:19
    Permalink

    寫的非常好!將加到 M-R 產品專頁中 …

    Reply
    • 2016-10-29 at 21:20:45
      Permalink

      更正,加到 ezASD 軟體專頁 裡的 “多工機制”

      Reply

發表迴響