階梯圖是什麼?PLC 階梯圖入門完整教學
階梯圖(Ladder Diagram, LD)是 PLC 最主流的程式語言。它長得像電路圖,不是巧合——它就是為了讓看得懂繼電器控制盤的電氣技師,能直接看懂 PLC 程式而設計的。
一、為什麼叫「階梯」圖?
因為它長得像一把梯子:
左母線 右母線 │ │ ├──[ X000 ]──────────────────────( Y000 )───┤ ← 第 1 階 (Rung) │ │ ├──[ X001 ]───[/X002 ]───────────( Y001 )───┤ ← 第 2 階 │ │ ├──[ X003 ]──┬──[ X004 ]─────────( Y002 )───┤ ← 第 3 階 │ │ │ │ └──[ X005 ]──┘ │
左右兩條垂直線是母線(想像成電源的正負極),中間每一條橫的就是一階(Rung)。電流從左邊流向右邊,如果一路暢通,右邊的線圈就會動作。
重要觀念:那不是真的電流
階梯圖裡的「電流」是虛擬的,PLC 內部並沒有電真的在跑。它只是借用電工師傅熟悉的視覺語言來表達布林邏輯。
但這個比喻非常好用:串聯 = AND,並聯 = OR。第 2 階是 X001 AND (NOT X002);第 3 階是 X003 AND (X004 OR X005)。
階梯圖裡的「電流」是虛擬的,PLC 內部並沒有電真的在跑。它只是借用電工師傅熟悉的視覺語言來表達布林邏輯。
但這個比喻非常好用:串聯 = AND,並聯 = OR。第 2 階是 X001 AND (NOT X002);第 3 階是 X003 AND (X004 OR X005)。
二、常開與常閉——最重要的分野
| 符號 | 名稱 | 什麼時候導通? | 三菱指令 |
|---|---|---|---|
─[ X ]─ | 常開接點 (NO) | X = ON 時導通 | LD X / AND X |
─[/X]─ | 常閉接點 (NC) | X = OFF 時導通 | LDI X / ANI X |
─( Y ) | 輸出線圈 | 左邊導通時,Y 變 ON | OUT Y |
常閉接點是「反相」的:訊號沒來的時候它是通的,訊號一來反而斷開。新手最常在這裡卡住。
最容易搞混的地方:程式裡的常閉 ≠ 現場按鈕是常閉
這是兩件事:
· 現場的按鈕實體接線是常開還是常閉(硬體)
· 程式裡畫的接點是常開還是常閉(軟體)
停止按鈕的標準做法是:實體用常閉接線(沒按時導通)。
所以沒按下時,PLC 輸入
因此在程式裡,運轉條件必須「X001 = ON 時成立」→ 要用常開接點:
一句話:實體常閉 → 程式常開。接線與程式的接點型式是相反的。
為什麼這樣才安全?斷線安全:線斷了 → X001 變 OFF →
如果實體接成常開,線一斷 X001 恆為 OFF,程式判定「沒人按停止」→ 你永遠停不下來。
寫反了會怎樣?如果你用
詳細說明見:自保持電路教學
這是兩件事:
· 現場的按鈕實體接線是常開還是常閉(硬體)
· 程式裡畫的接點是常開還是常閉(軟體)
停止按鈕的標準做法是:實體用常閉接線(沒按時導通)。
所以沒按下時,PLC 輸入
X001 = ON;按下、或線斷掉 → OFF。因此在程式裡,運轉條件必須「X001 = ON 時成立」→ 要用常開接點:
AND X001。一句話:實體常閉 → 程式常開。接線與程式的接點型式是相反的。
為什麼這樣才安全?斷線安全:線斷了 → X001 變 OFF →
AND X001 不成立 → 設備停止。跟按下停止鈕的效果一樣。如果實體接成常開,線一斷 X001 恆為 OFF,程式判定「沒人按停止」→ 你永遠停不下來。
寫反了會怎樣?如果你用
ANI X001 去讀常閉接線的停止鈕:X001 平常就是 ON,ANI 恆為 false → 設備永遠啟動不了。而現場為了「讓它動」,最直覺的做法就是把停止鈕改接成常開——失效安全就在那一刻消失。詳細說明見:自保持電路教學
三、PLC 是怎麼執行階梯圖的?——掃描週期
這是初學者最容易誤解的一點。PLC 不是像電路一樣同時運作,它是一階一階、由上而下、循環執行的。
每一個循環叫做一次掃描(Scan),分三個階段:
┌─────────────────────────────────────────┐
│ 1. 讀取輸入 (Input Scan) │
│ 把所有 X 的實體狀態,一次拍快照存起來 │
├─────────────────────────────────────────┤
│ 2. 執行程式 (Program Scan) │
│ 從第 1 階算到最後一階,用「快照」的值 │
│ 運算結果先寫進內部的輸出映像區 │
├─────────────────────────────────────────┤
│ 3. 更新輸出 (Output Scan) │
│ 把輸出映像區的值,一次送到實體 Y 端子 │
└─────────────────────────────────────────┘
↓ 回到 1,不斷重複
一圈通常 1~10 ms(視程式長度與機種)
這會導致三個很實際的後果:
1. 程式執行中,輸入不會變。 就算實體按鈕在第 5 階執行到一半時被按下,程式看到的仍是掃描開始時拍的那張快照。要到下一輪掃描才會反應。
2. 順序會影響結果。 如果第 10 階把 M0 設為 ON,而第 3 階用到 M0,那第 3 階這一輪用到的是上一輪的 M0 值——慢了一拍。這是「順序錯誤」類 bug 的主要來源。
3. 同一個輸出寫兩次,後面的會蓋掉前面的。 因為輸出映像區被最後執行的那一階覆寫。這叫「雙線圈(Double Coil)」,是明確的禁忌。
1. 程式執行中,輸入不會變。 就算實體按鈕在第 5 階執行到一半時被按下,程式看到的仍是掃描開始時拍的那張快照。要到下一輪掃描才會反應。
2. 順序會影響結果。 如果第 10 階把 M0 設為 ON,而第 3 階用到 M0,那第 3 階這一輪用到的是上一輪的 M0 值——慢了一拍。這是「順序錯誤」類 bug 的主要來源。
3. 同一個輸出寫兩次,後面的會蓋掉前面的。 因為輸出映像區被最後執行的那一階覆寫。這叫「雙線圈(Double Coil)」,是明確的禁忌。
雙線圈的錯誤示範
LD X000 OUT Y000 ; 第一次寫 Y000 LD X001 OUT Y000 ; ★ 又寫一次 Y000 → 前面那個完全無效
不管 X000 是什麼狀態,Y000 最後永遠等於 X001。除錯時會非常抓狂,因為你看第一階明明是對的。
正確做法: 兩個條件要用 OR 併在同一階。
LD X000 OR X001 OUT Y000 ; 只寫一次
四、常用元件符號一覽(三菱)
| 代號 | 名稱 | 用途 |
|---|---|---|
| X | 輸入 | 按鈕、感測器、限位開關(唯讀) |
| Y | 輸出 | 接觸器、電磁閥、指示燈 |
| M | 內部繼電器 | 程式中間狀態,不對外(最常用) |
| T | 計時器 | 延遲、防抖(詳見計時器教學) |
| C | 計數器 | 計件、批次控制 |
| D | 資料暫存器 | 存數值:溫度、液位、設定值 |
實務原則:輸出 Y 不要拿來當中間狀態用
需要保存狀態就用 M,Y 只在最後「跟隨」M。這樣邏輯與硬體分離,之後要加手動模式、遠端啟動、安全條件都不用動到核心邏輯。這是分辨老手與新手的一個明顯指標。
需要保存狀態就用 M,Y 只在最後「跟隨」M。這樣邏輯與硬體分離,之後要加手動模式、遠端啟動、安全條件都不用動到核心邏輯。這是分辨老手與新手的一個明顯指標。
五、西門子的差異
西門子 S7-1200/1500 的階梯圖(LAD)邏輯相同,但:
- 位址寫法不同:
%I0.0(輸入)、%Q0.0(輸出)、%M0.0(位元記憶體) - 強烈建議用符號名稱而不是絕對位址(在 PLC 變數表定義
Start_PB、Motor_Run),程式可讀性天差地遠 - 計時器是功能塊(TON/TOF),每個都需要背景資料塊,不像三菱是全域 T 編號
- 常用 SCL(結構化文本)寫複雜運算,LAD 寫互鎖與安全邏輯——兩者混用是常態
六、什麼時候不該用階梯圖?
階梯圖擅長布林邏輯(開關、互鎖、時序),但不擅長:
- 複雜數學運算——PID 調節、流量積算、單位換算,用 ST 寫三行,用階梯圖要畫三十階
- 迴圈與陣列——例如「掃描 32 個感測器找出最大值」,ST 一個 FOR 迴圈搞定
- 字串處理、通訊封包解析——階梯圖幾乎沒辦法做
實務上的標準做法是混用:主控邏輯、互鎖、安全用階梯圖(電氣人員看得懂,現場好除錯);運算、資料處理用 ST。這也是 IEC 61131-3 制定多種語言的原因。
ST 的部分請見:ST 結構化文本入門教學
小結
- 階梯圖 = 借用電路圖視覺的布林邏輯。串聯 AND、並聯 OR
- 常閉接點是反相;程式的常閉 ≠ 實體按鈕的常閉,兩者要一起設計
- PLC 是循環掃描,不是同步電路——順序會影響結果
- 絕不雙線圈:同一個輸出只能在一個地方寫
- 狀態用 M,輸出 Y 只跟隨
- 複雜運算改用 ST,不要硬用階梯圖
AI 產生的 PLC 程式,到底能不能信?
我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。
還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。
→ 我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試
我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。
還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。
→ 我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試
用中文描述需求,直接產生階梯圖
不用背指令、不用記元件編號。說出控制需求,AI 立即產生階梯圖與助記碼,並標註每一階在做什麼。支援三菱、西門子、歐姆龍、台達、士林。
免費試用 AI PLC 工具 →免費會員每月 15 點 · 不需信用卡 · 產生失敗不扣點
易歐特科技有限公司 · 工業自動化 PLC 程式設計與環控系統整合 · 複雜專案可委託開發