跳轉到

通用 NC 碼支援

HiNC 解譯的指令詞彙,由專案所選的控制器廠牌決定。本頁涵蓋 ISO 家族的廠牌預設組 (preset)——Fanuc、Syntec 與 Mazak——以及 Siemens SINUMERIK。Heidenhain 是另一種語言,另有專頁:Heidenhain 支援。

如何閱讀本頁

涵蓋範圍以三種狀態表述。

狀態 該結構出現在你的程式裡時會發生什麼
照辦 會被解譯,其效果也會被仿真。
認得但不作用 刻意消化掉,並以它自己的訊息 id 回報。該行照常執行,該結構的效果不套用——但它永遠不會被悄悄誤讀成別的東西。
拒絕 那些字會留下來沒被用掉,該行回報 Parsing--Unconsumed 並點名它們。

Tip

一次執行所產生的訊息清單,就是你的程式的涵蓋報告。解譯器用不上的每一個字,都會在承載它的那一行被點名,因此你很少需要從仿真結果去推斷涵蓋範圍。未知的碼不會讓執行停下——它會被回報並跳過。

一則訊息說的是某個結構沒有被仿真,而不是路徑錯了;這類結構分成兩種,在動手改任何東西之前值得先分清楚。有些結構只影響控制器在路徑本身之外的行為——平滑或前瞻的選擇、具名的程式標頭、#3001 上的循環時間計時器——不改變仿真出來的運動;下文各自的段落會這麼說明。另一些結構沒被讀取時就會改變結果:查找不到的被呼叫程式、由變數選定的 G 碼、變數為空值的巨集引數、軸字跟在另一個 G 字後面的 G28。這些段落各自點名會被讀取的寫法,因此可以只在要緊之處改寫程式的一份仿真副本,交付的程式則保持原樣。

ISO 核心

Fanuc、Syntec 與 Mazak 共用下列詞彙。Siemens 大多拼法相同,其餘則有自己的一套——見 Siemens SINUMERIK。

運動

碼 意義
G00 快速定位。
G01 以程式進給率做直線插補。
G02 / G03 圓弧插補,順時針/逆時針。圓心可用 I / J / K 偏移量或半徑 R 給定。
G04 停留(dwell)。X / U 為秒,P 為毫秒,S 為主軸轉數。G4 與 G04 兩種拼法都會讀。P 帶小數點時照控制器:Syntec 取整數毫秒(P2.5 停留 2 ms);Fanuc(警報 PS0007)與 Mazak 拒絕這個字,該行回報 Dwell--DecimalPointRefused 且不停留。
G28 經由中間點的參考點(原點)復歸。在 G91 之下,旋轉軸字給出的中間點是相對於前一個模態角度的增量。哪些軸字屬於它,見下文。
G53 單次的機械座標移動——僅該行略過工件偏移。

G28 只取緊跟在它後面的軸字。 它的字一路延伸到該行中下一個 G、M、F 或 S 字為止。在 G91 G28 G0 Z0 中,G0 在 Z0 之前就把 G28 收尾了,所以這一行讀成一個沒有軸的 G28——回報為 Coord-RefReturn--003,沒有復歸運動——後面接著一個增量的 G0 Z0,它不會移動。這一行的本意是單獨一次 Z 軸參考點復歸——橫移前的 Z 軸抬刀——並把 G0 留作後續各行的模態運動,而 HiNC 不是這樣讀它的。在復歸要緊的地方——在橫移前抬刀的 G28——請在仿真副本中把軸字直接寫在 G28 後面:G91 G28 Z0,或 G0 G91 G28 Z0。若該行播放時 Z 已經在參考位置上——在程式的開頭,或在呼叫者剛把 Z 復歸過的被呼叫程式的開頭——這種讀法不會改變任何東西,該行可以維持交付時的樣子,並把它的 Coord-RefReturn--003 列為預期中的訊息。不論哪種做法,每一處出現都要一視同仁,被呼叫的程式也包括在內:每一處維持原樣的,每次播放都會各自發出它自己的訊息。

完全沒有軸字的 G28 在不同控制器上意義不同,因此 HiNC 將它回報為 Coord-RefReturn--003,且不移動。該訊息建議把這樣的一行讀成所有已設定的軸都回原點;對上面那種順序顛倒的寫法,這是錯誤的修法,因為它也會把 X 與 Y 送回原點。

平面、單位與定位模式

碼 意義
G17 / G18 / G19 平面選擇——XY / ZX / YZ。圓弧與固定循環跟隨作用中的平面。
G21 公制。這是 HiNC 的預設。
G71 公制——G21 在 RS-274-D / Fanuc G 碼系統 C / Syntec 上的拼法,在 Fanuc 與 Syntec 預設組上以相同方式接受。Mazak EIA 仍只有 G20 / G21。
G20 英吋——拒絕。該行回報 Unit--InchNotSupported;請將程式後處理成公制。
G70 英吋——G20 在 RS-274-D / Fanuc G 碼系統 C / Syntec 上的拼法,在 Fanuc 與 Syntec 預設組上會讀取。拒絕;該行回報 Unit--InchNotSupported;請將程式後處理成公制。
G90 / G91 絕對/增量定位。在 G91 之下,單獨的旋轉軸字同樣是增量;逐字指令(C=AC(90)、ACP / ACN、IC())優先於模態狀態。
G94 / G95 每分鐘進給/每轉進給。

工件座標

碼 意義
G54–G59 標準工件座標系。
G59.1–G59.9 擴充工件座標系,由 Fanuc、Mazak 與 Syntec 預設組在各自廠牌表背後所帶的那張廠牌中立表支撐。與 G54–G59 一樣,留為零的列會被當成撰寫慣例,不發訊息。
G54.1 P1–P48 Fanuc 附加工件座標系,由擴充工件偏移表支撐。手冊的第二種拼法 G54 P1–P48 也會讀,有沒有空格皆可;沒有 P 字的 G54 就是上面的一般 G54。選到一列沒人輸入過的值,會回報 Coord-WorkOffset--AdditionalZero。
G52 局部座標偏移,疊加在作用中的工件座標系之上。
外部工件偏移(EXT,#5201 起) 未建模。 沒有任何表格存放它,而工件座標碼只組合它自己那一列。機台帶有外部偏移時,請把它加進程式所選用的每一個 G54–G59 與 G54.1 P 列。一旦零件已對齊到它的那一列,漏掉外部偏移並不會改變切出來的東西,但會讓整個設置在機械座標中平移,而行程檢查與碰撞偵測看得到這個平移。讀取 EXT 變數的巨集讀不到任何值。

刀具補正

碼 意義
G43 / G44 / G49 刀長補正,正向/負向/取消。H 選擇補正列,而且與 Fanuc 控制器一樣是模態的:沒有 H、或其 H 後接的變數為空值的 G43,會重新選用最後一次寫出的 H,不論中間隔著 G49 還是換刀都一樣;在寫出任何 H 之前,它以 H0(零長度補正,不發訊息)運行;刀號永遠不會代為填入,程式結束的重設會把它清除。H / T 一致性檢查預設開啟:H 不是主軸上那把刀的刀號時,會在選用它的那一行回報 Comp-ToolHeight--HDiffersFromTool;補正仍作用中時換刀、而作用中的 H 不是新刀的刀號,則在換刀那一行回報 Comp-ToolHeight--HOutlivesToolChange,兩者都附上兩列的長度;H0 與 G49 豁免,而且不論哪種情況,補正本身都跟著 H 走。Haas 內建同樣的檢查,即 Setting 15 "H & T Code Agreement"(警報 332,H0 豁免);Fanuc 沒有。以另一種習慣撰寫的程式——刀具 101 用第 1 列、同一把刀在 G43.4 H02 與 G43 H03 之間切換——請在控制器的 ToolOffsetAgreementCheck (API) 上把 HMustMatchTool 設為 false(透過控制器 XML 或 API;目前還沒有面板)。HardNc 仍會從刀號解出省略的 H;兩個引擎在這裡是刻意分歧的。
G41 / G42 / G40 刀徑補正,左/右/取消。D 選擇補正列。

半徑補正是針對真正在補正平面內行進的那些行來解算的。一行若自身的字沒有命令該平面內的任何移動——單獨的 G41 / G42、註解、空行、沿平面法線的下插(G17 下的 Z)——就沒有自己的偏移,也不參與轉角:

  • 起始要等到有運動。 不在平面內移動的 G41 或 G42 行不會啟動偏移;第一個在平面內行進的行才是起始行,取垂直(A 型)偏移。兩者之間的行沿用前一行的偏移向量,所以不會因它們而有任何移動。
  • 轉角在行進的行之間解算。 夾在兩段移動之間的無字行會被略過,轉角就是兩段真實線段的交點。運行軸是每段位移落在平面內的部分,所以斜坡移動保有完整的偏移量,而沿平面法線的下插仍停在偏移線上。
  • 區域內不能換平面。 G17 / G18 / G19 選擇補正平面,而且只能在補正取消時選擇。在 G41 / G42 作用期間解析成另一個平面的平面碼——包括與取消該區域的 G40 同一行的那個——會回報 RadiusComp--PlaneChangeInRegion,因為跨越那次變更的轉角會由每個平面各一條運行軸建出來。控制器在那裡會發警報(Fanuc PS0037 CAN NOT CHANGE PLANE IN CRC)。重新選擇已在作用中的平面不算變更,會被接受。
  • 單獨的 G40 關閉區域。 最後一個補正行結束於它自己的垂直偏移,而不是轉向取消之後第一個未補正的移動。帶有運動的 G40 則是最後一個轉角的另一半,補正路徑與取消線交會於兩者的交點(Fanuc B 型);舊版解譯器(EnableSoftNcRunner (API) 設為 false)在該情況下以垂直方式結束。
  • D 列必須與程式的策略相符。 零基準的程式(CAM 路徑已是刀具中心路徑,G41 D.. 只留作磨耗用)需要幾何半徑為 0 的 D 列;以刀具半徑為基準的程式(NC 是零件輪廓)則要在那裡放刀具半徑。偏移量大於輪廓的內圓弧或溝槽時,補正路徑會逆著程式方向跑——控制器會以干涉警報停機(Fanuc PS0041),HiNC 則回報 RadiusComp--Interference 並繼續播放換邊後的路徑。刀具庫刷新所用的半徑基準在刀具補正(英文,未鏡像)中選擇。

旋轉、傾斜平面與五軸

碼 意義
G68 在作用中的平面內做座標旋轉,繞一個中心點轉 R 角度。
G68.2 傾斜工作平面——尤拉角 I / J / K,原點 X / Y / Z。
G69 取消 G68 與 G68.2。
G53.1 刀軸方向——把旋轉軸擺到與作用中的 G68.2 平面對齊。
G43.4 RTCP/刀具中心點管理。Siemens 的對應是 TRAORI,Heidenhain 的對應是 M128。

固定循環

碼 循環
G73 高速啄鑽——Q 為每次進深,部分退刀。
G74 左螺紋攻牙。
G76 精搪孔——主軸定向停止、Q 偏移、快速退出。
G81 鑽孔。
G82 孔底停留的鑽孔——P 以毫秒計,與 G04 相同。帶小數點的 P 在 Syntec 是秒,在 Fanuc(警報 PS0007)與 Mazak 被拒絕:回報 Dwell--DecimalPointRefused,孔照鑽但不停留。
G83 啄鑽——Q 為每次進深,完全退回 R 點。
G84 右螺紋攻牙。
G85 搪孔,以進給退出。
G86 搪孔,主軸停止後快速退出。
G87 反搪孔。
G89 孔底停留的搪孔——P 以毫秒計,與 G04 相同。帶小數點的 P 在 Syntec 是秒,在 Fanuc(警報 PS0007)與 Mazak 被拒絕:回報 Dwell--DecimalPointRefused,孔照搪但不停留。
G80 取消。
G98 / G99 退回起始平面/退回 R 點平面。

一個循環會展開成它實際執行的各段行程——接近、啄進、停留、退刀——每段各有自己的進給率,因此材料移除與循環時間來自真實運動,而不是近似值。模態重複與 G91 增量的循環資料會在建立行程之前先解算。

帶有 A / B / C 字的重複行會先把工作臺分度到位、再鑽一次——這是鑽螺栓孔圓的標準寫法:只有旋轉軸字的重複行也會觸發循環(任何軸字都會重複循環),混合的行會在各段行程之前把 XYZ 與工作臺一次同動預定位,而在沒有 RTCP 的 G68.2 之下,特徵座標框釘在機械空間裡,工件轉動時孔位仍留在原處。在 G91 之下,只有該行自己說出的字才是增量——以 X 間距重複的行不會再把 Y 加一次。

極座標插補

G12.1 開啟極座標插補,G13.1 關閉它。在極座標區段內,X 字是直徑,C 字則是以公釐計的假想直角座標軸,而不是旋轉角度。HiNC 會把 X 減半、解算 G90 / G91、把極座標與推導出的直角座標位置連同機械 C 角一併寫出,並仿真極座標的直線與圓弧運動——圓弧是真實的螺線幾何,跨越 ±180° 仍保持連續。G41 / G42 補正在假想平面上解算,YA / ZB 軸對也以同樣方式運作。與極座標模式衝突的 G 碼會在進入該模式之前先檢查。

路徑平滑

G05.1 Q1 啟用高精度輪廓控制(AICC / Nano Smoothing),Q0 停用它。選填的 R 精度等級會被保留。

單獨的 G05(或 G5)是名稱容易混淆、卻完全不同的另一項功能,兩者分開追蹤,因此不會互相取消。它在 Fanuc 與 Mazak 預設組上透過 P 字選擇一項功能:

P 讀法
P10000 HPCC——以 RISC 為基礎的高精度輪廓控制。認得但刻意不作用:它改變的是機台的前瞻、加速度與伺服行為,從不改變程式座標。回報 Hpcc--NoOp。
P0 取消 HPCC。靜默消化——取消一個不作用的功能不需要訊息。
P10001–P10999 高速循環加工。真實機台執行的是預先登錄在其變數區的循環資料,那是 HiNC 看不到的真實軸運動,因此仿真結果會少掉那段加工。以警告回報 Hpcc--HighSpeedCycleIgnored。
其他任何值 離線環境不支援,予以忽略,回報 Hpcc--UnsupportedFunction。小的 P 值選的是高速遠端緩衝模式。
完全沒有 P 離線環境不支援,予以忽略,回報 Hpcc--MissingFunctionWord。

P 裡未求值的巨集變數或運算式可以容忍——它會回報 Hpcc--UnevaluatedFunction,而不是讓該行失敗。Syntec 預設組不會擷取單獨 G05 的 P 字:在那裡,該行讀成一個沒有 P 的 G05(Hpcc--MissingFunctionWord),P 字則回報為 Parsing--Unconsumed。

AICC / Nano Smoothing 兩種拼法都會讀。 G05.1 Q1 與省略前導零的 G5.1 Q1 記錄的是同一個平滑狀態;以 3.2.32 或更早版本存進專案的控制器只讀 G05.1,直到從它的廠牌預設組重新建立為止。G08 P… 前瞻選擇不會讀取,並回報 Parsing--Unconsumed,點名 G08 與 P。這兩個碼都不改變程式路徑:它們左右的是控制器如何執行路徑,而仿真時間由程式進給率算出,沒有前瞻或加速度模型(見加工時間估算),因此保留它們的程式仿真出來是同樣的切削。G8.1 P… 也以同樣方式回報,但理由不同:它不是 Fanuc 的標準碼,它在某台機台上做什麼——機台製造商的選配功能,或是很可能會移動各軸的 G 碼巨集呼叫——要由那台機台的手冊來說明,因此仿真不會假設它無害。

M 碼

碼 意義
M00 / M01 程式停止/選擇性停止。
M02 / M30 程式結束。在 SoftNc 上,下一行開始時刀長補正(含 TCP)、傾斜、刀徑補正與固定循環都已取消;M02 / M30 那一行本身仍以它執行時的模態狀態運行。後備的 HardNc 不套用這項重設。
M03 / M04 / M05 主軸順時針/逆時針/停止。
M06 換刀。換刀所需的軸行程是合成出來的,而不是瞬間傳送。
M07 / M08 / M09 噴霧冷卻液開/澆注冷卻液開/冷卻液關。
M98 / M99 子程式呼叫(M98 P{program} L{repeat})與返回,包括 M99 P{sequence} 提前返回。被呼叫者的檔案依尋找被呼叫的程式所述的方式查找。
M198 從外部儲存裝置呼叫子程式——形式與 M98 相同,查找的資料夾不同。

Note

複合式與 OEM M 碼不是內建的——它們在機台上宣告。 意思是「主軸順時針加澆注冷卻液」的 M13、會觸發換刀的 M 碼,或是刀塔 T 字的語意,都在機台自己的 M 碼表裡宣告一次,再展開成管線其餘部分已經懂的 ISO 效果。宣告了卻沒有建模效果的碼,只會發出一次 DeclaredMCode--UnmodeledEffects,而不是每次出現都拋出未知碼警告。

Note

若程式指定了大於零的主軸轉速,且在下達任何方向之前就做出進給移動,HiNC 會從那個移動起假設為順時針,並在該區塊回報 SpindleDirection--AssumedCw。沒有這個假設,切削力模型會對整個檔案悄悄算出零力學量。轉速寫在方向之前——S1200 在 M03 的前一個區塊,或 Heidenhain 的 TOOL CALL … S 接著 M3——不回報任何東西:方向到來之前的區塊帶著轉速、沒有方向,那些區塊不算切削物理。

尋找被呼叫的程式

Fanuc、Syntec 與 Mazak 預設組上的 M98 P… 與 M198 P…,以及 Fanuc 上的 G65 P… / G66 P…,會依程式號碼在控制器的副程式資料夾裡尋找被呼叫者。M98、G65 與 G66 讀取內部資料夾;M198 讀取外部資料夾,未設定外部資料夾時退回內部資料夾。內部資料夾預設為 NC,相對路徑的資料夾以專案資料夾為錨點——而不是發出呼叫的那支程式所在的資料夾。會依序嘗試六個檔名,第一個存在的勝出;以 P25 為例,它們是:

樣式 以 P25 為例
O{P:D4}.NC O0025.NC
O{P}.NC O25.NC
O{P:D4} O0025
O{P} O25
{P:D4}.NC 0025.NC
{P}.NC 25.NC

{P:D4} 會把號碼補零到四位;四位數以上的號碼照原樣使用。除此之外不會嘗試任何其他檔名:以 O25.dat 或 O0025.txt 交付的被呼叫者,要等到以上述其中一個名稱放一份副本之後才找得到;而大小寫由伺服器的檔案系統決定,所以在區分大小寫的主機上,O0025.nc 不等於 O0025.NC。主程式沒有這項限制——「程式檔案」命令以任何檔名都能播放它。

找不到被呼叫者是一項錯誤——M98 / M198 回報 SubProgramCall--FileNotFound,G65 回報 FanucMacroCall--FileNotFound,G66 回報 FanucModalMacro--FileNotFound——該呼叫會被跳過,執行則繼續下去。因此,切削全部位於被呼叫者之中的工作,會在什麼都沒加工的情況下結束。確實接上的呼叫,會在「程式」分支中把被呼叫者巢狀顯示在呼叫者之下。這些資料夾就是控制器的副程式資料夾(Subprogram Folders)設定;它們如何儲存、清空的內部資料夾存成什麼,以及 Siemens 與 Heidenhain 預設組的檔名鏈,見程式讀取(英文,未鏡像)。

Fanuc

ISO 核心的全部內容,再加上以下各項。

Custom Macro B

# 變數指定與算術,各範圍分別導向其所屬的儲存區——#1–#33 為巨集框架的區域變數,#100–#499 為揮發性、在 M02 / M30 時清除,#500–#999 為保持型、隨專案儲存,#3000–#3999 為系統控制。布林與邏輯運算子、IF [..] GOTO n、IF [..] THEN <statement>,以及帶有迴圈上限看門狗的 WHILE [..] DO m / END m。位置與刀具補正的系統變數可讀回運算式中。軸字以及 F、S、T、H 字都可以接變數或方括號運算式,因此 M6 T#120 會換上 #120 所存的刀具,而巨集本體中的 G43 H#11 會以呼叫時繫結到 #11 的那一列來補正。

區域變數只能在巨集呼叫之內寫入。 在 G65 / G66 本體之外指定 #1–#33 的行會回報 LocalVariable--MainFrameWriteUnsupported,而且該值不會被保留。真實控制器允許這種寫入;在主程式中,請改用共同變數(#100 以上)來承載這個值。

G 碼不能由變數選定。 G[#120] 與 G#120 不會被讀取:該段文字回報為 UnparsedText--Remaining,而該碼原本要設定的模態群組維持先前的狀態。以這種方式選擇工件偏移的程式——#120 = 55 之後接 G90 G[#120] G0 X0 Y0——會在原本已作用中的工件偏移上執行那一段,因此在多工位夾具上,每一件零件都切在同一個工位,而那則警告是唯一的跡象。在由引數選定 G[#1] 的巨集本體內也是一樣。請在仿真副本中寫出字面的碼(G90 G55 G0 X0 Y0)。當同一個本體每個工位各呼叫一次、並由引數挑選工位時,呼叫者通常會在每次呼叫之前,先設定本體原本要選的那個偏移;在那裡寫出字面的碼之後,本體執行時工件偏移已經是模態狀態,因此本體可以維持交付時的樣子——它的 G[#1] 仍會被回報,但不改變任何東西——也就不需要每個工位各複製一份本體。

系統控制變數只記錄、不模擬。 寫入 #3000–#3999——重設 #3001 毫秒時鐘、發出警報、帶訊息暫停——會被消化掉而沒有效果,並以「訊息」嚴重度回報 FanucSystemControl--Unsupported。讀取則傳回程式最後一次寫入的值。仿真沒有時鐘,所以 #3001 毫秒計時器與 #3002 小時計時器都是靜止的:它們讀到的是最後寫入的值,程式從未寫入時則是 0。許多程式圍繞一道工序放置的循環時間戳記 #3001 = 0 … #610 = [#3001 / 1000],因此會指定 #610 = 0。靜止的時鐘無法結束計時等待,所以這兩個計時器在 WHILE 或 IF … GOTO 條件中不會被求值:該條件回報 FanucWhileDo--ConditionNotEvaluated 或 FanucGoto--ConditionNotEvaluated,並立即離開迴圈——也就是等待結束時機台所處的狀態。該範圍的其他任何變數,在程式寫入之前都是空值。這些都不會改變運動。

空值不是零。 沒有人指定過的變數是空值(vacant),讀取空值的運算式會失敗——訊息帶有 Variable--Vacant——而不是像 Fanuc 控制器在算術中那樣取值為 0。在各次執行之間保存 #500–#999 的保持型帳冊,見持久變數(英文,未鏡像)。

巨集呼叫

G65 單次巨集呼叫與 G66 / G67 模態巨集(在每個定位行觸發,直到取消為止);M98 / M198 / M99 子程式呼叫。被呼叫者的各行會在呼叫處接進程式,因此之後的執行把它們當成寫在主檔裡的內容一樣看待。被呼叫者的檔案依尋找被呼叫的程式所述的方式查找。

引數依引數指定 I 繫結:A B C 對應 #1–#3,I J K 對應 #4–#6,D E F 對應 #7–#9,H 對應 #11,M 對應 #13,Q R S T 對應 #17–#20,U … Z 對應 #21–#26。G、L、N、O 與 P 不是引數——L 是重複次數,P 是程式號碼。引數指定 II(帶有重複的 I J K 組)未建模。

呼叫字可以是變數或運算式。 引數、程式號碼 P 與重複次數 L——G65 P8010 A#120 H[#130]、G65 P#500、M98 P#500、G66 P8020 X[#5+10]——都在發出呼叫時於呼叫者的情境中求值。M99 返回的 P 也會求值,在 M99 所在之處求值;它不是程式號碼,而是要返回到的呼叫者那一行的序號——M99 P#1。因其中的變數為空值而無法求值的引數,會在呼叫那一行回報 FanucMacroCall--ArgUnevaluated,並讓巨集內對應的區域變數維持空值;對 G66 而言,它只在 G66 那一行回報一次,而不是在每一個觸發巨集的行上都回報。無法求值的 P 或 L 回報 VariableExpression--Unevaluated,不是整數的則回報 ParsedInteger--NotWhole。P 有這兩種情形之一時不會發出呼叫,M99 則當作一般的 M99,返回到呼叫那一行的下一行;L 有這兩種情形之一時會被忽略,呼叫照樣發出一次。

Note

以 3.2.32 或更早版本存進專案的控制器,會沿用它存檔時的管線順序;在那種順序中,呼叫字會在變數求值之前就被消化掉,因此每一個由變數驅動的引數都會回報 FanucMacroCall--ArgUnevaluated。請從該控制器的廠牌預設組重新建立它,以採用目前的順序。

程式標頭

程式標頭以其數字形式 O1234 與 <O1234> 讀取,位置在第一行或 % 行之後。像 <PART_A_FINISH> 這樣的具名標頭不會被認作標頭:該行回報 UnparsedText--Remaining,且不產生任何移動。

拒絕

G10 可程式資料設定、G50 主軸轉速箝制、G31 跳躍、由變數選定的 G 碼、G08 / G8.1 選擇,以及外部工件偏移(EXT)。

Syntec

Syntec 執行 ISO 核心,加上 Fanuc 家族的子程式呼叫(M98 / M198 / M99)、具有揮發性、保持型與系統控制範圍的 # 變數、流程控制(IF、GOTO、WHILE),以及極座標插補。由變數選定的 G 碼、系統控制變數與空值讀取,其行為如 Custom Macro B 所述。這個預設組拒絕 G65 / G66 巨集呼叫:該呼叫回報為 Parsing--Unconsumed,巨集本體不會執行。

拒絕。 G65 / G66 巨集呼叫、單獨 G05 P… 的 HPCC 選擇(見路徑平滑)、在控制器上定義的自訂 G 巨集、Pr 參數對應,以及雙頭/雙刀塔程式語法。

Mazak

Mazak 讀取 EIA/ISO,搭配 Fanuc 家族的子程式呼叫(M98 / M198 / M99)、具有揮發性、保持型與系統控制範圍的 # 變數、流程控制(IF、GOTO、WHILE),以及極座標插補。由變數選定的 G 碼、系統控制變數與空值讀取,其行為如 Custom Macro B 所述。這個預設組拒絕 G65 / G66 巨集呼叫:該呼叫回報為 Parsing--Unconsumed,巨集本體不會執行。

拒絕。 G65 / G66 巨集呼叫、MAZATROL 對話式區段,以及在同一支程式內於 MAZATROL 與 EIA/ISO 之間切換。請從控制器匯出 EIA/ISO 程式。

Siemens SINUMERIK

真實的 .mpf / .spf 程式可以從頭到尾重播——這不是貼著 Siemens 標籤的 ISO 子集。

模態詞彙。 SUPA / G153 在單行內抑制所有框架,並且和 G53 一樣,把主軸量規線定位在機械座標上,因此該行也不套刀長——程式若在這種 Z 移動之前先用 D0 取消補正,兩種讀法得到同樣的移動;G70 / G71 單位;路徑平滑家族(G60x / G64x、FNORM / SOFT / FFWON / COMP* / UPATH、CYCLE832);MSG() 與 STOPRE;CR= 與 TURN= 圓弧。行尾註解會辨識引號,因此 MSG("A;B") 裡的 ; 不會截斷該行。G74 / G75 固定點復歸以整行認領,所以它帶的虛設軸值永遠不會憑空生出一段往那些座標的快速移動,其 F 也不會進入模態進給率。

刀具。 T="NAME" 字串刀具呼叫搭配 D 刀刃補正,透過 $TC_DP 刀具表解算——長度與半徑,加上累加的磨耗。刀具名稱表裡沒有的名稱不會換刀(ToolChange--NameUnresolved),所以一次執行可能什麼都沒切就結束;在第一次叫刀之前選的 D 會讀刀號 0 的那一列(SiemensToolOffset--TcdpRowMissing)。T0 搭配 M6 會讓最後一把刀留在主軸上。

變數與運算式。 R 參數 R0–R999 以逐專案資料保存,DEF REAL / DEF INT 宣告會降階成指定,完整的運算式求值器則讓 Z=R63+150 與 X=SIN(R10)*20 驅動真實運動。$P_UIFR[n,axis,TR] 與框架表雙向繫結。其他任何 $ 變數都會被記錄並附上不支援的註記,而不是悄悄丟掉。

框架與五軸。 TRANS / ATRANS / ROT / AROT(含 RPL=)以及立體角形式 ROTS / AROTS 依 Sinumerik 的 RPY 順序組合進傾斜鏈(ROTS / AROTS 的行為同 ROT / AROT:最多兩個角度,先寫的軸先轉);TRAORI 是真正的 RTCP 模式,即 ISO G43.4 的同類,由 TRAFOOF 把偏移交還;CYCLE800 從其 MODE 位元解碼,涵蓋全部四種擺動模式。 從 3.2.42 之後的版本起,TRAORI 程式可以帶的方位程式設計——刀具向量 A3= / B3= / C3=、ORIEULER / ORIRPY 之下的角度 A2= / B2= / C2=、表面法向 A4= / A5=,以及 ORI… 內插用字——會被辨識但不模擬:旋轉軸維持先前程式設定的位置,每支程式回報一次 Orientation-Vector--NotSimulated。在那之前存進專案的控制器,會把這些字當成具名變數、不發任何訊息,直到它重新從 Siemens preset 設定為止。

呼叫與流程控制。 L 前綴與具名的子程式呼叫,連同其 P 重複次數一併內嵌;M17 / RET;對有標籤區段的 REPEAT;MCALL CYCLE81 / 82 / 83 / 85 對應到共用的固定循環機制;PROC 標頭與標籤。只有 MCALL 會讓這些循環鑽孔:單獨一行呼叫的循環,例如 CYCLE81(10,0,3,-6),會被當成子程式尋找,找不到同名的 .SPF 時以 SiemensCall--Skipped 跳過。CYCLE800 與 CYCLE832 則直接讀取。GOTOF / GOTOB、IF / ELSE / ENDIF,以及 WHILE / FOR / REPEAT-UNTIL / LOOP。跳躍與迴圈次數設有上限,不會讓工作階段掛住——超過上限時該結構會發出警告並直接往下走。

逐字的座標函式。 AC() / IC() / DC() / ACP() / ACN(),包括用在 I / J / K 圓心上,因此 G90 C=IC(360/17) 是絕對程式裡的一次增量分度。ACP() 取正向的窗口,ACN() 取反向的窗口,DC() 取最短的擺動。

編碼位置。 CAC / CIC / CDC / CACP / CACN 接受從 1 起算的分度位置編號而非座標,依機台自己的分度位置表解算。

OEM 輔助 M 碼。 預設組把 M12 / M13 / M22 / M23 與 M330 / M331 宣告為僅註記,因此每次出現都發出 DeclaredMCode--UnmodeledEffects,而不是未知碼警告。一旦真實效果已知,機台自己的表會覆蓋這項宣告。

認得但不作用。 SCALE / ASCALE、MIRROR / AMIRROR 與 CROTS——各自回報為 SiemensFrame--Unsupported。

拒絕。 SETAL。

延伸閱讀

  • Heidenhain 支援 — klartext 與 Heidenhain DIN/ISO。
  • NC 解析引擎(英文,未鏡像) — 這些碼背後的管線、以單一表格呈現的逐廠牌支援對照表,以及如何在不改動 HiNC 的前提下加入機台自有的指令詞彙。
  • 程式讀取(英文,未鏡像) — 尋找被呼叫的程式背後的副程式資料夾設定:它的儲存方式、資料夾錨點,以及每個廠牌的檔名鏈。
  • 持久變數(英文,未鏡像) — 程式讀寫的保持型 #500–#999 帳冊,以及 Variable--Vacant 背後的空值。