Learning Objectives
- 從需求整理出 I/O 表與 Modbus 對照表
- 用上升緣、SET/RST、TON、CTU 與 MOV 寫出分揀站的階梯圖
- 用 Python 監控產量、計算剔除率,並經由約定好的暫存器下遠端停機命令
- 寫出測試計畫,說明為什麼安全功能不能依賴網路與上位程式
專題:輸送帶分揀站
最後一課把前面學的東西串成一個完整的作品:一條輸送帶把箱子往前送,經過感測器時, 高箱子被推桿推到旁邊的滑道(剔除),一般的箱子繼續往前(良品)。PLC 負責即時控制,Python 負責監控與紀錄。
需求
- 按「啟動」輸送帶運轉,按「停止」(常閉按鈕)就停;上位系統也可以下「遠端停機」命令。
- 箱子到達感測器時,如果高度感測是 ON,推桿伸出 0.5 秒再收回。
- 分別計算良品與剔除的數量,放在保持暫存器讓監控程式讀。
- 監控程式每秒更新一次產量與剔除率;剔除太多時下遠端停機命令。
I/O 表與 Modbus 對照表
寫程式之前先把表寫好,PLC 程式、監控程式、HMI 都照這張表做:
| 位址 | 設備 | 說明 | Modbus |
|---|---|---|---|
| I0.0 | 啟動按鈕 | 常開,按下=1 | 離散輸入 0 |
| I0.1 | 停止按鈕 | 常閉,沒按=1、按下或斷線=0 | 離散輸入 1 |
| I0.2 | 箱子感測器 | 箱子在感測器前=1 | 離散輸入 2 |
| I0.3 | 高度感測 | 高箱子=1 | 離散輸入 3 |
| Q0.0 | 輸送帶馬達 | 1=運轉 | 線圈 0 |
| Q0.1 | 推桿 | 1=伸出 | 線圈 1 |
| MW0 | 良品數 | PLC 寫、上位讀 | 保持暫存器 0 |
| MW1 | 剔除數 | PLC 寫、上位讀 | 保持暫存器 1 |
| MW5 | 遠端停機命令 | 上位寫 1=停機 | 保持暫存器 5 |
注意最後一列:上位系統不直接寫馬達的線圈,而是寫一個「命令」暫存器,由 PLC 程式決定要不要照做。 這樣 PLC 的邏輯(例如停止按鈕優先)永遠有效,上位系統出錯也不會繞過它。
逐步看:Python 監控產量
PLC 程式已經寫好並在執行:0.1 秒時有人按了啟動,第 1、3、4 個箱子是高箱子。 Python 每秒讀一次 MW0、MW1 與線圈 0,算出剔除率。看 PLC 畫面的推桿與計數器,和 Python 印出的數字對照。
測試計畫與安全
完成的程式要照測試計畫一項一項驗證,而不是「跑一次看起來對」。分揀站可以這樣列:
| 編號 | 操作 | 預期結果 |
|---|---|---|
| T1 | 按啟動再放開 | 輸送帶持續運轉(自保持) |
| T2 | 運轉中按停止 | 輸送帶停止,放開後不會自己再啟動 |
| T3 | 一般箱子經過 | 推桿不動,良品數 +1 |
| T4 | 高箱子經過 | 推桿伸出約 0.5 秒後收回,剔除數 +1 |
| T5 | 兩個高箱子連續經過 | 每個都被剔除,剔除數 +2 |
| T6 | 上位寫 MW5=1 | 輸送帶停止 |
| T7 | 拔掉停止按鈕的線(模擬斷線) | 輸送帶停止(常閉接點的故障安全) |
| T8 | 監控程式關掉 | 產線照常運作,只是沒有人看報表 |
T7 和 T8 說明一個原則:保護人的功能不能依賴網路與上位程式。 停止按鈕直接接到 PLC(更嚴格的場合還有獨立的急停迴路與安全控制器),Python、HMI、網路都只是監控與方便的命令來源; 它們故障時,產線應該維持安全的狀態。真實的機台還要有機器防護與上鎖掛牌(lockout/tagout)程序,維修前切斷並鎖住能源。
可以再做的延伸
- 監控程式把每秒的資料寫成 CSV(第 12 課),再畫出產量趨勢。
- 用第 13 課的 Python 從站,先模擬這台 PLC,在沒有設備時測試監控程式。
- 用第 15 課的 OPC UA 公開「良品數」「剔除數」並用訂閱取代輪詢。
- 依第 17 課的區域與管道,替這條產線畫一張網路分區圖。
小測驗:程式設計
監控程式想停線,下面哪一種做法比較好?
推桿用 SET 伸出、TON 計時、時間到 RST 收回。如果少了 RST 那一條 rung,會發生什麼事?
小測驗:監控與測試
下面的程式計算剔除率,會印出什麼?
records = [(3, 1), (5, 0), (2, 2)]
good = sum(g for g, r in records)
reject = sum(r for g, r in records)
print(round(reject / (good + reject) * 100), "%")
監控用的 Python 程式當掉了。依照本課的設計,產線會怎樣?
測試「停止按鈕斷線時輸送帶會停」這一項,主要在驗證什麼?
重點整理
- 動手寫程式前先寫 I/O 表與 Modbus 對照表,PLC、監控程式、HMI 都依同一份文件。
- 分揀邏輯:上升緣
P讓動作只觸發一次;SET伸出、TON計時、RST收回;CTU計數;MOV把計數放到 MW 給上位讀。 - Python 監控:每秒讀 MW0、MW1、線圈 0,計算剔除率;要停線時寫命令暫存器,讓 PLC 保有最後決定權。
- 用測試計畫逐項驗證,包括斷線與上位程式故障的情況。
- 保護人的功能(停止、急停、機器防護、上鎖掛牌)不依賴網路與上位程式。
恭喜完成 PLC 與工業通訊軌:從掃描週期、階梯圖、計時計數、類比與 PID,到 Modbus、OPC UA、HMI 與工控資安, 你已經能把一台 PLC 和 Python 接成一個可以監控、可以紀錄的系統。