方案 A(傳統工業自動化方案) 適用情境:十字路口、產業道路、廠區出入口、隧道號誌等需要高可靠度(MTBF)與符合工業規範(IEC 61131-3、IEC 61508 SIL2)的場域。


目錄

  1. 系統概述與設計目標
  2. 需求規格 (SRS)
  3. 系統架構
  4. 硬體設計
  5. 電氣電路圖
  6. I/O 點位表 (I/O List)
  7. Modbus 通訊設計
  8. 控制流程與狀態機
  9. Ladder Diagram (LD)
  10. Structured Text (ST, IEC 61131-3)
  11. Function Block Diagram (FBD)
  12. SCADA / HMI 設計
  13. 安全設計與保護機制
  14. 測試、調機與驗收
  15. 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 = 清除故障

Discrete Input (FC02) — 1x 區,唯讀狀態

位址 標籤 說明
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 緊急停止

Input Register (FC04) — 3x 區,唯讀數值

位址 標籤 型別 說明
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 EdgeWinCC 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) 流程

  1. 靜態檢查:接線對應 I/O list、線徑、端子標籤。
  2. 絕緣測試:500 V Megger 對地 > 10 MΩ。
  3. 單點動作測試:模擬每一 DI,確認對應 DO 動作。
  4. 時序測試:用示波器/邏輯分析儀量測 Phase 1→6 時長。
  5. 模式切換測試:AUTO→FLASH→MANUAL→OFF。
  6. 故障注入:拔除一顆燈泡 → 應自動 FLASH + 報警。
  7. Modbus 通訊測試:用 Modbus Poll 或 Modscan 32 讀寫所有暫存器。
  8. 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