← 所有文章

輸入抖動造成診斷誤報如何用時間條件過濾

· 站長

以連續100ms判定與固定冷卻窗口範例,分清狀態去抖動、資料中斷及重複通知合併。

先決定要過濾狀態還是通知

同一個感測器短時間反覆變化,可能讓診斷畫面連續跳出相同訊息。先把原始輸入、判定後狀態和通知三層分開,再決定在哪一層過濾。若直接刪掉原始事件,之後很難判斷是真有機構抖動、接線問題,還是軟體通知重複。

常見的連續穩定判定,要求輸入維持新狀態一段時間才接受,通常稱去抖動。另一種事件冷卻,只在一定期間內合併重複通知,不改變設備狀態。前者增加狀態確認延遲,後者減少訊息數量,不能把兩者當成同一個計時器。

本篇以一般非安全診斷輸入為例,採連續有效觀測到1滿100ms才成立。普通PLC軟體過濾不能替代安全門、急停或其他安全功能要求的專門架構,也不能任意延後設備必須立即處理的條件。時間門檻應由訊號特性和功能需求決定。

先保存輸入來源、取樣週期、原始狀態、資料有效性和時間。普通實體X接點本身不會自帶通用Good或Bad品質欄;若由遠端通訊取得,則由該通訊診斷或應用判定是否有效。未知狀態不等於接點0,也不能用0默默填補逾時。

示例只提供狀態與時間規則,不指定某廠牌計時器位址或指令。實際PLC掃描、輸入模組濾波與程式計時解析度,都會影響延遲。先查平台,再把名義100ms轉成可驗收的時間範圍,不能保證任意硬體恰好在100ms執行。

跟著時間線做連續穩定判定

假設離線事件時間以毫秒計:0ms輸入0,30ms變1,80ms回0,140ms再變1,之後持續為1。第一段1只維持50ms,未達100ms,因此不產生已確認成立。回0時取消這段候選,不能把已經過的50ms留著累加。

140ms的新1建立新的候選起點。在後續有效觀測都維持1的條件下,240ms才滿100ms並確認成立。若230ms時回0,這段只維持90ms,同樣取消。這些時間點要在測試表逐列列出候選起點、經過時間與已確認狀態。

以固定10ms取樣示例,從140到240包含十一個取樣時刻,但經過時間是十個間隔。若只數十筆就宣稱100ms,可能少算一個間隔。用可信的經過時間判定通常更清楚,並把取樣延遲與計時解析度納入允差。

離散取樣只能證明觀測到的樣本符合條件,不能看見兩次取樣之間所有短脈衝。若訊號可能在5ms內來回,而取樣每10ms一次,程式可能完全沒看到。應按硬體輸入特性決定是否需要更合適的取樣或捕捉功能,不能由軟體延時補回未測到的資訊。

成立與解除可以採不同門檻,但必須分開定義。本例練習可先讓兩方向都要求100ms穩定,並保留最後已確認狀態。若製程要求故障成立立即、解除延時,則另訂該策略的時間線,不要把對稱去抖動直接套到所有告警。

資料中斷與冷卻通知如何處理

若候選期間有失聯或無效讀值,不能宣稱其間持續為1。本例取消候選並標示資料未知;恢復有效資料後重新建立候選起點。已確認狀態可作歷史值保留,但顯示需要明示過期,不能讓保留的1或0看起來仍是當前有效判斷。

設一個冷卻通知練習:同一診斷在0、200、700、1200ms重複觸發,冷卻窗口為1000ms。若規格從首筆固定計時,0ms發第一則,200與700合併計數,1200ms可再發一則;原始四筆都保存,對外通知只有兩則。

如果規格每次重複都延後截止時間,結果會不同:200ms把截止延到1200,700ms延到1700,1200ms仍被合併。這叫延伸窗口策略,不能與固定首筆窗口混用。選哪一種應寫進規格,並用同一組時間驗收。

冷卻只合併相同範圍的重複通知。不同設備、不同原因或故障解除再發生,是否開新事件需另訂;不要只用相同文字當鍵值。關鍵狀態變化與嚴重程度升級也不應被一般重複通知規則無意吞掉。

通知摘要帶首末發生時間、原始次數、合併次數與目前狀態。例如第一窗口共三筆,發出一則、合併兩筆。沒有原始計數與時間時,維護者可能把訊息變少誤認為硬體問題消失,這正是需要保留兩層資料的原因。

完成後應看到什麼與排錯順序

對連續穩定案例,預期30到80ms的短1不成立,140ms後連續有效觀測使狀態在首個滿100ms的可執行時刻成立。測試還要涵蓋剛好門檻、差一個取樣間隔、資料中斷與重啟,確認沒有沿用舊候選時間。

若仍誤報,先查看原始時間線:短脈衝是否真的被取樣到,計時是否在反向變化時清除,資料未知是否被當0,以及是否有另一個寫入者修改已確認狀態。先定位過濾層,不要每次只把門檻從100加到500。

若反應太慢,列出硬體濾波、取樣等待、軟體穩定時間、告警程序和HMI刷新等延遲。多層過濾可能疊加,單獨把軟體設成100ms,不代表操作員100ms內就能看到訊息。驗收需明訂量測起點和終點。

若通知數量不對,先核對固定窗口還是延伸窗口,再看事件鍵值與解除規則。原始四筆只顯示兩則可以是設計結果;但四筆原始資料也被刪到只剩兩筆,就失去診斷用途。圖表應讓讀者同時看原始事件和合併摘要。

完成後交付時間規則、測試序列、預期結果及實際結果欄。測試資料可離線重放,但要在目標PLC驗證掃描與計時精度後,才宣稱現場延遲符合要求。

常見問題

問:兩段各50ms的1能合成100ms嗎?答:本篇要求連續穩定,兩段中間回0就要重計,不能累加。

問:100ms冷卻能代替100ms去抖動嗎?答:不能,冷卻處理通知重複,去抖動處理狀態確認。

問:失聯期間可當成輸入0嗎?答:不能,應標資料未知並依本例重建候選時間。

問:訊息變少是否代表接點修好了?答:不代表,檢查原始事件次數與時間,合併通知可能只是減少顯示。

參考:QnUCPU User Manual,第2章程式執行及掃描相關說明;本文過濾狀態為自訂演算法。

參考:Python time官方文件,monotonic經過時間概念,非PLC API。

延伸閱讀


使用 PLC 工具箱 →