PLC 完整學習教材
可程式邏輯控制器:從初級、中級到高級
| 適用對象: | 自動化初學者、電控技師、系統整合工程師 |
| 涵蓋範圍: | 硬體接線、梯形圖、IEC 61131-3、狀態機、PID、 |
| 工業通訊、運動控制、功能安全、工業 4.0 | |
| 編排方式: | 三篇十七章,每章含學習目標、實務筆記與練習題 |
| 版本日期: | 2026 年 7 月 5 日 |
| 第一篇:初級 | 第二篇:中級 | 第三篇:高級 |
| 入門與基本功 | 語言、設計與控制 | 通訊、安全與整合 |
導讀:如何使用本教材
本教材依能力層級分為三篇:
第一篇(初級,第 1–5 章):不需任何 PLC 背景。目標是看懂 硬體型錄與接線圖、理解掃描週期,並能獨立寫出含自保持、計時器、計數器的梯形圖程式。
第二篇(中級,第 6–11 章):以 IEC 61131-3 為主軸, 學會結構化文字(ST)、資料型別、功能塊模組化與狀態機設計,並掌握類比訊號、PID 調節 與 HMI/警報設計。這是從「會寫」到「寫得好」的分水嶺。
第三篇(高級,第 12–17 章):面向系統整合:工業通訊協定、 伺服運動控制、機械安全與功能安全、軟體工程實務(版本控制、模擬調機、測試), 以及工業 4.0/IIoT 資料整合。
建議的學習節奏:初級篇搭配一台入門 PLC(或廠商免費模擬器)逐章實作,約 2–4 週; 中級篇以一個完整小專案(例如自動門或小型輸送分揀)貫穿,約 1–2 個月; 高級篇依工作領域挑選章節深入。每章結尾的練習題請務必動手完成——PLC 是實作技能, 只讀不寫是學不會的。
本書範例以 IEC 61131-3 標準語法為主(各家平台語法略有出入,觀念完全相通), 梯形圖符號採國際慣用的 NO/NC 接點與線圈表示法。
認識 PLC
理解 PLC 的定義、發展背景與適用場景;能區分 PLC、繼電器控制、DCS 與微控制器; 認識主流品牌產品線,看懂基本規格。
什麼是 PLC
可程式邏輯控制器(Programmable Logic Controller, PLC)是一種專為工業環境設計的數位運算 電子裝置:它週期性地讀取輸入(按鈕、感測器、極限開關…),依使用者撰寫的程式進行邏輯運算, 再驅動輸出(電磁閥、接觸器、指示燈、變頻器…)。與一般電腦相比,PLC 的核心特質是:
確定性(Deterministic):掃描週期固定且可預測,毫秒級反應。
強固性:耐震動、耐電氣雜訊、寬溫域運作,設計壽命常達 10 年以上。
I/O 導向:硬體與指令集都圍繞著大量離散/類比 I/O 點設計。
可維護性:現場電機人員可透過梯形圖直接監看、除錯與修改。
發展簡史
1968 年,美國通用汽車(GM)Hydra-Matic 變速箱廠為了擺脫每次改車型就要重新配線數千顆 繼電器的困境,公開徵求「可用程式取代配線」的控制器。1969 年 Modicon 084(Dick Morley 團隊) 成為第一台商用 PLC。往後五十餘年的演進大致為:
| 年代 | 里程碑 |
|---|---|
| 1970s | 取代繼電器邏輯;梯形圖成為主流語言 |
| 1980s | 類比控制、PID 進入 PLC;各廠專有通訊網路出現 |
| 1990s | IEC 61131-3 標準發布(1993),統一五種程式語言 |
| 2000s | 工業乙太網興起(EtherNet/IP、PROFINET);PLC 與運動控制整合為 PAC |
| 2010s | 安全 PLC 普及、OPC UA 標準化、軟體工程方法導入 |
| 2020s | IIoT/邊緣運算、軟體定義 PLC(Soft PLC)、雲端整合與虛擬調機 |
PLC 與其他控制方案的比較
| 繼電器控制 | PLC | DCS | 微控制器/工控機 | |
|---|---|---|---|---|
| 邏輯變更 | 重新配線 | 改程式即可 | 改組態 | 改韌體、需開發能力 |
| 規模 | 小型、固定 | 數十至數萬點 | 大型連續製程 | 依設計而定 |
| 擅長領域 | 極簡單互鎖 | 離散/批次控制 | 石化、電廠等連續程序 | 量產產品、特殊演算法 |
| 即時性 | 硬體級 | ms 級、確定性 | 100 ms 級 | 依設計 |
| 維護人員 | 電匠 | 電控技師 | 儀控工程師 | 軟韌體工程師 |
| 單點成本 | 低(點少時) | 中 | 高 | 開發成本高、量產便宜 |
實務選型口訣:點數少且永不改——繼電器;離散設備與產線——PLC; 大型連續製程、需高階程序管理——DCS;量產設備內嵌控制——微控制器。 現代界線逐漸模糊:高階 PLC(PAC)已能承擔小型 DCS 的角色。
主流品牌與產品線概覽
| 品牌 | 代表系列 | 常見定位 |
|---|---|---|
| Siemens | LOGO! / S7-1200 / S7-1500 | 歐系主流;TIA Portal 整合開發環境 |
| Rockwell (AB) | Micro800 / CompactLogix / ControlLogix | 美系主流;Studio 5000、CCW |
| Mitsubishi | FX5U / Q / iQ-R | 日系主流;GX Works,亞洲市占高 |
| Omron | CP2E / NX / NJ | 日系;Sysmac Studio,機械控制強 |
| Keyence | KV-8000 系列 | 上手快、感測器整合佳 |
| Delta / FATEK / LS | DVP、AS / FBs / XGB | 高性價比,中小型機台常見 |
| Beckhoff | CX / TwinCAT | PC-based、EtherCAT 主導者 |
閱讀規格表時,先看五件事:I/O 點數與擴充能力、程式容量與掃描速度、 通訊介面(乙太網路口數、串列埠、支援協定)、特殊功能 (高速計數、脈衝輸出、PID 迴路數)、開發軟體與授權費用。
典型應用場景
輸送帶與分揀、包裝機、充填機、立體倉儲、電鍍與表面處理線、給排水與泵浦站、 HVAC 空調箱、隧道與交通號誌、停車場設備、汙水處理廠、食品 CIP 清洗流程等。 凡是「感測器進、致動器出、邏輯與順序控制為主」的場合,就是 PLC 的主場。
說明 PLC 與繼電器控制在「變更邏輯」上的本質差異,並舉一個實例。
你的工廠要新建一條 800 點 I/O 的包裝線,以及一座 24 小時連續運轉的化工反應程序, 各應選 PLC 還是 DCS?理由為何?
找一份任意品牌入門 PLC 的型錄,列出它的 I/O 點數、程式容量、通訊介面與支援語言。
硬體架構與電氣接線
認識 PLC 系統的組成模組;理解數位輸入的 Sink/Source(NPN/PNP)差異並能正確接線; 比較三種數位輸出型式;掌握基本的雜訊對策。
系統組成
小型機(Brick/一體式)把上述功能整合在單一機身並提供少量擴充; 中大型機(模組式/機架式)則依需求插槽組合,可熱插拔、可遠端分散 I/O。
數位輸入:Sink 與 Source
24 VDC 數位輸入迴路必有「電流方向」問題,這是初學者最常接錯的地方:
| Sink 輸入(漏型) | Source 輸入(源型) | |
|---|---|---|
| PLC 輸入端子 | 電流流入 PLC | 電流流出 PLC |
| COM 端接法 | COM 接 +24 V | COM 接 0 V |
| 搭配感測器 | NPN(輸出拉到 0 V) | PNP(輸出拉到 +24 V) |
| 市場慣例 | 日系設備常見 | 歐美設備常見 |
NPN 感測器接到 Source 型輸入(或反之)不會燒毀,但訊號永遠不動作。 選購三線式感測器(棕 = +24 V、藍 = 0 V、黑 = 訊號)前,務必先確認 PLC 輸入型式。 許多 PLC 的 COM 端子可自由接 +24 V 或 0 V,兩種皆可支援,但同一組 COM 之下不能混用。
數位輸出型式比較
| 繼電器輸出 | 電晶體輸出 | TRIAC 輸出 | |
|---|---|---|---|
| 負載電源 | AC/DC 皆可 | DC(分 Sink/Source) | AC 專用 |
| 切換速度 | 慢(~10 ms) | 快(μs 級) | 中 |
| 壽命 | 機械壽命有限 | 半導體、近乎無限 | 半導體 |
| 負載能力 | 約 2 A/點 | 約 0.5 A/點 | 約 0.5–1 A/點 |
| 適用 | 通用、小型接觸器 | 高速輸出、電磁閥、脈衝 | AC 燈載、小型 AC 閥 |
需要輸出脈衝(步進/伺服定位)務必選電晶體輸出機種; 驅動大型接觸器或馬達,一律經過中繼繼電器或接觸器,不要讓 PLC 輸出直接承受大電流與突波。 感性負載(電磁閥、繼電器線圈)並聯突波吸收元件:DC 用飛輪二極體、AC 用 RC 突波吸收器。
類比 I/O 概述
工業類比訊號以 4–20 mA 電流迴路為首選(抗雜訊、可偵測斷線:低於 4 mA 即異常), 其次為 0–10 V。解析度以位元數表示:12 bit = 4096 階、16 bit = 65536 階。 詳細的工程單位換算與濾波在第 10 章說明。
配線與雜訊對策
動力與訊號分離:動力線(變頻器輸出尤甚)與訊號線分槽、垂直交叉。
類比與通訊線使用隔離雙絞遮蔽線,遮蔽層單端接地(通常控制盤端)。
接地:控制盤設專用接地排,類比地與動力地分開匯流後單點接地。
電源品質:PLC 電源與動力電源分開,必要時加隔離變壓器或 UPS。
緊急停止迴路必須是硬體迴路(安全繼電器直接切斷動力), 不可只靠 PLC 程式(詳見第 14 章)。
手邊有一顆 PNP 三線式光電感測器,PLC 輸入 COM 應接 +24 V 還是 0 V?畫出接線圖。
一支電磁閥(DC 24 V, 0.3 A)與一台 5.5 kW 馬達的接觸器,各應如何由 PLC 輸出驅動?
為什麼 4–20 mA 比 0–10 V 更適合長距離傳送?「活零點」(live zero)有什麼好處?
PLC 運作原理:掃描週期
理解輸入映像區、程式執行、輸出映像區的循環掃描模型;能解釋掃描時間對反應速度的影響; 認識看門狗、輸入濾波與保持型記憶體。
循環掃描模型
PLC 不是「事件驅動」,而是循環掃描(cyclic scan):
三個關鍵推論:
同一週期內輸入是「凍結」的:程式中無論讀幾次
INPUT1, 值都相同(取自週期開頭的快照)。輸出在週期結尾才一次更新:程式中對同一輸出多次寫入, 只有最後一次生效——這就是「雙線圈問題」的根源(見 4.7 節)。
rung 順序影響結果:前面 rung 改寫的內部變數,後面 rung 立刻看得到; 反之則要等下一個週期。
掃描時間與反應時間
最壞情況的輸入到輸出反應時間 \(\approx\) 輸入濾波時間 \(+\) 2 個掃描週期 \(+\) 輸出元件動作時間。 若掃描週期 5 ms、輸入濾波 10 ms,則保證反應約 20 ms。 高速場合(例如編碼器計數、瞬間通過的物件偵測)應使用高速計數器(HSC)與 中斷程式,它們不受掃描週期限制。
看門狗計時器
CPU 以看門狗(watchdog)監控每次掃描是否在限定時間內完成(如 200 ms)。 程式陷入無窮迴圈(如 WHILE 條件永真)會觸發看門狗,CPU 進入故障停機、輸出全部復歸 ——這是保護機制,也是 WHILE/FOR 在 PLC 中要小心使用的原因。
記憶體區與資料保持
| 區域 | 典型代號 | 說明 |
|---|---|---|
| 輸入映像 | I / X / %I | 每週期自實體輸入更新,程式中唯讀 |
| 輸出映像 | Q / Y / %Q | 程式寫入,週期結尾送實體輸出 |
| 內部繼電器 | M / B | 中間邏輯旗標 |
| 資料暫存器 | D / N / %M | 數值資料 |
| 保持型區域 | Retentive / Latched | 斷電後保留,用於配方、累計值、狀態 |
| 系統旗標 | S / SM | 首次掃描、時鐘脈衝、故障旗標等 |
「上電後狀態機不動」的常見原因之一:狀態變數放在非保持區,上電歸零後卻沒有任何 初始化邏輯。務必利用首次掃描旗標(first scan)在上電第一個週期做初始化—— 決定哪些變數要保持、哪些要歸零,是設計階段就該想清楚的事。
掃描週期 8 ms、輸入濾波 3 ms,一顆按鈕被按下 5 ms 後放開,PLC 保證讀得到嗎?
解釋為什麼「程式中間讀到的實體輸入」不會隨現場即時變化。
什麼情況該用中斷或高速計數器,而不是一般掃描邏輯?各舉一例。
梯形圖基礎
看懂並繪製 NO/NC 接點與線圈;用串並聯實現 AND/OR 邏輯; 熟練自保持(seal-in)與互鎖電路;理解執行順序與雙線圈問題。
從繼電器電路到梯形圖
梯形圖(Ladder Diagram, LD)承襲自繼電器控制圖:左右兩條「電源軌」, 中間橫向的「梯級(rung)」由接點(條件)與線圈(結果)組成。 想像「電力」從左軌經過接點流向右軌:路徑導通,線圈就激磁。
基本元件
NC 接點的意義是「變數為 0 時導通」,與實體開關的常開/常閉是兩回事。 例如停止按鈕實體上採常閉接線(斷線即停機,failsafe), 此時 PLC 讀到的訊號平時為 1,程式中反而要用 NO 接點來表示「未按下」。 把「實體接點型式」與「程式接點型式」搞混,是新手第一大坑。
串聯與並聯:AND 與 OR
接點串聯即 AND(全部成立才導通);並聯即 OR(任一成立即導通)。 布林代數的 \(Y = (A \land \lnot B) \lor C\) 寫成梯形圖:A 與 B 的 NC 串聯成一條路, C 並聯在旁邊。
自保持電路(Seal-in)
最重要的基本電路:按一下啟動鈕馬達持續運轉,按停止鈕才停。
按下 Start:rung 導通、Motor = ON;下一週期起,Motor 自身的 NO 接點取代 Start 維持導通(「自保持」);按下 Stop(訊號變 0,NC 斷開)迴路切斷,Motor 復歸。 注意 Stop 串接在自保持迴路之後,確保任何時候都能停機——「停止優先」。
互鎖電路(正反轉)
馬達正轉與反轉接觸器絕不可同時吸合(相間短路)。程式互鎖:正轉 rung 串入 「反轉線圈」的 NC 接點,反轉 rung 串入「正轉線圈」的 NC 接點; 兩者互相封鎖。實務上還必須加硬體互鎖(兩顆接觸器的機械互鎖與輔助接點互鎖), 程式互鎖只是第一道防線。
執行順序
梯形圖由上而下、每個 rung 由左而右求值。設計時把「事件偵測」放前面、 「狀態決策」在中間、「輸出驅動」放最後,形成 輸入處理 \(\to\) 邏輯 \(\to\) 輸出的三段式結構,可讀性與可預測性最好。
雙線圈問題
同一輸出線圈在兩個 rung 出現時,只有最後一個 rung 的結果會送到實體輸出 (前面的結果被覆寫)。正確做法:把多個條件以並聯合併到單一 rung, 或改用 SET/RESET 指令並嚴格管理優先權。
畫出 \(Y = (A \lor B) \land \lnot C\) 的梯形圖。
停止按鈕為什麼實體要用常閉接線?若採常開接線,斷線時會發生什麼事?
設計「兩地啟停」:現場與控制室各有一組啟動/停止按鈕,任一處皆可啟停同一台泵。
解釋雙線圈問題為何與掃描模型(第 3 章)直接相關。
基本指令:計時、計數與資料處理
熟練 TON/TOF/TP 三種計時器與 CTU/CTD 計數器;掌握 SET/RESET 與邊緣偵測; 會用比較、運算與傳送指令;完成一個綜合小專案。
計時器
| 型式 | 名稱 | 行為 |
|---|---|---|
| TON | 通電延遲 | IN 為 ON 持續達 PT 後 Q 才 ON;IN 斷開立即復歸 |
| TOF | 斷電延遲 | IN 為 ON 時 Q 立即 ON;IN 斷開後 Q 再維持 PT 才 OFF |
| TP | 脈衝 | IN 上升緣觸發,Q 固定輸出 PT 寬度的脈衝 |
| RTO | 保持型 | 同 TON 但 IN 斷開時累計值保留,需另行復歸(部分平台) |
TON 時序圖:
典型用途:TON——馬達啟動後延遲確認壓力建立、防抖動;TOF——停機後風扇續轉散熱; TP——固定寬度的沖洗/噴膠脈衝。
計數器
CTU(上數)在 CU 上升緣 \(+1\),計數值 \(\geq\) PV 時 Q 為 ON;R 復歸。 CTD(下數)自 PV 往下數到 0。CTUD 雙向。 計數器吃的是邊緣:訊號保持 ON 不會連續累加。 產線常用「入口感測器 CU、出口感測器 CD」統計區間內工件數—— 這正是第 9 章狀態機中「車輛計數」的原型。
SET/RESET 與邊緣偵測
SET(S)使線圈 ON 後保持,RESET(R)復歸;等效於 IEC 的 SR/RS 功能塊。 優先權要想清楚:安全相關一律「復歸優先」(RS)。
邊緣偵測(R_TRIG/F_TRIG、OSR/ONS)把電平轉為單一掃描週期的脈衝, 用於「按一下」語意、計數觸發與狀態轉移。 優先使用平台內建指令,不要手寫「本次值與上次值比較」的三 rung 寫法—— 上一份審查報告(Rung 1–6)示範了手寫版本的風險:中間變數命名不一致會讓邊緣偵測整組失效。
比較、運算與傳送
比較(EQU/NEQ/GEQ/LEQ…)把數值條件變成 rung 導通條件; 運算(ADD/SUB/MUL/DIV)與傳送(MOV)處理資料。 兩個實務要點:整數除法會截斷(需要小數就先轉 REAL); 運算指令若每個週期都執行,累加類邏輯必須搭配邊緣觸發,否則一秒內就加了數百次。
綜合範例:停車場車位管理
需求:入口與出口各一支車輛感測器;顯示剩餘車位;滿位時亮「滿」燈並禁止入口柵欄開啟。
VAR
EntrySensor, ExitSensor : BOOL; // 車輛通過感測器
trigIn, trigOut : R_TRIG;
Capacity : INT := 50;
Occupied : INT; // 建議放保持區
FullLamp, GateEnable : BOOL;
END_VAR
trigIn(CLK := EntrySensor);
trigOut(CLK := ExitSensor);
IF trigIn.Q AND (Occupied < Capacity) THEN
Occupied := Occupied + 1;
END_IF;
IF trigOut.Q AND (Occupied > 0) THEN
Occupied := Occupied - 1; // 下限保護,避免負數
END_IF;
FullLamp := (Occupied >= Capacity);
GateEnable := NOT FullLamp;
麻雀雖小五臟俱全:邊緣觸發、上下限保護、輸出為狀態的純函數。 這三個習慣請從第一天就養成。
用 TON 設計「按鈕長按 3 秒才啟動」的防誤觸邏輯。
紅綠燈:綠 30 s \(\to\) 黃 3 s \(\to\) 紅 30 s 循環。先用計時器串接實作, 並思考:如果之後要加「行人按鈕縮短紅燈」,這種寫法好改嗎?(第 9 章給出更好的答案)
修改停車場範例:加入「入口柵欄開啟後 10 秒自動關閉,若感測器仍偵測到車則延長」。
為什麼累加運算要用邊緣觸發?寫出不加邊緣觸發時,掃描週期 10 ms 下一秒鐘的誤差。