本章主軸#

本章描述一個真實案例:作者要為某設計中心撰寫一個「資訊萃取工具」,將 CAD/CAM 系統中的鈑金件資料餵給專家系統(expert system)。困難之處在於 CAD/CAM 系統本身會持續演進,因此程式碼必須具備高度彈性

CAD = Computer Aided Drafting(電腦輔助繪圖),CAM = Computer Aided Manufacturing(電腦輔助製造)。

業務背景#

  • 工程師使用 CAD/CAM 系統繪製鈑金件
  • 專家系統需要這些幾何資訊來決定製造程序,控制數值控制機台(NC machine)
  • 專家系統開發昂貴、不易修改,預期壽命長於任何單一版本的 CAD/CAM 系統
  • 因此資訊萃取工具必須能輕易適配未來新版的 CAD/CAM 系統

專家系統的核心是把「人類專家的決策規則」搬進電腦。建立規則模型才是真正困難的工作;實作只是後續步驟。

Figure 3-1: 一片鈑金件範例——上面有 slot、hole、cutout、special 與 irregular 等特徵

領域詞彙#

鈑金特徵(features)#

名稱描述
槽(Slot)等寬直線切口,端點可方為圓,由銑刀加工
孔(Hole)圓形切孔,由鑽頭加工
切口(Cutout)方形切口,由高功率沖頭打出
特殊形(Special)預製的非標準形狀,由專用沖頭一次成型,例如電源插座孔
不規則形(Irregular)上述以外的所有形狀,需多種工具組合加工

其他術語#

  • 幾何(geometry):鈑金件外觀、特徵位置與尺寸的描述
  • 零件(part):鈑金件本體
  • 資料集/模型(dataset / model):CAD/CAM 資料庫中儲存幾何的記錄集合
  • NC 機台與 NC 集(NC set):餵給數控機台的指令集合

系統要做什麼#

  1. 分析鈑金件的幾何
  2. 根據其特徵決定製造程序
  3. 產生 NC 集指令
  4. 將指令送給製造設備執行

為何難寫?特徵之間有順序限制#

不能單純地對每個特徵獨立產生 NC 指令再串起來。特徵的順序往往會決定加工成敗

書中以「一個切口加上兩條穿過它的槽」為例:

Figure 3-2: 一個 cutout 與兩個 slots——左為成品外觀,右為實際由三個特徵組成

  • 若先做槽再做切口,沖頭撞下去時會把已被槽弱化的金屬撞彎

Figure 3-3: 錯誤順序——先做槽再撞 cutout,鈑金被弱化而彎曲

  • 必須先做切口、再做槽,因為銑刀施的是側向壓力,不會造成形變

Figure 3-4: 正確順序——先打 cutout,再用銑刀切槽,避免變形

幸好作者的工作只負責萃取資訊,這些順序規則由專家系統處理。

真正的挑戰:應對 CAD/CAM 的變動#

  • 公司目前使用 V1,新版 V2 即將推出,兩者不相容
  • 因技術與行政原因,無法把模型從一版轉換到另一版
  • 專家系統必須同時支援 V1 與 V2
  • 而且 V3 也已知會出現,但時程與內容皆未定

軟體架構的角色之一,就是隔離高變動風險的部分,保護其他部分不受波及。

高層架構與類別圖#

  • 應用程式負責初始化,告訴專家系統使用哪一版 CAD/CAM
  • 專家系統透過共同的 Model 類別與 V1 / V2 溝通
  • Main 類別實例化正確版本的 ModelV1ModelV2Model

Figure 3-5: 整體解法的高層架構圖

Figure 3-6: ExpertSystem 透過 Model 類別與 V1Model/V2Model 互動的類別圖

在「幾何萃取(geometry-extractor)」這層需要多型;但在「特徵層」不需要——因為專家系統需要知道每個特徵的具體型別來決定加工順序。

兩種版本的本質差異#

V1:函式庫式#

V1 是一堆子程式集,呼叫流程冗長:

  1. 開啟模型 XYZ → 取得 handle H
  2. 查詢模型 H 的特徵數量 N
  3. 對每一個特徵 i
    • 取得 ID
    • 查詢特徵類型
    • 依類型再呼叫對應子程式取得 X、Y 等資訊

V1 完全不是物件導向:呼叫者必須手動維護所有上下文,每個查詢都要記住自己面對的是哪種特徵。

V2:物件導向式#

  • V2 採物件導向設計,模型本身是一個物件
  • 模型物件中包含一組特徵物件(slot、hole、cutout、special、irregular 各對應一個類別)
  • 命名前綴 OOG 代表 object-oriented geometry

Figure 3-7: V2 系統的特徵類別——OOGFeature 衍生出 OOGSlot、OOGHole 等

本章重點#

  • 真實世界的軟體常常需要在持續演進的外部系統間扮演橋樑
  • 領域詞彙必須先釐清,否則設計討論會失準
  • 變動點(這裡是 CAD/CAM 版本)是架構決策的核心驅動因素
  • 同樣的資訊以截然不同的方式儲存於 V1 與 V2,是後續引入設計模式的關鍵伏筆