はい、承知いたしました。NCプログラムとGコードの基礎知識について、初めて学ぶ人向けの詳細な説明を含む約5000語の記事を作成します。
NCプログラムとGコードの基礎知識:初めて学ぶ人へ
ものづくりは、人類の歴史とともに歩んできました。かつて職人の手作業に頼っていた精密な部品加工も、技術の進歩によって劇的に変化しました。その変化の中心にあるのが、「NC(Numerical Control:数値制御)」、そして現代では「CNC(Computer Numerical Control:コンピュータ数値制御)」と呼ばれる技術です。
この技術によって、複雑な形状の部品を高い精度で、そして繰り返し大量に生産することが可能になりました。自動車部品、航空機部品、電子機器の筐体、医療機器など、私たちの身の回りの多くのものがNC/CNC工作機械によって作られています。
NC/CNC工作機械は、オペレーターが手動でハンドルを回したり刃物を操作したりする代わりに、「プログラム」と呼ばれる一連の指示に従って自動的に動作します。このプログラムこそが「NCプログラム」であり、その指示を記述するための「言語」が「Gコード」や「Mコード」と呼ばれるものです。
「Gコード? Mコード? なんだか難しそう…」と感じるかもしれません。しかし、NCプログラムとGコードの基礎は、一度理解してしまえば決して複雑なものではありません。これは機械に「どこに移動して、何をしろ」と指示するための、非常に論理的な言葉なのです。
この記事は、NCプログラムやGコードに初めて触れる方を対象に、その基本的な概念から、実際のプログラムの読み方、書き方、そして重要なコードの意味までを、分かりやすく丁寧に解説することを目的としています。これを読めば、NCプログラムが魔法の呪文ではなく、機械との対話のためのツールであることが理解できるはずです。
さあ、NC/CNCものづくりの世界への第一歩を踏み出しましょう。
第1章:NC/CNCとは何か? なぜ必要なのか?
1.1 手動加工からNC/CNCへ
ものづくりの現場では、古くから旋盤やフライス盤といった工作機械が使われてきました。これらの機械を操作する職人は、非常に高い技術と経験を持ち、材料を削って目的の形状を作り出していました。しかし、手作業には以下のような課題がありました。
- 人の技能に依存する: 高い精度や複雑な形状の加工は、熟練した職人にしかできませんでした。
- 加工時間のバラつき: 同じ部品を作っても、職人や状況によって加工時間に差が出ることがありました。
- 繰り返し性の限界: 全く同じものを寸分たがわず大量に作ることは困難でした。
- 複雑な形状の難しさ: 曲線や自由曲面など、複雑な3D形状の加工は非常に困難でした。
- 安全性: 刃物を使う作業には常に危険が伴いました。
これらの課題を解決するために登場したのが、「数値制御(NC)」の概念です。NCは、あらかじめ定めた数値データ(座標や速度など)によって機械の動作を制御する技術です。
初期のNC工作機械は、パンチカードやパンチテープに記録された数値を読み取って動作していました。これはコンピュータが登場する前の話です。
1.2 CNC(コンピュータ数値制御)の登場
コンピュータが発展し、高性能で小型化されると、NC技術は大きく進化します。「コンピュータ数値制御(CNC)」の登場です。
CNC工作機械は、プログラムされた数値データをコンピュータが処理し、機械の各軸(X軸、Y軸、Z軸など)やスピンドル(回転軸)、その他の機能を制御します。これにより、初期のNCよりもさらに柔軟で高度な制御が可能になりました。
現在、ものづくりの現場で「NC工作機械」と呼ばれるものは、ほとんどがこのCNC工作機械を指します。
1.3 CNC工作機械のメリット
CNC工作機械の導入により、ものづくりの現場は以下のような大きなメリットを得ました。
- 高精度・高品質: プログラム通りに正確に動作するため、ミクロン単位の高い精度で加工が可能です。
- 高い繰り返し性: 一度作成したプログラムを使えば、何度でも同じ部品を高い品質で製造できます。大量生産に向いています。
- 複雑形状の加工: コンピュータによる計算と制御により、手作業では困難だった複雑な3D形状や自由曲面の加工が容易になりました。
- 生産性の向上: 自動運転が可能なので、夜間無人運転などによる稼働率の向上や、複数の機械を1人のオペレーターが見るといった省力化が実現できます。
- 習熟期間の短縮: 熟練工の「技」をプログラムとして蓄積・共有できるため、オペレーターの習熟期間を短縮できます。
- 安全性の向上: オペレーターが危険な作業から離れて機械を監視する時間が長くなります。
- 段取り時間の短縮: プログラムや治具を準備しておけば、品種変更の際の段取り時間を短縮できます。
これらのメリットから、CNC工作機械は現代のものづくりに不可欠な存在となっています。そして、そのCNC工作機械を動かすための「設計図」であり「命令書」となるのが、次に説明する「NCプログラム」です。
第2章:NCプログラムとは何か? GコードとMコード
2.1 NCプログラムの役割
NCプログラムは、CNC工作機械に「いつ、どこで、何を、どのように行うか」を具体的に指示する命令の羅列です。例えるなら、料理の「レシピ」や、ロボットを動かすための「手順書」のようなものです。
プログラムには、以下のような情報が記述されます。
- 移動: 工作機械の刃物やテーブルを、どの座標のどの点まで、どのような軌道(直線、円弧)で移動させるか。
- 速度: 移動する際の速度(送り速度)や、刃物を回転させる速度(主軸回転速度)はどのくらいにするか。
- 工具: どの工具(エンドミル、ドリルなど)を使うか、いつ工具を交換するか。
- 機械機能: 主軸の回転開始/停止、クーラント(切削油)の供給開始/停止、プログラムの停止など、機械固有の機能をどう制御するか。
- 座標系: どの座標基準(原点)で機械を動かすか。
オペレーターは、このNCプログラムを機械の制御装置(コントローラー)に読み込ませることで、自動加工を開始します。
2.2 NCプログラムの「言語」:GコードとMコード
NCプログラムは、特定の「言語」のルールに従って記述されます。その中心となるのが「Gコード」と「Mコード」です。
-
Gコード (Preparatory Command / Geometry Command):
主に「準備機能」や「幾何学的な動作」を指示するコードです。「これから機械がどのような動作を行うか」を準備・指定します。例えば、「直線で移動する」「円弧で移動する」「座標系の基準を変える」「工具補正を使う」といった、移動の方法や準備に関わる命令がGコードにあたります。 -
Mコード (Miscellaneous Command):
主に「補助機能」や「機械の付帯機能」を指示するコードです。「機械が今から行う動作そのもの」や、「加工以外の機械の動き」を制御します。例えば、「主軸を回転させる」「クーラントを出す」「工具を交換する」「プログラムを終了する」といった、機械そのもののON/OFFや動作に関わる命令がMコードにあたります。
GコードとMコードは、NCプログラムの中核をなす「単語」のようなものです。これらの単語に、移動先の座標(X, Y, Z)、速度(F, S)、工具番号(T)といった数値データを組み合わせることで、具体的な命令文(プログラムの1行)を作成します。
NCプログラムの記述方式は、国際規格(ISO)である程度標準化されていますが、工作機械メーカー(FANUC、Okuma、Mazak、Haasなど)や制御装置の種類によって、細部のコードや機能が異なる場合があります。しかし、基本的なGコード、Mコードの多くは共通しており、一度基本を学べば他の制御装置にも応用が効きます。
第3章:NCプログラムの基本構成
NCプログラムは、通常いくつかの「ブロック」と呼ばれる行の集まりで構成されています。1つのブロックは、機械への1つ以上の命令を含んでいます。
3.1 ブロック(Block)
NCプログラムの1行が「ブロック」にあたります。各ブロックは通常、「改行」または特定の文字(例えば、EOLやLF/CRなど)で区切られます。制御装置は、プログラムをブロック単位で読み込み、解釈し、実行します。
3.2 ワード(Word)
各ブロックは、「ワード」と呼ばれる要素の集まりで構成されます。ワードは「アドレス」とそれに続く「数値」から成り立ちます。
- アドレス (Address): アルファベット1文字(または2文字)で、指示する機能の種類を表します。例:G, M, X, Y, Z, F, S, T, N, O など。
- 数値 (Numerical Data): アドレスに続く数値で、その機能の具体的な値を指定します。例:G01, X100.0, F300, S1500 など。
一般的なワードには以下のようなものがあります。
O
:プログラム番号 (例: O0001) – プログラムの識別に使われます。N
:シーケンス番号 / ブロック番号 (例: N10, N20) – ブロックの識別に使われます。必ずしも必要ではありませんが、プログラムの編集やデバッグに役立ちます。G
:準備機能 / Gコード (例: G01, G90)M
:補助機能 / Mコード (例: M03, M08)X
,Y
,Z
:座標値 (例: X100.0, Y-50.5, Z10.0)R
:円弧の半径、または固定サイクルでのR点 (例: R5.0)I
,J
,K
:円弧の中心点の座標値(現在の位置からの相対値) (例: I5.0, J0.0)F
:送り速度 (Feed Rate) (例: F300)S
:主軸回転速度 (Spindle Speed) (例: S1200)T
:工具番号 (Tool Number) (例: T01)D
:工具径補正番号 (Cutter Diameter Compensation Number) (例: D11)H
:工具長補正番号 (Tool Length Compensation Number) (例: H01)
3.3 ブロックの構成例
一般的なブロックは、これらのワードを組み合わせて記述されます。ワードの並び順にはある程度の規則がありますが、多くの制御装置では柔軟性があります。一般的には以下のような順序で記述されることが多いです。
Nxxx Gxx Gxx Xxxx Yxxx Zxxx Ixxx Jxxx Kxxx Rxxx Fxxx Sxxxx Txx Dxx Hxx Mxx Mxx ;
各ワードは、そのブロック内で必要なものだけを記述します。ブロックの最後には、ブロックの終わりを示す区切り文字(多くの場合;
またはEOB – End Of Block)を付けます。制御装置はこの文字を見て、そのブロックの読み込みを完了したと認識します。
例:
N10 G01 X50.0 Y30.0 F200 ;
* N10
: ブロック番号10
* G01
: 直線切削送り(指定された送り速度で移動)
* X50.0
: X座標50.0まで移動
* Y30.0
: Y座標30.0まで移動
* F200
: 送り速度は200 (mm/min または inch/min)
* ;
: ブロックの終わり
例2:
N20 M03 S1500 ;
* N20
: ブロック番号20
* M03
: 主軸正転開始
* S1500
: 主軸回転速度は1500 rpm
* ;
: ブロックの終わり
3.4 モーダルなGコード
Gコードには、大きく分けて「モーダルなコード」と「非モーダルなコード」があります。
- モーダル (Modal): 一度指定すると、別の同じグループのGコードが指定されるまで、その状態が継続されるコードです。例えば、G01(直線切削送り)を指定すると、次にG00(早送り)やG02/G03(円弧送り)が指定されるまで、全ての移動命令はG01として解釈されます。これはプログラムを簡潔にするために重要です。
- 非モーダル (Non-modal): 指定されたブロック内でのみ有効なコードです。例えば、G04(ドゥエル:一時停止)は、そのブロックで指定された時間だけ機械を停止させますが、次のブロックには影響しません。
モーダルなコードの例:G00, G01, G02, G03, G17, G18, G19, G20, G21, G40, G41, G42, G43, G44, G49, G80, G90, G91 など。
非モーダルなコードの例:G04, G28, G92, G94 など。
プログラムを作成する際は、どのコードがモーダルかを理解することが重要です。例えば、G01を指定した後、送り速度Fを指定せずに複数の直線移動ブロックを続ける場合、最初のG01とF値が有効であり続けます。しかし、G00で早送り移動を挟んだ場合、次に送り加工を行う際はG01とF値を改めて指定する必要があります。
第4章:必須のGコードとMコード
ここでは、NCプログラムを作成・理解する上で最も基本的なGコードとMコードをいくつか紹介します。制御装置によって番号や機能が多少異なる場合がある点に注意してください。
4.1 基本的な移動に関するGコード
-
G00
: 位置決め(早送り)
指定された座標まで、可能な限り速い速度(機械の最大送り速度)で移動します。切削を行わない、工具をワークまで近づけたり遠ざけたりする際に使用します。軌道は直線とは限りません(各軸が独立して最速で移動するため、合成された軌道は曲がることがあります)。
例:G00 X100.0 Y50.0 Z10.0 ;
-
G01
: 直線切削送り
指定された座標まで、F
コードで指定された送り速度で直線移動します。切削を行う際に最もよく使われるコードです。
例:G01 X150.0 Y80.0 F300 ;
-
G02
: 円弧切削送り(時計回り)
指定された終点座標まで、F
コードで指定された送り速度で時計回りの円弧を描いて移動します。円弧の中心点をI
,J
,K
で指定するか、半径をR
で指定します。I
: 現在位置から円弧中心までのX軸方向の距離J
: 現在位置から円弧中心までのY軸方向の距離K
: 現在位置から円弧中心までのZ軸方向の距離
例 (I, J使用 – XY平面):G02 X200.0 Y80.0 I20.0 J0.0 F250 ;
(現在の位置からX+20.0の点が円弧中心)
例 (R使用):G02 X200.0 Y80.0 R20.0 F250 ;
(半径20.0の円弧) – R指定は半円以下の短い円弧に適しています。
-
G03
: 円弧切削送り(反時計回り)
G02
と同様ですが、反時計回りに円弧を描いて移動します。
例 (I, J使用 – XY平面):G03 X100.0 Y130.0 I0.0 J30.0 F250 ;
(現在の位置からY+30.0の点が円弧中心)
4.2 座標系に関するGコード
-
G90
: アブソリュート指令
全ての座標値が、プログラムの原点(ワーク座標系原点)からの絶対的な距離として解釈されます。NCプログラムで最も一般的に使用される座標指令方式です。
例: 原点が(0,0)の場合、G90 G01 X50.0 Y30.0 F200 ;
は原点からX方向に50.0、Y方向に30.0の点へ移動します。 -
G91
: インクレメンタル指令
全ての座標値が、現在の工具位置からの相対的な距離として解釈されます。パターン加工など、同じ相対移動を繰り返す場合に便利です。
例: 現在位置が(20,20)の場合、G91 G01 X30.0 Y10.0 F200 ;
は現在の位置からX方向に+30.0、Y方向に+10.0移動し、新しい位置は(50,30)になります。 -
G54 ~ G59
: ワーク座標系選択
機械には独自の機械座標系がありますが、加工の際は通常、ワーク(加工対象物)の特定の位置を原点とする「ワーク座標系」を設定します。これらのGコードは、あらかじめ機械の制御装置に登録しておいた複数のワーク座標系の中から、現在使用するものを選択します。G54
が最も一般的に使用されます。
例:G54 ;
(登録されているG54の座標系を有効にする) -
G28
: 機械原点へ自動復帰
基準点(通常は機械原点)を経由して、工具を機械原点に戻します。工具交換やプログラム終了時によく使われます。安全な中間点を経由するように指定することが推奨されます。
例:G28 G91 Z0 ;
(Z軸のみ機械原点に戻る – 現在位置から機械原点までZ軸方向のみをG91で指定)
例:G28 Z0 ;
(FANUCスタイルではZ軸単独での戻りも可能。制御装置による)
4.3 平面選択に関するGコード
円弧補間(G02, G03)や固定サイクル(G81など)を実行する際に、どの2軸平面で動作を行うかを指定します。
G17
: XY平面選択 (フライス加工で最も一般的)G18
: XZ平面選択G19
: YZ平面選択
例:G17 ;
(以降の円弧やサイクルはXY平面で動作)
4.4 その他重要なGコード
G20
: インチ入力 (Inch Input)
プログラム内の全ての数値(座標値、送り速度など)をインチ単位として解釈します。-
G21
: ミリ入力 (Metric Input)
プログラム内の全ての数値(座標値、送り速度など)をミリメートル単位として解釈します。プログラムの冒頭でどちらかを必ず指定します。
例:G21 ;
(以降、ミリメートル単位で処理) -
G40
: 工具径補正キャンセル
有効になっている工具径補正(G41, G42)を解除します。 G41
: 工具径補正(左)
工具の進行方向に対して、刃物半径分だけ左側にオフセットして加工経路を生成します。主に外形加工でワークの寸法通りに加工するために使います。-
G42
: 工具径補正(右)
工具の進行方向に対して、刃物半径分だけ右側にオフセットして加工経路を生成します。主に内径加工やポケット加工で使います。
これらの補正を使うためには、制御装置のオフセット画面に工具の半径値を登録し、プログラムでD
アドレスと補正番号(工具番号と同じ場合が多い)を指定する必要があります。補正は通常、G01で座標を移動するブロックで開始・キャンセルします。 -
G43
: 工具長補正(プラス方向)
工具交換によって生じる工具長さの違いを補正します。制御装置に登録した工具長オフセット値(Hコードで指定)を、現在位置(通常Z軸)に加算して、プログラム上のZ座標を実座標に換算します。工具長補正は、工具がワークに近づく前に、安全な高さで有効にします。
例:G43 H01 Z100.0 ;
(工具長補正H01を有効にし、Z軸のプログラム座標100.0を計算) -
G49
: 工具長補正キャンセル
有効になっている工具長補正(G43, G44)を解除します。 -
G80
: 固定サイクルキャンセル
有効になっている固定サイクル(G81, G83など)をキャンセルします。 -
G81, G82, G83, G84 など
: 固定サイクル
ドリル加工、タップ加工、ボーリング加工など、繰り返し行う一連の動作(早送り接近 → 加工送り → 引き上げ → 次点へ移動)を、少ないブロックで記述するための機能です。これらのGコードを使うと、穴位置(X,Y)、穴深さ(Z)、送り速度(F)、リトラクト高さ(R)、ドゥエル時間(P)、ステップ量(Q – G83等)を指定するだけで一連の動作を実行できます。非常にプログラムが簡潔になります。
例:G81 X50.0 Y50.0 Z-10.0 R2.0 F100 ;
(ワーク座標(50,50)に、Z=2.0からZ=-10.0まで、送り速度100でドリル加工)
4.5 基本的な機械機能に関するMコード
M00
: プログラム一時停止
プログラムの実行を一時停止します。再開するには機械のスタートボタンを押します。段取り替えや確認などに使います。M01
: 任意プログラム停止(オプションストップ)
機械の制御盤にあるオプションストップスイッチがONの場合のみ、プログラムが一時停止します。スイッチがOFFの場合は無視されます。検査やバリ取りなど、必要に応じて停止させたい箇所に使います。M02
: プログラム終了
プログラムの実行を終了します。機械は動作を停止しますが、プログラムの先頭には戻りません。-
M30
: プログラム終了およびリセット
プログラムの実行を終了し、制御装置をリセット状態に戻します。プログラムポインタは先頭に戻ります。繰り返し加工の際に、最後のブロックとして最もよく使われます。 -
M03
: 主軸正転開始
主軸(工具を取り付ける軸)を正転させます。回転速度はS
コードで指定します。
例:M03 S1200 ;
(主軸を正転で1200 rpmで回転開始) -
M04
: 主軸逆転開始
主軸を逆転させます。タッピング加工などで使われます。 -
M05
: 主軸停止
主軸の回転を停止させます。工具交換やプログラム終了前に使います。
例:M05 ;
-
M06
: 工具交換
指定された工具番号(T
コードで指定)の工具に交換します。工具交換のシーケンスは機械によって異なりますが、このMコードがその動作をトリガーします。
例:T02 M06 ;
(工具番号02に交換) -
M08
: クーラント供給開始
切削油(クーラント)の供給を開始します。切削点の冷却や切りくず排出を助けます。
例:M08 ;
-
M09
: クーラント供給停止
クーラントの供給を停止します。工具交換やプログラム終了前に使います。
例:M09 ;
これらのコードは、CNC加工を行う上で最も頻繁に使用され、基本となるものです。まずはこれらのコードの意味と使い方をしっかり理解することが、NCプログラム習得への第一歩となります。
第5章:NCプログラムの作成に必要なその他の要素
NCプログラムはGコードとMコードだけでなく、正確な加工を行うためにいくつかの重要な概念を理解する必要があります。
5.1 座標系と原点
CNC工作機械は、必ず何らかの「座標系」に基づいて動作します。基本的な座標系は以下の2つです。
-
機械座標系 (Machine Coordinate System):
機械メーカーが設定した、機械固有の不動の座標系です。通常、機械の基準点(機械原点、リファレンスポイントとも呼ばれる)が原点となります。機械の電源を入れた後、必ず「原点復帰」という動作を行い、機械座標系を確立する必要があります。この座標系は機械のメンテナンスや設定に使われますが、実際の加工プログラムでは通常使いません(G28などの特殊な場合を除く)。 -
ワーク座標系 (Work Coordinate System):
加工対象物(ワーク)上の特定の位置を原点とする座標系です。プログラム内の座標値(X, Y, Z)は、このワーク座標系原点からの距離を意味します。ワーク座標系原点は、ワークの角、中心、基準穴など、加工しやすい場所に設定します。制御装置には複数のワーク座標系(G54~G59など)を登録でき、プログラムで切り替えて使用します。これにより、段取り替えを容易にしたり、1つのプログラムで複数のワークを加工したりできます。
オペレーターは、加工前にワークを機械に固定し、設定したワーク座標系原点の機械座標系上での位置を測定し、その値を制御装置のワークオフセットパラメータ(G54~G59など)に登録する必要があります。これにより、制御装置はプログラム上のワーク座標を機械座標に自動的に変換して機械を動かします。
アブソリュート指令 (G90) と インクレメンタル指令 (G91):
前述の通り、座標値の解釈方法にはG90(アブソリュート:ワーク座標原点基準)とG91(インクレメンタル:現在の位置基準)の2種類があります。プログラムのどの部分でどちらを使うか、意識的に切り替えることが重要です。特にG91を使う場合は、現在の工具位置を正確に把握しておく必要があります。
5.2 工具補正 (Tool Compensation)
CNC加工では、様々な種類の工具を使用し、同じ工具でも摩耗によって寸法が変化します。これらの工具の物理的な特性と、プログラム上の理想的な経路との差を補正するのが工具補正機能です。主な工具補正には以下の2種類があります。
-
工具長補正 (Tool Length Compensation):
異なる長さの工具を使用しても、プログラム上のZ座標値が一定であれば、同じ高さで加工できるように補正する機能です。各工具について、基準工具(または機械の基準面)からの長さの差を測定し、その値を制御装置の工具長オフセットパラメータ(Hコードで指定)に登録します。プログラムでG43 Hxx Zxx ; のように指定することで、制御装置がZ軸のプログラム座標にオフセット値を加算して実際の移動量を計算します。これにより、工具交換のたびにプログラムを修正する必要がなくなります。 -
工具径補正 (Cutter Diameter Compensation):
特にミーリング加工において、工具(エンドミルなど)の実際の直径と、プログラムで指定した経路との差を補正する機能です。例えば、工具径がφ10mmの場合、プログラムで線分を指定すると、工具の中心がその線分上を移動します。しかし、外形加工でワークの「外側」を削って指定寸法にする場合、工具の中心はワークの輪郭から工具半径分だけ離れた位置を移動する必要があります。工具径補正(G41/G42)を使うと、プログラム上の経路をワークの輪郭線として記述し、制御装置に登録した工具半径値(Dコードで指定)を使って、工具中心の移動経路を自動的に計算させることができます。これにより、工具径が設計値と多少異なっていても、補正値を変更するだけでワークの寸法を正確に加工できます。また、仕上げ代を残して加工し、最後の仕上げで補正値を変更するといった使い方もできます。
工具補正は、高精度な加工や段取り時間の短縮に不可欠な機能です。プログラムでG41/G42やG43/G44/G49を適切に使用し、制御装置のオフセット値を正確に管理することが重要です。
5.3 送り速度 (Feed Rate, F) と 主軸回転速度 (Spindle Speed, S)
-
送り速度 (F):
工具が材料を切削しながら移動する速度です。単位は通常、[mm/min](ミリメートル/分)または [inch/min](インチ/分)です。切削条件(材料、工具の種類、切込み量など)によって適切な送り速度が決まります。速すぎると工具が破損したり加工面が悪化したりし、遅すぎると加工時間が長くなったり構成刃先ができやすくなったりします。G01, G02, G03といった切削送りのGコードと組み合わせて使用します。一度指定すると、別のF値が指定されるまでその速度が有効になります(モーダル)。
例:G01 X100.0 F300 ;
-
主軸回転速度 (S):
工具を取り付けた主軸が回転する速度です。単位は通常、[min^-1](回転/分、rpm)です。適切な回転速度は、工具径、材料、工具材質などによって決まります。S
コードで回転速度を指定し、M03
(正転)またはM04
(逆転)で主軸の回転を開始します。一度指定すると、別のS値が指定されるかM05で停止されるまでその速度が有効になります(モーダル)。
例:M03 S1500 ;
これらの速度パラメータは、加工品質、工具寿命、加工時間といった加工効率に直結する非常に重要な要素です。適切な切削条件は、工具メーカーのカタログや切削条件ハンドブックなどを参考に決定します。
第6章:NCプログラムの基本的な構成と書き方(実践編)
ここでは、実際のNCプログラムがどのような構成になっているか、簡単な例とともに見ていきましょう。基本的な構成要素は以下の通りです。
- プログラム番号 (Program Number)
- 安全ブロック (Safety Block)
- 工具交換・主軸起動 (Tool Change & Spindle Start)
- 接近・位置決め (Approach & Positioning)
- 加工ブロック (Machining Blocks)
- 後処理・復帰 (Post-processing & Retract)
- プログラム終了 (Program End)
6.1 プログラム番号 (O####)
NCプログラムの最初のブロックには、プログラムを識別するための番号を記述します。通常はアルファベットのO
に4桁または5桁の数字を続けます。
例: O0001 ;
(プログラム番号1)
6.2 安全ブロック (Safety Block)
プログラムの冒頭には、どのような状態からプログラムが開始されても安全に動作するための「安全ブロック」を記述することが推奨されます。これは、直前のプログラム終了時の機械の状態(GコードやMコードのモーダル状態)に影響されないように、加工に必要な基本的な設定を一度リセット・再設定する役割があります。
一般的な安全ブロックに含まれる要素:
G21
またはG20
: 単位系の指定(ミリかインチか)G17
またはG18
またはG19
: 平面の選択G40
: 工具径補正のキャンセルG49
: 工具長補正のキャンセルG80
: 固定サイクルのキャンセルG90
: 座標指令方式をアブソリュートに設定(インクレメンタルを使う場合でも、通常はここでG90にしてから必要に応じてG91に切り替えます)- その他: G17/G18/G19グループ以外のモーダルなGコード(例: G94/G95 送りモード)なども必要に応じて含めます。
例: G21 G17 G40 G49 G80 G90 ;
6.3 工具交換・主軸起動
使用する工具に交換し、主軸を回転させます。
例:
T01 M06 ;
(工具番号01に交換)
G43 H01 Z100.0 ;
(工具長補正H01を有効にし、Z軸をプログラム座標100.0まで早送り)
M03 S1800 ;
(主軸を正転で1800 rpmで回転開始)
(安全な位置で主軸回転が安定するのを待つためのドゥエル: G04 P500; ミリ秒指定の場合)
Z軸の早送りは、工具長補正を有効にした後に行うのが一般的です。Z軸の基準高さは、加工の邪魔にならず、工具交換ができる安全な高さにします。
6.4 接近・位置決め
主軸が回転を開始し、工具長補正も有効になったら、加工開始位置の近くまで早送り(G00)で移動します。このとき、ワークに工具がぶつからないように、ワークの上方など安全なZ高さでXY平面上の位置に移動し、それからZ軸を加工開始高さや切り込み開始高さまで下ろすのが一般的です。
例:
G00 X50.0 Y30.0 Z10.0 ;
(XY座標(50,30)の、Z=10.0まで早送り)
G00 Z2.0 ;
(Z軸をワーク上面近くのZ=2.0まで早送り)
6.5 加工ブロック
ここから実際に材料を切削するブロックになります。G01、G02、G03を使って工具を移動させ、指定の形状を加工します。送り速度(F)や主軸回転速度(S)は、必要に応じて変更します。クーラント(M08)もこの辺りでONにします。
例:
M08 ;
(クーラントON)
G01 Z-5.0 F150 ;
(Z軸方向に-5.0まで、送り速度150で切り込み)
G01 X100.0 F200 ;
(X方向に100.0まで直線切削送り)
G01 Y80.0 ;
(Y方向に80.0まで直線切削送り – F値は前のブロックの200が有効)
G02 X80.0 Y100.0 R20.0 F250 ;
(半径20.0の円弧切削送り)
G01 X50.0 Y80.0 F200 ;
(直線切削送り)
G01 Y30.0 ;
(直線切削送り)
(その他の加工動作...)
6.6 後処理・復帰
加工が終了したら、工具をワークから安全に引き上げ、必要に応じて次の工具交換位置やプログラム終了時の待機位置に移動します。
例:
G00 Z10.0 ;
(ワーク上方のZ=10.0まで早送りで引き上げ)
M09 ;
(クーラントOFF)
G00 Z100.0 ;
(さらに安全なZ=100.0まで引き上げ – 次の工具の長さを考慮)
G28 G91 X0 Y0 Z0 ;
または G28 Z0 ;
(機械原点復帰 – 安全な中間点を経由させる指定が重要)
M05 ;
(主軸停止)
G91 G28 X0 Y0 ;
(Z軸原点復帰後、XY軸を機械原点に戻す別の方法)
機械や制御装置によっては、G28の動作が異なるため、マニュアルを確認してください。G28 G91 Z0 ; はZ軸だけを機械原点に戻し、XYは現在のインクレメンタル指令での0移動、つまりその場に留まる、という動作になります(制御装置による)。安全な位置に戻すためには、G28の前にG00で安全なXY位置に移動しておくか、G28を複数ブロックに分けるなどの工夫が必要です。
6.7 プログラム終了
プログラムの実行を完全に終了させます。
例:
M30 ;
(プログラム終了とリセット)
簡単な穴あけプログラム例(全体):
“`gcode
O0001 ; (PROGRAM NUMBER 1)
(TOOL: DIA 10MM DRILL)
G21 G17 G40 G49 G80 G90 ; (SAFETY BLOCK: METRIC, XY PLANE, CANCEL COMP, CANCEL CYCLE, ABSOLUTE)
T01 M06 ; (TOOL CHANGE TO T01)
G43 H01 Z100.0 ; (TOOL LENGTH COMP H01 ON, MOVE Z TO 100.0)
M03 S800 ; (SPINDLE ON, 800 RPM)
G04 P500 ; (DWELL FOR 0.5 SECONDS – SPINDLE STABILIZATION)
G54 ; (SELECT WORK COORDINATE SYSTEM G54)
G00 X20.0 Y20.0 Z10.0 ; (RAPID TO POSITION X20 Y20, Z10.0)
G00 Z2.0 ; (RAPID TO R-PLANE Z2.0)
M08 ; (COOLANT ON)
G81 X20.0 Y20.0 Z-15.0 R2.0 F80 ; (DRILL CYCLE: HOLE AT 20,20, DEPTH -15.0, R-PLANE 2.0, FEED 80)
G81 X80.0 Y20.0 Z-15.0 R2.0 F80 ; (DRILL HOLE AT 80,20)
G81 X20.0 Y80.0 Z-15.0 R2.0 F80 ; (DRILL HOLE AT 20,80)
G81 X80.0 Y80.0 Z-15.0 R2.0 F80 ; (DRILL HOLE AT 80,80)
G80 ; (CANCEL DRILL CYCLE)
G00 Z10.0 ; (RAPID UP TO Z10.0)
M09 ; (COOLANT OFF)
G00 Z100.0 ; (RAPID UP TO SAFE Z HEIGHT)
G91 G28 Z0 ; (RETURN Z TO MACHINE HOME – VIA REF POINT)
G28 X0 Y0 ; (RETURN X Y TO MACHINE HOME)
M05 ; (SPINDLE OFF)
M30 ; (PROGRAM END AND RESET)
“`
この例は基本的な流れを示しています。実際のプログラムでは、コメント(多くの場合括弧()
で囲みます)を入れて、各ブロックの意味を分かりやすく記述することが推奨されます。
第7章:NCプログラムのデバッグとシミュレーション
NCプログラムは機械を直接動かす命令なので、間違いがあると機械の破損、工具の破損、ワークの不良、さらにはオペレーターの負傷につながる可能性があります。そのため、作成したプログラムは機械で実行する前に十分に確認することが不可欠です。
7.1 プログラムの確認ポイント
プログラムを手書きまたはCAMソフトから出力した場合、以下の点を特に注意深く確認します。
- 座標値: 移動したい座標値は正しいか? アブソリュート(G90)とインクレメンタル(G91)の使い分けは正しいか? ワーク原点の設定と合っているか?
- Gコード・Mコード: 使いたい機能のコードは正しいか? モーダルなコードの状態は意図通りか?
- 送り速度・主軸回転速度: 材料、工具、切込み量に対して適切な速度が設定されているか?
- 工具補正: G41/G42/G43/G44/G40/G49は適切な位置で有効/無効になっているか? オフセット番号(D, H)は正しいか?
- 安全な移動: 工具がワークや治具にぶつかる経路を通っていないか? Z軸の引き上げ高さは十分か?
- プログラム構成: 安全ブロックは適切か? プログラムの終了(M30)は最後にあるか?
- 小数点: 座標値などに小数点が必要な箇所に漏れなく付いているか? (制御装置によっては小数点省略時の解釈が異なる)
7.2 シミュレーションソフトウェア
手動での確認に加えて、シミュレーションソフトウェアを使用することが強く推奨されます。シミュレーションソフトは、NCプログラムを読み込み、コンピュータ上で工具の動きや材料からの削り出しの様子を仮想的に再現します。
シミュレーションソフトを使うことで、以下のようなエラーを機械を動かす前に発見できます。
- 工具とワーク、または工具と治具の干渉・衝突
- 意図しない経路での移動
- 加工残りの発生
- 過剰な切込み
- プログラム構文上のエラー(制御装置の解釈とは異なる場合もある)
多くのCAMシステムにはシミュレーション機能が内蔵されており、作成したプログラムをすぐに確認できます。また、NCプログラムの検証に特化した単体のシミュレーションソフトもあります。
7.3 機械での試運転 (Dry Run)
シミュレーションで問題がなくても、実際の機械でプログラムを実行する前には必ず「試運転(ドライラン)」を行います。
- エアカット (Air Cut): 実際に材料をセットせず、工具を交換位置など安全な位置に待機させたまま、Z軸のマイナス方向への移動を制限するか、ワーク上面より十分に高い位置に原点を仮想的に設定して、プログラムを実行します。これにより、XY平面上の移動経路や工具交換のタイミングなどを確認できます。
- シングルブロック (Single Block): プログラムを1ブロックずつ停止させながら実行する機能です。各ブロックの実行内容を細かく確認できます。特に、加工開始前や工具交換後、複雑な形状の加工部分などで有効です。
- 機械のオーバーライド機能: 送り速度や主軸回転速度を制御盤で一時的に変更できる機能です。試運転中は送り速度を下げて実行することで、問題が発生してもすぐに対応できるようにします。
これらのデバッグと検証のプロセスは、安全かつ効率的なCNC加工には欠かせません。
第8章:CAMシステムとGコードの関係
現代のNCプログラム作成において、「CAM (Computer Aided Manufacturing)」システムは非常に重要な役割を担っています。
8.1 CAMシステムとは
CAMシステムは、CAD(Computer Aided Design)で作成された3Dモデルデータなどをもとに、加工に必要な工具経路を自動的に計算し、NCプログラムを生成するソフトウェアです。
CAMを使うことで、以下のようなメリットがあります。
- 複雑形状への対応: 3Dモデルから直接工具経路を生成するため、手書きでは非常に困難な複雑な曲面や3D形状の加工プログラムも比較的容易に作成できます。
- 効率的な工具経路: 切削効率や工具寿命を考慮した最適な工具経路を自動計算できます。
- プログラミング時間の短縮: 手書きに比べて圧倒的に早くプログラムを作成できます。
- シミュレーション: 多くのCAMシステムにシミュレーション機能が内蔵されており、プログラムの検証が容易です。
8.2 CAMシステムとGコード
CAMシステムは、ユーザーが設定した加工条件(使用工具、切削条件、加工方法など)に基づいて工具経路を計算し、最後にその工具経路情報を「ポストプロセッサ (Post Processor)」と呼ばれる機能を使って、特定の工作機械の制御装置が解釈できる形式のNCプログラム(GコードとMコードのファイル)に変換して出力します。
ポストプロセッサは、CAMシステムで計算された汎用的な工具経路データと、特定の制御装置(例: FANUC 0i, Okuma OSP, Haas NGCなど)固有のGコード、Mコード、フォーマットのルールを結びつける「翻訳者」のような役割を果たします。同じ工具経路情報でも、異なるポストプロセッサを通せば、異なる制御装置向けのNCプログラムが出力されます。
CAMシステムが普及した現代でも、GコードとMコードの知識は依然として重要です。
- CAMが生成したプログラムの理解: CAMが出力したプログラムが意図通りになっているか、効率的か、安全かなどを判断するには、GコードとMコードの知識が必要です。
- プログラムの手修正: CAMだけでは対応できない細かい調整や、デバッグ時にプログラムを手修正する必要が生じることがあります。
- 基礎的な加工: 簡単な穴あけや輪郭加工など、CAMを使うまでもないような単純な加工であれば、手書きでプログラムを作成する方が早い場合もあります。
- 問題解決能力: 機械で問題が発生した場合、表示されるエラーメッセージや機械の挙動を理解し、プログラムのどこに問題があるのかを特定するには、Gコードレベルでの理解が役立ちます。
- CAMの設定理解: CAMシステム内の加工設定(アブソリュート/インクレメンタル、座標系、補正の出力方法など)は、Gコードの概念に基づいています。
したがって、CAMシステムのオペレーターであっても、GコードとMコードの基礎知識は必須と言えます。CAMはあくまでツールであり、その出力結果を適切に評価し、活用するためには、その基盤となる「言語」を理解していることが望ましいのです。
第9章:学習のヒントと今後のステップ
初めてNCプログラムやGコードに触れる方へ、学習を進める上でのヒントと、次に何を学ぶべきかの提案です。
9.1 学習のヒント
- 焦らない: NCプログラムは覚えることがたくさんありますが、一つずつ順番に理解していけば大丈夫です。まずは基本的なGコード、Mコード、座標系、補正の概念をしっかり掴みましょう。
- 繰り返し書く・読む: 簡単な形状(直線、四角、丸穴)のプログラムを自分で手書きしてみましょう。そして、既存のプログラムを読み解いて、それぞれのブロックが何をしているのかを理解しようと努めましょう。
- 機械マニュアルを参照する: 実際に使用する工作機械や制御装置のプログラミングマニュアルは、最も正確で詳細な情報源です。最初は難しく感じるかもしれませんが、基本的なコードの説明から読み始めてみましょう。制御装置によってコード番号や機能の詳細が異なる場合があるため、自分の機械のマニュアルは必須です。
- シミュレーションを活用する: 可能であれば、NCプログラムシミュレーションソフトやCAMシステム内蔵のシミュレータを利用しましょう。プログラムの動作を視覚的に確認できるため、理解が深まり、エラーの早期発見にもつながります。
- 実際に機械を操作する: 可能であれば、安全な環境で実際にCNC工作機械を操作してみましょう。機械の動きとプログラムの各ブロックがどのように対応しているかを体験することで、理解度が飛躍的に向上します。最初はエアカットや単純な形状の加工から始めましょう。
- 質問する: 現場の経験者やオンラインコミュニティなど、質問できる相手を見つけましょう。疑問点をそのままにしないことが大切です。
9.2 次のステップ
基本的なGコード、Mコード、プログラム構造が理解できたら、さらに学習を深めることができます。
- 固定サイクル (Canned Cycles): ドリル加工など、繰り返し行う一連の動作を簡潔に記述できる固定サイクル(G81~G89など)は、プログラム作成の効率を大きく向上させます。各種サイクルの機能とパラメータ(R点、Q値、P値など)の使い方を学びましょう。
- 工具補正の詳細: G41/G42の開始・キャンセル方法、D/Hコードとオフセットレジスタの関係、工具径補正の種類(ウェア補正、ジオメトリ補正)など、より実践的な補正の使い方を学びましょう。
- サブプログラム (Subprogram): 繰り返し行う同じ形状の加工などを、別の小さなプログラムとして作成し、メインプログラムから呼び出して使用する機能です。プログラム全体の構造化と効率化に役立ちます。
- 変数・マクロ (Variables / Custom Macro): FANUC制御装置のカスタムマクロ(#変数を使ったプログラミング)のように、変数や条件分岐、繰り返し処理など、よりプログラマブルな機能を持つ制御装置もあります。これを習得すると、複雑な加工や自動化に対応できる高度なプログラムが作成可能になります。
- CAMシステムの習得: 複雑な部品加工を行う場合は、CAMシステムの操作方法を習得することが必須となります。
結論
NCプログラムとGコードは、現代のものづくりを支える基盤技術です。初めて学ぶ方にとっては、多くのコードや概念が登場するため難しく感じるかもしれません。しかし、これらは機械に「どこへ行って、何をしろ」と指示するための、論理的で体系化された命令群です。
この記事では、NC/CNCの必要性から始まり、NCプログラムの役割、GコードとMコードの意味、プログラムの基本的な構成要素、主要なGコードとMコード、座標系や工具補正といった重要な概念、簡単なプログラム例、そしてデバッグとシミュレーション、CAMシステムとの関係までを概説しました。
CNC工作機械を使いこなすには、単に機械を操作するだけでなく、その「言葉」であるNCプログラムとGコードを理解することが非常に重要です。手書きであれ、CAMシステムから出力されたものであれ、プログラムの中身を理解することで、より安全に、より効率的に、そしてより高い品質で部品を加工できるようになります。
この知識が、皆さんがものづくりの世界で活躍するための確かな一歩となることを願っています。根気強く学習を続け、NCプログラムとGコードの世界を楽しんでください。