建立虛擬工具機 (Building Virtual Machine Tools)¶
專案的工具機,是機械床台與刀具主軸之間的那條機構鏈:代表機台各元件的錨點,以及在它們之間承載運動的連接。機構鏈是靠載入一個工具機檔案進到專案裡的——出貨的機台之一,或從另一個專案存出來的檔案——再在專案裡改形;另存成自己的檔案之後,同一條鏈就可供在那台機台上執行的每一個專案使用。
位置¶
設備 (Equipment) 頁面,路由 /equipment,從選單列的「設備」切換鈕進入。選取控制樹的工具機項目(/equipment?tree=equipment/mechanism/machine-tool),它是機構群組底下的第一個項目。這個項目是葉節點:它的面板位於樹旁的編輯器欄,寫的是目前掛著的那條鏈的身分資訊,並以角色面板收尾。機構鏈的結構——它的錨點、連接、變換器與形狀——在畫布右側的拓樸欄裡就地編輯。在寬度至少 1280 px 的視窗上,這一欄預設就是顯示的;選單列那排欄位按鈕中的第四顆——切換拓樸欄——可以把它顯示或隱藏。
下圖是在示範專案上選取該項目的樣子,路由 /equipment?tree=equipment/mechanism/machine-tool。面板上是物件管理(⋮)按鈕、一枚讀作 GeneralXyzabcMachineTool 的類型標記、寫著目前生效的機構鏈叫什麼、來自哪個檔案的名稱:與檔案:兩行、一段說明,以及角色面板:床台安裝點與刀具安裝點繫結到機構鏈的兩個端錨點,接著是 X 軸到 C 軸,各自繫結到驅動該軸的那條連接,機台沒有的軸則留空。畫布畫的是夾具上的毛胚。

Note
設備畫布不會自動把工具機畫出來,得由你要求它才畫。 畫布上方的場景下拉選單有一個實體群組,其中的工具機核取方塊起初是未勾選的,所以即使機構鏈載入得完美無缺,那個畫布仍然只顯示夾具與工件。勾上它,工具機就會進到同一個場景;想看不帶夾具與毛胚的工具機,就在同一個下拉選單裡把夾具渲染模式、毛胚形狀渲染模式與目標形狀渲染模式都設成隱藏。
把機構鏈掛到專案上¶
機構鏈檔案要載到專案上,才會成為該專案的工具機。工具機項目的物件管理(⋮)選單就是機構鏈進出的地方:
| 項目 | 作用 |
|---|---|
| 載入 | 從專案資料夾或管理者目錄挑一個 .MachineTool 或 .mt 檔,把它裝成專案的機構鏈 |
| 新增 ClMillingDevice | 改為掛上一台 CL 驅動的空白裝置——唯一不需要檔案的機構鏈類型,因為它沒有任何東西要設定 |
| 另存新檔 | 把掛著的機構鏈寫出成一個 .MachineTool 或 .mt 檔,連同它的角色繫結 |
| 複製 / 貼上 | 以 XML 把機構鏈在專案之間搬運 |
| XML 模式 | 以 XML 顯示掛著的機構鏈,並把編輯的結果裝上去(套用);取消則讓它維持原樣 |
除了 CL 驅動裝置之外,每一種機構鏈類型都經由載入、貼上或 XML 進來。裝上一條鏈會重新接上夾具與工件的安裝點並重建控制樹,於是其餘設備一動也不用動,就跟著新的工具機走。
Tip
載入會直接開在出貨的工具機上。 這個選單的選取器有兩個根目錄——專案資料夾與管理者目錄——在這個項目上,它會開在管理者目錄裡的 Resource → MachineTool 資料夾,出貨的機構鏈就在那裡:CT-350.default 與 Table-B1.default 兩個資料夾,各是一台帶著形狀的五軸機台——打開資料夾,挑裡面的 .mt——以及 Empty-wXYOZSt.default.mt,一條完全不帶形狀的三軸骨架鏈。專案裡你自己的機構鏈檔案,切換一次根目錄就到了。
從檔案載入,也同時重新指定了專案存檔時要寫到哪個檔案。 從專案資料夾裡挑來的鏈,記成相對於該資料夾的路徑。從出貨資源庫挑來的,則先以同樣的相對路徑、連同它的形狀複製進專案,專案參照的是那份副本——所以編輯這條鏈、儲存專案,都不會蓋掉共用的那台機台。再次載入同一台出貨機台,會立刻把它蓋寫到那份副本上,對副本做過的編輯也就此遺失:要從預設機台重新開始之前,先把編輯過的機台用另存新檔存成自己的名字。新增 ClMillingDevice 則是把那個參照清掉,於是新的鏈會存在專案裡,而不是蓋到前一條鏈來自的那個檔案上。貼上與套用 XML 都讓參照維持原樣。
檢查掛著的是什麼¶
項目的面板會寫出掛著的是哪一條機構鏈:類型標記、名稱:一行,以及——機構鏈來自檔案時——檔案:一行。整條機構鏈再多一步就看得到:物件管理選單的 XML 模式會以 XML 開出掛著的機構鏈,按取消關掉就不會裝上任何東西。要看到機構鏈的樣子,就照上面那則 Note 框的說明勾上工具機。
/machine-tool 與 /util/mech-builder 這兩個網址也會開啟這個項目。
角色¶
項目面板末端的角色面板,寫的是掛著的那條鏈裡哪一個元素擔任哪一個角色。每一列是一個角色,帶一個列出該鏈自己的錨點或連接的下拉選單,以及一個在圖上點選按鈕:按下它,接著在拓樸欄裡點選一個相符的元素,就把它繫結上去。
| 角色 | 種類 | 什麼繫結到它 |
|---|---|---|
| 床台安裝點、刀具安裝點 | 錨點,必要 | 夾具與工件所連接的工作臺端錨點,以及刀具所連接的刀具端錨點 |
| X 軸、Y 軸、Z 軸 | 連接,可省略,需要 DynamicTranslation | 承載該線性軸的那條連接 |
| A 軸、B 軸、C 軸 | 連接,可省略,需要 DynamicRotation | 承載該旋轉軸的那條連接 |
| 主軸 | 連接,可省略,需要 DynamicRotation | 讓刀具繞自己的軸轉的那條連接——抵達刀具安裝點所掛之處的那一條,繞著刀具安裝點的 −Z、穿過其原點旋轉。主軸停著時(M05 之後、定向停止時),執行會把它轉到主軸角;它不是 NC 程式的軸 |
機台沒有某根軸時,那一列就留空;主軸連接不帶旋轉的機台,主軸那一列也留空,只是它的主軸在畫布上不會轉。把一根軸或主軸繫結到帶著錯誤變換器種類的連接會被拒絕,把同一個元素繫結到兩個角色也會。各列底下列出伺服端的檢查結果,或是檢查全部通過。:安裝點尚未繫結、角色繫結到該鏈自身組件以外的元素、同一個元素擔任兩個角色、沒有連接鏈從根錨點通到某個安裝點、軸連接帶的變換器種類不對、軸連接不在床台安裝點到刀具安裝點的那條鏈上,或主軸的旋轉軸沒有沿刀具安裝點的 Z 軸穿過其原點——主軸一轉就會甩動刀具,所以要把它的樞軸點移到刀具安裝點的原點上。重新繫結一個角色會重新接上夾具與工件,畫布也跟著重畫。
機構鏈本身——它的錨點、連接、變換器與形狀——是在拓樸欄裡編輯的:那張圖把整個設備畫出來,每個部件一個群集,機台的角色錨點帶著「工具機 · 床台安裝點」、「工具機 · 刀具安裝點」徽章;點一個錨點可以把它改名、從它延伸出一個新錨點、加一條連接或給它一個幾何,點一條連接則可以把它改名或換掉它的變換器。點機台的群集——標題是機構鏈的組件名稱,後面跟著一枚工具機徽章——會在控制樹裡選到這個項目,於是角色與圖並排擺在一起。CL 驅動的 ClMillingDevice 沒有可編輯的拓樸與角色,面板會這麼寫。
建立機構鏈¶
建一台機台,是先載入與它最接近的出貨機台,再在專案裡改形。新增 ClMillingDevice 是唯一提供的空白機構鏈,所以帶 X、Y、Z 與旋轉軸的機構鏈一律從一台現成的機台開始——載入的檔案,或貼上、套用 XML 進來的。
- 載入一個起點。 工具機項目上的物件管理 → 載入會開在出貨的機台上,如上所述。
Empty-wXYOZSt.default.mt是一副不帶形狀的三軸骨架,錨點是O、base、X、Y、Z、w、S與t;那兩個資料夾則各放著一台完整的五軸機台。載入會把機台複製進專案,所以接下來做的一切都不會改到共用的檔案。 - 在拓樸欄裡改形。 點一個錨點,可以替它改名——新名稱在按下 Enter 或離開欄位時生效——從它延伸出一個新錨點、新增連接到另一個錨點,或在它的刪除按鈕上按兩下把它刪掉。點一條連接,可以替它改名並挑選它的變換器。這張卡本身在錨點與角色裡說明。
- 給每根軸連接配上相符的變換器。 線性軸是帶 Dynamic Translation的連接,旋轉軸是帶 Dynamic Rotation的連接——這兩種的值會在執行時變動。其餘每一條連接都帶靜態的種類或 No Transform。
- 在工具機項目面板底部的角色面板(編輯器欄)裡繫結角色。 床台安裝點繫結到夾具與工件所連接的工作臺端錨點,刀具安裝點繫結到刀具所連接的刀具端錨點,機台有的每一列軸則繫結到驅動它的那條連接,主軸則在那條連接帶著 Dynamic Rotation 時,繫結到讓刀具轉動的那條連接。出貨的機台載入時,角色已經繫結好了;替元素改名不會改掉它的角色,刪掉一個元素則會放掉它的角色,並跳出一則點名該角色的通知,那一列就留待重新繫結。
- 給錨點形狀。 可省略:在錨點的卡上勾選幾何,再挑
Box3d、Cylindroid、StlFile或GeomCombination;種類底下的變換選取器把形狀移動或轉動到定位,或以不變換讓它維持畫出來的樣子。形狀上方的顯示顏色設定這個錨點的形狀畫出來的顏色;還沒設定時,旁邊的標記顯示自動。 - 把它留下來。 儲存專案,就會把編輯過的機構鏈存在專案自己的那份副本裡。要一個同一台機台上其他專案也能載入的檔案,就用物件管理 → 另存新檔,它會寫出一個帶著角色繫結的
.MachineTool或.mt檔。
讀取工具機檔案時依據的名稱¶
專案裡的機構鏈是以身分持有它的各個角色的:錨點或連接不論改成什麼名字都保有它的角色,而另存新檔會把繫結寫進檔案,所以這樣存出來的檔案,不論元素叫什麼,載入時都帶著同樣的繫結。沒有記錄角色的工具機檔案——出貨的機台,以及舊版本寫出的檔案——則是在載入時從自己的錨點與連接的名稱取得角色;存檔時床台安裝點或刀具安裝點沒有繫結的檔案,也以同樣的方式按名稱去找那個安裝點。對這種檔案來說,下面這些名稱不是標籤,而是這台機台之所以能運作的機制本身:
- 運動軸的名字取在連接上。 名為
X、Y或Z的連接被當作那根線性軸,名為A、B或C的被當作那根旋轉軸。每個關鍵字最多只用一次——機台若沒有某根軸,就是沒有帶該關鍵字的連接。 - 變換器種類與名字合起來讀。 名為
X、Y或Z的連接必須帶 Dynamic Translation,名為A、B或C的則必須帶 Dynamic Rotation。名字取對了卻留在靜態變換器上的連接,會繫結到它那一列軸,卻貢獻不出任何軸——角色面板會在各列底下把它標出來——機台最後會比它看起來少一根軸。 - 端錨點是
w與t。 工作臺端錨點w被當作床台安裝點,刀具端錨點t被當作刀具安裝點。缺了其中任何一個的工具機檔案仍然載得進來,每缺一個端錨點就有一則訊息,但這台機台動不了:一仿真就會停下來,訊息點名缺少的關鍵字,工作臺端先報。 O與base命名接地錨點與機台基座。它們不繫結任何角色,但下面的碰撞配對只有在它們拼得一字不差時,才會把它們剔除。- 主軸是按位置找的,不是按名稱。 抵達刀具安裝點所掛錨點的那條連接——出貨的機台上是
S——只要帶著一個繞刀具安裝點 −Z、穿過其原點旋轉的 Dynamic Rotation,不論那條連接叫什麼名字,都會被當作主軸。主軸連接帶的是 No Transform 或靜態偏移時,它就不是主軸:機台照原本的方式播放,只是主軸在畫布上不會轉。旋轉軸偏離刀具軸的旋轉也不會被採用,而且載入時會說明,因為轉動它會讓刀具繞圈甩動。
關鍵字要拼得一字不差(重要)
每個關鍵字都照寫出來的樣子拼。 運動軸是大寫的 X、Y、Z、A、B、C;接地錨點是大寫的 O;基座與兩個端錨點是小寫的 base、t、w。一字不差的拼法永遠先被找到。沒有任何錨點或連接用那個拼法、但剛好有一個只差在大小寫時,機台仍會採用那一個,並在載入時報告:機台把錨點 [W] 當作端錨點 'w',這個名字只在忽略大小寫時符合;請改名為 'w'。 有好幾個都只差在大小寫時,一個也不採用,載入時會點名它們。沒有任何東西相符的端錨點,會讓機台就是少了它——機台沒有端錨點 'w':沒有任何錨點叫這個名字。——而它自動產生的碰撞配對也會略過。O 與 base 沒有這種寬容:它們只有拼得一字不差時,才會從下面的碰撞走訪中被剔除。
連接方向是自由的:運動、軸關鍵字與預設碰撞配對,三者讀一條連接的方式都相同,不隨它指向哪邊而變。讓每條連接背向接地錨點是可讀性慣例——結構讀起來會由內往外:接地 → 基座 → 運動軸 → t 與 w 兩個端錨點。
名稱也決定了什麼能和什麼碰撞。 要求產生碰撞配對的工具機檔案,是靠把機構鏈走兩遍來回答的:從根錨點——出貨的機台上是 O——分別走到刀具安裝點與床台安裝點。這趟走訪需要兩個端錨點,所以少了其中一個的機台載入時不會有自動產生的碰撞配對,並附上一則說明的訊息;明確列出碰撞配對的檔案則保有它們。不論哪一種,這台機台上的每一次執行都會在開始時停下來,點名缺少的端錨點。沿途每一個具名的東西都成為可碰撞的元件;機台採用的兩個端錨點(不論拼法)以及 O 與 base 從兩趟走訪中都被剔除,刀具側加上刀把、刀柄與刀刃,床台側加上夾具與工件,然後兩側之間的每一對都會被產生出來,只有工件對刀刃例外——那一對是切削,不是碰撞。
數字從哪裡來¶
最方便的做法,是在 CAD 裡把機台組好,把運動元件擺到機械原點——也就是每個機械座標都讀作零的位置,一般就是原點復歸的位置——然後:
- 從那一個座標系把主要元件分別匯出成個別的 STL 檔,再各自設進它的錨點。
- 在同一個 CAD 座標系裡,量出刀具端錨點、工作臺端錨點,以及每根旋轉軸軸樞上的一個點,把這些座標輸入拓樸。
- 預期從基座到工作臺端的軸方向會是負的。那是相對運動而不是錯誤:把工作臺往一邊移,刀具就經由機構鏈往另一邊移。
網格保持粗糙。帶著太多網格的機台開起來慢、碰撞檢測也慢,所以請以「畫出這台機台的一張圖」所需的解析度匯出元件,而不是以 CAD 產生它們時的解析度。
沒有 CAD 組合體可量時,規格表就夠了——見下一節。
沒有模型的機台¶
既不在資源庫裡、也拿不到 CAD 組合體的機台,仍然可以仿真——用一條不帶任何形狀的機構鏈。一支程式切出什麼,取決於各根軸、它們的方向與工作偏移,而不是機台長什麼樣,所以一條沒有形狀的鏈放棄掉的只有機台的圖,以及對機台本體的碰撞。刀把、刀柄與刀刃對夾具的檢查照樣進行,刀把與刀柄對毛胚的檢查也照樣進行(刀刃對毛胚的那一項是切削,只在程式還沒給主軸轉速之前才檢查),因為這些碰撞配對來自機構鏈的名稱,而不是它的形狀。3.2.42 之前,對毛胚的碰撞配對雖然會產生,卻不會被評估——執行中的工件從沒交給碰撞檢查,所以刀把或刀柄進入毛胚時不會出任何訊息,實作案例裡的代理改從幾何自己核對這段間隙;從 3.2.42 起引擎會評估這些配對,並回報 Collided(Workpiece,ToolHolder) 與 Collided(Workpiece,CutterShank)。
其餘的由規格表提供:每根軸的行程、哪幾根軸由工作臺承載、哪幾根由主軸頭承載,以及主軸鼻端到工作臺的距離。下面的數字是一台行程 800 × 500 × 500 mm、主軸鼻端可從工作臺上方 600 mm 下到 100 mm 的機台。
- 排好各根軸。 工作臺承載 X 與 Y、主軸頭承載 Z 的立式加工中心,以機台鏈碼寫是
[O][Y][X][w];[O][Z][S][t],工作臺側的軸指向負向——(-1, 0, 0)與(0, -1, 0)——Z 則指向正向,(0, 0, 1)。由立柱或主軸頭承載的軸改放到t那一側,並指向正向。資源庫的MachineTool資料夾附了一條不帶形狀的三軸鏈,軸跟上面這台一樣、各自在同樣的那一側、指向也相同,檔名Empty-wXYOZSt.default.mt——[O][base][X][Y][w];[base][Z][S][t],X 疊在 Y 底下,對線性軸來說沒有差別——它的刀具端在工作臺端上方 1000 mm。照上面的方法在工具機項目上載入它:工作偏移是從機台鍵入時,它照原樣就能用;要換一種佈局,或要步驟 3 的另一個方向時,它是一個可以在拓樸欄裡改形的結構,每個錨點都不給形狀。 - 把刀具端錨點當成主軸的量規線 (gauge line)。
t就是刀把座落之處,而刀具的長度補正 (H) 是從那裡量到刀尖的,所以機構鏈本身不帶任何刀長——刀長是由刀具組件加上去的。 - 依工作偏移的來源方向擺放兩個端點。 這兩個方向在程式原點對齊裡說明。
- 工作偏移從機台鍵入。 零件的擺放是讓程式原點對上那些值,而這個擺放把兩個端點的偏移都吸收掉了,所以在沒有形狀的機台上,它們對切削沒有任何影響。任何說得通的擺放都行,例如下面這一個。要核對擺放,就在程式沒有用到的某一列工作偏移上按 P0,拿它跟鍵入的那一列比對;之後再用 M0 把那條備用列還原成機械零點。
- 工作偏移用 P0 從模型寫出。 這時兩個端點決定了機械零點相對於零件落在哪裡,於是也決定了 P0 寫出的每一個偏移。一次執行從原點位置開始——除非原點/G28 參考點另有設定,否則就是機械零點——而換刀會把 Z 送到它的換刀位置,除非換刀位置另有設定,否則就是 0,所以
t站在w上方的高度,必須大於夾具、毛胚與最長那支刀疊起來的總高。兩個端點落在同一點時,刀具在原點位置就穿進零件裡,而換刀後的第一個快移會把它拖過毛胚:雖然會發出快移切削的警告,但材料在這次執行接下來的部分已經不在了。以上面那台機台為例,在到達w的連接上設一個(-400, -250, -600)的靜態平移、到達t的連接上什麼都不設,就把工作臺中心擺到 X 與 Y 行程的中間,並把工作臺面擺在原點位置時刀具端下方 600 mm——也就是規格表給的最大鼻端到工作臺距離。資源庫附的Empty-wXYOZSt.default.mt不是這樣的鏈:它到達t的連接已經帶了(0, 0, 1000),所以同樣的擺放在它上面是到達w的連接設(-400, -250, 400)。若照樣設-600,工作臺面會在刀具端下方 1600 mm,P0 寫出的每一個 Z 都會超出步驟 4 的 Z 行程約 1000 mm。
- 按控制器讀到的樣子輸入行程。 在常見的配置上,每根軸在原點讀作 0、整段行程都是負的,於是這台機台是 X −800 到 0、Y −500 到 0、Z −500 到 0,輸入在控制器的機械極限(行程)葉節點上的 − 極限與 + 極限。快速進給率、原點/G28 參考點與換刀位置就在它旁邊——見控制器。不要假設配置,要讀機台自己的機械座標顯示;各軸整段行程讀作正值的機台,就換成那一組數字。
- 載入之後檢查端錨點。 你自己的工具機檔案也以同樣的方式載入:把它放進專案資料夾——在你自己電腦上的,就用檔案總管的上傳——再從專案根目錄用工具機項目的載入挑它。載入本身跳出的通知對錨點一字不提:機台缺少的端錨點、或大小寫寫錯的端錨點,會寫到服務的日誌裡——請從「說明」選單開啟日誌檢視器。缺少的端錨點也會立刻顯示在角色面板上,並在專案存檔之後,於下一次載入專案的訊息裡再次被點出來;它在角色面板上是床台安裝點或刀具安裝點那一列留空,列表下方寫著尚未繫結;此機構需要這個角色。
- 檢查機構鏈實際帶著哪些軸。 控制器的逐軸列在任何機構鏈掛上之前,每個廠牌都會列出 X、Y 與 Z,所以少了一根線性軸在那裡看不出來。改讀角色面板:機台有的每一根軸都是一列繫結到某條連接的軸,留空的列就是機台沒有的軸。本該驅動某根軸卻被留在靜態變換器上的連接,什麼也驅動不了:按名字取得角色的,會在各列底下被標出來;而在換掉它的變換器之前,也無法手動把它繫結到那一列——在拓樸欄裡點選那條連接,改挑 Dynamic Translation或 Dynamic Rotation。
範例:小型五軸立式銑床¶
一個完整的實作範例,連同它的 STL 檔:B1.zip。同一台機台也以 Table-B1.default 預設機台出貨,所以在工具機項目上按載入,就能照原樣把它開進專案裡。
它描述的機台:

以及那些錨點與連接構成的拓樸,也就是載入這台預設機台之後,拓樸欄畫出的機台群集——每條連接都標著它的變換器種類,有名字的連接則把種類寫在名字後面:

把機台放倒¶
臥式機台的建法與立式完全相同,然後再把它放倒:
- 依機台自己的軸座標建立拓樸。
- 在接地錨點與機台基座之間的連接上,設一個繞正規化軸向 (0, 1, 1) 旋轉 180 度的旋轉。
工具機檔案也可以用一種簡短的方括號記法攜帶同樣的連接關係,供手動編輯 XML 使用——其文法在機台鏈碼。