← 所有文章

診斷位元瞬閃的事件計數概念

· 站長

以離散樣本、基線、未知值、掃描漏失與uint16回繞條件,教導診斷位元瞬閃的事件計數概念;演算法僅供推理,未宣稱三菱語法或編譯。

診斷位元為何需要計數

診斷位元瞬閃時,人工監看通常只看到最後狀態,無法回答它在一段時間內翻轉幾次。把問題改成事件計數,先定義取樣週期、位元來源、重啟規則與未知值處理,再談計數結果。本文只提供可重算的概念演算法,不是三菱ST語法,沒有宣稱已編譯或在PLC上執行。

離散樣本0、0、1、1、0、1的差分是:第一次0到0沒有變化,第二次0到1是一個上升,1到1沒有變化,1到0是一個下降,0到1再一個上升。因此上升次數為2、下降次數為1。這個計數描述的是採樣點之間可見的邊緣,不是實體輸入在採樣間隔內所有脈衝的保證總數。

啟動後第一次讀到1時,若沒有前一個可靠樣本,不能自動算成上升事件。應把第一次讀值設為baseline,標記「基線建立」,從下一筆與它比較。若啟動第一筆為0,後面第一筆變1,則可在假設啟動時狀態可信的前提下計數;這個假設要寫進紀錄。

本文固定採用缺口重建基線策略:讀取失敗或來源無效時,不把未知當0,也不跨缺口計算邊緣。保留已累計次數與缺口數,將基線有效旗標清除;下一個有效樣本只建立新基線,之後才恢復相鄰比較。缺口期間實際發生幾次仍為未知。

QnUCPU手冊的Error History和GX Works2診斷功能能協助查控制器事件,但不會替任意診斷位元保存每一個邊緣。若需求是捕捉瞬閃,必須核對該型號、模組和取樣功能;普通監看畫面不能當高速事件記錄器。

樣本 邊緣與基線

概念上保存前值、基線有效旗標、上升次數、下降次數及無效樣本數。每輪先查資料有效性:無效就增加無效次數並使基線失效;有效但沒有基線就只存前值;有效且有基線才比較0到1或1到0,最後更新前值。這是演算法說明,不是三菱宣告語法。

原序列第一筆建立基線0,第三筆上升一次,第五筆下降一次,第六筆再上升。若改為0、0、1、未知、0、1,第四筆造成缺口,第五筆只重建基線0,第六筆再上升;已觀察上升共二、下降零,另有一筆無效,真實總數仍不完整。

樣本序號 讀值/品質 動作 累計結果
1 0/Good 建立baseline Rise0 Fall0
2 0/Good 無邊緣 Rise0 Fall0
3 1/Good 上升 Rise1 Fall0
4 1/Good 無邊緣 Rise1 Fall0
5 0/Good 下降 Rise1 Fall1
6 1/Good 上升 Rise2 Fall1

重啟也形成觀察缺口。即使保留了重啟前的前值,也不能證明停機期間沒有翻轉;本篇重啟後一律以第一個有效樣本重建基線,將保留的累計數按來源世代管理。若產品本身有持續工作的硬體累計器,應按其獨立規格讀差分,不能混作軟體邊緣計數。

如果多個任務或來源同時更新同一計數資料,還要確認寫入者與讀取者的同步;本文只談單一明確採集流程。沒有單寫入者、原子快照或可證實的資料交換方式時,計數值本身只能標記為可能競態,不能拿來做精確稽核。

掃描與脈衝漏失

假設PLC掃描週期10ms,而診斷位元只在2ms內為1。若脈衝恰好發生並結束於兩次程式讀取之間,程式可能讀到0、0,完全沒有上升事件。這是取樣間隔與相位造成的漏失,不是計數公式錯誤。

HMI每500ms更新一次時,漏失風險更高。即使PLC內部曾讀到1,HMI仍可能只顯示前後兩個0;因此HMI趨勢適合呈現慢變狀態,不能用來證明2ms瞬閃沒有發生。

要處理瞬閃,先確認來源是否有事件鎖存、硬體計數、取樣trace或其他產品明載功能,再確認其最小脈寬、容量與讀取清除行為。本文不杜撰指令或特殊暫存器;若手冊沒有保證,就把「可能漏失」寫入驗收限制。

時間條件 可觀測結果 能否計數 限制
掃描10ms、脈衝2ms在兩次讀取間 0→0 不能 脈衝完全漏掉
掃描10ms、脈衝跨越一次讀取 0→1→0 可見一升一降 只知道取樣點間可見
HMI500ms顯示 前後可能皆0 不能證明沒有事件 顯示刷新太慢
硬體事件計數 讀到累計值 依型號文件判斷 要核對溢位與清除

若把掃描改成5ms,2ms脈衝仍可能在相位不利時漏掉;加快輪詢只能降低某些風險,不能宣稱全抓到。測試時要改變脈衝相位與寬度,並保留來源波形或已核實的事件計數,否則單一次成功讀到不代表覆蓋全部條件。

診斷位元快速變化還可能來自資料品質翻轉、通訊重送或來源重啟。先把原始值、品質、來源時間和採樣序號分欄,不要只保存最後的布林值;只有這樣才能排查「真脈衝」和「資料層瞬變」的差別。

計數器回繞與失敗排查

假設外部無號十六位元累計器依模65536回繞。新值0、舊值65535,在來源未重置、身份一致且已證增量小於65536時,差分為(0−65535+65536) mod 65536=1。不是所有產品都採回繞而非飽和,先查產品規格,再使用此公式。

一般差分要證明區間增量小於一整圈,僅說最多一次回繞還不夠。例如舊值10、新值20,既可能增加10,也可能增加65546並回繞一次。用最大事件速率乘最大讀取間隔檢查上限,再查是否重置;證據不足就標未知,不能選較小值當事實。

失敗排查先看資料品質和取樣序號,再看baseline與重啟標記,最後才看計數差分。若RiseCount突然增加但UnknownCount也增加,不能直接把增加歸因於設備故障;可能是資料路徑恢復後的狀態跳變。

驗收可以用操作序列重算:輸入0、0、1、1、0、1,預期Rise2、Fall1;插入未知後,預期結果依既定未知策略標為不可判定;加入restart marker後,下一個可信值只建立新baseline。這些是演算法測試資料,不是硬體模擬或編譯結果。

適用限制包括Q系列CPU、模組、GX Works2版本和診斷來源差異。手冊章節可核對診斷、取樣與錯誤歷史的功能邊界,不能替專案保證掃描時序、輸入濾波或特殊模組行為。

FAQ與來源

FAQ1:樣本0、0、1、1、0、1的上升與下降是多少?答:上升2次、下降1次,前提是所有樣本Good且第一筆只建立baseline。

FAQ2:第一次讀到1是否算上升?答:沒有可靠前值時不算,先建立baseline;若需求明確假定啟動前狀態為0,才可另行計算並記錄假設。

FAQ3:PLC掃描10ms、脈衝2ms,能否保證計數?答:不能,脈衝可能完全落在兩次讀取之間;需核對有文件支持的鎖存或硬體計數功能。

問:65535變0是不是一次事件?答:在已核對模65536回繞、來源沒有重置且區間增量小於65536時可算1;若來源或計數規則不明,就不能如此推定。

參考:GX Works2 Version 1 Operating Manual Common:診斷、監看與Sampling Trace章節的文件核對。

參考:Mitsubishi QnUCPU User Manual:3.14 Sampling Trace與3.18 Error History的文件核對。

延伸閱讀


使用 PLC 工具箱 →