← 所有文章

程式中未使用變數如何標示清理風險

· 站長

從交叉參照候選追到索引、區塊範圍、外部介面與保持資料,再分批驗證清理影響。

沒有交叉參照只代表搜尋未找到

程式整理時看到一串沒有交叉參照的變數,很容易想一次刪掉。但它可能被HMI讀取、被索引運算碰到,或作為保留資料供下次啟動使用。本篇教你先建立可刪除候選,再逐項排除外部與間接依賴,避免清理後才發現資料介面改了。

以GX Works2的Q系列工程為情境。先確認搜尋範圍、程式語言、編譯資訊與交叉參照條件,再解讀搜尋結果。工具只能在其支援和已選範圍內查找;零筆結果不是整個工廠不存在使用者的證明,尤其不包含未匯入的外部專案。

候選清單至少列名稱、型別、作用域、裝置映射、初值、保持需求、直接讀寫結果與間接依賴。先標待審,不立即刪除。註解寫保留未來使用可能已過期,但也可能是真實介面預留,應找設計或維護紀錄確認用途。

把程式內部暫存與外部公開資料分開。內部局部變數可能較容易確認影響,HMI固定讀取的裝置、通訊區塊與配方欄位則屬介面契約。即使PLC只寫不讀,也可能正是提供外部顯示的資料,不應因沒有內部讀取就判無用。

本文只說明離線盤點與分批驗證方法,不替特定工程決定可刪名單。沒有提供完整PLC、HMI與通訊專案時,不能宣稱某個裝置必然閒置,也不能把候選標記當成已核准變更。

先查直接引用再查範圍與別名

第一輪以名稱查讀取與寫入位置,再以對應裝置查程式和參數。不同名稱可能映射同一裝置,刪掉一個標籤不表示該裝置不再使用;反過來,同名局部變數在不同程式或FB實例中也可能不是同一筆資料。清單要保留完整作用域。

第二輪查區塊範圍。假設某搬移從D95開始處理十個word,範圍是D95到D104,D100雖未出現在起點文字中,仍在範圍內。確認數量的單位是word、雙word還是元素,再算終點,不能只搜尋畫面中是否有D100。

第三輪查間接與索引。例如設計允許基底D90加偏移0到20,候選範圍會涵蓋D90到D110,D100仍可能被存取。這是位址範圍推導,不是本文指定的GX語法;實際索引值、型別與限制要從專案追蹤。

第四輪查別名、結構成員與FB實例。整個結構被傳遞或複製時,個別成員可能沒有顯式名稱引用;FB內部資料也可能在初始化或特定狀態才使用。不能只在主程式搜尋一次,就忽略子程式、功能塊與初始化執行路徑。

GX Works2交叉參照的條件設定會影響裝置搜尋。手冊對含索引的裝置與編譯後交叉參照資訊有特定說明,實作時按目前選項核對。遇到範圍或間接用法,補上人工追蹤證據,不把工具未顯示解釋成程式未觸及。

外部使用與保持初始化最容易漏

把HMI標籤、資料記錄器、通訊伺服器、配方工具與維護腳本納入查找。外部可能依裝置位址、符號名稱或區塊偏移存取,PLC工程內沒有直接引用也能被讀寫。清單記外部專案版本和搜尋範圍,查不到專案時先保留該候選。

示例:TemperatureDisplay映射D200,PLC只寫入、沒有內部讀取,HMI卻每秒讀一次。它是有效顯示介面,不能刪。另一變數OldCalc僅在停用的舊程式中出現,也要先確認該程式真的不會被模式切換、維護程序或日後還原重新啟用。

保持變數不能只看日常掃描。它可能保存批次識別、校正值或上次處理狀態,只在上電或異常復歸時讀取。追查初值在哪裡設定、何時恢復、哪些條件使其失效,再決定刪除對重啟行為是否有影響。

觀察一週沒有變化也不足以證明無用。固定配置本來就很少改,年度校正、換線或異常路徑也可能尚未發生。運轉觀察可以補證據,但要與程式與介面追蹤合看,不把沒有遇到某情境當成那條路徑不存在。

為每個候選指定三種結果:確認保留、資訊不足暫留、可進入變更測試。確認保留需寫用途;資訊不足需寫缺哪份外部專案或設計資料;可測試需列已排除依賴與驗收項目。這比只打勾未使用更能幫下一位工程師接手。

分批刪除與檢查介面是否移位

先保存基準工程和可回復版本,在工作副本處理一小批相同用途的候選。避免一次移除大量變數又重排程式,讓差異難以追查。每次變更都保留刪除清單、理由和受影響的功能,供審查及回復使用。

重新編譯可能重新配置自動分配的標籤或資料,因此不能只看編譯是否成功。比對外部使用的裝置映射、結構布局、通訊區塊長度與配方欄位,確認刪除內部項目沒有讓公開介面位移。具體配置規則按工程工具和專案類型確認。

功能驗收至少包括正常運轉、上電初始化、配方切換、維護模式及相關異常路徑。若候選曾涉及保持資料,再測重新啟動與恢復流程。沒有外部設備的離線測試,只能確認已覆蓋的程式行為,不能代替真實HMI或通訊整合。

失敗時先比對刪除清單和映射差異。HMI讀到另一個值,優先查裝置重新配置;上電後才錯,查保持與初始化;只有區塊傳輸錯,查結構長度和偏移。不要先把畫面改到新位址,掩蓋公開介面被意外變動的問題。

完成後應交付經審查的候選表、實際刪除表、編譯與功能測試結果,以及介面未被意外改動的證據。未執行的項目列待驗證。要把方法套到實際專案,仍需完整依賴與測試環境。

常見問題

問:沒有xref就能刪嗎?答:還要排除搜尋限制、索引、範圍、別名及外部使用。

問:只寫不讀算無用嗎?答:可能是提供HMI或通訊資料的輸出介面,需追外部讀取者。

問:長期沒變的保持值能移除嗎?答:先查上電、校正、換線與異常恢復用途,觀察不到變化不足以定案。

問:重新編譯通過就完成清理驗收嗎?答:還要比對映射和外部契約,並測相關功能路徑。

參考:GX Works2 Version 1 Operating Manual Common,第10.1節交叉參照、第15.2節Verify與智能功能模組設定相關說明。

參考:QnUCPU User Manual,CPU功能及資料保存;具體模組設定需另查該模組手冊。

延伸閱讀


使用 PLC 工具箱 →