首頁技術文章 › PLC 計時器與防抖

PLC 計時器與訊號防抖:液位開關跳動、感測器誤動作怎麼解?

易歐特科技 · PLC 基本功系列 · 適用三菱 FX/Q、西門子 S7、歐姆龍、台達、士林

「泵浦一直啟動又停止」「液位到了卻警報亂跳」「按一次按鈕動作兩次」——這幾乎都是同一類問題:訊號在臨界點附近抖動。而解法幾乎都跟計時器有關。

這篇說明訊號為什麼會抖、三種解法(防抖、遲滯、延遲)差在哪、以及各自該用在什麼場合。

一、訊號為什麼會抖?

來源成因典型抖動時間
機械按鈕、繼電器接點金屬接點閉合時彈跳(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");
之後程式一律用 M10,不要再用 X010
這是實務上很重要的紀律:原始訊號(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 秒把藥劑混勻才停。

五、三菱定時器的實務注意事項

西門子的不同之處
S7-1200/1500 的 IEC 計時器(TON/TOF/TP)是功能塊,每個實例要有自己的背景資料塊(Instance DB),不是像三菱那樣的全域 T 編號。好處是不會撞號,壞處是在迴圈或多重呼叫時要注意實例管理——同一個實例被兩處呼叫,行為一樣會出錯。

六、快速判斷:我該用哪一個?

症狀該用
數位訊號快速跳動(ms 級)防抖(TON 濾除)
泵浦/壓縮機在設定點附近頻繁啟停遲滯(兩個臨界點)
類比值有雜訊、數值一直跳移動平均濾波 + 遲滯
設備需要先後順序啟動程序延遲
馬達需要保護散熱最短運轉/停機時間

最常見的誤診就是把遲滯問題當成防抖問題——加了一堆計時器還是頻繁啟停,因為根本原因是控制邏輯只有一個臨界點。

小結

AI 產生的 PLC 程式,到底能不能信?

我們建了一套 20 題基準測試,題目全部來自真實案場,並且公開了完整結果——包含難看的那幾項: 編譯通過率 80~95%、品牌指令混用 0%、整體全對 55~65%。

還有一個對我們自己不利的發現:AI review 幫得上找出可疑點,但 finding 本身也會誤報、必須經規則層與測試結果校正;它更不能可靠地「修好」程式。

我們把 AI 寫 PLC 的準確率量出來了:20 題基準測試

環控系統的計時與遲滯,交給懂現場的 AI

易歐特的 AI PLC 工具內建液位遲滯控制、雙泵交替、加藥 pH/ORP 控制等標準控制塊,遲滯帶與保護延遲都是依現場實務預設,不是教科書上的理想值。支援三菱、西門子、歐姆龍、台達、士林。

免費試用 AI PLC 工具 →

免費會員每月 15 點 · 不需信用卡 · 產生失敗不扣點

易歐特科技有限公司 · 工業自動化 PLC 程式設計與環控系統整合 · 委託開發請洽 需求提交