先把問題拆開 定義狀態 請求與完成條件
三種命令的差別在生命週期:點動只跟著按鈕,持續運轉由請求啟動並等Stop,單次動作則鎖存一次目標直到完成。先把 Button、Request、Permit、Stop、Busy、Done 分開,任何命令都必須受Permit和Stop限制。
| 項目 | 應定義 | 不要混淆 |
|---|---|---|
| JOG | 按住且允許 | 放開或禁止 |
| RUN | 上升緣且待機 | Stop/故障 |
| ONE_SHOT | 上升緣且待機 | Done/Fail |
| Busy中再按 | 依規格拒絕 | 改寫工作 |
教學先用虛擬狀態與監看欄位,不接實體輸出。每一步都寫前置、操作、預期結果與失敗先查位置;這樣你在工程軟體中才能逐項核對,而不是只看最後一盞燈。
建立流程 先做狀態表 再寫轉移
先建立JogButton、RunRequest、OneShotRequest、JogRun、RunState、Busy與Done。點動每掃描以按鈕電平、Permit、Stop及互斥狀態決定JogRun,放開即撤銷。停止或禁止後須先放開再操作,不因Permit恢復而自動動作。RUN與ONE_SHOT採新的上升緣,Busy期間一律拒絕重入。
建立 Button、Stop、Permit、JogRun、RunState、Busy、Done。
點動按住確認 JogRun=1,放開後變 0。
持續運轉只出現一次上升緣,放開後仍保持。
單次動作 Busy 中再次按下,確認拒絕並記錄原因。
完成後應看到:狀態、操作請求、資料欄位與虛擬輸出一致。若不同,先查是否有其他程式段改寫狀態、在錯誤分支清除記憶,或取樣時機不一致。
具體合成案例 逐掃描核對正常與邊界
以下是三組各自重新初始化的獨立測試,不是連續五個掃描完成全部動作。點動按住兩次取樣可由0到5再到10,放開停在10;持續運轉啟動後即使放開仍運作,Stop使其退出;單次動作從0走到100,位置40收到新請求時拒絕,只有達目標且沒有停止或故障才產生Done。
| 掃描/條件 | 判斷 | 狀態 | 應看到的結果 |
|---|---|---|---|
| 點動A1 | Button=1 Permit=1 | JOG | 位置0→5 |
| 點動A2 | 仍按住 | JOG | 位置5→10 |
| 點動A3 | Button=0 | IDLE | 位置保持10 |
| 持續B1 | 新RunRequest | RUN | 放開仍持續 |
| 持續B2 | Stop=1 | IDLE | 撤銷輸出 不回成功 |
| 單次C1 | 新OneShotRequest | BUSY | 目標100鎖定 |
| 單次C2 | 位置40 新請求 | BUSY | 拒絕新請求 |
| 單次C3 | 到100且無Stop | DONE | 只回一次成功 |
本例每次只採用一個狀態轉移,故障優先於一般操作;取消、停止與完成的細節依下列固定案例核對。不同設備改用其他政策時,文字、事件表與程式必須一起修改。
Stop與到達目標同時成立時,本例採Stop優先,回報中止而非Done。所有例子的立即停止都指本次邏輯判斷撤銷命令;實際機械停止時間另由硬體與控制設計決定。每掃描加五只是虛擬位置演示,不可當成與時間無關的速度控制。
按鍵長按 失去允許與恢復允許
先對點動做一個完整事件序列:按住、允許消失、允許恢復、放開、再次按下。本例在允許消失時撤銷命令,即使按鍵一直保持,允許恢復後也不自行點動;必須先放開再按下。這比只測按住與放開多兩個邊界,能查出禁止期間留下的舊操作。
持續運轉測試的關鍵是分開啟動事件與運轉狀態。按鈕放開後,啟動事件已經結束,但運轉狀態仍保持;停止成立時清除運轉狀態。停止解除後若按鈕仍高,也不能直接重新建立運轉,必須等到新的合法操作。否則看似使用上升緣,仍可能被不正確初始化繞過。
單次動作則要把目標與工作識別碼一起鎖定。忙碌中按第二次,原工作的位置、目標和識別碼都保持不變,只記錄被拒絕的新請求。到達目標後,先回報本次結果,再回待機;若原按鈕尚未放開,不把它當下一次操作。
把三種命令同時接到同一個虛擬輸出前,先做互斥判斷。本例同時收到兩種操作便拒絕並報衝突,不依程式排列順序挑一個執行。這個規則讓教學結果容易核對;若現場需要手動優先或特定模式優先,就改成明確矩陣並重跑所有組合。
最後檢查完成與中止的區別。單次動作走到目標才是成功;途中按停止,雖然輸出也變零,結果應是中止。畫面若只顯示已停止,使用者無法知道是否做完。保留工作識別碼、最後位置與結束原因,後續報表才不會把未完成動作算成完成。
失敗先查 適用限制與常見問題
觀察RunState、JogRun、Busy、位置與Done的時序。完成結果是點動放開即停、RUN受Stop、故障與禁止條件結束、ONE_SHOT只產生一次Done;失敗先查命令是否用上升沿、Stop是否優先於輸出,再查Busy期間是否錯誤覆寫目標。
三個常見問題
持續運轉可以只靠回授嗎?還要加 Stop、故障和模式許可。單次動作要上升緣嗎?通常要,避免長按重啟。點動放開仍動怎麼查?先查取樣與保持狀態。
測試三種命令時,不要只改按鈕而忽略操作速度。對點動要測一掃描短按、跨多掃描長按和按鈕在禁止條件成立時放開;對持續運轉要測啟動後 Stop 同掃描成立、故障中按下和重新 RUN;對單次動作要測完成瞬間再次按下、執行中長按和 Done 後仍未放開。將每次 Button、前次 Button、命令事件、Busy、位置與 ErrorCode 記錄下來,才能分辨是上升緣漏抓、狀態保持錯誤或完成條件錯誤。三種命令最後都應匯入同一個輸出允許決策點。
命令名稱和輸出名稱要分開,例如 RunRequest 不等於 RunPermit,JogRequest 不等於 JogRun。先計算所有請求,再套用 Stop、Fault、Mode 和互斥條件,最後只寫一次虛擬輸出。若同一掃描同時收到點動與持續運轉,本例全部拒絕並報命令衝突;若單次動作已完成,新的上升緣要等回到待機才接受。
教學時可以用三色狀態燈表示三種命令,但燈號只反映虛擬狀態,不能直接代表安全輸出。每次操作先看 Permit,再看命令事件,最後看 RunPermit;若燈亮而事件沒有變化,查綁定或取樣;若事件有變化而燈不亮,查狀態轉移與輸出決策。這個分層能把人機操作問題和 PLC 邏輯問題分開。
操作驗收與適用限制
驗收時應看到JogButton放開即停止、RUN遇Stop停止、ONE_SHOT只產生一次Done;Busy期間的新命令要留下拒絕原因。限制是位置更新與速度皆為虛擬案例,Q06UDVCPU實際輸出模組、脈波或馬達控制仍需依硬體與專案指令另行設計。
請做四項測試:點動按住與放開、RUN啟動與Stop、單次完成、Busy時重送。重新RUN前清除RunState與目標值,避免保持資料讓ONE_SHOT誤觸發;先在不接實體輸出的虛擬資料上核對。
適用型號與限制:概念可套用具備位元與狀態資料的 PLC;實際指令、資料型別、計時單位、模式切換與復歸行為必須依目標 CPU、工程軟體和設備規格確認。