← 所有文章

PLC 主程式 週期任務與中斷任務如何分工

· 站長

把快速取樣、順序流程與低頻統計分工,提醒優先級、搶占、週期和共享資料一致性不能跨品牌猜測。

先按工作需求分類

快速取樣、流程控制和低頻統計不一定該放在同一段主程式。快速工作需要短而固定的處理;順序流程需要可讀的狀態轉移;統計工作可以較低頻執行。這不是跨品牌固定週期表,而是分工方法。實際任務週期、優先級、搶占和中斷支援,必須按目標 PLC 手冊確認。

工作 資料需求 可觀察項目 設計提醒
快速取樣 新鮮輸入 取樣序號、遺失數 先查硬體與任務支援
狀態流程 一致狀態 State、轉移原因 避免被中斷改半套資料
低頻統計 累積資料 筆數、平均、時間 可分開排程
通訊處理 握手與逾時 Busy、Done、Error 查模組服務時間

本篇虛擬工站把快速取樣、流程狀態和統計分成三類,不指定某品牌的任務名稱。

優先級與執行預算不能猜

優先級高不代表任何 PLC 都能搶占低優先任務;有些平台只支援固定掃描,有些支援週期任務或中斷,有些功能受 CPU 型號和工程軟體限制。先從官方手冊確認任務模型、允許的週期、優先級範圍、巢狀中斷和超時行為,再分配預算。不要寫一個跨品牌的數字週期。

任務 案例條件 檢查項目 不應推論
Sample 每次優先取樣 實際週期、執行時間 不代表所有 PLC 可搶占
Sequence 依平台週期 最長掃描與等待 不代表固定延遲
Statistics 較低頻 處理時間、落後次數 不代表一定可背景執行
  1. 選定 CPU 和工程軟體版本,找到任務與中斷章節。

  2. 列出每項工作的最長執行時間和允許延遲。

  3. 確認共享資料的讀寫邊界和一致性策略。

  4. 以最壞工作量測試,而不是只看平均值。

  5. 記錄超時、遺失取樣和重入,做成診斷資料。

共享資料要有交接規則

快速取樣任務把 SensorValue 寫入緩衝,流程任務讀取;若資料由多個 word 組成,不能讓讀取任務看到一半新、一半舊。可用經同步保護的雙緩衝或完整序號協議表達一筆資料是否完整,但採用哪種方式要依平台原子性和資料寬度確認。不要只說『兩個任務同時跑沒關係』。

共享資料 寫入者 讀取者 完成標記
SampleBuf 快速取樣 流程 Seq相同
StateCmd 流程 輸出層 命令版本
StatAcc 統計 報表 更新序號
ErrorLog 所有任務 診斷 寫入索引

通用偽碼(僅示意):Writer:Seq:=Seq+1(奇數);寫入完整 SampleBuf;Seq:=Seq+1(偶數)。Reader:讀 SeqBefore;若為奇數則本次失敗;複製 SampleBuf;讀 SeqAfter;只有前後相等且為偶數才採用。若前後不一致,本次不採用,下次任務呼叫再嘗試一次;高優先任務不可忙等低優先任務。此方案限制單一 writer,序號讀寫須具原子性;ready 單旗標不能保證多字資料一致,也不代表所有 PLC 可直接編譯。

虛擬排程與完成判定

假設快速取樣希望每次更新,流程每次處理一個狀態,統計每 10 次取樣整理一次。這只是教學排程。完成後應看到每筆資料都有序號,流程不讀到半筆,統計能指出涵蓋的樣本範圍。失敗時先查任務是否真的週期呼叫、執行時間是否超過預算、共享資料是否有一致性標記,再查輸入硬體。

失敗現象 先取得證據 先查哪裡
取樣序號跳號 序號與任務執行記錄 任務週期、超時、緩衝溢位
流程偶爾讀怪值 前後序號、資料寬度 共享資料一致性
統計越積越慢 目標時間與實際時間 是否用完成後重算
中斷後狀態錯亂 中斷前後 State 是否允許搶占與重入

適用型號與限制:本文是跨平台任務分工方法。Q06UDVCPU 的任務、中斷、掃描和資料一致性規則要查 Mitsubishi QnUCPU 手冊;QJ71C24N 通訊服務另依模組手冊核對。本文不把優先級或搶占規則泛化到 Q、FX、S7 或其他品牌。

任務量測與共享資料驗收

進一步操作時,先用最壞資料量測量每項任務的最大執行時間,再核對是否超過任務週期。快速取樣若來不及,增加緩衝或改用硬體功能前,先確認平台支援;不要只提高優先級。共享多字資料要用一致性標記,讀取者看到前後序號不同就丟棄該次快照並記錄原因。任務停止與重新啟動時清除 ready、busy 和 error 的初值,避免舊旗標被當成新資料。

教學驗收時還要用最壞工作量,而不是只用空閒狀態。把取樣、流程、統計和通訊同時放入測試,記錄每項任務的開始、完成、逾時和遺失。共享資料讀取時驗證序號;若序號變動就丟棄該次快照並重新取得。任務停止、切換模式和重新啟動時,清楚定義緩衝、旗標與錯誤碼初值。只有在平台手冊與量測證據支持時,才能談優先級和搶占效果。

不要先替任務指定漂亮的週期數字,先量測最長執行時間、等待時間和遺失樣本。快速取樣的正常結果是序號連續或遺失數可解釋;流程任務的正常結果是每次只完成一個合法轉移;統計任務要標示涵蓋的樣本範圍。邊界案例包括快速任務超時、共享資料在更新中被讀取、低頻任務長時間延後和中斷重入。若平台不支援搶占,不能用優先級文字掩蓋事實;若支援,仍要查巢狀中斷和共享資料原子性。

量測項目 完成後應看到 異常先查
取樣序號 連續或有 missed 記錄 任務週期與緩衝
多字資料 前後序號相同才採用 原子性與快照
流程狀態 沒有半套狀態 共享寫入者
統計延後 涵蓋區間可追溯 排程與執行預算

復原時先保存原始記錄,確認輸入、狀態、診斷旗標和輸出,再依規格清除或重試。這些是教學案例,不是 PLC 模擬或實機結果。

用兩個欄位重現半新半舊資料

假設一筆量測包含數值與時間戳,舊資料是一百與十,新資料是二百與十一。若寫入者先改數值,再改時間戳,讀取者可能在中間看到二百與十。每個欄位單獨看都合法,整筆卻從未真正存在;只檢查數值範圍無法發現這種錯誤。

序號設計的教學推導是先標記更新中,再寫完整資料,最後才宣告完成。讀取者遇到更新中便不採用,讀完還要確認版本未改變。這只在單一寫入者、適當的讀寫順序、記憶可見性與原子序號等條件成立時才有意義;若平台沒有這些保證,應使用其支援的同步機制。

不要讓高優先讀取任務在迴圈內等序號變成穩定值。若低優先寫入者被它打斷,寫入者根本沒有機會完成,等待就可能持續到逾時。比較容易驗收的做法是本次只嘗試一次,失敗便保留上一份有效資料並標示未更新,下一次任務呼叫再嘗試。

同時也要定義資料的新鮮度。上一份快照雖然內部一致,可能已經太舊,不適合當作目前量測。流程應看到資料版本、資料時間與有效性,將一致但過期和讀取中失敗分開診斷。序號回捲或寫入者重啟時,還要避免把新的低序號當成舊資料的延續。

常見問題與附錄

問題 回答
快速任務一定要用中斷嗎? 不一定,先看平台支援、最短反應時間和輸入硬體。
高優先級一定能打斷低優先級嗎? 不能跨品牌假定,必須查任務模型。
共享 word 直接讀寫可以嗎? 要確認原子性;多字資料應用序號或雙緩衝策略。
統計任務可以無限延後嗎? 不行,需記錄落後、遺失樣本與最大允許延遲。

附錄任務表欄位:CPU 型號、軟體版本、任務名稱、週期、優先級、最長執行時間、共享資料、超時處理、遺失資料策略和驗證證據。未查到的項目標為待確認。

參考:Beckhoff TwinCAT 多任務資料同步

參考:CODESYS 任務設定與共享資料一致性

延伸閱讀


使用 PLC 工具箱 →