方案 A(傳統工業自動化方案)
適用情境:十字路口、產業道路、廠區出入口、隧道號誌等需要高可靠度(MTBF)與符合工業規範(IEC 61131-3、IEC 61508 SIL2)的場域。
目錄
- 系統概述與設計目標
- 需求規格 (SRS)
- 系統架構
- 硬體設計
- 電氣電路圖
- I/O 點位表 (I/O List)
- Modbus 通訊設計
- 控制流程與狀態機
- Ladder Diagram (LD)
- Structured Text (ST, IEC 61131-3)
- Function Block Diagram (FBD)
- SCADA / HMI 設計
- 安全設計與保護機制
- 測試、調機與驗收
- BOM 物料清單
1. 系統概述與設計目標
1.1 系統概述
本系統為一標準四相位十字路口(含行人號誌)交通號誌控制器,採用業界主流的 PLC 控制 + Modbus 通訊 + SCADA 監控架構。透過:
- PLC (Programmable Logic Controller):實時、確定性(deterministic)控制核心。
- Modbus RTU / Modbus TCP:開放式工業通訊協定,連接 PLC、HMI、上位機。
- SCADA (Supervisory Control and Data Acquisition):監控操作介面,記錄歷史資料、報警、報表。
1.2 設計目標
| 項目 |
規格 |
| 可用度 (Availability) |
≥ 99.99 %(年停機 < 53 分鐘) |
| 控制循環週期 |
≤ 50 ms |
| MTBF |
≥ 100,000 小時 |
| 工作溫度 |
-20 °C ~ +60 °C |
| 防護等級(控制箱) |
IP65 |
| 電源規格 |
AC 220 V ± 10 %,50/60 Hz,含 UPS |
| 通訊規範 |
Modbus RTU (RS-485) + Modbus TCP/IP |
| 安全等級 |
IEC 61508 SIL 2(Fail-safe,黃閃模式為安全狀態) |
| 法規依循 |
IEC 61131-3、IEC 61439、CNS 13438 (EMC) |
1.3 為什麼選擇 PLC + SCADA?
| 優勢 |
說明 |
| 確定性控制 |
Scan cycle 固定(通常 10–50 ms),不受網路延遲影響。 |
| 高可靠度 |
工業級硬體,可長期 7×24 運轉。 |
| 法規完備 |
符合 IEC 61131-3,可進行 SIL 認證。 |
| 維護容易 |
I/O 模組可熱插拔;HMI 圖控標準化。 |
| 防EMI / 防雷擊 |
PLC 與輸出模組均有光耦隔離,工業現場標準。 |
2. 需求規格 (SRS)
2.1 功能性需求 (FR)
- FR-1 系統應控制四個方向 (北、南、東、西) 的紅、黃、綠號誌,共 12 顆主號誌燈。
- FR-2 系統應包含 8 顆行人號誌(紅人、綠人各 4 組)。
- FR-3 系統應支援四種運行模式:
- MODE_AUTO:自動循環運行(依預定 phase plan)。
- MODE_FLASH:全向黃閃(夜間 / 故障 fail-safe)。
- MODE_MANUAL:操作員手動指定相位。
- MODE_OFF:全暗(維護用)。
- FR-4 系統應接受行人按鈕觸發,於下一週期插入行人通行相位。
- FR-5 系統應檢測車輛感應線圈(vehicle loop detector),於無車時跳過該相位(actuated control)。
- FR-6 系統應透過 Modbus 與上位 SCADA 通訊,回傳即時狀態、接受指令。
- FR-7 系統應於檢測到「紅綠衝突」或「燈泡斷線」時,自動切換至 MODE_FLASH。
2.2 非功能性需求 (NFR)
- NFR-1 全部運算邏輯應於 PLC 內完成,不依賴 SCADA 線上。
- NFR-2 SCADA 中斷時,PLC 應持續控制(離線運作)。
- NFR-3 所有 I/O 應為 24 VDC 訊號(除最終燈泡輸出為 AC 220V)。
- NFR-4 系統應記錄至少 30 天的事件、報警與運行歷史。
2.3 號誌相位計畫 (Phase Plan)
Phase 1: N-S 綠 / E-W 紅 (主幹道綠) ─ 30 秒
Phase 2: N-S 黃 / E-W 紅 (轉換) ─ 3 秒
Phase 3: 全紅 (All-Red) ─ 2 秒
Phase 4: N-S 紅 / E-W 綠 (支線綠) ─ 20 秒
Phase 5: N-S 紅 / E-W 黃 (轉換) ─ 3 秒
Phase 6: 全紅 (All-Red) ─ 2 秒
─────────────────────────────────────────
總週期 T = 60 秒
3. 系統架構
3.1 整體架構圖
┌──────────────────────────────────────────────────────────────────┐
│ ENTERPRISE LEVEL │
│ ┌──────────────────┐ ┌────────────────────┐ │
│ │ SCADA Server │ ◀───▶ │ Historian DB │ │
│ │ (Wonderware/ │ │ (SQL Server / │ │
│ │ Ignition/WinCC) │ │ InfluxDB) │ │
│ └─────────┬────────┘ └────────────────────┘ │
│ │ Modbus TCP / OPC UA │
└─────────────┼────────────────────────────────────────────────────┘
│
┌─────────────┼────────────────────────────────────────────────────┐
│ │ CONTROL LEVEL │
│ ┌─────────▼────────┐ ┌────────────────────┐ │
│ │ PLC (Master) │ ◀───▶ │ HMI Touch Panel │ │
│ │ Siemens S7-1200 │ RS-485 │ (Weintek MT8071iE)│ │
│ │ Mitsubishi FX5U │ Modbus │ │ │
│ │ AB CompactLogix │ RTU └────────────────────┘ │
│ └─────────┬────────┘ │
│ │ Backplane bus │
│ ┌─────────┴────────┬───────────────┬───────────────┐ │
│ │ DI Module │ DO Module │ AI Module │ │
│ │ (16ch 24VDC) │ (16ch Relay) │ (4ch 4-20mA) │ │
│ └─────────┬────────┴──────┬────────┴───────┬───────┘ │
└─────────────┼───────────────┼────────────────┼───────────────────┘
│ │ │
┌─────────────┼───────────────┼────────────────┼───────────────────┐
│ │ FIELD LEVEL │
│ ▼ ▼ ▼ │
│ ┌─────────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ Pedestrian │ │ AC contactor │ │ Loop detector│ │
│ │ buttons (×4) │ │ → Traffic │ │ amplifier │ │
│ │ Vehicle loops │ │ LED Lamps │ │ (4-20 mA) │ │
│ │ Current sensor │ │ 220 VAC │ │ │ │
│ └─────────────────┘ └──────────────┘ └──────────────┘ │
└──────────────────────────────────────────────────────────────────┘
3.2 ISA-95 / Purdue 模型映射
| Level |
元件 |
功能 |
| L0 |
LED 燈、按鈕、線圈感測器 |
物理層 |
| L1 |
PLC、I/O 模組 |
即時控制 |
| L2 |
HMI、SCADA、Historian |
監控、操作 |
| L3 |
MES(未來擴充) |
製造執行(不適用此案) |
| L4 |
ERP |
企業層(不適用) |
4. 硬體設計
4.1 控制器選型
主控採用 Siemens SIMATIC S7-1200 CPU 1214C DC/DC/Rly:
| 項目 |
規格 |
| 型號 |
6ES7214-1HG40-0XB0 |
| CPU |
100 KB Work memory,4 MB Load memory |
| 內建 I/O |
14 DI / 10 DO (Relay) / 2 AI |
| 通訊埠 |
PROFINET ×1,可擴充 CM 1241 RS-485 |
| 掃描週期 |
典型 < 1 µs / Boolean |
| 工作電源 |
DC 24 V |
4.2 擴充模組
| 模組 |
型號 |
數量 |
說明 |
| 數位輸入模組 |
SM 1221 DI 16×24VDC |
1 |
按鈕、迴路、回授訊號 |
| 數位輸出模組 |
SM 1222 DO 16×Relay |
2 |
控制 SSR / 接觸器 |
| 類比輸入模組 |
SM 1231 AI 4×13 bit |
1 |
電流偵測、環境光感測 |
| 通訊模組 |
CM 1241 RS-485 |
1 |
Modbus RTU Slave |
4.3 外部負載端
- AC LED 信號燈:220 VAC,20 W / 顆,含突波保護。
- 固態繼電器 (SSR):Crydom D2425(25 A,零交越觸發),用於控制 AC 燈泡,減少電弧、延長壽命。
- 過流保護:每相設 5 A 微型斷路器(MCB),C 曲線。
- 突波保護器 (SPD):Phoenix Contact VAL-MS 320,Type II Class C。
4.4 電源系統
AC 220V ──┬── MCB 16A ── AC LED 燈泡 (透過 SSR 切換)
│
└── MCB 6A ── AC/DC 電源供應器 ──┬── PLC CPU
(Mean Well DR-120-24,│ I/O 模組
24V 5A) ├── HMI
└── UPS (24V/7Ah)
- UPS:Mean Well DR-UPS40 + 7 Ah 鉛酸電池,停電後可維持約 30 分鐘黃閃。
- 接地:TT 接地系統,接地電阻 < 4 Ω。
5. 電氣電路圖
5.1 主迴路(AC 220V → LED 燈)
L (220V) ───┬────────┬────────┬────────┬────────┬─── ...
│ │ │ │ │
MCB MCB MCB MCB MCB
5A 5A 5A 5A 5A
│ │ │ │ │
SSR SSR SSR SSR SSR
(Q0.0) (Q0.1) (Q0.2) (Q0.3) (Q0.4)
│ │ │ │ │
Lamp Lamp Lamp Lamp Lamp
R_NS Y_NS G_NS R_EW Y_EW
│ │ │ │ │
N ──────────┴────────┴────────┴────────┴────────┴─── ...
註 1:SSR 控制端為 DC 4-32 V,由 PLC DO 模組直接驅動。
註 2:每顆 SSR 並聯 RC 突波吸收器 (snubber),R=47 Ω 1 W,C=0.1 µF 630 V。
註 3:燈泡迴路串聯電流互感器 (CT),回授至 PLC AI,用於檢測「燈泡斷線」。
5.2 控制迴路(DC 24V)
+24 V
───────────────────────┬───────────────┬─────────────
│ │
PLC DI 模組 │ │
┌──────────┐ │ │
│ I 0.0 ◀┼──[NC]── 緊急按鈕 ────────┤
│ I 0.1 ◀┼──[NO]── 行人按鈕 N ───────┤
│ I 0.2 ◀┼──[NO]── 行人按鈕 S ───────┤
│ I 0.3 ◀┼──[NO]── 行人按鈕 E ───────┤
│ I 0.4 ◀┼──[NO]── 行人按鈕 W ───────┤
│ I 0.5 ◀┼──── Loop Detector N-S ───┤
│ I 0.6 ◀┼──── Loop Detector E-W ───┤
│ I 0.7 ◀┼──── Mode 切換 SW-1 ──────┤
│ I 1.0 ◀┼──── Mode 切換 SW-2 ──────┤
└──────────┘ │
│
0 V ────────────┴─────────────
5.3 燈泡斷線檢測(CT + AI)
每個輸出燈號迴路串接 5A:5mA 電流互感器,輸出經整流、二極體鉗位後接 4–20 mA 變送器,送回 PLC AI 通道:
L ───┤├─── SSR ───┤├─── LED 燈泡 ───┐
│ │
[CT 5A:5mA] │
│ │
┌─────┴───┐ │
│ 整流橋 │ │
└─────┬───┘ │
│ │
4–20 mA 變送器 │
│ │
PLC AI (IW96) │
N ──────────────────────────────────┘
- 燈泡正常導通:CT 輸出 ≈ 12–16 mA。
- 燈泡斷線/燒毀:CT 輸出 < 4 mA → 觸發
BulbFault 警報。
6. I/O 點位表 (I/O List)
6.1 數位輸入 (DI)
| 點位 |
標籤 |
描述 |
接點型式 |
| I0.0 |
EMG_STOP |
緊急停止按鈕 |
NC |
| I0.1 |
PB_PED_N |
北向行人按鈕 |
NO |
| I0.2 |
PB_PED_S |
南向行人按鈕 |
NO |
| I0.3 |
PB_PED_E |
東向行人按鈕 |
NO |
| I0.4 |
PB_PED_W |
西向行人按鈕 |
NO |
| I0.5 |
LOOP_NS |
南北向車輛感應 |
NO |
| I0.6 |
LOOP_EW |
東西向車輛感應 |
NO |
| I0.7 |
MODE_SEL_0 |
模式選擇 bit 0 |
NO |
| I1.0 |
MODE_SEL_1 |
模式選擇 bit 1 |
NO |
| I1.1 |
DOOR_SW |
機箱門開關(防破壞) |
NC |
| I1.2 |
PWR_OK |
電源正常回授 |
NO |
6.2 數位輸出 (DO)
| 點位 |
標籤 |
描述 |
| Q0.0 |
R_NS |
南北向 紅燈 |
| Q0.1 |
Y_NS |
南北向 黃燈 |
| Q0.2 |
G_NS |
南北向 綠燈 |
| Q0.3 |
R_EW |
東西向 紅燈 |
| Q0.4 |
Y_EW |
東西向 黃燈 |
| Q0.5 |
G_EW |
東西向 綠燈 |
| Q0.6 |
PED_R_NS |
行人紅人(南北) |
| Q0.7 |
PED_G_NS |
行人綠人(南北) |
| Q1.0 |
PED_R_EW |
行人紅人(東西) |
| Q1.1 |
PED_G_EW |
行人綠人(東西) |
| Q1.2 |
ALARM_BUZZ |
警報蜂鳴器 |
| Q1.3 |
FAULT_LAMP |
故障指示燈 |
6.3 類比輸入 (AI)
| 通道 |
標籤 |
描述 |
範圍 |
| IW96 |
CUR_R_NS |
R_NS 燈泡電流 |
4–20 mA |
| IW98 |
CUR_G_NS |
G_NS 燈泡電流 |
4–20 mA |
| IW100 |
CUR_R_EW |
R_EW 燈泡電流 |
4–20 mA |
| IW102 |
AMBIENT_LX |
環境照度 |
0–10 V (0–10000 lux) |
7. Modbus 通訊設計
7.1 通訊架構
┌─────────────────┐ Modbus RTU (RS-485, 9600 8N1)
│ PLC (Slave 1) │ ─────────────────────────┐
└────────┬────────┘ │
│ Modbus TCP │
│ (Port 502) ┌─────▼──────┐
┌────────▼────────┐ │ HMI Panel │
│ SCADA Server │ │ (Master) │
│ (Modbus Master) │ └────────────┘
└─────────────────┘
PLC 同時擔任:
- Modbus TCP Server (Slave):對 SCADA 服務。
- Modbus RTU Slave:對 HMI 服務(透過 CM 1241 RS-485)。
7.2 Modbus 暫存器映射
Coil (FC01/FC05/FC15) — 0x 區,可讀寫離散控制
| 位址 |
標籤 |
說明 |
| 00001 |
CMD_MODE_AUTO |
1 = 切換 AUTO 模式 |
| 00002 |
CMD_MODE_FLASH |
1 = 切換 FLASH 模式 |
| 00003 |
CMD_MODE_MANUAL |
1 = 切換 MANUAL 模式 |
| 00004 |
CMD_FORCE_PED |
1 = 強制行人通行 |
| 00005 |
CMD_RESET_FAULT |
1 = 清除故障 |
| 位址 |
標籤 |
說明 |
| 10001 |
STA_R_NS |
南北紅燈狀態 |
| 10002 |
STA_Y_NS |
南北黃燈狀態 |
| 10003 |
STA_G_NS |
南北綠燈狀態 |
| 10004 |
STA_R_EW |
東西紅燈狀態 |
| 10005 |
STA_Y_EW |
東西黃燈狀態 |
| 10006 |
STA_G_EW |
東西綠燈狀態 |
| 10010 |
STA_FAULT |
故障旗標 |
| 10011 |
STA_EMG |
緊急停止 |
| 位址 |
標籤 |
型別 |
說明 |
| 30001 |
CURRENT_PHASE |
UINT16 |
目前相位 (1–6) |
| 30002 |
PHASE_TIMER |
UINT16 |
相位倒數 (秒) |
| 30003 |
CUR_R_NS |
UINT16 |
R_NS 電流 (mA×10) |
| 30004 |
CUR_G_NS |
UINT16 |
G_NS 電流 (mA×10) |
| 30005 |
AMBIENT_LX |
UINT16 |
環境照度 |
| 30010 |
UPTIME_HR |
UINT32 |
累計運轉小時 |
| 30012 |
CYCLE_COUNT |
UINT32 |
累計循環次數 |
Holding Register (FC03/FC06/FC16) — 4x 區,可讀寫參數
| 位址 |
標籤 |
型別 |
說明 |
| 40001 |
T_GREEN_NS |
UINT16 |
南北綠燈時長(秒),預設 30 |
| 40002 |
T_YELLOW_NS |
UINT16 |
南北黃燈時長,預設 3 |
| 40003 |
T_GREEN_EW |
UINT16 |
東西綠燈時長,預設 20 |
| 40004 |
T_YELLOW_EW |
UINT16 |
東西黃燈時長,預設 3 |
| 40005 |
T_ALL_RED |
UINT16 |
全紅時長,預設 2 |
| 40006 |
T_PED_GREEN |
UINT16 |
行人綠燈時長,預設 15 |
| 40010 |
MODE_REQ |
UINT16 |
模式請求 0=AUTO 1=FLASH 2=MANUAL 3=OFF |
7.3 Modbus 通訊參數
| 參數 |
值 |
| 介面 |
RS-485 半雙工 |
| 波特率 |
9600 |
| 資料位元 |
8 |
| 同位元 |
None |
| 停止位元 |
1 |
| Slave ID |
1 |
| 終端電阻 |
120 Ω(線路兩端) |
| 偏壓電阻 |
680 Ω×2 |
| Modbus TCP |
Port 502,最多 5 個 client |
| Timeout |
1000 ms |
| Retry |
3 次 |
8. 控制流程與狀態機
8.1 主狀態機 (Mealy Machine)
┌─────────────────────────────────────────┐
│ │
[Power-On] │ ┌──────────┐ POST OK ┌──────────┐ │
─────▶│──▶│ S_INIT │──────────▶│ S_FLASH │◀─┘
│ └──────────┘ └────┬─────┘
│ │ MODE=AUTO
│ ▼
│ ┌──────────┐
│ ┌───────────▶│ S_AUTO │
│ │ └────┬─────┘
│ MODE=MANUAL│ │ Fault?
│ │ ▼
│ ┌─────┴──────┐ ┌──────────┐
│ │ S_MANUAL │ │ S_FAULT │
│ └────────────┘ └──────────┘
│ │
│ MODE=OFF │ Reset
│ ┌────────────┐ │
│ │ S_OFF │◀──────────┘
│ └────────────┘
└────────────────────────────────────────
| 狀態 |
進入條件 |
出口條件 |
動作 |
| S_INIT |
系統上電 |
自測通過 |
燈號全暗,自我檢測 |
| S_FLASH |
故障/夜間/啟動 |
模式切換 / 故障清除 |
全向黃閃 1 Hz |
| S_AUTO |
MODE=AUTO |
MODE 變更 / 故障 |
依 phase plan 循環 |
| S_MANUAL |
MODE=MANUAL |
MODE 變更 |
等待 HMI 指定相位 |
| S_FAULT |
偵測到故障 |
故障清除指令 |
切至 FLASH 並報警 |
| S_OFF |
MODE=OFF |
MODE 變更 |
全部燈滅 |
8.2 AUTO 模式內的相位子狀態機
┌────────┐ T_GREEN_NS ┌────────┐ T_YELLOW_NS ┌────────┐
│ P1 │ ───────────▶ │ P2 │ ────────────▶ │ P3 │
│ NS=G │ │ NS=Y │ │ ALL=R │
│ EW=R │ │ EW=R │ │ │
└────────┘ └────────┘ └───┬────┘
│ T_ALL_RED
▼
┌────────┐ ◀────────── ┌────────┐ ◀──────────── ┌────────┐
│ P6 │ T_ALL_RED │ P5 │ T_YELLOW_EW │ P4 │
│ ALL=R │ │ NS=R │ │ NS=R │
│ │ │ EW=Y │ │ EW=G │
└────┬───┘ └────────┘ └────────┘
│ T_ALL_RED → 回到 P1
▼ 並檢查是否有行人請求 → 進入 P_PED
9. Ladder Diagram (LD)
以下為 IEC 61131-3 LD 表示法的純文字 (ASCII) 版本,可直接對應到 TIA Portal / GX Works3 / Studio 5000 中之 ladder rung。
9.1 符號說明
│ │ ┌────┐ ┌────┐
──┤├── ──┤/├── │ TON│ │ Q │
normally normally│ │timer │coil│
open closed └────┘ └────┘
9.2 LD-01:模式管理(MODE Management)
Rung 1: AUTO mode latch
I0.7 I1.0 M10.0
──┤/├─────┤/├───────────────────────────────────────────( )──
MODE_SEL_0 MODE_SEL_1 MODE_AUTO
Rung 2: FLASH mode (night / fault)
I0.7 I1.0 M20.0 M10.1
──┤├──────┤/├──────┬──┤├─────────────────────────────────( )──
│ FAULT MODE_FLASH
│
│ ┌─────────┐
└──┤ NightTime├─
└─────────┘
Rung 3: MANUAL mode
I0.7 I1.0 M10.2
──┤/├─────┤├────────────────────────────────────────────( )──
Rung 4: OFF mode
I0.7 I1.0 M10.3
──┤├──────┤├────────────────────────────────────────────( )──
9.3 LD-02:相位計時器(Phase Timers)
Rung 5: Phase 1 (NS green) timer
┌────────────────┐
M10.0 M11.1 │ TON │
──┤├─────────┤/├──────────────────────────┤ IN Q ┼── M11.0
MODE_AUTO not P1 done │ │ PT_DONE_P1
│ PT T#30s │
│ ET │
└────────────────┘
T1 / DB_Timer.T1
Rung 6: Phase 2 (NS yellow) timer
M11.0 M11.2 ┌────────────────┐
──┤├─────────┤/├──────────────────────────┤ TON T2 3s ┼── M11.1
Rung 7: Phase 3 (All red after NS) timer
M11.1 M11.3 ┌────────────────┐
──┤├─────────┤/├──────────────────────────┤ TON T3 2s ┼── M11.2
Rung 8: Phase 4 (EW green) timer
M11.2 M11.4 ┌────────────────┐
──┤├─────────┤/├──────────────────────────┤ TON T4 20s ┼── M11.3
Rung 9: Phase 5 (EW yellow) timer
M11.3 M11.5 ┌────────────────┐
──┤├─────────┤/├──────────────────────────┤ TON T5 3s ┼── M11.4
Rung 10: Phase 6 (All red after EW) timer
M11.4 M11.0 ┌────────────────┐
──┤├─────────┤/├──────────────────────────┤ TON T6 2s ┼── M11.5
9.4 LD-03:燈號輸出邏輯
Rung 11: Green_NS (Q0.2)
M10.0 M11.5 M10.0 M11.0
──┤├──┬───┤├────────┬─┤├──────┤/├──────────────────────( )──
│ in P6 │ AUTO not P1 done G_NS
│ │
│ └─ Phase 1 active (between P6 end and P1 done)
│
└─ MANUAL force
M10.2 M_MAN_G_NS
──┤├─────┤├─────────────────────────────────────────────(_)
Rung 12: Yellow_NS (Q0.1)
M10.0 M11.0 M11.1
──┤├──────┤├────────┤/├──────────────────────────────( )──
AUTO P1 done P2 not done Y_NS
Rung 13: Red_NS (Q0.0)
(Q0.2) (Q0.1) ┌──────────────┐
────┤/├─────┤/├───┬─ M10.0 ──────────────── ( ) R_NS Q0.0 │
│ AUTO │ │
│ ──── M10.1 (FLASH) ─ off│ │
│ ──── M10.3 (OFF) ─ off│ │
└──────────────────────────┘ │
Rung 14: Green_EW (Q0.5) — symmetrical to Rung 11
M10.0 M11.2 M10.0 M11.3
──┤├──────┤├───────┤├──────┤/├──────────────────────( )──
G_EW
Rung 15: Yellow_EW (Q0.4)
M10.0 M11.3 M11.4
──┤├──────┤├───────┤/├─────────────────────────────( )──
Y_EW
Rung 16: Red_EW (Q0.3) (similar to Rung 13)
9.5 LD-04:FLASH 模式(黃閃 1 Hz)
┌────────────────┐
Rung 17: 1 Hz pulse (built-in clock memory M0.5 in Siemens = 1 Hz)
M10.1 M0.5 Q0.1 (Y_NS)
──┤├───────┤├──────────────────────────────────────────────( )──
Q0.4 (Y_EW)
──┤├───────┤├──────────────────────────────────────────────( )──
Rung 18: In FLASH, all reds and greens must be OFF
M10.1 Q0.0/Q0.2/Q0.3/Q0.5
──┤├──────────────────────────────────────────────────────[RST]──
9.6 LD-05:行人請求邏輯
Rung 19: Pedestrian request latch (any of 4 buttons)
I0.1 M30.0
──┤├──┬────────────────────────────────────────────────[S]──
PB_PED_N│ PED_REQ
I0.2 │
──┤├───┤
I0.3 │
──┤├───┤
I0.4 │
──┤├───┘
Rung 20: Clear pedestrian request when phase served
M_PED_SERVED M30.0
───┤├───────────────────────────────────────────────[R]──
PED_REQ
9.7 LD-06:故障偵測
Rung 21: Bulb fault (current < 3 mA when commanded ON)
Q0.0 (IW96 < 30) M20.0
──┤├──────┤ CMP ├─────────────────────────────────────( )──
R_NS on [LT] BulbFault_R_NS
Rung 22: Conflict detection — Green_NS and Green_EW simultaneously
Q0.2 Q0.5 M20.1
──┤├──────┤├────────────────────────────────────────────( )──
ConflictFault
Rung 23: Master fault → switch to FLASH
M20.0 M20.1 M20.2
──┤├───┬────┤├──────┬─────────────────────────────────[S]──
│ │ FAULT_LATCH
etc. ┘ ┘
Reset:
Coil 00005 (CMD_RESET_FAULT) M20.2
──────┤├──────────────────────────────────────────[R]──
在 TIA Portal 中,這些 rung 對應到 OB1(主循環 OB)裡的 networks;Timer/Counter 應使用 IEC 標準 TON/TOF/TP,宣告於 instance DB。
10. Structured Text (ST, IEC 61131-3)
本節給出等效的 IEC 61131-3 Structured Text 實作,可在 TIA Portal、Codesys、Beckhoff TwinCAT 上編譯。將狀態機與相位控制以 ST 表達更清晰且易於維護,建議ST 為主、LD 為輔。
10.1 全域資料宣告
// =====================================================================
// Traffic_Light_Main : Main program (called from OB1, every 50 ms)
// =====================================================================
TYPE
E_Mode : (
MODE_OFF := 0,
MODE_AUTO := 1,
MODE_FLASH := 2,
MODE_MANUAL := 3
);
E_Phase : (
PH_INIT := 0,
PH_P1_NS_GREEN := 1,
PH_P2_NS_YELLOW := 2,
PH_P3_ALL_RED_A := 3,
PH_P4_EW_GREEN := 4,
PH_P5_EW_YELLOW := 5,
PH_P6_ALL_RED_B := 6,
PH_PED := 7
);
ST_TrafficLight : STRUCT
R_NS, Y_NS, G_NS : BOOL;
R_EW, Y_EW, G_EW : BOOL;
PED_R_NS, PED_G_NS : BOOL;
PED_R_EW, PED_G_EW : BOOL;
END_STRUCT;
END_TYPE
10.2 主程式 (PROGRAM)
PROGRAM TrafficLight_Main
VAR_INPUT
EMG_STOP : BOOL; // I0.0
PB_PED_N : BOOL; // I0.1
PB_PED_S : BOOL; // I0.2
PB_PED_E : BOOL; // I0.3
PB_PED_W : BOOL; // I0.4
LOOP_NS : BOOL; // I0.5
LOOP_EW : BOOL; // I0.6
MODE_SEL_0 : BOOL; // I0.7
MODE_SEL_1 : BOOL; // I1.0
CUR_R_NS : INT; // IW96 (mA × 10)
CUR_G_NS : INT; // IW98
AMBIENT_LX : INT; // IW102
END_VAR
VAR_OUTPUT
Lights : ST_TrafficLight;
FAULT_LAMP : BOOL;
ALARM_BUZZ : BOOL;
END_VAR
VAR
Mode : E_Mode := MODE_FLASH;
Phase : E_Phase := PH_INIT;
// — Modbus parameters (mapped to Holding Registers) —
T_GREEN_NS : TIME := T#30s;
T_YELLOW_NS : TIME := T#3s;
T_GREEN_EW : TIME := T#20s;
T_YELLOW_EW : TIME := T#3s;
T_ALL_RED : TIME := T#2s;
T_PED_GREEN : TIME := T#15s;
// — Internal —
PhaseTimer : TON; // 相位倒數
FlashClock : TON; // 0.5 s 切換用
FlashState : BOOL;
PedRequest : BOOL;
FaultLatch : BOOL;
StartFlag : BOOL;
UptimeHr : DINT;
CycleCnt : DINT;
END_VAR
10.3 模式選擇邏輯
// === 1. 模式選擇 (Mode dispatcher) ===
CASE BOOL_TO_INT(MODE_SEL_1) * 2 + BOOL_TO_INT(MODE_SEL_0) OF
0: Mode := MODE_AUTO;
1: Mode := MODE_FLASH;
2: Mode := MODE_MANUAL;
3: Mode := MODE_OFF;
END_CASE;
// === 2. 緊急停止 / 故障 → 強制 FLASH ===
IF NOT EMG_STOP OR FaultLatch THEN
Mode := MODE_FLASH;
END_IF;
// === 3. 行人請求 latch ===
IF PB_PED_N OR PB_PED_S OR PB_PED_E OR PB_PED_W THEN
PedRequest := TRUE;
END_IF;
10.4 故障偵測
// === 4. Bulb fault: 燈泡電流檢查 ===
// AI 4–20 mA → 12000 ~ 16000 (mA × 1000)
IF Lights.R_NS AND (CUR_R_NS < 3000) THEN
FaultLatch := TRUE;
END_IF;
IF Lights.G_NS AND (CUR_G_NS < 3000) THEN
FaultLatch := TRUE;
END_IF;
// === 5. Conflict: 紅綠衝突 ===
IF (Lights.G_NS AND Lights.G_EW)
OR (Lights.G_NS AND Lights.R_EW = FALSE AND Lights.Y_EW = FALSE) THEN
FaultLatch := TRUE;
END_IF;
10.5 狀態機主體
// === 6. 主狀態機 ===
CASE Mode OF
MODE_OFF:
Lights.R_NS := FALSE; Lights.Y_NS := FALSE; Lights.G_NS := FALSE;
Lights.R_EW := FALSE; Lights.Y_EW := FALSE; Lights.G_EW := FALSE;
Phase := PH_INIT;
MODE_FLASH:
// 1 Hz 黃閃
FlashClock(IN := NOT FlashClock.Q, PT := T#500ms);
IF FlashClock.Q THEN
FlashState := NOT FlashState;
END_IF;
Lights.R_NS := FALSE; Lights.G_NS := FALSE;
Lights.R_EW := FALSE; Lights.G_EW := FALSE;
Lights.Y_NS := FlashState;
Lights.Y_EW := FlashState;
FAULT_LAMP := FaultLatch;
Phase := PH_INIT;
MODE_AUTO:
FAULT_LAMP := FALSE;
CASE Phase OF
PH_INIT:
Phase := PH_P1_NS_GREEN;
PhaseTimer(IN := FALSE);
PH_P1_NS_GREEN:
Lights.R_NS := FALSE; Lights.Y_NS := FALSE; Lights.G_NS := TRUE;
Lights.R_EW := TRUE; Lights.Y_EW := FALSE; Lights.G_EW := FALSE;
Lights.PED_R_NS := TRUE; Lights.PED_G_NS := FALSE;
Lights.PED_R_EW := FALSE; Lights.PED_G_EW := TRUE;
PhaseTimer(IN := TRUE, PT := T_GREEN_NS);
IF PhaseTimer.Q AND (NOT LOOP_NS OR PedRequest) THEN
PhaseTimer(IN := FALSE);
Phase := PH_P2_NS_YELLOW;
END_IF;
PH_P2_NS_YELLOW:
Lights.G_NS := FALSE; Lights.Y_NS := TRUE;
Lights.PED_G_EW := FALSE; Lights.PED_R_EW := TRUE; // 行人預警
PhaseTimer(IN := TRUE, PT := T_YELLOW_NS);
IF PhaseTimer.Q THEN
PhaseTimer(IN := FALSE);
Phase := PH_P3_ALL_RED_A;
END_IF;
PH_P3_ALL_RED_A:
Lights.Y_NS := FALSE; Lights.R_NS := TRUE;
Lights.R_EW := TRUE;
PhaseTimer(IN := TRUE, PT := T_ALL_RED);
IF PhaseTimer.Q THEN
PhaseTimer(IN := FALSE);
IF PedRequest THEN
Phase := PH_PED;
ELSE
Phase := PH_P4_EW_GREEN;
END_IF;
END_IF;
PH_P4_EW_GREEN:
Lights.R_EW := FALSE; Lights.G_EW := TRUE;
Lights.PED_R_NS := FALSE; Lights.PED_G_NS := TRUE; // 南北行人可走
PhaseTimer(IN := TRUE, PT := T_GREEN_EW);
IF PhaseTimer.Q AND (NOT LOOP_EW OR PedRequest) THEN
PhaseTimer(IN := FALSE);
Phase := PH_P5_EW_YELLOW;
END_IF;
PH_P5_EW_YELLOW:
Lights.G_EW := FALSE; Lights.Y_EW := TRUE;
Lights.PED_G_NS := FALSE; Lights.PED_R_NS := TRUE;
PhaseTimer(IN := TRUE, PT := T_YELLOW_EW);
IF PhaseTimer.Q THEN
PhaseTimer(IN := FALSE);
Phase := PH_P6_ALL_RED_B;
END_IF;
PH_P6_ALL_RED_B:
Lights.Y_EW := FALSE; Lights.R_EW := TRUE;
PhaseTimer(IN := TRUE, PT := T_ALL_RED);
IF PhaseTimer.Q THEN
PhaseTimer(IN := FALSE);
Phase := PH_P1_NS_GREEN;
CycleCnt := CycleCnt + 1; // 累計循環
END_IF;
PH_PED:
// 所有方向紅,僅行人綠燈
Lights.R_NS := TRUE; Lights.G_NS := FALSE; Lights.Y_NS := FALSE;
Lights.R_EW := TRUE; Lights.G_EW := FALSE; Lights.Y_EW := FALSE;
Lights.PED_R_NS := FALSE; Lights.PED_G_NS := TRUE;
Lights.PED_R_EW := FALSE; Lights.PED_G_EW := TRUE;
PhaseTimer(IN := TRUE, PT := T_PED_GREEN);
IF PhaseTimer.Q THEN
PhaseTimer(IN := FALSE);
PedRequest := FALSE;
Phase := PH_P4_EW_GREEN;
END_IF;
END_CASE;
MODE_MANUAL:
// 由 SCADA 寫入 Modbus Holding 40050 直接指定燈號
// (略 — 由 FB_ManualControl 處理)
FB_ManualControl(Lights := Lights);
END_CASE;
10.6 Function Block — 平均化(Modbus 對外)
FUNCTION_BLOCK FB_ModbusMap
VAR_INPUT
Lights : ST_TrafficLight;
PhaseNow : E_Phase;
PhaseRem : TIME;
END_VAR
VAR_OUTPUT
DiscreteIn : ARRAY[0..15] OF BOOL; // 1xxxx
InputReg : ARRAY[0..15] OF UINT; // 3xxxx
END_VAR
DiscreteIn[0] := Lights.R_NS;
DiscreteIn[1] := Lights.Y_NS;
DiscreteIn[2] := Lights.G_NS;
DiscreteIn[3] := Lights.R_EW;
DiscreteIn[4] := Lights.Y_EW;
DiscreteIn[5] := Lights.G_EW;
InputReg[0] := UINT(PhaseNow);
InputReg[1] := TIME_TO_UINT(PhaseRem) / 1000; // 秒
END_FUNCTION_BLOCK
10.7 Cycle hook — 統計與 watchdog
// 每 1 秒呼叫一次 (從 OB35 中斷 OB)
IF SecPulse THEN
UptimeHr := UptimeHr + 1; // 注意:每 3600 才 +1 小時,這裡略
Watchdog := Watchdog + 1;
IF Watchdog > 5 THEN
FaultLatch := TRUE; // SCADA 心跳遺失 (>5s)
END_IF;
END_IF;
11. Function Block Diagram (FBD)
也可用 FBD 視覺化主要邏輯(以 LD-04 為例):
┌──────────┐
MODE_AUTO ──▶│ AND │──┐
│ │ │ ┌──────────┐
P1_ACTIVE ──▶│ │ └──────▶│ OR │───▶ G_NS (Q0.2)
└──────────┘ │ │
│ │
MODE_MANUAL ──┐ ┌──────────┐ │ │
├─▶│ AND │──────▶│ │
M_MAN_G_NS ──┘ └──────────┘ └──────────┘
每個邏輯方塊在 TIA Portal/Codesys 中可拖拉組裝,且可一鍵切換 LD ↔ FBD ↔ ST。
12. SCADA / HMI 設計
12.1 SCADA 平台選型比較
| 平台 |
授權 |
適用 |
| Siemens WinCC |
商業 |
與 S7 PLC 緊密整合 |
| Inductive Automation Ignition |
Unlimited tag 商業 |
Web-based, 跨平台 |
| AVEVA Wonderware InTouch |
商業 |
大型廠房 |
| Rapid SCADA |
Open source |
預算受限案場 |
| Node-RED + Grafana |
Open source |
輕量 IoT 風格(與方案 B 接近) |
本案推薦 Ignition Edge 或 WinCC Unified,皆原生支援 Modbus TCP + OPC UA + Tag Historian。
12.2 畫面架構
┌─────────────────────────────────────────────────────────┐
│ Header [Project | User | Time | Alarm bar] │
├─────────┬───────────────────────────────────────────────┤
│ │ │
│ Nav │ Main Content Pane (切換) │
│ Tree │ │
│ │ 1. Overview (路口示意圖+即時燈號) │
│ - OV │ 2. Trends (近 24 小時相位/電流) │
│ - TRD │ 3. Alarms (即時 + 歷史) │
│ - ALM │ 4. Params (調整時長、模式) │
│ - PRM │ 5. Reports (週報、月報) │
│ - RPT │ │
│ - USR │ 6. User mgmt (RBAC) │
└─────────┴───────────────────────────────────────────────┘
12.3 SCADA Tag 表(節錄)
| Tag Path |
Modbus 來源 |
型別 |
用途 |
[Plant]TL01/Mode |
HR 40010 |
INT |
顯示+下指令 |
[Plant]TL01/Phase |
IR 30001 |
INT |
Overview 動畫驅動 |
[Plant]TL01/PhaseRem |
IR 30002 |
INT |
秒數倒數 |
[Plant]TL01/G_NS |
DI 10003 |
BOOL |
Overview 綠燈閃爍 |
[Plant]TL01/Cur_R_NS |
IR 30003 |
REAL |
Trends |
[Plant]TL01/Cmd_Reset |
Coil 00005 |
BOOL |
操作員清除故障 |
[Plant]TL01/T_GREEN_NS |
HR 40001 |
INT |
工程模式調整 |
12.4 報警設定 (Alarm)
| Alarm ID |
條件 |
嚴重度 |
動作 |
| ALM-001 |
FAULT_LAMP == 1 |
High |
推播 SMS + Email |
| ALM-002 |
STA_EMG == 1 |
Critical |
全廠廣播 |
| ALM-003 |
BulbFault == 1 |
Medium |
維修工單 |
| ALM-004 |
Modbus 通訊中斷 > 10 s |
High |
工程師告警 |
| ALM-005 |
AMBIENT_LX < 50 持續 2 min |
Info |
切夜間模式 |
12.5 歷史趨勢與報表
- Tag Historian:取樣速率 1 Hz,保留 90 天。
- 每日報表:循環次數、各相平均時長、故障次數、平均車流(loop 觸發次數)。
- 資料庫:MS SQL Server 或 PostgreSQL,分區表按月切分。
12.6 範例 Overview SCADA 畫面(ASCII 示意)
┌──────────────────────────────────────────────────────┐
│ Traffic Light TL-01 Mode: AUTO Phase: 1 25 s │
│ │
│ ▼ N │
│ ┌────────────┐ │
│ │ ● ● ● R Y G│ ← North bound │
│ └─────┬──────┘ │
│ │ │
│ ┌────────────┐ ┌───┴────┐ ┌────────────┐ │
│ │● ● ● W │ │ XING │ │ E ● ● ●│ │
│ │R Y G │ │ intxn │ │ R Y G│ │
│ └────────────┘ └───┬────┘ └────────────┘ │
│ │ │
│ ┌─────┴──────┐ │
│ │ ● ● ● R Y G│ │
│ └────────────┘ │
│ ▲ S │
│ │
│ Alarms: 0 active Cycles today: 1438 │
│ │
│ [Override] [Manual] [Flash] [Reset Fault] │
└──────────────────────────────────────────────────────┘
12.7 操作員權限矩陣 (RBAC)
| Role |
View |
Change Mode |
Tune Param |
Reset Fault |
User Mgmt |
| Operator |
✔ |
✔ |
– |
✔ |
– |
| Engineer |
✔ |
✔ |
✔ |
✔ |
– |
| Admin |
✔ |
✔ |
✔ |
✔ |
✔ |
| Viewer |
✔ |
– |
– |
– |
– |
13. 安全設計與保護機制
13.1 Fail-Safe 黃閃模式
| 條件 |
動作 |
| PLC CPU 停止(STOP) |
輸出模組為 Relay 型,斷電後接點打開;外加硬接線「黃閃發生器」電路接管。 |
| 通訊 SCADA 中斷 |
PLC 內部 Watchdog 5 s 觸發,自動切 FLASH。 |
| 任一綠燈電流異常 |
立即切 FLASH,避免雙向綠燈造成事故。 |
| EMG_STOP 按下 |
直接切 FLASH,且不可由 SCADA 解除(需現場 reset)。 |
13.2 紅綠衝突硬體保護 (Conflict Monitor)
採用獨立於 PLC 的衝突監控板(如 Eberle / Econolite Conflict Monitor):
PLC DO ──▶ SSR ──▶ Lamp
│
├──▶ Conflict Monitor MCU (獨立 STM32)
│
└──▶ 若偵測到「同向兩色同時亮」或「兩向綠同時亮」
→ 切換中繼繼電器 K_FLASH → 強制黃閃
此為機能安全 SIL 2 必要設計:軟體與硬體採用「異質冗餘」(diversity)。
13.3 EMC / 突波保護
| 措施 |
規格 |
| 電源端 SPD |
Class I + II(10/350 µs 25 kA) |
| 訊號端 SPD |
Phoenix Contact PT 5-HF-5DC |
| 接地 |
等電位連結 EBB |
| 屏蔽 |
RS-485 雙絞屏蔽線,單端接地 |
| 機箱接地 |
< 4 Ω |
13.4 網路安全 (OT Security)
- PLC 與 SCADA 之間放置工業防火牆(如 Tofino Xenon、Phoenix mGuard)。
- Modbus TCP 限制 source IP 白名單。
- SCADA 帳號使用 AD 整合 + MFA。
- 重要參數(相位時長)寫入需要 Engineer 以上權限並記錄 audit trail。
14. 測試、調機與驗收
14.1 FAT (Factory Acceptance Test) 流程
- 靜態檢查:接線對應 I/O list、線徑、端子標籤。
- 絕緣測試:500 V Megger 對地 > 10 MΩ。
- 單點動作測試:模擬每一 DI,確認對應 DO 動作。
- 時序測試:用示波器/邏輯分析儀量測 Phase 1→6 時長。
- 模式切換測試:AUTO→FLASH→MANUAL→OFF。
- 故障注入:拔除一顆燈泡 → 應自動 FLASH + 報警。
- Modbus 通訊測試:用 Modbus Poll 或 Modscan 32 讀寫所有暫存器。
- SCADA 整合:每個 Tag 上線、Alarm 觸發、Trend 記錄正常。
14.2 SAT (Site Acceptance Test) Checklist
| 項目 |
通過條件 |
| 接地電阻 |
< 4 Ω |
| 燈泡照度 |
> 200 cd(CNS 13438 ) |
| 一個 cycle 偏差 |
< ±1 s |
| 黃閃頻率 |
1 ± 0.05 Hz |
| 連續運轉 |
72 hr 無錯誤 |
| 報警電話 / Email |
5 分鐘內收到 |
14.3 Commissioning(試車)
Day 1 電氣檢查、上電、自我測試
Day 2 PLC 程式燒錄、I/O 點驗
Day 3 HMI / SCADA 整合
Day 4 FAT
Day 5 SAT、文件交付、教育訓練
Week +1 試運轉觀察 (Burn-in)
15. BOM 物料清單
| 編號 |
項目 |
型號 |
數量 |
單價 (NTD) |
| 1 |
PLC CPU |
Siemens 6ES7214-1HG40-0XB0 |
1 |
18,000 |
| 2 |
DI 模組 |
SM 1221 DI 16 |
1 |
6,500 |
| 3 |
DO 模組 |
SM 1222 DO 16 Relay |
2 |
14,000 |
| 4 |
AI 模組 |
SM 1231 AI 4 |
1 |
8,500 |
| 5 |
RS-485 模組 |
CM 1241 |
1 |
7,000 |
| 6 |
HMI |
Weintek MT8071iE |
1 |
16,000 |
| 7 |
SSR |
Crydom D2425 |
12 |
1,800 |
| 8 |
MCB |
ABB SH201-C5 |
12 |
350 |
| 9 |
SPD |
Phoenix VAL-MS 320 |
1 |
4,500 |
| 10 |
電源供應器 |
Mean Well DR-120-24 |
1 |
3,500 |
| 11 |
UPS 模組 |
DR-UPS40 + 7Ah |
1 |
6,000 |
| 12 |
LED 信號燈 (Φ300) |
– |
12 |
4,500 |
| 13 |
行人號誌 (Φ200) |
– |
8 |
3,500 |
| 14 |
行人按鈕 (IP67) |
– |
4 |
1,500 |
| 15 |
Loop Detector |
Reno A&E C-1100 |
2 |
6,500 |
| 16 |
CT 電流互感器 |
5A:5mA |
12 |
600 |
| 17 |
控制箱 IP65 |
Rittal AE 1000×800×300 |
1 |
18,000 |
| 18 |
Conflict Monitor |
Eberle EDI MMU-16LE |
1 |
22,000 |
| 19 |
工業防火牆 |
Phoenix mGuard |
1 |
28,000 |
| 20 |
SCADA 授權 |
Ignition Edge |
1 |
25,000 |
|
小計 |
|
|
≈ 350,000 |
|
工程/安裝/FAT/SAT |
– |
|
200,000 |
|
總計 |
|
|
≈ 550,000 NTD |
附錄 A:Phase 時序圖
時間 (s) 0 30 33 35 55 58 60 (=0)
├──────┼───┼─┼─────┼─┼─┤
NS 紅 │░░░░░░│░░░│░│█████│█│█│
NS 黃 │ │███│ │ │ │ │
NS 綠 │██████│ │ │ │ │ │
EW 紅 │██████│███│█│ │ │█│
EW 黃 │ │ │ │ │█│ │
EW 綠 │ │ │ │█████│ │ │
PED-NS 綠 │ │ │ │█████│ │ │
PED-EW 綠 │██████│ │ │ │ │ │
附錄 B:縮寫表
| 縮寫 |
全名 |
| PLC |
Programmable Logic Controller |
| SCADA |
Supervisory Control and Data Acquisition |
| HMI |
Human-Machine Interface |
| LD |
Ladder Diagram |
| ST |
Structured Text |
| FBD |
Function Block Diagram |
| TON |
Timer On-Delay |
| MCB |
Miniature Circuit Breaker |
| SSR |
Solid State Relay |
| CT |
Current Transformer |
| SPD |
Surge Protective Device |
| UPS |
Uninterruptible Power Supply |
| RBAC |
Role-Based Access Control |
| FAT/SAT |
Factory/Site Acceptance Test |
| SIL |
Safety Integrity Level |
文件版本:v1.0 / 作者:Control Systems Engineering Team / 日期:2026-05-16