← 所有文章

流程卡在某一步 怎麼設計等待上限與故障復歸

· 站長

用明確時間線設定等待期限,保留故障步驟與輸入快照,再由可驗收條件復歸。

先把問題拆開 定義狀態 請求與完成條件

把流程卡住視為可診斷事件,而不是讓線圈一直等。案例固定走PREPARE、WAIT_SENSOR_B、VERIFY、DONE;每次進入步驟都記EnterStep並將Elapsed歸零,只有指定的Sensor B條件成立才能離開等待。

項目 應定義 不要混淆
未開始 Permit/Start未成立 當成逾時
進行過慢 Elapsed達上限 清除快照
回饋矛盾 輸入與狀態不符 假裝完成
逾時重試 RetryCount 無限制重試

教學先用虛擬狀態與監看欄位,不接實體輸出。每一步都寫前置、操作、預期結果與失敗先查位置;這樣你在工程軟體中才能逐項核對,而不是只看最後一盞燈。

建立流程 先做狀態表 再寫轉移

建立EnterStep、EnterTime、Elapsed、TimeoutB、SensorB、FaultStep與ErrorCode。進入WAIT_SENSOR_B時記錄EnterTime;Elapsed為現在時間減進入時間,不能每掃描隨意加一當毫秒。本例Elapsed≥5000 ms即逾時,逾時優先於同次觀察的到位;尚未逾時才檢查SensorB。

  1. 進入 WAIT_SENSOR_B,記錄 EnterStep 與輸入快照。

  2. 讓 Sensor B 維持 0,使用已核對時間來源更新Elapsed。

  3. 到5000 ms時確認 FAULT、TIMEOUT_B、FaultStep。

  4. Reset 前確認輸出停止、前提合理,先回IDLE,再由新Start進PREPARE。

完成後應看到:狀態、操作請求、資料欄位與虛擬輸出一致。若不同,先查是否有其他程式段改寫狀態、在錯誤分支清除記憶,或取樣時機不一致。

具體合成案例 逐掃描核對正常與邊界

案例從進入WAIT起算時間。t=0記錄起點,t=1000、3000、4999 ms仍未到位,保持等待;t=5000 ms進FAULT。這是五個觀察時刻,不是五個PLC掃描等於五秒。若t=4999 ms已到位,可進VERIFY;若直到t=5000才同時看到到位,依本例逾時優先,不回成功。

進入等待後時間 輸入觀察 狀態 預期處理
0 ms SensorB=0 WAIT_SENSOR_B 記錄EnterTime
1000 ms SensorB=0 WAIT_SENSOR_B Elapsed=1000
3000 ms SensorB=0 WAIT_SENSOR_B Elapsed=3000
4999 ms SensorB=0 WAIT_SENSOR_B 未達期限
5000 ms SensorB=0或剛變1 FAULT TIMEOUT_B 逾時優先

本例每次只採用一個狀態轉移,故障優先於一般操作;取消、停止與完成的細節依下列固定案例核對。不同設備改用其他政策時,文字、事件表與程式必須一起修改。

用故障快照決定復歸之前要查什麼

先把故障當下的資料保存一份,包含等待步驟、進入時間、經過時間、感測器值、來源品質與命令狀態。故障後的感測器可能才變化,若畫面只顯示目前值,維護人員會看到已到位,卻不知道逾時當下其實仍未到位。快照讓兩個時間點能分開比較。

本例在期限到達時優先判逾時,這是一個可驗收的規格選擇。若工程需求改成同時到位視為成功,就必須一起修改判斷順序、邊界表和驗收答案。不要只改某個比較符號,讓正文寫大於等於,程式卻只在大於時故障,留下難以重現的一個取樣差。

復歸前先看原因是否已排除。感測器回饋矛盾、資料品質無效或外部模組仍忙碌時,不能因操作員按了重置就直接回等待。將復歸被拒絕的原因顯示出來;重置命令只提出意圖,程式仍須檢查可以重新開始的條件。

復歸成功後,本例回待機,由新的啟動重新走準備步驟。這樣可以重新建立計時起點和輸入前提,不沿用失敗工作的時間或完成旗標。若需求允許原步重試,則要另外定義哪些資料可保留、哪些動作可能重複,以及最大重試次數,不能只把故障位元清零。

沒有到位訊號也不一定就是接線斷線。先查輸入模組是否有對應變化,再查程式讀取的位址與極性,接著查到位訊號是否短於取樣間隔,最後才判斷等待時間是否不合理。每改一個條件就重跑正常、不到位與期限邊界三組案例,保存修改前後的證據。

本篇五秒是假設上限,選擇真正上限時應納入設備動作時間、允許延遲與通訊更新時間。不能因故障頻繁就一直加長,直到表面沒有告警;若機構變慢或回饋品質惡化,較長等待只會延後發現問題。先用時間紀錄分辨正常變動與異常延遲,再決定合理設定。

失敗先查 適用限制與常見問題

故障復歸固定由Reset觸發:先停止輸出、保留錯誤記錄,確認故障原因已排除且復歸前提成立後清除目前ErrorCode並回IDLE,歷史紀錄保留。完成結果是每一個等待都有上限;失敗先查目前FaultStep和Elapsed,再量測SensorB實際狀態,最後檢查TimeoutB單位與計時器基準。

三個常見問題

所有等待都用同一 Timeout 可以嗎?不建議,不同步驟合理時間不同。逾時能直接回等待嗎?要先停止輸出並完成復歸。Sensor B 一直 ON 就是壞嗎?先查前提、極性與位址。

逾時設計要避免兩個極端:上限太短會把正常延遲誤判成故障,上限太長則讓維護人員等待沒有診斷訊號。請從流程需求取得合理時間,再考慮掃描週期、感測器更新、機構慣性與允許重試次數。每次進入狀態只初始化一次計時;持續等待時保存 Elapsed,不要每掃描重設。故障畫面至少顯示 FaultStep、ErrorCode、EnterTime、Elapsed、輸入快照和 RetryCount。復歸後重新走前置檢查,若 Sensor B 仍矛盾就再次停在故障,而不是用 Reset 連續跳過問題。

建議把逾時和感測器品質分開記錄。Sensor B=0 可能是尚未到位,也可能是輸入斷線;若模組能提供品質位元,先判斷品質再判斷值。若沒有品質位元,至少保存最後變化時間與連續 0 的長度。逾時後的 FAULT 應可由維護人員重現:相同前提下再次測試,ErrorCode、FaultStep 和輸入快照要一致。

建立故障紀錄時,ErrorCode 不要只寫數字。至少同時保存文字說明、FaultStep、輸入極性、進入時間和復歸次數。維護人員依紀錄先重現相同輸入,再判斷是感測器、接線、條件設定還是流程時限。若修正上限後故障消失,仍要確認新上限沒有掩蓋機構未到位,並把修改前後的測試資料保留。

操作驗收與適用限制

驗收結果是SensorB及時到位才進VERIFY並Done,逾時則固定進FAULT且ErrorCode=TIMEOUT_B、FaultStep=WAIT_SENSOR_B。限制是Elapsed的單位與計時基準取決於你的PLC程式和設定,不能把本文的5000 ms直接套用到所有CPU。

先測成功到位、永遠不到位、剛好逾時三個邊界。重新啟動前確認輸出已關閉與故障原因已記錄;若Reset後立即再逾時,優先查SensorB接點邏輯、TimeoutB單位及EnterTime是否只在進入步驟時記錄。

參考:三菱 QnUCPU 使用手冊 程式執行與裝置資料

適用型號與限制:概念可套用具備位元與狀態資料的 PLC;實際指令、資料型別、計時單位、模式切換與復歸行為必須依目標 CPU、工程軟體和設備規格確認。

延伸閱讀


使用 PLC 工具箱 →