← 所有文章

兩個命令同時成立怎麼辦 PLC 優先順序與互斥條件設計

· 站長

以虛擬輸送段建立前進/後退命令矩陣,同時命令停止並報衝突,再以單一決策層避免輸出互相覆寫。

先分清衝突 互斥與執行順序

輸送段同時收到前進與後退請求時,最先要決定的是規格:本例採兩個請求同時成立就保持停止,並回報命令衝突。命令衝突是輸入的問題;狀態互斥是流程規則;程式執行順序則是程式如何得到結果。把三件事混在一起,常會變成前進段先寫 ON、後退段再寫 OFF,最後只剩一個看似偶然的結果。

概念 本例定義 要觀察的資料
ForwardReq 要求向前 來源命令
ReverseReq 要求向後 來源命令
Conflict 兩者同時為 1 診斷旗標
EffectiveCmd 唯一有效命令 決策結果
輸出 由決策層集中寫入 ForwardOut/ReverseOut

本篇所有輸送段都是虛擬案例,不接馬達,不把一般邏輯當成安全互鎖。實體設備仍須依機械、驅動器和安全規格設計。

先寫命令優先矩陣

前進 後退 預期結果 衝突
0 0 停止 0
1 0 前進 0
0 1 後退 0
1 1 停止並報衝突 1
  1. 列出每個命令的來源、有效電平和取消條件。

  2. 決定同時成立時拒絕、固定優先或保持原狀;本例選拒絕並停止。

  3. 把命令衝突做成獨立旗標,讓 HMI 和診斷能看到原因。

  4. 只在一個決策層產生 ForwardOut、ReverseOut。

  5. 對矩陣每一列逐一測試,不用程式排列順序代替規格。

通用偽碼(需依目標 PLC 語法調整):Conflict := ForwardReq AND ReverseReq; ForwardOut := ForwardReq AND NOT ReverseReq; ReverseOut := ReverseReq AND NOT ForwardReq; IF Conflict THEN ForwardOut:=FALSE; ReverseOut:=FALSE; END_IF。實作時要確認目標 PLC 的布林語法、輸出更新和互鎖需求。

虛擬輸送段逐步案例

假設前進在掃描 2~4 成立,後退在掃描 4~5 成立。掃描 4 同時成立,依矩陣停止並設 Conflict;掃描 5 只剩後退,才允許後退。這個結果是依案例規格手算,不是模擬或實機結果。

掃描 ForwardReq ReverseReq Conflict ForwardOut ReverseOut
1 0 0 0 0 0
2 1 0 0 1 0
3 1 0 0 1 0
4 1 1 1 0 0
5 0 1 0 0 1
6 0 0 0 0 0

若掃描 4 仍前進,先查是否有其他程式段覆寫了決策結果;若掃描 5 仍停止,查 Conflict 是否被鎖存而沒有復歸,或命令輸入是否仍同時成立。

單一決策點與失敗排查

現象 先取得的證據 先查哪裡
同時命令仍前進 兩個請求、Conflict、輸出逐掃描值 決策層是否真的使用互斥條件
輸出忽開忽關 程式段與執行順序 是否多處寫同一輸出
衝突一直存在 輸入來源與復歸記錄 按鈕、HMI 或通訊命令是否未清
一側永遠無法動 矩陣與有效電平 位元極性或模式條件

完成後應看到:零命令時兩輸出皆 OFF;單一命令成立時只有對應輸出 ON;兩命令同時成立時兩輸出皆 OFF 且 Conflict=1。失敗時依序查命令來源、矩陣、決策層唯一寫入點,再查輸出模組。不要先交換程式段位置。

適用型號與限制:本文適用具有布林運算和輸出控制的 PLC 概念,包括 Q06UDVCPU、FX、S7 等;實際輸出刷新、互斥指令、任務順序和安全互鎖必須依目標平台及設備規格確認。

操作紀錄與復原演練

進一步操作時,先將所有命令強制設為零,確認兩個輸出關閉,再逐一打開前進、後退與停止。對同時命令要觀察 Conflict 是否只表示衝突,不要把它當成停止命令本身。若衝突解除後要求人工復歸,測試 Ack 之前輸出應維持關閉;若規格允許自動恢復,也要記錄恢復的條件和掃描。把每次結果與程式版本保存,修改矩陣後重新跑四種基本組合和所有新增組合。這樣能確認正常、異常和邊界都由同一決策層處理。

教學驗收時還要檢查輸出命令的唯一性。搜尋同一輸出位址、符號、別名、SET、RESET、MOV 與功能塊輸出,確認最後只有決策層寫入。若停止或警報具有最高優先,將其放在決策公式中而不是只放在程式最後一段。若方向切換需要停頓,另加狀態和定時條件,不能把前進與後退同時接通當成換向。驗收表中每個「若不同先查」都要能找到一筆證據,完成後才把案例標為通過。

把命令衝突當成可重現的測試,不要只在輸出燈上判斷。先建立測試表,記錄掃描序號、前進請求、後退請求、停止條件、Conflict、有效命令與兩個輸出。正常案例是只有前進時只開前進,只有後退時只開後退;邊界案例是兩個請求在同一掃描同時成立,預期兩個輸出都關閉並留下衝突原因。若兩個請求在相鄰掃描交替,依設備規格決定是否允許換向,不能讓排列順序偷偷決定。測試完成後先解除輸出命令,再清除測試旗標。

測試狀況 正常結果 異常時先查
前進單獨成立 ForwardOut=1、ReverseOut=0 有效電平與決策條件
後退單獨成立 ForwardOut=0、ReverseOut=1 命令來源與輸出寫入點
同時成立 兩輸出=0、Conflict=1 是否有互斥條件
衝突解除 依規格恢復或等待 Ack Conflict 復歸策略

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

從原始請求追到唯一有效命令

把這個例子想成三層資料。第一層保存前進與後退的原始請求,第二層依矩陣決定停止、前進或後退,第三層才產生兩個互斥輸出。不要為了讓衝突消失而直接把其中一個原始請求清掉,因為你會失去診斷證據。操作畫面應能看到哪兩個來源同時提出要求。

例如現場按鈕要求前進,而遠端畫面仍保持後退。兩個來源單獨測試都正常,合在一起才停止。正確處理是查明遠端命令是否有解除或逾時規則,而不是把前進程式搬到最後一行強行覆蓋後退。程式順序改變後看似恢復,卻把原本明確的衝突變成難以預測的動作。

本篇基本矩陣採電平判斷,衝突一解除,剩下的單一命令就生效。因此掃描四停止、掃描五後退是刻意定義的結果。若你的設備要求衝突後必須放開兩鍵,再重新按下才可動作,就要增加待重新操作狀態;不能宣稱只靠本文三個布林公式已經具備這種行為。

練習時再加入停止請求,規定停止優先於任何方向。測試前進加停止、後退加停止、雙方向加停止三種組合,預期兩輸出都為零;衝突旗標仍可保留原始雙方向狀態。這樣診斷能同時說明停止被按下,以及方向來源存在衝突,不會把兩個原因混成一個模糊的未允許。

最後對照硬體限制。互斥只保證邏輯上不會同時提出兩方向,不能保證接觸器沒有黏住,也不能證明馬達已停穩。需要換向等待或回饋確認的設備,應另有狀態流程和適當硬體措施。本文虛擬矩陣的驗收範圍到命令決策為止,將這個界線寫清楚,才能正確移用。

常見問題與附錄

問題 回答
同時命令可以固定前進優先嗎? 可以,但必須寫進矩陣並評估設備風險;本例採停止。
互斥條件能取代安全回路嗎? 不能,一般 PLC 邏輯不是安全功能。
為什麼要保留 Conflict? 輸出停止只告訴你結果,Conflict 才告訴你命令衝突原因。
多個程式段各寫一個輸出可以嗎? 容易覆寫;建議集中決策與唯一實體寫入。

附錄驗收:保存命令矩陣、逐掃描表、輸出寫入交叉參照、衝突復歸條件和未驗證項目。若設備要在衝突後人工確認才恢復,另設 Ack 或 Reset 規則,不要讓輸入一消失就自動動作。

本篇依通用布林控制概念撰寫;未引用特定廠牌指令。案例和偽碼均為教學推導。

延伸閱讀


使用 PLC 工具箱 →