マシニングセンタのプログラム入門:ブラウザで動くシミュレータと採点つき練習問題
G54・G43・G41 の 3 つがそろえば、マシニングはもう怖くない。まずは ▶ を押してみよう


マシニングセンタ(MC)のプログラムは、旋盤より軸が 1 本多く、ワーク座標系(G54)・工具長補正(G43)・工具径補正(G41)という「機械に教える前提」が 3 つ重なるのが難所です。どれか 1 つでも抜けると、工具がワークやバイスに突っ込みます。この記事では、ブラウザの中で動くマシニングのシミュレータを使い、最初の 1 行から順に書き方を確かめます。プログラムを打って ▶ を押すと、工具が動いて材料が削れ、回転数・加工時間・衝突や補正のし忘れの警告が出ます。後半には、図面どおりに削れたかを自動で判定する採点つきの練習問題 5 問があります。
書き方は、多くの機械で使われている FANUC 互換の G コードを基準にしました。FANUC の取扱説明書は一般に公開されていないため、FANUC 互換の書き方は三菱電機[1]・Siemens の ISO 方言[2]・Haas[4] の公開資料で確かめ、書き方が違う機械はその都度書いています。実際の機械では、必ずその機械の説明書と社内の決まりに従ってください。
まず動かしてみる:マシニングのシミュレータ
下のプログラムは、φ10 のエンドミルで深さ 2 mm の溝を 1 本削るだけの見本です。▶ を押して、工具が「交換 → 回転 → 原点の上へ → 下りる → 削る → 上がる」と動く順番を見てください。行を書き換えて、もう一度 ▶ を押すと結果が変わります。素材は 80×60×20、原点は上面の左手前の角です。
- 工具は T1=φ20、T2=φ10 のエンドミル、T3=φ6.8 のドリルを用意してあります。工具長補正の H と工具径補正の D は、工具番号と同じ番号に値が入っている前提です
- 実機と違い、機械の加減速・工具のたわみ・パラメータの設定は考えていません。見るのは「プログラムと工具の動きの対応」だけです
- 大学や高専の実習でも、シミュレーションで工具の動きを画面で確かめてから実機に進む教え方が報告されています。ただし多くのシミュレータは材料と工具しか描かないので、バイスや治具・カバーへの衝突は見えません。実機の前には、治具の高さと工具の突き出しを自分で確かめる習慣が要ります[19][20]
- 工作機械の衝突の研究でも、工具長の登録の誤りは事前のチェックで見落とされやすい原因として挙げられています[21]。このシミュレータは H に正しい長さが入っている前提なので、実機では工具長の測定値を必ず見直してください
座標:X・Y・Z と、ワーク原点 G54
立形のマシニングセンタは、テーブルの左右が X、前後が Y、主軸の上下が Z です。どの軸も工具がワークから離れる向きがプラスと決まっています(JIS B 6310/ISO 841)[16][17][1]。つまり工具が上がる向きが +Z で、ワークを削るときは Z マイナスへ下ります。
機械にはもともと機械原点(機械座標の 0)がありますが、ワークをバイスのどこにくわえたかは機械にはわかりません。そこで、ワークの基準の角(または中心)が機械座標でどこにあるかを測ってワーク座標系として登録し、プログラムでは G54 と書いてそれを呼び出します[1][2]。G54〜G59 の 6 つを使い分けられるので、バイスを 2 台並べたときは 1 台目を G54、2 台目を G55 にする、といった使い方をします。
図解:機械原点とワーク原点(座標系)
- 原点の決め方:図面の寸法の基準(左手前の角、穴の中心など)に合わせると、図面の数字をそのままプログラムに書けます。Z0 は仕上げ後の上面に置くのがふつうです
- 原点の測り方:エッジファインダー・タッチセンサーで X・Y を、ツールセッターや基準ブロックで Z を測ります(検査器具)
- 機械座標で動かしたいときは G53(その行だけ機械座標)を使います
プログラムの形:最初の数行に「安全ブロック」
NC プログラムは、1 行(ブロック)ごとに「アルファベット+数字」のワードを並べたものです。1 ブロックの終わりは EOB(画面では ;)、プログラムの先頭には O 番号を書きます。この形は ISO 6983-1(JIS B 6315-1)で決められています[17][1]。見本のプログラムを 1 行ずつ読むと、次のようになります。
O2000 (プログラム番号)
G21 G90 G17 G40 G49 G80 (安全ブロック:mm・アブソリュート・XY 平面・
径補正なし・工具長補正なし・固定サイクルなし)
G54 (ワーク座標系を呼ぶ)
T2 M06 (2 番の工具に交換)
S3200 M03 (主軸 3,200 min-1 で正転)
G00 X10. Y30. (早送りで溝の始まりの真上へ)
G43 H2 Z30. (2 番の工具長補正をかけて Z30 へ)
M08 (クーラント ON)
Z2. (上面の 2 mm 上まで早送り)
G01 Z-2. F150 (毎分 150 mm で 2 mm 下りる)
X70. F500 (毎分 500 mm で溝を削る)
G00 Z30. (上がる)
M09 (クーラント OFF)
M05 (主軸停止)
G91 G28 Z0. (Z だけ機械原点へ戻る)
G90 (アブソリュートに戻す)
M30 (プログラム終了・先頭へ戻る)安全ブロックは、前のプログラムや手動操作で残った状態(インチ指令、インクレメンタル、補正のかけっぱなし、固定サイクルのかけっぱなし)を最初に打ち消すための行です。G コードの多くはモーダル(一度指令すると、取り消すまで続く)なので、プログラムの先頭で毎回そろえるのが安全です[1][4]。
| コード | 意味 | 初心者がつまずく点 |
|---|---|---|
| G21・G20 | mm・インチ | 日本の機械はふつう mm。インチの機械のプログラムを流用するときは数字の意味が 25.4 倍変わる |
| G90・G91 | アブソリュート(原点からの位置)・インクレメンタル(いまの位置からの距離) | G91 のまま次の行へ進むと、X10. が「10 mm 進む」に変わる |
| G17 | XY 平面を選ぶ(円弧・工具径補正・固定サイクルの面) | G18・G19 のままだと、円弧が別の面で描かれる |
| G40・G49・G80 | 工具径補正・工具長補正・固定サイクルの取り消し | 補正がかかったまま次の工具に移ると、位置がずれる |
図解:同じ動きを絶対値(G90)と増分値(G91)で書く
工具交換と工具長補正:T・M06・G43 H
マシニングセンタは、T(工具番号)と M06(工具交換)でマガジンの工具を主軸に付け替えます[1][12]。付け替えたあと、その工具の長さを機械に教えるのが工具長補正 G43 H□です。工具によって主軸の端から刃先までの長さが違うので、H の番号に登録した長さの分だけ Z をずらして、どの工具でも「Z0 = ワークの上面」になるようにします[1][9]。
図解:工具長補正:主軸ゲージラインと H
- H の番号は工具の番号と同じにするのがふつうです(T2 なら H2)。番号を取り違えると、別の工具の長さで動いて Z の位置が数十 mm ずれ、ワークに突っ込みます[9]
- G43 をかける行は、ワークから十分上(Z30. など)で。補正をかけた瞬間に Z が補正量の分だけ動きます[2]
- 機械によって補正のかかり方が違います。Haas の新しい制御(NGC)は G49・H00 を書かない限り工具長補正がかかったままで、工具交換で自動的に切り替わります[9]。Siemens の本来の書き方には H がなく、D の番号で工具長と工具径の両方の補正が入ります[3]。FANUC 互換の機械では、毎回 G43 H を書くのが基本です
- 工具交換の前には Z を機械原点へ戻すのが一般的です。
G91 G28 Z0.は「いまの位置から増分 0 の点を通って Z の機械原点へ戻る」という意味で、G90 のままG28 Z0.と書くと、ワーク座標の Z0(ワークの上面)まで下りてから戻るので危険です[2][7] - G28 で軸を書かなかったときの動きも機械で違います。FANUC 互換の書き方では書いた軸だけが戻りますが、Haas は軸を書かない
G28で全軸が原点へ戻ります。Haas の例では、Z の退避にG53 G49 Z0.(機械座標の Z0 へ)を使っています[7][2]
図解:G28:中間点を経由して原点へ
回転数と送り:S・M03・F(毎分送り)
主軸は S(回転数 min⁻¹)と M03(正転)で回します。マシニングセンタの送り F は、ふつう G94=毎分送り(mm/min)です。旋盤の「1 回転あたり(mm/rev)」とは単位が違うので、旋盤から移ってきた人がまず間違えるところです[1][2]。回転数と送りは、工具メーカーのカタログの切削速度 Vc と 1 刃あたりの送り fzから計算します[15]。
- 回転数 n = 1000 × Vc ÷(π × D)、送り速度 Vf = fz × z × n。上の例(アルミ・φ10・3 枚刃)では n ≒ 6,366 min⁻¹、Vf ≒ 955 mm/min です[15]
- タップ(G84)の F は、毎分送りのとき 回転数 × ピッチ(M8×1.25 を 400 min⁻¹ なら F500)。ずれるとねじ山をつぶすか、タップが折れます[10][2]。ただし三菱電機の同期タップ(
,R1)のように F にピッチをそのまま書く書き方もあり、取り違えると送りが桁違いになります[1][14] - 計算した値は出発点です。機械の剛性・突き出し・クランプで下げます(フライス・エンドミルの切削条件の計算、工具寿命の延ばし方)
動き:G00・G01・G02・G03
動きのコードは 4 つです。G00 は早送り(位置決め)、G01 は F の速さで直線に削る、G02・G03 は円弧に削ります。円弧の向きは、XY 平面(G17)を +Z 側(上)から見て時計回りが G02、反時計回りが G03 です[1][6]。
図解:G02 の円弧:向き・中心・I/J・R
- G00 は材料の外だけで使う:機械やパラメータによっては、早送りは軸ごとに最高速で動くので、斜めに動くと直線にならないことがあります(ドッグレッグ)。ワークのすぐ近くでは Z を先に上げてから XY を動かします
- 円弧は「終点」と「半径 R」か「中心 I・J」で書きます。I・J は始点から中心までの距離(X 方向が I、Y 方向が J)。R で書くと、180° を超える円弧は R をマイナスにする決まりがあり、全円(1 周)は R では書けないので I・J を使います(練習問題 3)[1][6]
- 小数点を忘れない:多くの機械では
X10は 10 mm ではなく 0.01 mm(最小単位 0.001 mm × 10)と読まれます。X10.と書く習慣を付けます。どう読むかはパラメータで変えられる機械もあるので、自分の機械の設定を確かめます[2][1](小数点の書き忘れ)
工具径補正:G41・G42・G40 と D
図面の形どおりに外周を削るとき、工具の中心は形から工具の半径だけ外を通らなければなりません。この「半径の分だけずらす」計算を NC に任せるのが工具径補正です。プログラムには図面の形をそのまま書き、工具の半径は補正番号 D に登録します[1][8]。
図解:工具径補正:進行方向の左(G41)・右(G42)
- G41 は進む向きの左、G42 は右に工具をずらします。主軸が正転(M03)のエンドミルで外周を時計回り・ポケットの内側を反時計回りに回ると、G41 になり、ダウンカット(下向き削り)になります。ダウンカットは仕上げ面と工具寿命に有利なので、MC の仕上げでは G41 がよく使われます(下向き削りの定義と、Haas の例=M03・外周を時計回り・G41 から)[15][5]
- 補正のかけ始めと終わりには、XY が動く直線の行が要ります。G41 を書いた行の動きで工具がずれていくので、その行は材料の外で、工具の半径より長く動かします。取り消し(G40)も同じで、材料から離れる直線で行います[2][8][13]
- 工具の半径より小さい内側の角・溝は補正では削れません(補正がかけられないとアラームになる、または削りすぎる)。シミュレータでも警告が出ます
- D に少し大きめの半径を入れて荒削りし、本来の半径に戻して仕上げると、同じプログラムで削り代を残せます
穴あけ:固定サイクル G81・G83・G84 と G98・G99
穴あけは、「R 点まで早送り → 穴の底まで送り → 戻る」を 1 行にまとめた固定サイクルで書きます。いちど書けば、次の行からは X・Y だけ書けば同じ穴を繰り返します。最後は G80 で取り消します[1][2][14]。
| コード | 動き | 使いどころ |
|---|---|---|
| G81 | R 点 → Z まで送り → 早送りで戻る | センタ穴・浅いドリル穴 |
| G73 | Q ずつ送って少し戻る(切りくずを切る) | 切りくずが長くつながる材料 |
| G83 | Q ずつ送って R 点まで戻る(切りくずを出す) | 深い穴(目安は直径の 3 倍以上) |
| G84 | 回転と送りを合わせて下り、逆転して戻る | タップ(F = 回転数 × ピッチ) |
図解:穴あけのあと、どの高さで次の穴へ移るか
- G98 はイニシャル点(サイクルを始めた高さ)へ、G99 は R 点へ戻ります。穴と穴のあいだにクランプや段差があるときは G98、何もなければ G99 で速く回ります[1][11]
- 繰り返しの回数は、FANUC 互換や Siemens の ISO 方言では K、三菱電機や Haas では L で書きます(Haas の G83 では I・J・K が別の意味)。G91 と組み合わせると、等間隔の穴を 1 行であけられます。このとき R も Z も増分(R はイニシャル点から、Z は R 点からの距離)になるので、符号に注意します(練習問題 5。シミュレータは K と L のどちらも読みます)[2][1]
- サイクルの種類と動きは 固定サイクル一覧に、変数で穴の位置を回す方法は カスタムマクロ入門にまとめています
図解:G83 の動き(横から見た図)
メーカーによる書き方の違い
基本の G コードは ISO 6983 に沿っているので共通ですが、制御装置のメーカーによって書き方が違うところがあります。ほかの機械のプログラムを流用するときは、次の点を必ず確かめてください。
| メーカー | 違いの例 |
|---|---|
| FANUC 互換 | この記事の書き方。小数点なしの数値の読み方は、パラメータで変わる(X1000 が 1 mm にも 0.1 mm にもなる)[2] |
| 三菱電機 | FANUC 互換にほぼ同じ。固定サイクルの繰り返しは L。同期タップ(,R1)では F にピッチを書く[1] |
| Haas | FANUC に近い。工具長補正は G49・H00 まで自動でかかり続け、工具交換で切り替わる(NGC)。軸を書かない G28 は全軸が原点へ。繰り返しは L[9][7][4] |
| オークマ(OSP) | 独自の書き方(ワーク座標・工具長補正・変数の書き方など)。同じオークマでも FANUC を載せた機械がある。G コードの番号が同じでも意味が違うことがあるので、必ず取扱説明書で確かめる[18] |
| Siemens(SINUMERIK) | 本来の書き方(T1 M6・D1・穴あけは CYCLE81 など)が基本で、G291 で ISO 方言(FANUC 互換)に、G290 で本来の書き方に切り替える。同じブロックに混ぜられない[3][2] |
練習問題:図面どおりに削れるか(採点つき)
青い点線が図面の形です。プログラムの「(---- ... ----)」の行に足りない動きを書いて ▶ を押すと、削れた形を図面と比べて採点します(±0.05 mm)。警告やエラーが出ているときも「もう少し」になります。答えの例は各問の下にあります。もっと進んだ問題(角 R の外周・ヘリカルで下りるポケット・タップ・マクロ)は マシニングセンタのページの練習問題にあります。
問 1面削り:上面を 0.5 mm 削る
素材は 80×60×20 のアルミで、原点は上面の左手前の角です。T1(φ20 のエンドミル)で上面を 0.5 mm 削って平らにしてください。1 往復目の行き(Y0 で右へ)と、Y15 への移動までは書いてあります。Y を 15 mm ずつずらしながら Y60 まで往復させます。
ヒント
X-15. と X95. を交互に書き、そのあいだに Y を 15 ずつ増やす行をはさみます。工具の幅 20 mm より少ない 15 mm ずつずらすと、削り残しの筋が出ません。
O2001 G21 G90 G17 G40 G49 G80 G54 T1 M06 S2400 M03 G00 X-15. Y0. G43 H1 Z30. M08 Z2. G01 Z-0.5 F300 X95. F800 Y15. X-15. Y30. X95. Y45. X-15. Y60. X95. G00 Z30. M09 M30
問 2溝 2 本:G00 で移動、G01 で削る
T2(φ10)で、Y15 と Y45 の線上に X10〜X70 の溝(幅 10・深さ 3)を 2 本削ってください。1 本削ったら Z2. まで上げ、早送りで 2 本目の始まりへ移ります。
ヒント
G01 Z-3. F150 → X70. F500 → G00 Z2. → X10. Y45. → もう一度 G01 で下りて削る。材料の中を G00 で動かさないこと。
O2002 G21 G90 G17 G40 G49 G80 G54 T2 M06 S3200 M03 G00 X10. Y15. G43 H2 Z30. M08 Z2. G01 Z-3. F150 X70. F500 G00 Z2. X10. Y45. G01 Z-3. F150 X70. F500 G00 Z30. M09 M30
問 3丸いポケット:G03 の全円(I・J)
中心 X40 Y30 に、直径 30・深さ 4 の丸いくぼみ(ポケット)を T2(φ10)で削ります。中心で Z-4. まで下りたところまで書いてあります。
ヒント
X50. へ動くと、工具の外側が半径 15 に届きます。そこから G03 X50. Y30. I-10. J0. で 1 周。全円は R では書けないので、I・J(始点から中心までの距離)で書きます。
O2003 G21 G90 G17 G40 G49 G80 G54 T2 M06 S3200 M03 G00 X40. Y30. G43 H2 Z30. M08 Z2. G01 Z-4. F100 X50. F400 G03 X50. Y30. I-10. J0. G01 X40. G00 Z30. M09 M30
問 4丸いボス:工具径補正 G41 と G02
中心 X40 Y30・直径 40 の円柱(ボス)を残して、まわりを深さ 5 削ります。工具は T2(φ10)で、補正番号 D2 には工具の半径 5 が入っている前提です。補正をかけて円のいちばん手前(X40. Y10.)まで来たところまで書いてあります。
ヒント
G41 は工具が進む向きの左に逃げる補正です。円の外側を時計回り(G02)に回ると、ダウンカットになります。終点は始点と同じ X40. Y10.、中心までは J20.。
O2004 G21 G90 G17 G40 G49 G80 G54 T2 M06 S3200 M03 G00 X65. Y-10. G43 H2 Z30. M08 Z2. G01 Z-5. F150 G41 D2 Y10. F500 X40. G02 X40. Y10. I0. J20. G01 X20. G40 X10. Y-10. G00 Z30. M09 M30
問 55 個の穴:G91 と K で繰り返す
Y30 の線上に、X10 から 15 mm おきに X70 まで、φ6.8・深さ 10 の穴を 5 個あけます。ドリル(T3)は X-5. Y30. Z30. で待っています。G91(インクレメンタル)と K(繰り返しの回数。三菱電機・Haas では L)を使って、1 行で書いてください。
ヒント
G91 のときは R も Z も増分になります。R 点はいまの高さ Z30 から −28(= Z2)、穴の底は R 点から −12(= Z-10)。1 回で X に 15 進むので、X-5 から 5 回で X10・25・40・55・70 に穴があきます。
O2005 G21 G90 G17 G40 G49 G80 G54 T3 M06 S1800 M03 G00 X-5. Y30. G43 H3 Z30. M08 G91 G99 G81 X15. Y0. Z-12. R-28. K5 F180 G80 G90 G00 Z30. M09 M30
よくある失敗(シミュレータでも警告が出ます)
- G43 を忘れる・H の番号を間違える:工具の長さの分だけ Z がずれ、ワークやバイスに突っ込む[9][21]
- G54 を呼ばない:機械座標のまま動き、まったく違う場所を削る
- 小数点を忘れる:
Z-5は 0.005 mm。深さが足りない、またはX100が 0.1 mm になって工具が原点へ寄る - G91 のまま戻さない:次の行のアブソリュートのつもりの数字が、すべて「そこから進む距離」になる
- G90 のまま G28 Z0.:ワークの上面を通ってから機械原点へ戻る[7]
- 材料の中を G00 で動く:Z を上げずに次の位置へ早送りし、工具が折れる
- G41 のかけ始めを材料の上で行う:補正で工具がずれていく途中に削りすぎる。補正は材料の外で、工具の半径より長い直線で
- タップの F を回転数 × ピッチにしない:ねじ山をつぶす・タップが折れる
- 固定サイクルを G80 で取り消さない:次の位置決めの行でも穴をあけてしまう
よくある質問
- このシミュレータは実際のマシニングセンタと同じ動きですか?
- いいえ、学習用の簡易版です。FANUC 互換の基本のコード(G00〜G03・G17・G28・G40〜G43・G49・G54〜G59・G73・G80〜G89・G90・G91・G98・G99 と主な M コード、簡単なカスタムマクロ)を読みますが、機械の加減速・工具のたわみ・パラメータの設定は考えていません。実機の前に、プログラムと工具の動きの対応を確かめる道具として使ってください。
- G43 の H と、工具径補正の D は同じ番号でいいですか?
- 多くの機械では、工具長の H と工具径の D は別の表(または同じ表の別の列)に入っていて、工具番号と同じ番号にそろえるのが一般的です。表の作りは機械ごとに違うので、機械の説明書と社内の決まりを確かめてください[1][9]。
- アップカットとダウンカットはどちらを使えばいいですか?
- マシニングセンタの仕上げでは、仕上げ面と工具寿命に有利なダウンカット(下向き削り)がよく使われます。主軸正転のエンドミルで G41 を使って外周を時計回りに回ると、ダウンカットになります。黒皮(鋳物の表面など)や、ガタの大きい古い機械ではアップカットを選ぶこともあります[15]。
- 技能検定(マシニングセンタ作業)の勉強にも使えますか?
- プログラムの基本を手で確かめる練習には使えます。試験の内容や過去問は中央職業能力開発協会の公開ページで確かめてください[22][23](公開サイトの問題は閲覧のみで、複製・二次使用は禁止されています)。
次の一歩として、1 つずつのコードの意味は G・M コード辞典、穴あけのサイクルは 固定サイクル一覧、変数と計算は カスタムマクロ入門、機械の種類と段取りは マシニングセンタ、旋盤のプログラムは NC 旋盤プログラム入門にまとめています。
出典・参考資料
- 三菱電機「700/70 Series Programming Manual (Machining Center System)」IB-1500072
- Siemens「SINUMERIK ISO Dialects Milling Programming Manual」(ISO 方言、2007)
- Siemens「SINUMERIK 840D sl / 828D Fundamentals Programming Manual」(2013)
- Haas Automation「Mill Operator’s Manual 12 – Basic Programming」
- Haas Automation「Mill Operator’s Manual 17 – G-Codes」17.3 Cutter Compensation
- Haas Automation「G02 CW / G03 CCW Circular Interpolation Motion」(ミル)
- Haas Automation「G28 Return to Machine Zero Point」(ミル)
- Haas Automation「G41 / G42 2D Cutter Compensation」(ミル)
- Haas Automation「G43 Tool Length Compensation + / G44」(ミル)
- Haas Automation「G84 Tapping Canned Cycle」(ミル)
- Haas Automation「G98 Canned Cycle Initial Point Return」(ミル)
- Haas Automation「M06 Tool Change」(ミル)
- LinuxCNC「Tool Compensation」(工具径補正の進入の長さ)
- 芝浦機械「固定サイクル指令」(工作機械用語集)
- 三菱マテリアル「Technical Data」(フライス削りの式・アップカットとダウンカット)
- ISO「ISO 841:2001 Numerical control of machines — Coordinate system and motion nomenclature」(要旨)
- 日本規格協会「JIS ハンドブック 2023 工作機械」目次(JIS B 6310:2003=ISO 841:2001 IDT、JIS B 6315-1:2013=ISO 6983-1:2009 MOD)
- Okuma America「CNC Control Procedures 101」(OSP と FANUC の操作の違い、2015)
- 今井慎一「機械実習における数値制御教育のための実践環境の構築」工学教育研究講演会講演論文集(2016)
- 今井慎一・新谷翠「実践教育のための安全性を考慮した NC 工作機械の開発とその実践」工学教育 63(3)(2015)
- Denkena ほか「Simulation-based collision detection for CNC machining using sensor-based image recognition」Procedia CIRP 126(2024)
- 中央職業能力開発協会「技能検定 作業の内容」(機械加工 マシニングセンタ作業)
- 中央職業能力開発協会「技能検定試験問題公開サイト」


