CNCプログラミングマスター:言語、構造、G/Mコード
学習目標
このユニットを修了すると、以下のことができるようになります:
- プログラムの命令リストを識別できる
- プログラムフォーマットを理解する
- 文字アドレスコマンドコードを説明できる
- 特殊文字コード定義を説明できる
- GコードとMコードを理解する
CNCプログラムは、記述順序で実行される命令をリストします。本を読むように左から右、上から下へ読み進みます。CNCプログラムの1文は独立した行に書かれ、これをブロックと呼びます。ブロックは安全性、予測可能性、可読性を促進する特定の順序で配置されるため、標準的なプログラム構造を守ることが重要です。
ブロックの標準配置順序
- プログラム開始
- 工具装填
- スピンドルON
- クーラントON
- ワーク上方へ高速移動(ラピッド)
- 加工動作
- クーラントOFF
- スピンドルOFF
- 安全位置へ移動
- プログラム終了
上記は単一工具・単一加工の最もシンプルなCNCプログラムです。複数工具を使うプログラムでは、ステップ2〜9を工具ごとに繰り返します。
GコードとMコードの代表的なものは、GコードとMコードセクションの表3と表4に示します。可能であれば暗記することを推奨します。
あらゆる言語と同様、Gコード言語にもルールがあります。例えば、あるコードはモーダルで、ブロック間で変更がなければ繰り返す必要がありません。また、使用方法や場所によって意味が変わるコードもあります。
これらのルールは本章でカバーしていますが、言語のあらゆるニュアンスを学ぶ必要はありません。プログラムを適切にフォーマットし書き出すのは、CAD/CAMソフトウェアのポストプロセッサーの仕事です。
プログラムフォーマット
表1のプログラムは、正方形輪郭の加工と穴あけを行います。
| ブロック | 内容 | 目的 |
|---|---|---|
| % O1234 (T1 0.25 END MILL) G17 G20 G40 G49 G80 G90 |
プログラム開始 プログラム番号(プログラム名) オペレーター向け工具説明 安全ブロック:機械を安全モードに設定 |
プログラム開始 |
| T1 M6 S9200 M3 |
ツール#1装填 スピンドル9200 RPM、正転(CW) |
工具交換 |
| G54 M8 G00 X-0.025 Y-0.275 G43 Z1. H1 Z0.1 G01 Z-0.1 F18. |
治具オフセット#1使用 クーラントON ワーク上方へラピッド移動 安全プレーンへラピッド、工具長オフセット#1使用 送りプレーンへラピッド 切削深度まで直線補間、18 IPM |
位置決め |
| G41 Y0.1 D1 F36. Y2.025 X2.025 Y-0.025 X-0.025 G40 X-0.4 G00 Z1. |
カッター径補正(CDC)左、リードイン、径オフセット#1、36 IPM 直線移動 直線移動 直線移動 直線移動 CDC解除、リードアウト移動 安全プレーンへラピッド |
輪郭加工 |
| M5 M9 (T2 0.25 DRILL) T2 M6 S3820 M3 |
スピンドルOFF クーラントOFF オペレーター向け工具説明 ツール#2装填 スピンドル3820 RPM、正転 |
工具交換 |
| M8 X1. Y1. G43 Z1. H2 Z0.25 |
クーラントON 穴上方へラピッド 安全プレーンへラピッド、工具長オフセット#2 送りプレーンへラピッド |
位置決め |
| G98 G81 Z-0.325 R0.1 F12. G80 Z1. |
ドリル缶サイクル、深度Z-0.325、F12 ドリルサイクル解除 安全プレーンへラピッド |
穴あけ |
| M5 M9 G91 G28 Z0 G91 G28 X0 Y0 G90 M30 % |
スピンドルOFF クーラントOFF Z軸機械原点復帰 XY機械原点復帰 絶対座標モードにリセット(安全のため) プログラム先頭にリセット プログラム終了 |
プログラム終了 |
文字アドレスコマンドコード
コマンドブロックは文字アドレスコマンドを用いて機械を制御します。一部は複数回使用され、同一ブロック内のGコードにより意味が変わります。
コードはモーダル(キャンセルまたは変更まで有効)と非モーダル(当該ブロックのみ有効)に分類されます。多くの文字アドレスは論理的に選ばれています(T=工具、S=スピンドル、F=送り速度等)。
代表的な文字アドレスコマンドコードを以下の表にまとめます。
表2:文字アドレスコマンドコード
| 変数 | 説明 | 定義・用例 |
|---|---|---|
| A | A軸(X軸周り回転軸)の絶対/増分位置 | A,B,C:第4/5軸回転運動。X,Y,Z軸周りの回転。角度は度、小数点以下3桁精度。 G01 A45.325 B90. |
| B | B軸(Y軸周り回転軸)の絶対/増分位置 | Aと同じ |
| C | C軸(Z軸周り回転軸)の絶対/増分位置 | Bと同じ |
| D | カッター径補正用の直径/半径オフセット定義 | 工具径摩耗・たわみ補正。工具番号と同じ整数(T5→D5)。小数点なし。G41/G42とXY移動(円弧不可)と併用。制御装置はレジスタ値を読み、G41で左、G42で右に工具パスをオフセット。 G01 G41 X2. D1 |
| E | 旋盤ねじ切り用精密送り速度 | — |
| F | 送り速度定義 | 直線・円弧・ドリルサイクル加工時の送り速度。インチ/分(G94モード)または逆時間(G93モード)。小数点以下3桁精度(タップサイクル用)、小数点必須。 G01 X2. Y0. F30. |
| G | 準備関数アドレス | 望む運動タイプ(高速位置決め、直線送り、円弧送り、固定サイクル等)や使用オフセット値を制御装置に指示。 G02 X2. Y2. I.5 J0. |
| H | 工具長オフセット定義;C軸対応増分軸(複合旋盤等) | 制御装置の工具長オフセット(TLO)レジスタを呼出し。制御装置はTLOと治具オフセットZを合成し、工具が部品基準点に対してどこにあるか把握。整数付き(H1, H2等)、G43、Z座標と併用。 G43 H1 Z2. |
| I | G02/G03円弧コマンド用のX軸方向円弧中心ベクトル;一部固定サイクルでパラメータとしても使用 | 円弧移動(G2/G3)で、円弧始点から円弧中心までのX方向増分距離。一部ドリルサイクルでもオプションパラメータとして使用。 G02 X.5 Y2.500 I0. J0.250 |
| J | G02/G03円弧コマンド用のY軸方向円弧中心ベクトル;一部固定サイクルでパラメータとしても使用 | 円弧移動で、始点から中心までのY方向増分距離。一部ドリルサイクルでオプション使用。 G02 X.5 Y2.500 I0. J0.250 |
| K | G02/G03円弧コマンド用のZ軸方向円弧中心ベクトル;一部固定サイクルでパラメータとしても使用、Lアドレスと同等 | 円弧移動で、始点から中心までのZ方向増分距離。G17平面ではヘリカル移動のZ増分。一部ドリルサイクルでJとしても使用。 G18 G03 X.3 Z2.500 I0. K0.250 |
| L | 固定サイクル繰り返し回数;G10使用時の編集対象レジスタ指定 | 固定サイクル繰り返し回数:各位置での固定サイクル繰り返し数を定義。未指定なら1とみなす。Kアドレスが代用されることも。増分位置決め(G91)では等間隔穴をループでプログラム可能。G10用:編集対象レジスタ指定(ワークオフセット、工具径オフセット、工具長オフセット等)。 |
| M | 雑多機能 | 意味を決める整数と常にセット。1ブロックにMコードは1つのみ。詳細定義は後出。 M08 |
| N | プログラム内行(ブロック)番号;G10使用時のシステムパラメータ番号 | ブロック番号でプログラム可読性向上。サブプログラムなしのCAD/CAM生成プログラムでは滅多に不要。制御装置メモリを消費するため、3Dプログラムでは通常使用せず。整数5桁まで、小数点なし。テープ開始/終了文字(%)前やコメントのみブロック前には置けない。 N100 T02 M06 |
| O | プログラム名 | プログラムはプログラム番号で制御装置に格納。Oで始まる整数、小数点なし。 O1234 (Exercise 1) |
| P | 各種G/Mコードのパラメータアドレス | ドウェル(待機)秒数。G4と併用(一部ドリルサイクル内除く)。 G4 P.1 |
| Q | 缶サイクルでのペック増分 | ペックドリルサイクルでの1パスあたり増分送り距離。 G83 X2.000 Y2.000 Z-.625 F20. R.2 Q.2 P9. |
| R | 円弧半径定義、または缶サイクルでのリトラクト高さ定義 | 円弧は半径RまたはI,J,Kベクトルで定義可能。IJKの方が信頼性高く推奨。ドリルサイクルではリターンプレーンZ値としても使用。 G83 Z-.625 F20. R.2 Q.2 P9. |
| S | 回転速度定義(スピンドル速度または面速度、モード依存) | スピンドル回転数(RPM)。整数、小数点なし。M03(正転)またはM04(逆転)と常に併用。 S2500 M03 |
| T | 工具選択 | 工具選択。整数、常にM06(工具交換コード)と併用。 T01 M06 |
| U | X軸対応増分軸(主に旋盤グループA制御);一部機種でドウェル時間定義 | これら制御ではXとUがG90/G91に代わる。これら旋盤ではG90は荒取り固定サイクルアドレスになる。 |
| V | Y軸対応増分軸 | 2000年代までVアドレスは稀。U,W使用旋盤の多くはY軸なし。ライブツーリング・複合加工の普及でV使用は以前より一般的になりつつある。 |
| W | Z軸対応増分軸(主に旋盤グループA制御) | これら制御ではZとWがG90/G91に代わる。これら旋盤ではG90は荒取り固定サイクルアドレス。 |
| X | X軸の絶対/増分位置 | X軸座標データ。小数点以下4桁まで許容、末尾ゼロ省略。座標はモーダルなので、変わらない後続ブロックで繰返し不要。 G01 X2.250 F20. |
| Y | Y軸の絶対/増分位置 | Y軸座標データ。 G01 Y2.250 F20. |
| Z | Z軸の絶対/増分位置 | Z軸座標データ。 |
特殊文字コード定義
よく使用される特殊文字、意味、用法、制限を以下に示します。
- % —— プログラム開始または終了。すべてのプログラムは独立したブロックで%で始まり%で終わる。テープリワインド文字(紙テープでプログラム読込していた名残)。
- ( ) —— コメント。オペレーター向けコメントは全大文字で括弧内に記述。最大長40文字、全文字大文字。
例:(T02: 5/8 END MILL) - / —— ブロック削除。この文字以降のコードは、制御装置のブロック削除スイッチがONなら無視される。
例:/ M00 - ; —— ブロック終了。テキストエディタでCNCプログラムを見るときは見えない(改行コード)が、機械制御装置の画面表示では各ブロック末尾に現れる。
例:N8 Z0.750 ;
GコードとMコード
GコードとMコードがCNCプログラムの大部分を占めます。各クラスの定義と重要コードの具体的意味を以下に示します。
Gコード
Gで始まるコードは、機械を特定の運動タイプに備えるため準備関数と呼ばれます。
表3:主要Gコード
| コード | 説明 |
|---|---|
| G00 | 高速移動(ラピッド)。非切削移動で機械を位置決めする際に使用。 |
| G01 | 指定送り速度での直線補間。 |
| G02 | 時計回り円弧補間。 |
| G03 | 反時計回り円弧補間。 |
| G04 | ドウェル(停留)。 |
| G28 | 機械原点(ホーム)復帰。 |
| G40 | カッター径補正(CDC)キャンセル。 |
| G41 | カッター径補正(CDC)左。 |
| G42 | カッター径補正(CDC)右。 |
| G43 | 工具長オフセット(TLO)適用。 |
| G54 | 治具オフセット#1。 |
| G55 | 治具オフセット#2。 |
| G56 | 治具オフセット#3。 |
| G57 | 治具オフセット#4。 |
| G58 | 治具オフセット#5。 |
| G59 | 治具オフセット#6。 |
| G80 | ドリルサイクルキャンセル。 |
| G81 | シンプルドリルサイクル。 |
| G82 | ドウェル付きシンプルドリルサイクル。 |
| G83 | ペックドリルサイクル。 |
| G84 | タッピングサイクル。 |
| G90 | 絶対座標プログラミングモード。 |
| G91 | 増分座標プログラミングモード。 |
| G98 | ドリルサイクル復帰:初期点(R点)へ。 |
| G99 | ドリルサイクル復帰:基準プレーン(前回Z高さ)へ。 |
Mコード
Mで始まるコードは雑多機能と呼ばれ、クーラントやスピンドル回転方向など機械補助機能を制御します。1ブロックにMコードは1つのみ記述可能。
表4:主要Mコード
| コード | 説明 |
|---|---|
| M00 | プログラム停止。サイクルスタートボタンで継続。 |
| M01 | オプショナルストップ。 |
| M02 | プログラム終了。 |
| M03 | スピンドル正転(時計回り)。 |
| M04 | スピンドル逆転(反時計回り)。 |
| M05 | スピンドル停止。 |
| M06 | 工具交換。 |
| M08 | クーラントON。 |
| M09 | クーラントOFF。 |
| M30 | プログラム終了し、サイクルスタートで再実行可能。 |
主要Gコード詳細解説
G00 —— 高速移動(ラピッドムーブ)
機械を可能な限り最高速で指定点へ移動させます。座標位置と常に併用し、モーダルです。G01と異なり、軸を直線的に協調動作させません。各軸がそれぞれ最大速度で動き、到達次第停止します。その結果、図1のような運動になります。
G00 X0. Y0.

図1. G00運動
注意:一部機械のラピッド速度は非常に高速です。オフセットや座標の誤りは、オペレーターが非常停止を押すより速くクラッシュを引き起こします。初回プログラム実行時は機械のラピッドフィードオーバーライドを使用してください。
直線運動はストレートライン運動
Gコードは運動についてのものであり、部品プログラムで最も一般的な運動は直線(リニア)運動です。運動もGコードのモーダル要素の一つです。どの種類の運動を望むかGコードでコントローラーに伝えると、別のGコードで変更を指示するまでその運動タイプを記憶し続けます。
- G00:高速位置決め。機械の最高速で移動。切削しない空間移動(エアカット)で次の切削位置へ。
- G01:切削送り運動。低速で切削。送り速度は「F」コードで設定。
Fワード = 「Feedrate(送り速度)」の「F」
Sワード = 「Spindle Speed(スピンドル速度)」の「S」、単位はRPM。
X, Y, Zによる直線運動指定
G00やG01を指定するだけでは運動は発生しません——単にコントローラーに期待する運動タイプを伝えるだけです。実際の運動には、X, Y, Zワードで目的地を指定する必要があります。例えばワークゼロへ移動するなら:
G00 X0 Y0 Z0 または低速で行くなら G01 X0 Y0 Z0 F40.
同一ブロックで複数座標を指定すると補間運動(複数軸が同時に動く)になります。コントローラーは各軸を正確な速度比で動かし、カッターが直線的に目的地へ向かい、設定送り速度で移動します。
同一目的地でも座標を複数ブロックに分けると、各ブロックが独立した移動になります:
G00 X0 Y0 (Z一定でX0 Y0へ一括移動) Z0 (X,Y一定でZ0へ一括移動)
G00とG01はモーダルなので、モード変更時のみ指定すればよいです。
Z軸の考慮
補間移動の概念はZ軸で興味深い問題を提起します。切込み軸(Z)を他軸(X, Y)と協調動作させず、独立して動かす方が良い場合が多々あります。カッターがワークや治具に近づく際の衝突リスクを判断しやすくなるからです。まずX, Yで位置決めし、その後Zで下げる方が、偶然の衝突(クランプ等の突起物に当たる)を避けやすく、安全です。
G02とG03 —— 円弧運動モードの開始
- G02:時計回り円弧モードを確立。
- G03:反時計回り円弧モードを確立。
G02またはG03モードが確立されると、円弧は「2つの端点と、両端点から等距離にある中心」で定義されます。端点は容易です。ブロック開始時の現在位置(制御点)が1つ目の端点。もう1つはXYZ座標で指定。中心は、円弧始点から中心への相対オフセットをI, J, Kで指定するのが最も一般的です。
時計回り円弧の例

図2. 円弧の中心とIJK
この円弧はX0 Y2.で始まり、X2. Y0.で終わります。中心はX0 Y0.。Gコードでは:
G02 (時計回り円弧モード設定) X2 Y0 I0 J-2.0
半径Rによる中心指定
円の半径を指定するだけで中心を定義することもできます。半径2の円なら:
G02 X2 Y0 R2
G17/G18/G19 —— 平面指定
円弧はG17(XY平面)、G18(XZ平面)、G19(YZ平面)で指定された平面上に存在しなければなりません。G17が機械デフォルトです。

図3. 平面指定
G40/G41/G42 —— カッター径補正(CDC)
CDCは精密CNC加工の鍵で、工具摩耗・たわみを補正するため、プログラムパスから左(G41)または右(G42)に機械をずらすよう命令します。G40で補正キャンセル。オフセット量はCNC制御装置のDレジスタに入力します。摩耗レジスタは、コントローラーが毎移動時に参照するテーブルのようなものと考えられます。
表5:径オフセットレジスタ
| 工具径オフセット | 値 |
|---|---|
| D1 | 0.0125 |
| D2 | 0.0000 |
| D3 | 0.0000 |
| D4 | 0.0000 |
| D5 | 0.0000 |
| D6 | 0.0000 |
Dレジスタの値は、機械オペレーターが仕上げ寸法を監視し、図面と比較し、差分をレジスタに入力して部品を仕様内に保ちます。ズレがなければゼロ設定。
G01 G41 D1 X1.0 Y.25 F40.
G43 —— 工具長補正
G43は工具長補正を有効化します。常にHコードとZ移動を伴います。Hは読み出す工具長オフセット(TLO)レジスタ、Zは部品基準点を参照した目標高さです。
TLOは制御装置上のテーブルのようなものと考えられます:
表6:ワークオフセット(工具長レジスタ)
| 工具長レジスタ | Z |
|---|---|
| H1 | 10.236 |
| H2 | 4.7510 |
| H3 | 6.9652 |
| H4 | 7.6841 |
| H5 | 12.4483 |
| H6 | 8.2250 |
TLOは制御装置上のアクティブな治具オフセットと合成され、機械は工具先端が部品基準点に対してどこにあるかを把握します。
G43 H1 Z1.
G54 —— ワークオフセット(治具オフセット#1)
ワークオフセットは、CNC制御装置内のデータレジスタで、機械ホームX, Y, Z位置から部品基準点までの距離を保持します。これらも制御装置上のテーブルのように考えられます:
表7:ワークオフセット
| ワークオフセット | X | Y | Z |
|---|---|---|---|
| G54 | 14.2567 | 6.6597 | 0.0000 |
| G55 | 0.0000 | 0.0000 | 0.0000 |
| G56 | 0.0000 | 0.0000 | 0.0000 |
| G57 | 0.0000 | 0.0000 | 0.0000 |
| G58 | 0.0000 | 0.0000 | 0.0000 |
| G59 | 0.0000 | 0.0000 | 0.0000 |
ヒント:G54は通常最初の加工セットアップに使用。追加オフセットで部品の他面を加工。
X, Y値は機械ホームから部品基準点XYまでの距離。Z値は工具基準点(例:1-2-3ブロック上面)から部品Z基準点までの距離。
G54 X0. Y0.
単元テスト
- CNCプログラムの命令リスト構造を説明せよ。
- すべてのCNCプログラムは何で始まり、何で終わるか。
- 文字アドレスコマンドコードを説明せよ。
- 特殊文字コードを3つ挙げよ。
- GコードとMコードを説明せよ。
- G00 G90 G54 X0 Y0 を説明せよ。
- G00 G90 G43 H1 Z1. を説明せよ。
- G00とG01の違いは何か。
- G02とG03の違いを説明せよ。
- FワードとSワードを説明せよ。
産業技術
- CNC工具・カッターグラインダーの理解:機能、用途、メリット
- マイクロプロセッサプログラミングの基礎
- CNC操作実践:ハースミルのセットアップと制御
- CNC加工の変数管理:安定した結果を得るための実践的アプローチ
- CNCフライス加工精度を極める:精密部品製造のための実証済みステップ
- ポートランド、オレゴン州のプレミアムCNC加工・工具製造サービス
- 5軸CNC工作機械のクラッシュを防止・管理するための完全ガイド
- CNC工作機械の精度・位置決め精度向上:包括的ガイド
- CNC工具プリセッター・測定システム:精度と効率を支える必須ガイド
- Cプログラム構造の理解:初心者向けガイド
- C#プログラム構造の理解:コアコンポーネントと例