查表前先定義有效範圍
多點校正表可以把量測值轉成工程值,但輸入落在第一點之前或最後一點之後時,結果該怎麼辦?本篇比較拒絕、夾限與外推三種策略,教你把數值與狀態一起輸出,避免軟體預設行為偷偷決定製程結果。
本例有四個節點:輸入x為0、10、20、30,對應輸出y為0、20、50、90。假設節點之間採直線插值,表內有效範圍含0和30。這是離線教學表,不是某台儀器的實際校正數據,也不宣稱範圍之外已通過量測驗證。
先檢查節點x嚴格遞增、沒有重複,x與y筆數相同,並保留單位和表格版本。重複x會造成區間寬度零,不能直接除法;若資料未排序,先依完整節點排序,不能只排序x而讓對應y留在原位置。
表格還要有適用的設備、量程、環境和有效日期等條件。相同四個數字用在不同單位或另一支感測器,不會自動具有相同意義。校正表保存與PLC載入表格是兩個環節,必須能確認運算實際使用哪個版本。
本篇主策略採拒絕表外輸入,夾限和外推作明確的對照版本。無效數值不能直接進入後續控制,具體保持、停止接受新命令或其他反應由設備設計決定。這裡不指定任何PLC原生查表指令或通用錯誤裝置。
選表範圍要覆蓋實際工作條件,不能故意縮窄到只留下最好看的區段。若現場經常超出最後一點,先查量程與使用需求,評估是否增加可信的校正點;不應把常態超界用永久夾限掩蓋,讓紀錄失去真實變化。
先把表內插值算正確
輸入x=15落在10到20之間,比例t=(15−10)/(20−10)=0.5,輸出y=20+0.5×(50−20)=35。它位於兩個端點之間,是插值。把區間索引和t保存到測試紀錄,能看出錯誤到底在找區間還是算公式。
再測x=5,位於0到10,t=0.5,y=10;x=25位於20到30,t=0.5,y=70。三段斜率分別2、3、4,不能用第一段的斜率2套整張表,否則x=25只會得到50而不是70。
節點本身也要測。x=0、10、20、30應分別得到0、20、50、90。若區間搜尋只接受小於上界,最後一點30可能找不到區間;先定義末端包含政策,不要靠把30減一個任意微小數字來繞過邊界錯誤。
對靠近節點的9.999、10、10.001,輸出分別19.998、20、20.003,依本例直線段連續接合。數值連續不代表斜率相同,這一點和校正是否平滑是不同問題;需要平滑曲線時應另選模型並重新驗證。
所有乘除中間值應使用適合的精度和範圍。若x與節點是整數,先做整數除法可能把t截成零;例如5/10若被截零,x=15就錯誤回到y=20。型別轉換要在除法前確認,不能只把最後y宣告成浮點。
用相同表外值比較三種政策
測x=−5與x=35。拒絕策略下,兩者都回報OutOfRange,不產生新的有效工程值,保留原始輸入、表格範圍與版本。畫面若保留最後有效結果,應顯示過期和原因,不能把舊數字當成表外輸入的本次結果。
夾限策略則把−5對到低端y=0,把35對到高端y=90,另回報ClampedLow或ClampedHigh。輸出數字落在量程內,不代表輸入有效。對需要控制判斷的欄位,是否允許使用夾限值必須另由功能規格決定。
線性外推若使用最外側區間斜率,低端斜率2使x=−5得到y=−10;高端斜率4使x=35得到y=110。這些只是模型延伸,不是已校正結果。外推可能越過輸出型別或設備範圍,需要另外檢查,不能只標成正常值。
三種政策在同一筆x=35上會得到無有效值、90、110,差異來自規格選擇,不是三套算法誰比較精確。驗收表明列policy、原始x、採用區間、數值和狀態,讓讀者能核對目前程式究竟實作哪一版。
有些數值函式庫對表外值預設回傳端點值,例如NumPy interp的預設左右結果。這是該函式的介面規則,不代表所有PLC或你的工程需求都應夾限。實作時要查預設值,必要時先在呼叫前自行判斷範圍。
夾限會讓不同輸入得到相同輸出,例如三十一與三十五都顯示九十,因此無法只從九十反推出原輸入。報表若只存結果而不存原值和狀態,便無法分辨真正端點與超界夾限;資料欄位應保留這項差異。
缺表 超界與版本切換如何驗收
只有一個節點時不能建立一般兩點插值區間。空表、重複x、缺少y、非有限值或格式不符,都先回報TableInvalid,不能把它們混成輸入超界。這能讓維護者知道應修表格,還是檢查感測器目前讀值。
載入新表時,先驗證完整節點與版本,再在受控邊界切換。若程式讀到新x陣列和舊y陣列,可能算出完全不屬於任何版本的結果。應使用平台可支持的一致快照或版本切換設計,不能只把兩個陣列依次覆寫就宣稱原子更新。
練習輸入順序5、15、25、35,再回15。主策略預期10、35、70、無效、35;第四筆應失效,第五筆才恢復本次有效結果。若第四筆仍保留有效旗標,即使數字沒變也屬狀態錯誤,這比單獨測一筆35更容易看出。
失敗時先查表版本與節點合法性,再看輸入單位、區間索引和表外政策。若節點都對、中間錯,查整數除法或x/y配對;若只有末端30錯,查等號;若只有超界結果不同,查函式預設行為與應用政策是否一致。
完成後應能重算表內三個中點,清楚列出表外三種結果,並驗證缺表和切換版本時不輸出未標記的錯值。實際查表成本、陣列邊界與更新一致性需在目標工程驗證。
若只需顯示圖表,可以把表內有效、表外外推和無效資料用不同標記呈現,讓讀者看出哪一段有依據。這些標記不應反過來改變權威數值;實際控制使用哪一類資料,仍由明訂的接受條件決定。
常見問題
問:超界直接回端點是不是最安全?答:不是通用結論,夾限可能掩蓋異常,需依用途決定並保留狀態。
問:外推算得出110就代表量測是110嗎?答:它是模型延伸,範圍之外未必經過校正驗證。
問:最後節點30為何找不到?答:先查區間搜尋是否漏掉末端等號,不要隨意修改輸入。
問:新表可分兩次覆寫x與y嗎?答:需防止讀取混合版本,採受控切換或可證明一致的快照設計。
參考:NumPy interp官方文件,節點遞增要求及左右表外預設值;不代表PLC指令行為。
參考:NIST Linear Interpolation,節點間線性插值概念。