PLC 自保持電路怎麼寫?啟動停止自保持完整教學
自保持電路(Self-holding,也叫自鎖電路)是 PLC 階梯圖的第一課,也是幾乎每個實際專案都會用到的基本結構。按一下啟動鈕,馬達就持續運轉,不必一直按著——這就是自保持在做的事。
這篇文章講清楚三件事:自保持為什麼要這樣寫、停止鈕為什麼一定要用常閉接點、以及新手最常踩的三個坑。
一、為什麼需要自保持?
PLC 的按鈕訊號是「點動」的:按下去是 ON,放開手馬上變 OFF。如果直接寫成:
LD X000 ; 啟動按鈕 OUT Y000 ; 馬達
結果會是手按著馬達才轉,放開就停。這叫寸動(Jog),只有在對位、試車時才要這種行為。
要讓馬達「按一下就持續運轉」,就得讓輸出自己把自己保持住——這就是自保持。
二、標準自保持電路(三菱)
|--[ X000 ]--+--[ X001 ]--[ X002 ]------( M0 )--| | | |--[ M0 ]--+ | |--[ M0 ]-------------------------( Y000 )--|
助記碼:
LD X000 ; 啟動按鈕(實體常開接線,按下 = ON) OR M0 ; ← 自保持接點,關鍵就在這一行 AND X001 ; 停止按鈕(實體常閉接線 → 平常 = ON → 程式用常開接點) AND X002 ; 過載保護(實體常閉接線 → 平常 = ON → 程式用常開接點) OUT M0 ; 運轉狀態 LD M0 OUT Y000 ; 馬達接觸器
停止鈕的實體接線是常閉,但程式裡用的是常開接點(
AND X001)。很多人(包括很多 AI 工具)會寫成
ANI X001,理由聽起來很順:「停止鈕是常閉的,所以程式也用常閉」。那是錯的。常閉接線的停止鈕沒按下時電路是導通的 → X001 平常就是 ON。
用
ANI 去讀它,條件恆為 false → 馬達永遠啟動不了。口訣:實體常閉 → 程式常開。
它是怎麼動的?
| 動作 | X000 | M0 | 結果 |
|---|---|---|---|
| 初始 | OFF | OFF | 馬達停止 |
| 按下啟動 | ON | OFF→ON | M0 導通,馬達運轉 |
| 放開啟動鈕 | OFF | ON | M0 自己的接點接手,持續運轉 |
| 按下停止 | OFF | ON→OFF | X001 變 OFF → AND X001 斷開,M0 失電,馬達停止 |
| 停止鈕的線斷掉 | OFF | ON→OFF | X001 同樣變 OFF → 馬達也會停。這就是斷線安全 |
OR M0這一行把「M0 自己的接點」並聯在啟動鈕旁邊。啟動鈕放開後,電流改從 M0 自己的接點流過來,所以 M0 能自己撐住自己——「自保持」三個字就是這個意思。
三、停止鈕的實體接線為什麼一定要常閉?
這是新手最常搞錯、也最危險的一點——而且錯的方式有兩種,一種讓設備停不下來,另一種讓設備動不了。
現場的停止按鈕,實體接線必須用常閉接點(NC, Normally Closed)——沒按的時候是導通的,按下去才斷開。
假設停止鈕的線斷了、端子鬆脫了:
✓ 常閉接線:斷線 → 訊號變 OFF → 跟「被按下」一樣 → 設備停機。安全。
✗ 常開接線:斷線 → 訊號永遠 OFF → 程式判定「沒人按停止」→ 你按停止鈕也停不下來。 危險。
工業安全的原則是:任何單一故障都不能讓設備「無法停止」。所以停止、急停、過載跳脫,實體一律用常閉。
那程式裡該用哪種接點?常開。
這一步幾乎所有人都會想反,包括市面上的 AI 工具。跟著訊號走一次就清楚了:
| 狀況 | 常閉接線的實體 | PLC 輸入 X001 | 運轉條件該不該成立? |
|---|---|---|---|
| 正常(沒按停止) | 導通 | ON (1) | 要成立 → 馬達可以轉 |
| 按下停止 | 斷開 | OFF (0) | 不成立 → 馬達停 |
| 線斷掉 | 斷開 | OFF (0) | 不成立 → 馬達停(安全) |
條件要在 X001 = 1 時成立 → 這正是常開接點的定義 → 程式寫 AND X001。
ANI X001 會發生什麼事?X001 平常就是 1,
ANI X001 恆為 false → 條件永遠不成立 → 馬達永遠啟動不了。然後真正的災難才開始:現場為了「讓它動」,最直覺的做法就是把停止鈕改接成常開。
從那一刻起,線斷掉 = X001 恆為 OFF = 程式判定「沒人按停止」= 停不下來。
一個接點寫反,毀掉的是整套失效安全設計。而且沒有人會發現,因為設備「看起來正常」。
同理,熱動電驛(過載保護)也是常閉接線,程式一樣用常開接點 AND X002 讀取。
ANI / LDI 什麼時候該用?用在內部旗標(互鎖:
ANI M11)、計時器(ANI T0),以及故障偵測——例如「過載跳脫時把故障鎖起來」:LDI X002 → X002 變 OFF(跳脫)時成立 → 鎖住故障記憶。這個用法是對的。差別在於:運轉條件用常開接點,故障偵測才用反相接點。
四、西門子(S7-1200 / S7-1500)的寫法
邏輯完全一樣,只是元件與指令不同。SCL 結構化文本一行就能表達:
// 自保持
// Stop_PB 與 Overload 實體都是常閉接線 → 平常 = TRUE
// 所以直接 AND 進去,不要加 NOT
"Motor_Run" := ("Start_PB" OR "Motor_Run")
AND "Stop_PB"
AND "Overload";
程式中該用常開觸點還是常閉觸點,取決於實體怎麼接,不是取決於按鈕叫什麼名字。
停止鈕實體用常閉接線(標準做法)→ 訊號平常是 1,按下才變 0 → 程式中用常開觸點讀取即可(訊號為 1 時導通)。
SCL 裡寫成
AND NOT "Stop_PB" 是同一個錯誤的另一種長相:訊號平常是 1,NOT 之後恆為 0,馬達永遠啟動不了。這跟三菱的
AND X001 是同一件事的兩種寫法。實體常閉 → 程式常開,在哪一牌都一樣。
五、新手最常犯的三個錯誤
錯誤 1:忘了 OR 自保持接點
只寫 LD X000 / AND X001 / OUT M0,結果放開按鈕就停。這是最常見的。
錯誤 2:自保持接點抓錯元件
寫成 OR Y000 而不是 OR M0。一旦輸出被別的邏輯干擾(例如手動模式強制 OFF、或輸出被其他 rung 覆寫),自保持就失效了。
正確做法:用內部繼電器 M 保持「狀態」,輸出 Y 只是「跟隨」M。 狀態與輸出分離後,之後要加手動/自動切換、互鎖、安全條件、遠端啟動,都很容易插進去,不會動到自保持結構本身。
錯誤 3:以為程式裡寫了急停就等於安全
程式裡的急停判斷只能當輔助。PLC 可能當機、掃描停止、輸出模組接點黏死——這些情況下程式寫得再漂亮都沒有用。
真正的急停必須用硬體安全迴路實現:安全繼電器(如 Pilz PNOZ、Siemens 3SK)或安全型 PLC,直接切斷輸出模組或接觸器的控制電源。程式中的急停訊號,只負責讓 HMI 顯示、記錄事件、讓邏輯復歸。
這不是保守,這是 IEC 61508 / ISO 13849 的基本要求,也是職安檢查的重點項目。
六、實務上還會加的兩段
; 運轉 / 停止指示燈 LD M0 OUT Y001 ; 綠燈:運轉中 LDI M0 OUT Y002 ; 紅燈:停止中 ; 過載故障記憶(跳脫後不自動復歸) LDI X002 ; 過載跳脫(常閉接線,跳脫時 OFF) OR M10 ANI X003 ; 故障復歸按鈕 OUT M10 ; 故障記憶 LD M10 OUT Y003 ; 故障指示燈
故障記憶的用意:過載跳脫後,就算熱動電驛冷卻自動復歸,設備也不能自己重新啟動——必須有人到現場確認原因、按下復歸鈕。這同樣是安全設計的一環,而且是驗收時常被要求的項目。
小結
- 自保持的核心就是
OR一個自己的接點 - 停止、急停、過載一律常閉接線,程式用反相接點讀取(斷線安全)
- 狀態用 M 保持,輸出 Y 只跟隨——不要讓輸出自己保持自己
- 程式裡的急停只是輔助,真正的急停必須是硬體安全迴路
我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。
還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。
→ 我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試
不想每次都從頭寫?
易歐特的 AI PLC 工具內建「馬達啟停自保持」標準控制塊,已包含過載互鎖、故障記憶等現場實務寫法。用中文描述需求即可產生,支援三菱、西門子、歐姆龍、台達、士林。
免費試用 AI PLC 工具 →免費會員每月 15 點 · 不需信用卡 · 產生失敗不扣點
易歐特科技有限公司 · 工業自動化 PLC 程式設計與環控系統整合 · 委託開發請洽 需求提交