4-20mA 類比訊號完整指南:為什麼是 4 不是 0?
數位訊號只有 ON 和 OFF,但真實世界是連續的——水位 63.5%、pH 7.24、壓力 2.8 bar。要把這些讀進 PLC,靠的是類比訊號,而工業界的絕對主流就是 4-20mA。
這篇講清楚它為什麼這樣設計,以及現場最常踩的四個坑。
一、為什麼是 4~20mA,不是 0~20mA?
這是整個設計最聰明的一點,而且理由跟停止按鈕要用常閉接點是完全一樣的:斷線安全。
如果量程下限是 0mA,那麼:
· 感測器量到最小值 → 0mA
· 線斷了 → 也是 0mA
→ 你分不出來「水位真的是 0」還是「線斷了」。
如果量程下限是 4mA:
· 感測器量到最小值 → 4mA
· 線斷了 → 0mA(電流迴路斷了,一點電流都沒有)
→ 讀到 0mA 就代表「斷線」,可以立刻報警。
所以在程式裡,你應該主動偵測「低於 3.8mA」並發出斷線警報,而不是把它當成 0% 拿去用。
// 類比輸入斷線偵測(以 4-20mA、量程 0~100% 為例)
// 3.8mA 以下 = 斷線 / 感測器故障
IF rawCurrent < 3.8 THEN
sensorFault := TRUE;
// ⚠ 重要:故障時不要把 level 設為 0!
// 那會讓補水泵誤以為水位是 0 而狂灌水。
// 應該保持上一個有效值,並停止依賴此訊號的自動控制。
ELSE
sensorFault := FALSE;
level := (rawCurrent - 4.0) / 16.0 * 100.0;
END_IF;
如果液位感測器斷線,而你的程式把它當成「水位 0%」——補水泵會啟動,而且永遠不會停(因為讀值永遠是 0)。
結果:水一直灌,溢流,淹掉整個機房。
感測器故障時,正確的行為是停止自動控制並報警,而不是拿一個假的數值繼續跑。
4-20mA 的另一個優點:抗壓降
電流訊號在整條迴路上是一樣的(基爾霍夫電流定律)。線拉一百公尺、線徑細一點、接點有點電阻——電流值都不會變。
相比之下 0-10V 電壓訊號會因為線材電阻產生壓降,拉遠了讀值就會偏低。所以:
| 訊號 | 適用 |
|---|---|
| 4-20mA | 現場長距離拉線(數十至數百公尺)、有干擾的環境。工業首選 |
| 0-10V | 盤內短距離、變頻器類比命令 |
二、兩線式 vs 四線式——買錯就接不起來
這是採購時最常搞錯的事。
兩線式(Loop Powered / 2-Wire)
感測器用同一對線同時取得電源與輸出訊號。整個迴路只有兩條線,DC24V 電源、感測器、PLC 的類比輸入串在同一個迴路上。
DC24V(+) ──── 感測器(+)
感測器(-) ──── PLC 類比輸入(+)
PLC 類比輸入(-) ──── DC24V(-)
(電流在這個迴路裡流動,大小就是訊號)
優點:只要拉兩條線,現場配線成本低。這是絕大多數壓力、液位傳送器的做法。
四線式(4-Wire)
感測器有獨立的電源線(兩條)和獨立的訊號線(兩條)。通常用在耗電較大的儀器——pH 計、溶氧計、電導度計、流量計這類「有主機、有顯示器」的儀表。
你買了兩線式的感測器,但把它當四線式接(另外供電、訊號線單獨接 PLC)——電流迴路沒有形成,PLC 讀不到東西,或讀到滿刻度。
反過來,把四線式當兩線式接,可能直接把 24V 灌進 PLC 的類比輸入,燒掉模組。
接線之前,一定要先看感測器的說明書。 這件事沒有捷徑,而且不同廠牌的端子定義不一樣。
三、縮放(Scaling):把 mA 換成有意義的數字
PLC 的類比模組不會直接給你 mA,它給你一個整數。例如三菱 FX5 的類比模組,4-20mA 可能對應到數值 0~32000(實際範圍依模組與設定而異,請查手冊)。
你要做的是把這個整數,換算成現實世界的單位。
公式
實際值 = (原始值 - 原始下限) × (量程上限 - 量程下限)
÷ (原始上限 - 原始下限)
+ 量程下限
範例:壓力傳送器,量程 0~10 bar,PLC 原始值 0~32000
// ST 寫法
// ⚠ 注意型別:一定要用 REAL,否則整數除法會把小數截掉
pressure := INT_TO_REAL(rawValue) / 32000.0 * 10.0;
// 較完整的通用縮放(含下限不為 0 的情況)
pressure := (INT_TO_REAL(rawValue) - 0.0)
* (10.0 - 0.0) / (32000.0 - 0.0) + 0.0;
如果你寫成
pressure := rawValue / 32000 * 10; 而兩邊都是 INT:rawValue / 32000 的結果幾乎永遠是 0(整數除法會截掉小數),再乘 10 還是 0。你的壓力讀值永遠是 0,而且不會報錯。
對策:先乘後除,或確保至少一邊是 REAL。 這也是我們的 AI 工具會自動檢查的規則之一。
(詳見 ST 結構化文本教學)
還有一個坑:感測器的量程 ≠ PLC 的設定
你買了一支 0~10 bar 的傳送器,但工程師在程式裡寫成 0~16 bar(可能是抄了上一個案子的程式)。讀值會一直偏高 60%,而且完全不會報錯。
驗收時一定要用實際的已知值對一次。 例如液位感測器,先讓水位到一個你確定的高度,看 PLC 顯示對不對。
四、干擾:讀值一直跳動怎麼辦?
類比訊號最怕電氣雜訊,而工廠裡最大的雜訊源就是變頻器。
對策,依重要性排序
- 訊號線與動力線分開走。 這是最有效、也最常被違反的一條。訊號線和變頻器輸出線綁在同一條管裡,再多濾波都救不了。至少間隔 20~30 公分,必須交叉時請垂直交叉。
- 用屏蔽線(Shielded Cable),而且屏蔽層要接地。
- 屏蔽層只接「一端」的地,通常是 PLC 側 / 控制盤側。 兩端都接地會形成接地迴路(Ground Loop),反而引入更大的雜訊。這一點非常多人做錯。
- 變頻器加裝輸出電抗器或 EMC 濾波器,並確實接地。
- 軟體濾波(移動平均)——這是最後一道,不是第一道。硬體沒做好,靠軟體平均只是把爛訊號平均得比較好看而已,遲滯還會變大。
// 簡易移動平均濾波(取 8 筆)
// 注意:濾波會增加延遲,不要濾過頭
buf[idx] := rawValue;
idx := (idx + 1) MOD 8;
sum := 0;
FOR i := 0 TO 7 DO
sum := sum + buf[i];
END_FOR;
filtered := sum / 8.0; // ← 8.0 是 REAL,避免整數除法
· 變頻器停了就不跳 → 確定是變頻器干擾,去處理配線與屏蔽
· 停了還是跳 → 感測器本身、電源品質、或接觸不良
這個判斷只要三分鐘,但可以省下三天。(更多方法見故障排除教學)
五、驗收清單
類比訊號接好之後,這五件事一定要確認:
- ☐ 斷線測試——把訊號線拔掉,PLC 有沒有正確報「感測器故障」?(而不是顯示 0 然後啟動泵浦)
- ☐ 零點與滿刻度——用實際已知值對照,不要只信出廠標定
- ☐ 量程設定一致——感測器銘牌上的量程 = 程式裡的縮放參數?
- ☐ 干擾測試——把附近所有變頻器與大馬達啟動,讀值穩不穩?
- ☐ 屏蔽層單端接地——確認只接一端
小結
- 4mA 是「活零點」——低於 3.8mA 就是斷線,要報警,而且絕不能當成 0 拿去用
- 電流訊號抗壓降,適合長距離;電壓訊號只適合盤內短距離
- 兩線式與四線式接法完全不同,接錯讀不到或燒模組——接線前看說明書
- 縮放最常見的 bug 是整數除法截斷,讀值永遠 0 而且不報錯
- 抗干擾的第一名永遠是訊號線與動力線分開走,不是軟體濾波
- 屏蔽層只接一端的地,兩端都接會形成接地迴路
我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。
還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。
→ 我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試
類比訊號的縮放與斷線保護,AI 會幫你寫進去
貼上你的 IO 表(含感測器量程),AI 產生的程式碼會自動包含縮放運算、斷線偵測與感測器故障時的安全處置——不會出現「感測器壞了還在自動控制」這種事。
免費試用 AI PLC 工具 →免費會員每月 15 點 · 不需信用卡
易歐特科技有限公司 · 工業自動化 PLC 程式設計與環控系統整合 · 委託開發