PLC 計時器與訊號防抖:液位開關跳動、感測器誤動作怎麼解?
「泵浦一直啟動又停止」「液位到了卻警報亂跳」「按一次按鈕動作兩次」——這幾乎都是同一類問題:訊號在臨界點附近抖動。而解法幾乎都跟計時器有關。
這篇說明訊號為什麼會抖、三種解法(防抖、遲滯、延遲)差在哪、以及各自該用在什麼場合。
一、訊號為什麼會抖?
| 來源 | 成因 | 典型抖動時間 |
|---|---|---|
| 機械按鈕、繼電器接點 | 金屬接點閉合時彈跳(Bounce) | 5~20 ms |
| 浮球 / 液位開關 | 水面波動、泵浦啟動造成的液面震盪 | 數百 ms ~ 數秒 |
| 近接 / 光電開關 | 物體正好停在感測邊界、震動 | 不定 |
| 類比訊號(壓力、pH) | 電氣雜訊、變頻器干擾、感測器本身雜訊 | 持續 |
PLC 的掃描週期通常是 1~10 ms,比接點彈跳還快。所以人眼看到的「按一下」,PLC 可能讀到十幾次 ON/OFF 變化。
二、解法一:防抖(Debounce)——訊號要「穩定」多久才算數
原理:訊號 ON 之後,必須持續維持設定時間,才承認它真的 ON。中途只要斷一次,計時器就歸零重來。
; 三菱:X010 液位開關,穩定 1 秒才算數 LD X010 OUT T10 K10 ; K10 = 10 × 100ms = 1.0 秒 LD T10 OUT M10 ; M10 = 已防抖的液位訊號
重點:OUT T10 的條件一旦變 OFF,T10 的現在值立刻歸零。所以抖動的訊號永遠累積不到 1 秒,T10 不會動作。
西門子 SCL:
// TON 延遲接通計時器
"Deb_Timer"(IN := "Level_SW",
PT := T#1S,
Q => "Level_Stable");
這是實務上很重要的紀律:原始訊號(X)只出現在防抖那一段,後面所有邏輯都用處理過的訊號(M)。否則某個角落又直接用了 X010,抖動就從那裡漏進來了。
這也讓程式易讀:看到 M10 就知道它是可信的液位狀態。
ON 和 OFF 要不要用不同的防抖時間?
常常要。例如缺水保護:訊號「消失」要快點反應(保護泵浦),訊號「出現」可以慢一點確認(避免誤啟動)。
; ON 延遲 3 秒(確認真的有水才啟動) LD X011 ; 缺水開關(有水時 ON) OUT T11 K30 ; 3.0 秒 ; OFF 延遲 0.5 秒(缺水立刻保護) LDI X011 OUT T12 K5 ; 0.5 秒 LD T11 OR M11 ANI T12 OUT M11 ; M11 = 水位正常(可運轉)
三、解法二:遲滯(Hysteresis)——這才是液位控制的正解
很多人用防抖去救「泵浦頻繁啟停」,但如果是單一液位點在做啟停判斷,防抖只是治標。
「水位低於 30% 就啟動補水泵,高於 30% 就停」——水一補上來馬上超過 30%,泵停;水位又掉回 30% 以下,泵又啟動。泵浦每分鐘啟停十幾次,馬達繞組過熱、接觸器接點很快就報廢。
加再多防抖也沒用,因為訊號沒有抖——是控制邏輯本身錯了。
正解是兩個不同的臨界點:
; D100 = 液位百分比(類比輸入轉換後) ; 低於 30% → 啟動;高於 80% → 停止 LD<= D100 K30 ; 液位 ≤ 30% OR M20 ; 自保持 AND> K80 D100 ; 液位 < 80% 才保持(≥80% 時斷開) ANI M_Fault OUT M20 ; 補水泵運轉 LD M20 OUT Y010 ; 泵浦輸出
這樣泵浦一啟動就會一路把水補到 80% 才停,不會在 30% 附近來回震盪。30% 到 80% 這段區間就是遲滯帶(Dead Band)。
原則:讓泵浦每次啟動後至少連續運轉幾分鐘。一般小型泵浦每小時啟停不宜超過 10~20 次(實際上限請查該泵浦馬達的規格書,大型馬達限制更嚴格)。
算法:遲滯帶對應的水量 ÷ 補水流量 = 每次運轉時間。若算出來只有 20 秒,就把遲滯帶拉大。
同樣的邏輯適用於:溫度控制(避免壓縮機頻繁啟停)、壓力控制(避免空壓機短循環)、pH 加藥(避免加藥泵抖動)。
用浮球開關的話,就直接裝兩顆——高液位一顆、低液位一顆,遲滯由安裝高度決定,最簡單也最可靠。
四、解法三:延遲(Delay)——保護與程序需求
這一類跟訊號品質無關,是製程或設備保護需要的等待。
泵浦啟動前先開閥
LD M20 ; 泵浦啟動命令 OUT Y011 ; 先開閥 LD X020 ; 閥開到位確認(限位開關) OUT T20 K20 ; 確認 2 秒 LD T20 AND M20 OUT Y010 ; 泵浦才真正啟動
閥沒開就啟動泵浦 = 憋壓,輕則跳脫,重則爆管。
馬達最短運轉 / 最短停機時間
就算條件變了,也強制它跑滿最短時間再停(或停滿最短時間才准再啟動)。這是保護馬達繞組散熱的標準做法,冷凍壓縮機尤其重要——短循環是壓縮機頭號殺手。
攪拌機延遲停機
加藥停止後,攪拌機再多跑 30 秒把藥劑混勻才停。
五、三菱定時器的實務注意事項
- 時基不同,K 值意義就不同。 FX 系列 T0~T199 是 100 ms 時基(K10 = 1 秒),T200~T245 是 10 ms 時基(K10 = 0.1 秒)。寫錯就是差 10 倍,現場調不出來常常是這個原因。實際編號範圍請以你手上機種的手冊為準,不同型號會有差異。
- 停電保持型定時器(如 FX 的 T246 起,累計型)斷電後現在值會保留,需要用
RST明確清除。用在「累計運轉時數」很好用,但當一般延遲用會踩坑。 - 不要重複使用同一個定時器編號。這是最常見的低級錯誤,兩個地方用 T10,行為會完全無法預測。建議一開始就把定時器分段:T0~T49 給防抖、T50~T99 給程序延遲,以此類推。
S7-1200/1500 的 IEC 計時器(TON/TOF/TP)是功能塊,每個實例要有自己的背景資料塊(Instance DB),不是像三菱那樣的全域 T 編號。好處是不會撞號,壞處是在迴圈或多重呼叫時要注意實例管理——同一個實例被兩處呼叫,行為一樣會出錯。
六、快速判斷:我該用哪一個?
| 症狀 | 該用 |
|---|---|
| 數位訊號快速跳動(ms 級) | 防抖(TON 濾除) |
| 泵浦/壓縮機在設定點附近頻繁啟停 | 遲滯(兩個臨界點) |
| 類比值有雜訊、數值一直跳 | 移動平均濾波 + 遲滯 |
| 設備需要先後順序啟動 | 程序延遲 |
| 馬達需要保護散熱 | 最短運轉/停機時間 |
最常見的誤診就是把遲滯問題當成防抖問題——加了一堆計時器還是頻繁啟停,因為根本原因是控制邏輯只有一個臨界點。
小結
- 原始訊號防抖後,後續邏輯只用處理過的訊號,不要再碰原始的 X
- ON 與 OFF 的防抖時間可以不同——保護要快,啟動要穩
- 設備頻繁啟停,九成是缺遲滯,不是缺防抖
- 遲滯帶的大小,要回推到「每次至少運轉幾分鐘」來設計
- 三菱注意時基與編號重複;西門子注意實例 DB
我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。
還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。
→ 我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試
環控系統的計時與遲滯,交給懂現場的 AI
易歐特的 AI PLC 工具內建液位遲滯控制、雙泵交替、加藥 pH/ORP 控制等標準控制塊,遲滯帶與保護延遲都是依現場實務預設,不是教科書上的理想值。支援三菱、西門子、歐姆龍、台達、士林。
免費試用 AI PLC 工具 →免費會員每月 15 點 · 不需信用卡 · 產生失敗不扣點
易歐特科技有限公司 · 工業自動化 PLC 程式設計與環控系統整合 · 委託開發請洽 需求提交