Learning Objectives
- 說明 HMI 與 SCADA 的分工,以及標籤(tag)資料庫的角色
- 把畫面元件綁到標籤,用資料驅動畫面
- 設定告警的上限與遲滯,說明告警跳動是什麼、怎麼避免
- 說明告警的確認流程,以及歷史資料怎麼記錄
操作員看的是畫面,不是暫存器
到目前為止,我們都用 Python 直接讀寫 PLC 的位址。工廠裡的操作員不會這樣做,他們看的是畫面: 水塔畫成一個桶子、泵浦是一個會變色的圖示、水位過高時跳出一行紅字。這種「人與機器之間的介面」叫 HMI(Human-Machine Interface)。
| 名稱 | 通常在哪裡 | 做什麼 |
|---|---|---|
| HMI | 機台旁邊的觸控面板、操作站 | 顯示一台機器或一個區域的狀態,讓操作員下命令 |
| SCADA | 中控室的電腦與伺服器 | 監控整個廠區甚至遠端站點:收集資料、告警、歷史紀錄、報表 |
| DCS | 化工、電廠等連續製程 | 控制器與監控軟體整合成一套系統(這一課不細談) |
不管哪一種,核心都是標籤(tag):一個有名字的資料點,例如 Tank.Level。標籤資料庫記下每個標籤的來源(哪台 PLC 的哪個位址)、
型別、換算方式與單位;畫面上的元件只要「綁」到標籤,資料一變,畫面就跟著變。
這一課要回答:
- 標籤資料庫要記錄哪些東西?
- 告警為什麼需要「遲滯」?
- 「確認告警」是什麼意思?歷史資料要怎麼記?
逐步看:一個最小的標籤資料庫
Python 版的「SCADA」:先寫一張標籤表,再寫一個 read_tag(名稱) 函數,畫面程式只用標籤名稱,不必知道位址。
模擬的水塔一開始水位偏低,PLC 在低水位時啟動泵浦;看第 3 次讀取時泵浦的狀態。
告警:上限、遲滯與跳動
最簡單的告警是「水位 > 80 % 就告警,≤ 80 % 就恢復」。問題是真實的量測值會晃動:水面有波浪、感測器有雜訊, 水位剛好在 80 % 附近時,值會在 79、81、79、82 之間跳來跳去,告警就一直發生、恢復、發生。這叫告警跳動(chattering)。
告警跳動的壞處不只是吵:操作員會習慣性地忽略它,真正重要的告警就淹沒在裡面。解法是遲滯(deadband): 超過 80 % 才發生,但要低於 80 − 5 = 75 % 才算恢復。下一個範例用同一串資料比較兩種設定。
告警發生後還有一件事:確認(acknowledge)。操作員按下「確認」,表示「我知道了、正在處理」,畫面就不再閃爍。 告警管理標準 ISA-18.2 描述的狀態大致是:
正常 ──超過上限──▶ 未確認(閃爍)──按確認──▶ 已確認 ──恢復──▶ 正常
│
└──沒人確認就恢復──▶ 已恢復、未確認 ──按確認──▶ 正常
「已恢復、未確認」很重要:就算問題已經自己消失,系統也要讓人知道「剛才發生過」。
逐步看:有沒有遲滯的差別
同一串 10 秒的水位,第一次不用遲滯,第二次用遲滯 5。看 events 串列:第一次有 4 個事件(跳動),第二次只有 2 個。
歷史資料與畫面設計
SCADA 的另一個核心是歷史資料庫(historian):把標籤的值連同時間記下來,之後畫趨勢、做報表、追查事故。 記錄方式有兩種,常常混用:
- 固定週期:每 1 秒記一筆。簡單,但值不變時也一直記,資料量大。
- 變化才記錄:和上一次記錄的值相差超過設定的範圍才記一筆,再加上「至少每 N 分鐘記一次」,確定系統還活著。 這和第 15 課的訂閱是同一個想法。
畫面設計也有標準可以參考。高效能 HMI(ISA-101 等指引)建議:平常的畫面用灰色等低調的顏色, 醒目的顏色只留給異常,操作員一眼就能看到哪裡出問題;把數值和趨勢放在一起,讓人看得出「正在變好還是變壞」。 上面的練習畫面就是照這個想法配色的。
小測驗:標籤與畫面
工廠把舊 PLC 換成新的,水位改放在另一個位址。用標籤資料庫的 SCADA,要改哪裡?
依照高效能 HMI 的建議,下面哪一種配色比較好?
小測驗:告警與歷史資料
下面的程式用遲滯 3 判斷告警,會印出什麼?
active = False
count = 0
for v in [79, 81, 79, 82, 76, 81]:
if not active and v > 80:
active = True
count += 1
elif active and v < 80 - 3:
active = False
print(count)
操作員按下「確認告警」代表什麼?
下面的程式模擬「變化超過 1 才記錄」,會印出什麼?
log = []
for v in [50.0, 50.4, 50.8, 51.3, 51.5, 49.9]:
if not log or abs(v - log[-1]) > 1:
log.append(v)
print(log)
重點整理
- HMI 是機台旁的操作介面,SCADA 監控整個廠區並負責收集資料、告警、歷史紀錄與報表。
- 標籤資料庫:名稱 → 來源位址、型別、換算、單位。畫面元件綁標籤名稱,換設備時只改標籤表。
- 告警:超過上限發生;加遲滯避免在上限附近跳動;遲滯只要大過正常的晃動就好。
- 告警狀態:正常 → 未確認 → 已確認 → 恢復;沒人確認就恢復的是「已恢復、未確認」。
- 歷史資料:固定週期或變化才記錄(加上最長間隔),和訂閱是同一個想法。
- 高效能 HMI:平常灰色,顏色只留給異常。
下一課談這些系統的安全:Modbus 沒有認證時,怎麼用網路分區與白名單保護產線。