← 所有文章

PLC 上下限裁切與超範圍診斷

· 站長

把原始110%、裁切100%與超界旗標分開保存,並區分來源無效、參數錯誤及真正飽和。

輸出限制到100 仍要知道原來算出110

控制命令算出110%,設備介面只接受0~100%,可以把輸出裁到100%;但若你把原始110覆寫掉,維護時就看不到超界原因。這篇把Raw、Limited、RangeFlag分開,讓輸出符合範圍的同時,仍保留診斷需要的資料。

本例是虛擬百分比命令,Min=0、Max=100,沒有連接加熱器或馬達。採用規則是超出範圍即裁切並立起相應旗標,剛好等於邊界不算超界。CODESYS LIMIT的官方參數順序是Min、IN、Max;其他平台若有類似函式,仍須核對順序與型別,不能只照名稱套入。

變數 X=110時 用途
Raw 110 保留原始計算要求
Limited 100 送給限制範圍內的後續介面
AboveMax TRUE 表示原值高於上限
BelowMin FALSE 表示原值不低於下限
Valid TRUE 本次資料有效但已飽和

「資料有效」與「未超界」不是同一件事。110可以是有效運算結果,但超過設備可接受範圍;通訊失敗後留下的110則可能根本無效。要用獨立的來源品質判斷Valid,再做範圍比較,不要用一次LIMIT把所有異常洗成漂亮數字。

先固定邊界條件 再寫程式

Limited = MIN(MAX(Raw, Min), Max)

先確認Min≤Max,再判斷Raw是否低於或高於界線。等於0時Limited=0且旗標均為FALSE;等於100也相同。若需求是「碰到上限就告警」,另設AtMax,不能把AboveMax的定義悄悄改成大於等於。

Raw Limited BelowMin AboveMax 說明
−20 0 1 0 裁到下限
0 0 0 0 等於下限
50 50 0 0 區間內不變
100 100 0 0 等於上限
110 100 0 1 裁到上限
1000 100 0 1 大幅超界仍須保留原值
教學偽碼,非指定PLC可編譯語法:
若範圍或來源無效:Valid := FALSE;Error := 原因
否則:
  BelowMin := Raw < Min
  AboveMax := Raw > Max
  Limited := MIN(MAX(Raw, Min), Max)
  Valid := TRUE
下游只在Valid成立時採用Limited。

不要在別處再寫Raw:=Limited,否則下一掃描或記錄器可能只看到100,無法知道110曾發生。把原始計算、限制結果與原因放在同一筆診斷資料,還可比較超界幅度與持續時間。

無效範圍和無效量測要先分流

本例若Min=100、Max=0,屬於參數錯誤;若來源為NaN、無限大或品質無效,屬於來源錯誤。都不進正常裁切。輸出本身要保持、關閉或改替代值,必須由設備規格決定;本文只在虛擬資料介面將Valid設為0,不替真實設備決定故障動作。

輸入條件 結果狀態 不能做的事
Min>Max CONFIG_ERROR 自動交換界線卻不通知
來源品質失效 SOURCE_INVALID 把上一筆值當本次有效命令
NaN或無限大 NUMERIC_INVALID 假設MIN/MAX一定會正常處理
Raw=110 有效 Valid=1 AboveMax=1 把超界等同通訊錯誤
Raw=100 有效 Valid=1 AboveMax=0 擅自當成超界
  1. 先在HMI編輯區驗證上下限,再整組提交,避免更新時出現上下限互換。

  2. PLC端再次核對範圍及來源有效性,不只信任畫面限制。

  3. 正常裁切時保留原值、限制值、界線版本與旗標。

  4. 無效時輸出明確Error,並讓下游按既定策略處理。

  5. 用範圍錯誤、來源失聯與正常超界三種測試確認警報不會混淆。

後續累加與反算要選對資料

假設原始命令連續三次都是110,Limited每次都是100。若你的統計是「要求命令總和」,三筆為330;若是「限制後命令總和」,則為300。兩者都只是命令的統計,不代表物理能量或產量。實際輸出回饋還要從設備讀取,不能把Limited直接當作實際動作。

資料用途 應考慮哪個值 原因
分析需求是否超負荷 Raw與RangeFlag 才能看到超界程度
送入限定範圍介面 Limited且Valid 符合接口範圍
實際產量或能量 實際回饋與時間資訊 命令不是量測
限制反算 Raw−Limited與控制器狀態 需依演算法定義回授

若這個限制位於積分控制器後面,單獨裁切輸出不一定會阻止內部積分繼續增加。解除飽和後可能還要很久才恢復,這是積分飽和相關問題。需採控制器官方支援的抗飽和方法或經驗證的反算設計,不要把Raw改寫成Limited就宣稱解決。本文沒有提供PID抗飽和實作。

在紀錄畫面可並排顯示「要求110%、限制100%、超上限10%」。這樣操作員看到輸出停在100時,不會以為系統不接受設定,也能辨認是持續超需求還是偶發計算尖峰。若告警要求持續超界一段時間,再以獨立計時判斷,不改變瞬時RangeFlag的事實。

用連續紀錄區分瞬時旗標與告警

先建立六筆輸入序列:九十五、一百、一百零五、一百一十、一百、九十五。限制後序列應為九十五、一百、一百、一百、一百、九十五;只有第三與第四筆的超上限旗標成立。若第五筆仍成立,先查旗標是否每次重新計算,或者被誤寫成保持型警報。

瞬時旗標描述目前這筆資料,告警則可以另有延遲與保持規則。若需求是持續超界才通知操作員,應使用有效時間資料計算持續時間,不要把六筆樣本直接當六秒。取樣間隔改變、資料中斷或掃描延遲,都會使筆數與實際時間不同;兩種資訊應分開記錄。

若告警需要人工確認,確認只處理告警的已讀或保持狀態,不應改掉原始值與瞬時超界事實。當原始值仍高於上限,畫面仍須清楚顯示目前超界;否則操作員按一次確認後,可能以為限制原因已消失。這是診斷介面的設計,不代表本文已提供設備安全保護。

參數改變也會讓同一原始值產生不同結果。例如原始要求九十,原上限一百時不裁切;新上限八十生效後,限制值變八十並立起超上限旗標。驗收時要記錄參數版本及生效時刻,才能解釋輸出為何改變。上下限若分次寫入,應先在編輯區完成,再整組提交。

下游若只接受限制值而忽略有效性,就可能在來源失效時繼續使用舊命令。請追查真正採用命令的位置,確認它同時檢查本次有效旗標及必要的新鮮度資訊。故障時的動作由設備需求另外決定;本篇的資料介面只能揭露問題,不能替下游自動選擇安全結果。

最後用另一組上下限重跑相同邊界策略,例如負五十到五十,測低於下限、等於下限、區間內、等於上限及高於上限。若只改參數就讓正負範圍的結果失真,通常是型別、比較符號或硬寫常數的問題。保留原始值可以讓這些錯誤被看見,也是後續修改限制策略時的重要依據。

完成驗收與常見錯誤

完成後應得到六列測試表的限制值與旗標;切換Raw=110→100→50時,AboveMax應依序1→0→0。另測Min>Max和來源無效,確認Valid=0並顯示不同原因。最後搜尋Raw的全部寫入點,確保診斷資料沒有被限制值覆蓋。

現象 先查哪裡
超界卻沒有旗標 是否用Limited比較上下限
等於上限就告警 比較符號是否把 > 寫成 >=
下限比上限大仍運作 參數驗證是否在LIMIT之前
無效資料變成正常100 來源品質與數值有限性檢查
解除限制後恢復很慢 是否有未處理的控制器積分累積

問:LIMIT會自己報超界嗎?不要假設,另由Raw計算診斷旗標。問:上限100是否代表Raw不能大於100?Raw可能超界,介面限制才輸出100,兩者要分開。問:限制後值可當實際輸出嗎?它是命令,仍要看硬體與設備回饋。

適用型號與限制:具體函式順序參照CODESYS Development System LIMIT文件;Q06UDVCPU與其他PLC應核對自身比較與限制指令。本文為百分比資料處理,不是安全限位或設備保護設計。

參考:CODESYS LIMIT 參數順序與MIN MAX等價式

延伸閱讀


使用 PLC 工具箱 →