CRD-S1 · Legacy macro maintenance
CoCreate 舊巨集維護・
Lisp 程式改版
公司用了多年的 CoCreate 巨集,寫的人已經離職、沒有留下文件;平常還能用, 但一遇到錯誤、要改規則或升級版本,就沒人知道該從哪裡改。
我協助盤點既有的 Lisp 程式、整理功能與檔案關係、修正錯誤,並配合新版本或新流程調整, 讓巨集重新變成可以維護的工具。
01
先盤點,再決定怎麼改
舊巨集難處理的地方不是「寫得不好」,而是沒有人知道它完整在做什麼。 直接修改容易牽一髮動全身,所以我會先做盤點:
- 公司實際在用哪些巨集、各自的功能與使用者
- 程式之間的呼叫關係、啟動時載入的檔案與設定
- 依賴的圖框、零件庫、屬性名稱或資料夾路徑
- 在目前與目標版本上的執行狀況
盤點結果會整理成文件,之後不論修補、改寫或換人維護,都有依據。
升級前,我會對照 PTC 文件列出的不相容變更,確認公司的巨集有沒有用到:
| 版本 | 變更 | 舊巨集可能遇到的狀況 |
|---|---|---|
| CoCreate OneSpace Modeling 2007 | Lisp 的字元改為 16 位元;自訂檔的預設編碼改為 UTF-8 與 UTF-16,檔案開頭有 BOM 才會自動辨識 | 沒有 BOM 的檔案用 legacy 編碼讀取,依執行的語言版本而定,中文可能變成亂碼 |
| CoCreate Modeling 2008 | loop 改成符合標準的實作 | 在簡單的 loop 裡用 (loop-finish) 會出錯,要改成擴充寫法,例如加上 do |
| Creo Elements/Direct Modeling 17.0 | sd-sysid-to-obj 的傳回值從單一物件改成物件清單 | 呼叫這個函式的地方要修改 |
| 18.0 | 改成 Fluent UI;Dialog Generator 對話框加進 toolbox 的預設參數也跟著改了 | 自訂對話框在 toolbox 找不到,要在定義加 :toolbox-button t |
| 20.9 | HELIX_ADD、HELIX_REM 改為 HELIX_DIA;GENERAL_SWEEP_ADD、GENERAL_SWEEP_REM 改為 GENERAL_SWEEP_DIA | 舊指令找不到,改用新指令,並加 :add_material 或 :remove_material |
| 換主版本 | 編譯過的程式只在同一個主版本內相容 | 只剩編譯檔、沒有原始 .lsp 時,無法重新編譯 |
| 不同版本之間 | Session 檔可能不相容 | 巨集或流程有用到 session 檔時,要在新版本上重新測試 |
升級後按鈕不見,:toolbox-button 是原因之一,也要檢查自訂檔有沒有從預期的目錄載入。 載入方式、四層自訂目錄與出錯的檢查方式,整理在Creo Elements/Direct 巨集設定。
參考資料(PTC Creo Elements/Direct Modeling 20.9 說明,英文):What's New、Command Syntax Changes and Enhancements、Unicode and String Processing、Customization Guide for Administrators and Advanced Users、Advanced Topics、File types overview。
02
常卡住的地方
原作者離職
巨集能用但沒人看得懂,出錯時只能繞過或放棄使用。
升級版本後報錯
想升級 Creo Elements/Direct,卻擔心舊巨集不能用而一直延後。
規則變了改不動
料號規則、圖框或屬性欄位調整,但巨集裡寫死了舊規則。
檔案散落各處
同一個功能有好幾個版本的程式檔,不確定哪一個才是正在用的。
03
工具可以怎麼做
- 01
程式盤點
整理現有巨集清單、功能、呼叫關係與相依檔案。
- 02
功能文件化
寫成使用者看得懂的操作說明,以及維護者需要的技術說明。
- 03
錯誤修正
依盤點結果修正錯誤,並在實際使用的圖面上驗證。
- 04
版本相容調整
在目標版本上測試,對照 PTC 列出的指令與函式變更調整。
- 05
規則參數化
把寫死在程式裡的料號、路徑、欄位名稱抽成設定,日後改規則不必改程式。
- 06
整併與重寫
重複或結構混亂的程式,評估整併或重寫成較好維護的版本。
04
開發前會確認的條件
這些條件決定工具能不能穩定運作,也會影響開發範圍與報價。不確定的項目,評估時一起確認即可。
項目
要確認什麼
為什麼重要
程式檔案
要確認什麼是否還保有原始 .lsp,或只剩編譯過的檔案
為什麼重要決定能否直接修改,或需要依行為重寫
使用中版本
要確認什麼目前與目標的 Creo Elements/Direct 版本
為什麼重要版本差異是測試與調整的重點
實際用法
要確認什麼誰在用、多常用、用在哪些流程
為什麼重要決定盤點與修正的優先順序
相依資源
要確認什麼圖框、零件庫、屬性欄位、網路路徑
為什麼重要換環境時要先確認的地方
測試方式
要確認什麼能否提供可測試的範例模型與環境
為什麼重要修正後需要在實際情境驗證
相關技術筆記
全部筆記 →05
常見問題
Lisp 自訂(Integration Kit)從 SolidDesigner Rev.4 就有,寫法一路沿用;但 PTC 文件列出幾個會讓舊程式出錯的變更,例如 18.0 起要放進 toolbox 的對話框必須加 :toolbox-button t,20.9 把 HELIX_ADD 換成 HELIX_DIA。我會先盤點公司在用的巨集,對照這些變更,在新版本上逐一測試,再決定修正範圍。
可以。我會先閱讀程式、整理出每個巨集的功能、呼叫關係與相依的檔案,再跟實際使用的人確認操作方式,最後整理成文件。
看程式的狀況與後續需求。只是少數錯誤或版本差異,修補可能比較划算;如果程式結構混亂、又要加很多新功能,重寫可能更省長期維護成本。盤點後我會說明兩種做法的差異再讓你決定。
能處理的程度有限。原廠的 Lisp 編譯會把程式轉成二進位碼,無法直接修改,而且只在同一個主版本內相容;原始 .lsp 遺失時,換主版本就只能依實際操作行為重新撰寫,需要先看檔案狀況再評估。