機台鏈碼 (Machine Chain Code)¶
鏈碼 (chain code) 是一種簡短的方括號記法,寫的是一個機構的連接關係——也就是設備頁的拓樸欄畫出來的同一套結構——供手寫一台機台時使用。用 GeneralXyzabcMachineTool.CreateFromChainCode (API) 從鏈碼建出一台工具機;任何機台的鏈碼都能從 ChainCode 讀回來,而指定 ChainCodes 會重建它的結構。手寫的鏈碼與在拓樸欄裡編輯的結構可以互換——只在反過來、由機構寫回鏈碼的方向上有兩個例外:兩個元件共用同一個名稱的機構,或帶有一個得由多個段落提及的未命名元件的機構,都無法寫成鏈碼。
鏈碼只攜帶連接關係。軸樞、確切的軸向量、端錨點偏移與幾何形狀都是機構的性質,指定新的鏈碼時,每個名稱未變的元件都會保留這些性質。
記法本身是 Hi.Mech.ChainCodeUtil,它對機台一無所知,任何機構都能用。下面這些機台關鍵字,是由 Hi.Numerical.Xyzabc.XyzabcChainCodeConvention 疊加在它上面的。
記法¶
每一個段落由左至右宣告連接:
[A][B][C]是[A][B];[B][C]這兩條連接的簡寫,所以一個段落就是一條路徑。- 方括號裡的字是元件。不同段落中的同一個字就是同一個元件,段落即是這樣接成一個結構的。
- 整串鏈碼的第一個字命名接地錨點。段落內每條連接由左邊的字指向右邊的字。
- 對工具機而言,保留字就是拓樸關鍵字:
X、Y、Z、A、B、C成為運動軸,w與t成為端錨點,而S在t掛在它上面時(如上例的[B][S][t])成為主軸:它的連接帶一個繞 −Z、穿過S原點旋轉的 DynamicRotation,繫結成機台的Spindle,主軸停著時由播放把它轉到主軸角。刀具安裝點相對S的偏移是在t那條連接上編輯的;主軸的樞軸點必須跟著移到刀具安裝點的原點上,否則機台會報告主軸偏離刀具軸。其餘任何字都是一般元件,隨動而不自帶運動,例如上例的base,或t沒有掛在上面的S。一串機台鏈碼必須剛好命名一個[w]與一個[t];六根軸都可有可無,且每根至多只能用一次。字是按確切名稱合併的,所以不會有兩個元件爭同一個角色;這項檢查拒絕的,是完全沒有命名床台安裝點的鏈碼——鏈碼必須包含床台安裝點 [w]。 只帶[W]的鏈碼會被同一項檢查拒絕,而訊息會點名那個只差一點的名字:鏈碼裡帶有 [W],與關鍵字只差在大小寫;關鍵字是逐字比對的,請把它改名為 [w]。 - 鏈碼裡的關鍵字要拼得一字不差——軸與
S用大寫,t與w用小寫。鏈碼裡大小寫錯了的軸是一個不貢獻任何運動的一般元件,而大小寫錯了的端錨點會讓鏈碼建不起來。(從這些名稱取得角色的工具機檔案——因為它自己沒有記錄角色——在錨點大小寫錯了時仍然載得進來:它的角色會綁到唯一一個在忽略大小寫時相符的錨點或連接上,並附上一則要求改名的訊息。) []是匿名元件。每次出現都是各自獨立的一個,無法從其他段落指涉;指定新的鏈碼時也無法把它的變換器或形狀帶過去,因為沿用是按元件名稱配對的。- 同一條連接宣告兩次沒有影響;它陳述的是同一個連接關係。
- 只有一個字的段落就是宣告一個元件,只接收連接的接地錨點就是這樣命名的。
-
段落數量不限,因此輔助結構可以從任何元件分支出去:
方向與會合¶
連接方向是自由的。 朝接地錨點方向編寫的連接就照實寫,例如 [Z][O]。連接歸屬於離接地錨點較遠的那個元件,所以 [O][Y] 與 [Y][O] 都讓 Y 成為軸,差別只在方向。讓每條連接背向接地錨點仍是可讀性慣例——結構讀起來會由內往外:接地 → 基座 → 運動軸 → t 與 w 兩個端錨點——但運動、軸關鍵字與預設碰撞配對,三者讀一條連接的方式都相同,不隨它指向哪邊而變。
分岔出去的路徑可以再會合。 [A][B][D];[A][C][D] 讓 D 有兩條進入的連接。這種迴路只有一條路徑會驅動運動,因此請用它來表達結構,而不是第二條運動路徑。
軸向遵循建立工具機的慣例:位於接地錨點與 w 之間的軸初始設為負向,其餘為正向。
機台檔案¶
工具機檔案存的是完整的結構——每一個錨點、連接、變換與幾何形狀——而不是鏈碼。舊版本寫出、帶著鏈碼的檔案照樣載得進來;而被已退役的 IsVertical 設定放倒的機台,載入時會在接地錨點之前多一個 root 錨點,它的鏈碼也會把它寫出來:[root][O]…。
延伸閱讀¶
- 運動拓樸 — 這套記法所編碼的錨點、連接與組件(英文,未鏡像)
- 組裝錨點 — 一台機台的
w與t端錨點所繫結成的 mount 角色 - 工具機 — 在拓樸欄裡建出同一個結構、兩種形式共用的關鍵字,以及一台沒有模型的機台
- 以 ITransformer 處理變換矩陣 — 機台各連接所帶的變換器背後的矩陣(英文,未鏡像)