先按工作需求分類
快速取樣、流程控制和低頻統計不一定該放在同一段主程式。快速工作需要短而固定的處理;順序流程需要可讀的狀態轉移;統計工作可以較低頻執行。這不是跨品牌固定週期表,而是分工方法。實際任務週期、優先級、搶占和中斷支援,必須按目標 PLC 手冊確認。
| 工作 | 資料需求 | 可觀察項目 | 設計提醒 |
|---|---|---|---|
| 快速取樣 | 新鮮輸入 | 取樣序號、遺失數 | 先查硬體與任務支援 |
| 狀態流程 | 一致狀態 | State、轉移原因 | 避免被中斷改半套資料 |
| 低頻統計 | 累積資料 | 筆數、平均、時間 | 可分開排程 |
| 通訊處理 | 握手與逾時 | Busy、Done、Error | 查模組服務時間 |
本篇虛擬工站把快速取樣、流程狀態和統計分成三類,不指定某品牌的任務名稱。
優先級與執行預算不能猜
優先級高不代表任何 PLC 都能搶占低優先任務;有些平台只支援固定掃描,有些支援週期任務或中斷,有些功能受 CPU 型號和工程軟體限制。先從官方手冊確認任務模型、允許的週期、優先級範圍、巢狀中斷和超時行為,再分配預算。不要寫一個跨品牌的數字週期。
| 任務 | 案例條件 | 檢查項目 | 不應推論 |
|---|---|---|---|
| Sample | 每次優先取樣 | 實際週期、執行時間 | 不代表所有 PLC 可搶占 |
| Sequence | 依平台週期 | 最長掃描與等待 | 不代表固定延遲 |
| Statistics | 較低頻 | 處理時間、落後次數 | 不代表一定可背景執行 |
選定 CPU 和工程軟體版本,找到任務與中斷章節。
列出每項工作的最長執行時間和允許延遲。
確認共享資料的讀寫邊界和一致性策略。
以最壞工作量測試,而不是只看平均值。
記錄超時、遺失取樣和重入,做成診斷資料。
共享資料要有交接規則
快速取樣任務把 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 型號、軟體版本、任務名稱、週期、優先級、最長執行時間、共享資料、超時處理、遺失資料策略和驗證證據。未查到的項目標為待確認。