National Central University
Uedu Main Site
Explore Uedu
Student Console
Register as Member/Login
Research Informed Consent Center
Survey Center
Educational Big Data Challenge
Claim or create a course
Try an AI Scenario Task
Support & Messages
Uptime Data

UeduGPTs

--

Jupyters

3

Local AI

--

Uedu Code

--

中央大學 AQI 80 24°C PM2.5 21
AI Reply Desktop Notifications

Show a desktop notification when the AI TA finishes replying

Chat Message Notifications

Notify me when classmates post messages in the forum

Sound notification

Play an alert sound whenever there is a new notification

Unit 07

類比 I/O 與 PID 概念

4~20 mA、數值換算與閉迴路控制
Interaction 30 minute(s)

Learning Objectives

  • 說明 4~20 mA 電流訊號的優點,以及 4 mA 的「活零點」怎麼用來偵測斷線
  • 把類比模組的原始值換算成工程單位,也能把工程值反算成比較用的門檻
  • 用 CMP 與 SET/RST 寫出有遲滯的液位控制
  • 說出 PID 的 P、I、D 各自的作用,以及調太大或太小會看到什麼

從「有沒有」到「有多少」

前幾課的輸入只有 0 與 1:按鈕有沒有按、箱子有沒有到。但工廠裡很多量是連續的:水箱裡有多少水、爐子幾度、管路壓力多大。 這些量要靠變送器(transmitter)把感測器的讀數轉成標準的電子訊號,送到 PLC 的類比輸入模組。

這一課要回答:

  1. 為什麼工廠的類比訊號常用 4~20 mA 的「電流」,而且是從 4 開始?
  2. PLC 讀到的數字(原始值)怎麼換算成 °C 或 %?
  3. 只會比大小的階梯圖,怎麼把水箱的液位控制在一個範圍內?
  4. 想把液位穩穩停在 60%,PID 控制器在做什麼?

兩種常見的類比訊號

訊號 怎麼傳 適合
0~10 V(電壓) 量兩條線之間的電壓 距離短、控制盤內部
4~20 mA(電流) 量迴路裡流過的電流 距離長、雜訊多的現場

電流訊號的好處:

  • 抗雜訊、可以拉長線:迴路串在一起,同一圈電線上每一點的電流都相同,電線的電阻與感應到的雜訊電壓不太會改變電流。
  • 活零點(live zero):量程的最低點是 4 mA,不是 0 mA。電流掉到 4 mA 以下,PLC 就知道是斷線或變送器故障, 不會把「線斷了」誤認成「溫度是 0 °C」。NAMUR NE 43 建議把 4~20 mA 以外的電流留給故障訊號(例如 3.6 mA 以下、21 mA 以上,實際門檻依設備手冊)。
  • 兩線式變送器可以直接用迴路裡的電流供電,4 mA 就是留給它工作的最低電流。

安全:現場的類比訊號多半由 24 V 直流電源供電;接線、拆線前先確認電源已關閉並依工廠規定上鎖掛牌(lockout/tagout),控制盤裡的市電部分由合格人員處理。

原始值與換算

類比輸入模組用 ADC 把電流轉成整數,這個整數叫原始值。本課程的模擬 PLC 是 12 位元:4 mA 讀到 0、20 mA 讀到 4095, 放在字組 IW0~IW7。真實的類比模組範圍各廠牌不同,要查手冊。

換算就是一條直線(比例換算):

工程值 = 下限 + 原始值 ÷ 原始值最大值 ×(上限 − 下限)

例如量程 0~100 °C 的溫度變送器,原始值 2047 = 0 + 2047 ÷ 4095 × 100 ≈ 50 °C。

反過來也常用:階梯圖的 CMP 只能比較兩個整數,想寫「超過 80 °C 就警報」,就先把 80 °C 反算成原始值: 80 ÷ 100 × 4095 ≈ 3276,再寫 CMP IW0 > 3276。多數 PLC 也有換算用的指令或功能塊,可以直接得到工程值。

下面的小工具把三種數字連在一起:拖電流滑桿,或直接在任一欄輸入數字。

互動練習:電流、原始值、工程值

這是一支量程 0~100 °C 的溫度變送器。依序完成任務:

  1. 在「工程值」欄輸入 25,看 25 °C 對應的電流與原始值。
  2. 把電流拉到 20 mA,看原始值是多少。
  3. 把電流拉到 3 mA 以下,模擬訊號線被扯斷。
  4. 回答一個問題。

逐步看:用 Python 換算與反算

同一條直線,往兩個方向算:raw_to_temp 把讀到的原始值變成溫度,temp_to_raw 把想要的溫度變成門檻。注意 round() 讓門檻變成整數,因為 PLC 的 CMP 只比整數。

開關控制與遲滯

最簡單的液位控制:液位低就開泵浦,夠了就關。用一個門檻寫成階梯圖:

 ‖  CMP IW0 < 1638(40%)                Q0.0 泵浦
 ‖────[ < ]──────────────────────────────( )────‖

問題是液位一到 40% 附近,泵浦就會一下開、一下關,一秒切換好幾次。真實的泵浦與接觸器這樣頻繁啟停,很快就會損壞。

解法是遲滯(hysteresis):用兩個門檻。低於 40% 才開、高於 80% 才關,中間維持原狀。 階梯圖用 SET(設定)與 RST(重置)寫:條件成立時把輸出設成 1 或 0,條件不成立時不改變輸出。

rung 條件 輸出
1 CMP IW0 < 1638(低於 40%) SET Q0.0
2 CMP IW0 > 3276(高於 80%) RST Q0.0

家裡的冷氣、電熱水器的溫控,也是同樣的道理。

互動練習:水箱液位控制

水箱一開始只有 10% 的水,一直有用水流出(每秒 3%),泵浦打開時每秒進水 8%。液位感測器接在 IW0(0~4095 = 0~100%)。 起始程式只有一個門檻。按「執行」看看泵浦怎麼動,再依序完成任務:

  1. 改成遲滯控制:把線圈改成 SET Q0.0,再加一條 rung,用 CMP IW0 > 3276 接 RST Q0.0。
  2. 加一條 rung:液位低於 20%(原始值 819)時,低液位警報燈 Q0.1 亮。
  3. 回答一個問題。

小技巧:點接點後,在種類選「比較」,甲填 IW0、選運算子、乙填數字。

小測驗:類比訊號與換算

1.

一支 0~100 °C 的溫度變送器輸出 12 mA,溫度大約是多少?

2.

下面的程式會印出什麼?

raw = 1024
temp = 0 + raw * (100 - 0) / 4095
print(round(temp, 1))
3.

PLC 讀到的電流是 0 mA,最可能的情況是?

第 1 次作答

閉迴路控制與 PID

遲滯控制讓液位在 40%~80% 之間來回。如果製程要求液位穩穩停在 60%,就需要能調整「開多少」的控制方式: 泵浦接變頻器,PLC 輸出 0~100% 的開度(類比輸出,例如 4~20 mA)。

閉迴路(closed loop)控制不斷重複:量測 → 和設定值比較 → 算出輸出 → 再量測。設定值與量測值的差叫誤差(error)。 最常用的算法是 PID:

項 算法 作用 調太大
P 比例 Kp × 誤差 誤差越大、出力越大 超越設定值、來回振盪
I 積分 Ki × 誤差的累積 消除長期存在的小誤差(穩態誤差) 衝過頭、慢慢振盪
D 微分 Kd × 誤差的變化率 預先踩煞車,減少超越 對雜訊很敏感

只用 P 會有穩態誤差:水一直被用掉,泵浦必須保持開著;而 P 的輸出=Kp × 誤差,誤差是 0 時輸出也是 0, 所以液位只能停在「誤差剛好讓泵浦補得上用水」的位置。I 把誤差一直累加,就算誤差很小,累積久了也能把輸出推到需要的大小。

PLC 通常有內建的 PID 功能塊,設好取樣時間、Kp、Ki(或積分時間)、Kd 就能用;參數的單位與寫法各廠牌不同,以手冊為準。

逐步看:PI 控制器一輪一輪地算

每一輪:算誤差、累加誤差、算輸出、水箱變化。注意 out 怎麼隨著誤差變小而下降,但因為有 integral,不會降到 0。看完可以把第 4 行的 ki 改成 0 再執行:液位會停在 54% 左右,比設定值少一截。

互動練習:調 PID 參數

水箱從 20% 開始,設定值 60%,一直有用水流出。泵浦有一點延遲(管路與馬達加速),所以控制器的動作要過一下子才看得到效果。依序完成任務:

  1. 只用 P:把 Kp 調大,讓穩態誤差小於 3%。
  2. 繼續把 Kp 調大,直到液位一直上下擺動。
  3. 加上 I(必要時加一點 D):讓穩態誤差小於 0.5%、超越量小於 5%。
  4. 回答一個問題。

也可以勾選「用水量增加」,看看只有 P 和有 I 時的差別。

小測驗:遲滯與 PID

1.

階梯圖裡的 SET 和 OUT 有什麼不同?

2.

只用 P 控制,液位總是比設定值低一點。下面哪個做法能消除這個誤差?

3.

下面的 Python 模擬只有 P 控制的水箱,會印出什麼?

level = 40
for step in range(3):
    out = 5 * (60 - level)
    level += out * 0.1 - 4
print(level)
第 1 次作答

重點整理

  • 4~20 mA 電流訊號抗雜訊、能拉長線;4 mA 是活零點,低於 4 mA 表示斷線或故障。
  • 類比模組把電流轉成原始值(本課程 0~4095),用比例換算變成工程單位;寫 CMP 門檻時反算成原始值。
  • 開關控制要有遲滯:兩個門檻配 SET/RST,避免設備頻繁啟停。
  • 閉迴路控制不斷「量測 → 比較 → 輸出」;PID 的 P 依誤差出力、I 消除穩態誤差、D 減少超越。
  • P 或 I 太大會超越與振盪;調參數時一次改一個,觀察響應曲線。

下一課從單一台 PLC 往外看:工廠裡的設備、PLC、監控系統怎麼互相通訊。

這一課完成了!
Next lesson:工業通訊概覽
你目前沒有登入,學習進度只存在這個瀏覽器。 Login 後,進度會跟著帳號,換電腦也看得到。