- 機器自動化控制器原理與應用
- 徐世許
- 4747字
- 2020-12-04 16:25:50
3.1 任務
3.1.1 任務類型
在CPU單元中,任務用來為一系列的過程,例如I/O刷新和用戶程序,分配執行的條件和執行的順序。I/O刷新是指CPU與CJ系列基本I/O單元、CJ系列特殊單元和EtherCAT從站交換I/O數據。任務總是周期性地循環執行。根據執行條件和執行優先級,任務分為兩種類型:主周期任務和周期任務。CPU單元執行主周期任務或周期任務的時間稱為任務周期。
1.主周期任務
具有最高的優先級。每次循環執行時,主周期任務總要執行一次。總是在設定的周期時間內執行。運動控制和EtherCAT通信在主周期任務里執行。
主周期任務的任務周期可以設定為500μs、1ms、2ms或4ms。
主周期任務只有一個,其執行優先級最高,固定為4。
2.周期任務
執行優先級比主周期任務低。周期任務是在主周期任務執行的間隔之間空余的時間內執行。周期任務周期性執行,其任務周期設定為主周期任務的整數倍。
周期任務有3個,優先級分別為16、17或18。
一個任務可以分配1~128個程序。程序按照分配的順序執行。
主周期任務、周期任務執行時,處理的內容是有區別的,如下所示:
I/O刷新可分配給主周期任務或優先級16的周期任務,缺省情況下,I/O刷新分配給主周期任務。運動控制總是分配給主周期任務。優先級16的周期任務不能執行運動控制。優先級17或18的周期任務只能執行用戶程序,不能進行I/O刷新和運動控制。
3.1.2 任務的基本操作
1.任務執行的優先級
CPU單元首先執行優先級最高的任務。主周期任務具有最高的執行優先級,CPU總是首先執行它。當一個任務正在執行時,另一個優先級高的任務的執行條件滿足,則這個優先級高的任務被賦予了執行優先權。周期任務有3個執行優先級,如圖3-1所示。
2.任務執行的時序
主周期任務的執行周期稱為主周期。任務將主周期作為標準周期來運行。
圖3-1 周期任務執行優先級
1)控制器在整數倍主周期的時間內執行一次周期任務。例如,如果主周期任務的任務周期設為1ms,優先級16的周期任務的任務周期設為4ms,則在主周期任務執行4次的時間內,優先級16的周期任務執行一次。
2)無論在運行模式還是編程模式,任務都會被處理執行。但用戶程序不能在編程模式下執行,只在運行模式下執行。
3)I/O刷新根據任務周期被執行。
4)CPU單元在任務執行時未用的時間內執行系統服務,例如通信處理。
圖3-2所示為周期任務執行的時序,其中,圖3-2a僅有主周期任務,圖3-2b有主周期任務、優先級16的周期任務和優先級17的周期任務。
圖3-2 周期任務執行的時序
任務執行的順序不僅依賴于執行優先級。低優先級任務有時在高優先級任務執行期間也能被執行。主周期任務不會被中斷去執行其他任務。當主周期任務的執行完成后,優先級16的周期任務被啟動執行。
3.任務和系統服務的處理
(1)主周期任務
主周期任務有最高的優先級,執行處理時具有高速度、高精度。
如圖3-3所示,在每一個執行周期,主周期要完成系統公共處理、I/O刷新、用戶程序執行和運動控制。與普通的周期任務不同,主周期任務要完成運動控制處理。
主周期任務處理的內容見表3-1。
圖3-3 主周期任務的處理
表3-1 主周期任務處理的內容
當主周期任務的用戶程序中有運動控制指令時,在隨后的運動控制處理中,CPU單元馬上執行來自這些指令的結果。在下一個主周期任務的I/O刷新期間,CPU單元將結果輸出給伺服驅動器,如圖3-4所示。
(2)周期任務
周期任務在每一個任務周期內執行自己的程序,它的任務周期是主周期的整數倍。可以使用0~3個周期任務。
優先級16的周期任務也可以刷新I/O。
不控制I/O周期任務的處理與控制I/O周期任務的處理是不同的。
圖3-4 主周期任務對運動控制處理
1)無I/O的周期任務。
如圖3-5所示,無I/O周期任務處理的內容有:系統公共處理1、用戶程序執行、系統公共處理2。
圖3-5 無I/O的周期任務
2)有I/O的周期任務。
如圖3-6所示,有I/O周期任務處理的內容有:有I/O刷新、系統公共處理1、用戶程序執行、系統公共處理2。
圖3-6 有I/O的周期任務
(3)系統服務
系統服務在任務執行未用的時間被執行,如圖3-7所示。
圖3-7 系統服務的執行
系統服務的內容見表3-2。
表3-2 系統服務的內容
3.1.3 保證任務間變量取值的一致性
如果多個任務讀寫同一個全局變量,可以使用下面兩種方法中的任一種來保證任務之間變量取值的一致性。
1.為任務中的變量設置排他控制功能
如圖3-8所示,在任務中設置變量的排他控制功能,即可將任務設定為刷新一個全局變量或訪問這個全局變量。變量只能由一個任務“寫”,其他任務只能“讀”,這就保證了全局變量取值的一致性。
圖3-8 設置變量的排他控制
對于一個指定的全局變量,一個任務設定為其“寫”值,這個任務稱為刷新任務。如果設定了一個刷新任務,其他任務就不能“寫”這個全局變量的值。
對于一個全局變量,如果沒有設定刷新周期,則變量值可以被任何任務在任何時刻寫,因此它的取值會改變,這取決于何時去讀它。
如圖3-9所示,刷新任務可以讀寫全局變量GVar1,訪問任務只能讀GVar1,保證了全局變量GVar1在任務間取值的一致性。
圖3-9 變量的排他控制舉例
如圖3-10所示,如果為一個全局變量設置了一個刷新任務,訪問任務則在訪問任務執行開始時,讀取由刷新任務執行完成后寫入的變量最新的值,這就可以在任務內維持全局變量值的一致性,而且不需要特殊的編程。
圖3-10 對設置排他控制的變量讀寫操作
如果在訪問任務中用指令“寫”一個全局變量的值,用Sysmac Studio檢查程序時會出現錯誤。
對結構體或共用體變量設置刷新任務時,對于整個結構體或共用體變量只能設置一個刷新任務。不能對結構體或共用體不同的成員設置不同的刷新任務。
對數組變量設置刷新任務,對于整個數組變量只能設置一個刷新任務。不能對不同的數組元素設置不同的刷新任務。
對每一個全局變量只能設置一個刷新任務。如果需要在多個任務里寫一個全局變量,使用下面介紹的任務排他控制指令來保證一致性。
2.使用任務排他控制指令
當需要從多個任務里對同一個變量“寫”值時,使用任務排他控制指令,即LOCK和UNLOCK指令。
LOCK和UNLOCK指令阻止不同任務間的LOCK和UNLOCK程序區域的執行。
如圖3-11所示,即使任務B比任務A的優先級高,如果任務A中的區域1正在執行,則任務B中的區域1不能執行,直到任務A中的區域1執行完畢才能執行。這里,任務A中的區域1的執行有特定的優先級。
圖3-11 使用任務排他控制指令
如圖3-12所示,當任務A中的區域1執行完成,任務B中的區域1才被執行。
圖3-12 任務的排他控制
注意,不要使鎖住的區域太長,否則會出現任務執行周期超出錯誤。
3.1.4 從控制器外部訪問變量與任務執行的同步
如圖3-13所示,為了達到從控制器外部訪問變量與任務執行的同步,在任務設置里為任務中變量的排他控制做設置。同樣,特別當使用標簽數據鏈接時,在Sysmac Studio的任務設置里,設置變量訪問時間。
使用下列方法從控制器外部訪問全局變量。
1)EtherNet/IP標簽數據鏈接。
圖3-13 從控制器外部訪問變量
2)從NS系列PT訪問變量。
3)從Sysmac Studio訪問變量(只對寫操作實現與任務執行的同步)。
4)從上位計算機用CIP通信訪問變量。
當從控制器外部訪問全局變量時,為這些全局變量設置特定的任務作為刷新任務。特別當使用標簽數據鏈接時,對在同一標簽組(有網絡公開屬性的變量)的標簽,一定要設置同一任務為刷新任務,以保證標簽組中標簽間的一致性。
不能對下列已分配的全局變量設置刷新任務,下面給出的任務自動設置為刷新任務。
1)EtherCAT從站的設備變量:設置為I/O控制任務的任務。
2)CJ系列I/O單元的設備變量:設置為I/O控制任務的任務。
3)CJ系列特殊單元的設備變量:主周期任務。
4)用于CJ系列單元內存具有AT規格的變量:主周期任務。
3.1.5 任務設置
1.任務設置
任務設置用來增加和建立任務,如圖3-14所示。
圖3-14 任務設置
主周期任務和周期任務的參數見表3-3。
表3-3 主周期任務和周期任務的參數
2.I/O控制任務設置
如圖3-15所示,I/O控制任務設置用來為輸入和輸出刷新執行設置時序。
圖3-15 I/O控制任務設置
為任務分配I/O刷新見表3-4。
表3-4 為任務分配I/O刷新
3.程序分配設置
如圖3-16所示,程序分配設置用來為任務分配程序,并設置程序執行的順序。可以為一個任務分配多達128個程序,不能將一個程序分配一個以上的任務。
圖3-16 程序分配設置
在一個任務內,程序按照分配的順序從上到下執行。
4.任務中變量的排他控制設置
任務中變量的排他控制設置如圖3-17所示,用來設置刷新全局變量的任務和訪問全局變量的任務。
圖3-17 任務中變量的排他控制設置
任務中變量的排他控制設置參數見表3-5。
表3-5 任務中變量的排他控制設置參數
3.1.6 與任務相關的指令
與任務相關的指令見表3-6,這些指令支持讀取當前任務的狀態,確定其他任務是否在執行中,完成為保證任務間區域一致性的排他控制。
表3-6 與任務相關的指令
3.1.7 與任務相關的系統定義變量
與任務相關的系統定義變量見表3-7,可以顯示每個任務的狀態。例如,名稱為TaskName的任務執行周期超出標志為TaskNameExceeded。不要在用戶程序中使用這些變量,因為在更新它們的時候會有延遲,與功能模塊的錯誤狀態相關的一致性也存在問題。這些變量只用在從Sysmac Studio進行數據跟蹤時,采樣任務狀態。
用戶程序中也可以使用指令GetMyTaskStatus和TaskIsActive來讀取任務狀態。不能直接通過系統定義變量來訪問這些變量。
表3-7 與任務相關的系統定義變量
圖3-18所示為任務活動標志TaskNameActive的操作。
圖3-18 任務活動標志操作
圖3-19所示為任務周期超出標志TaskNameExceeded的操作。
圖3-19 任務周期超出標志的操作
3.1.8 與任務相關的錯誤
與任務相關的錯誤如下:
1.任務周期超出錯誤
如圖3-20所示,如果任務執行時間超出指定的任務周期,就會出現一個任務周期超出錯誤。這是一個輕微故障級的控制器錯誤,即使發生此錯誤,運行仍將繼續。它可以發生在主周期任務和周期任務中。
圖3-20 任務周期超出錯誤
可以在設置中將任務周期超出錯誤檢測設為禁用。在Sysmac Studio的任務設置中,可設置使用任務周期超出檢測,而默認設置為檢測。
即使禁用檢測任務周期超出錯誤,如果任務處理在指定周期內未完成,信息仍將輸出到下面的標志:任務周期超出標志(TaskNameExceeded)、任務周期超出計數(TaskNameExceedCount)、控制器錯誤狀態(ErrSta)和事件日志。
如果在任務周期內,任務處理未完成,I/O刷新如下操作。
輸出:輸出上一個周期的值。
輸入:用戶程序中不反映輸入的刷新值。
如果出現任務周期超出錯誤,則縮短任務中的程序以適應任務周期,或增加任務周期的設定值。
2.運動控制周期超出錯誤
如果在主周期(即運動控制周期)內,連續兩次沒有完成運動控制處理(MC),則出現運動控制周期超出錯誤。在運動控制功能模塊會出現局部故障級控制器錯誤。同時,出現任務周期超出錯誤。
出現運動控制周期超出錯誤時,減少程序中處理的數目,或在不影響正常運行的前提下,增加控制周期。
3.任務執行超時錯誤
如圖3-21所示,如果在指定的任務執行超時時間內,未完成任務處理,則出現任務執行超時錯誤。
圖3-21 任務執行超時錯誤
這是一個重大故障級的控制器錯誤,出現時,用戶程序執行將停止。
由于程序邏輯錯誤,如無限循環,正常的任務操作無法進行時,會發生此錯誤。
出現任務執行超時錯誤時,檢查任務設置,下載工程,電源需斷電再重新上電或CPU單元復位。
4.I/O刷新超時錯誤
如圖3-22所示,如果I/O刷新在指定的周期內連續兩次未完成,則出現I/O刷新超時錯誤。
圖3-22 I/O刷新超時錯誤
這是一個重大故障級的控制器錯誤,出現時,用戶程序執行將停止。
這個錯誤只發生在主周期任務和設置了I/O刷新優先級16的周期任務。
出現I/O刷新超時錯誤時,檢查任務設置,下載工程,電源需斷電再重新上電或CPU單元復位。
5.系統服務時間不足錯誤
如果不能獲得為系統服務監視設置而指定的時間,會出現系統服務時間不足的錯誤。
這是一個重大故障級的控制器錯誤,出現時,用戶程序執行將停止。
出現系統服務時間不足錯誤時,檢查任務設置和系統服務監視設置,下載工程,電源需斷電再重新上電或CPU單元復位。
3.1.9 監視任務執行狀態和任務執行時間
可以從Sysmac Studio監視所有任務中的程序的執行狀態和任務執行時間。
在多視圖瀏覽器中,雙擊“配置和設置”下的“任務設置”,在顯示的編輯面板點擊“任務執行狀態監視”按鈕,可以觀察到所有正在執行的任務/程序的名稱和執行狀態;點擊“任務執行時間監視”按鈕,可以觀察到所有正在執行的任務的執行時間。