マシニング系NCデータの話。Gコードとは一体。

注:自分の備忘録なので、正確さを保証するものではありません。怪しいものはすべてメーカー説明書が正です。

世の中には、工作機械というものがあります。工作機械にはいろいろなものがあり、例えば以下のようなものがあります。
・旋盤
・フライス盤
・ターニングセンタ
・マシニングセンタ
・レーザー加工機
・ワイヤ放電加工機
etc.
この記事では「マシニングセンタ」に関するNCデータ全般を他者に説明するときに必要なことを書きます。前提として、マシニングセンタがどういうものかは軽く知っておく必要があるかもしれません。また、切削工具(エンドミルとかドリル)のことも多少は知識が必要かもしれません。たぶん。知らんけど。

NCデータとは

NCデータは、ISO 6983で定義されている機械の数値制御の定義に基づいて作成される数値制御プログラムです。……わからないですね。
NCとはNumerical Control (数値制御)の略で、使用するアドレスと座標などのパラメータを使用します。……やっぱりわからないですね。

簡単に言えば、「工作機械を動かすための命令」のことです。工作機械は人間(あるいはCAMソフト)が入力したNCデータのとおりに動きます。逆に言えばなにも指示しなければなにもしてくれません。
機械が理解できる形式で「こう動いてください」と指示をするデータがNCデータです。人によっては「プログラム」というかもしれません。「機械のプログラム」といった場合はほぼ間違いなくNCデータを指しています。

例えば、以下のような文字列がNCデータです。

O1234(CENTER DRILL)
G91 G28 Z0.
G90 G00 G40 G17
M06 T01
N001
G90 G54 G00 X-10. Y-10.
G00 G43 Z50. H01
M03 S3000
Z10.
G98 G81 Z-2. R2. F50. L0
X-10. Y-10.
X-30.
G80
M05
G00 Z50.
G91 G28 Z0
M30

はい。なんですか、これ。理解できるわけないじゃないですか。
とはいえ、こんな謎文字列になったのは理由があります。NCという概念が作られたのがいつなのか、というのを考えると納得できるかもしれません。

NCデータの歴史

歴史などと言っても大した話はありません。NCの研究が始まったのが1940年代後半らしいです。実用化は1950年代とのこと。その頃のコンピュータは現代のそれより遥かに性能が低く、読み込むデータの文字数はギリギリまで削る必要がありました。そもそもフロッピーのような記憶媒体などまともにない時代です。せっかく作ったNCデータをどうやって保存するか。まさかの紙でした。紙テープと呼ばれるものに規則に沿って穴をあけることで、NCの保存を行っていました。2020年代では信じられないですが……紙テープ、現役で動いてるの見たことあります。
そう、NCデータがこんななのは、「字数を節約するため」なんですね。たぶん。
現代ではデータサイズなんてあまり気にしなくていい時代になりました。それでも、今更このNCデータという規格を辞めるに辞められないのでしょう。たぶん。

各アドレスについて

さて、ここからが本題。NCデータの中身についてです。大前提として、半角英数字しか扱えません。近年の制御装置は漢字もひらがなも読めるものも多くなりましたが、ここではないものとして扱います。
NCデータは原則"アルファベット1文字+数値"で表現されます。「X100.0」とか「G01」とかです。このアルファベット1文字のことをアドレスと呼びます。数値の部分は「数値」です。この2つがひっついたら「ワード」と呼びます。まずは、アドレスについてです。つまり、頭につくアルファベットの意味についてです。


G機能(Gコード)

G機能は「準備機能」と言われます。普通は「Gコード」といいます。名前はともかく、切削工具を動かしたりモード切替えをしたり穴あけをしたり、かなり多様な機能です。
すべてを覚えるのは困難なので、小テストで出そうな範囲だけ紹介します。

G90とG91
NCデータには座標値が伴います。例えば「X100.0移動しなさい」という指令が出たとしましょう。
このときに、「決まった位置(原点)からみたX100.0の位置」を指すのがG90です。アブソリュート(絶対値)指令といいます。
もうひとつは「今いる位置から見てX100.0の位置」という考え方です。G91で、インクレメンタル(相対値)指令といいます。
この2つはモーダルなGコードです。モーダルなGコードとは、別のコードで上書きするまで有効であり続けるGコードです。つまり、一度指令すればモードを切り替えるまで指令する必要はありません。逆に、現在G90の状態でもう一度G90と指令しても構いません。
反対に、その行の間だけ有効なものは「ワンショット」といいます。

G00~G03
実際に工具が移動する指令です。テストがあれば確実に出題されます。
・G00→位置決め
高速で指定された座標まで移動します。機械の出せる最大速度で動きます。このときの移動は最短距離とは限りません。これは後ほど。

・G01→直線補間
指定された座標まで指定された速度で移動します。実切削ではこれを使います。「G90 G01 X100.0 Y100.0 F1000」であれば、「現在位置から、原点からみてX100.0Y100.0の座標まで毎分1000mmの速さで移動しなさい」という意味になります。G00もそうですが、「G01」だけ指令するとなにも起きません。G00~G03もモーダルなので、この後に座標値だけ指令しても移動します。

G01
X100.0 Y100.0 F150
Z50.0

上記の記述も有効です。でも、F値を移動が発生する行かそれより前に指令しないと機械に怒られます。G01は「指定された速度で」移動するので指定がないとダメ、ということです。

・G02とG03→円弧補間

G01は直線の移動でしたが、G02とG03は円弧状に移動します。G02が時計回り、G03が反時計回りです。これらの円弧補間では、行き先の座標(XYZ座標)と、円弧の中心or円弧の半径が必要です。……へ?わからない?……ですよね。Gコードの説明、とりあえずこれで終わるのでもうちょい頑張ってください。

・円弧補間に必要なアドレス
早速、実例を見ましょう。見ないと始まらないので。

G90 G00 X0 Y0            ……高速でX0Y0へ移動(移動後X0Y0Z???)
G00 Z5.0                 ……高速でZ5.0へ移動(移動後X0Y0Z5.0)
G01 Z-1.0 F300           ……毎分300mmの速さでZ-1.0へ移動(移動後X0Y0Z-1.0)
G03 X100.0 Y100.0 R50.0 ……半径50mmの円弧でX100.0Y100.0へ反時計回りに移動(移動後X100.Y100.Z-1.0)
G00 Z50.0                ……高速でZ50.0へ移動(移動後X100.0Y100.0Z50.0)

こんな感じです。……わからないですよね……最初教わったときは自分もわかりませんでした。まあ、あの、雰囲気だけでも感じていただければ……詳しくはメーカー様の説明書見てください。

M機能

M機能は補助機能と言われます。Mコードと呼ばれます。Gコードとなにが違うかと言われると……だいたい同じな気がします。ちょっと使用するための条件が違ったりするんですが、それは今は忘れましょう。
主軸の回転やクーラント吐出制御やプログラムの終了、工具交換など、実切削ではない部分を制御すると思っても問題ないと思います。多分。

M00とM01
M00はプログラムストップといいます。強制的に動作停止されます。機械のスタートボタンを押すと動作を再開します。M01は機械でオプショナルストップ機能が有効(そういうスイッチがON)のとき、M00同様に動作停止します。加工時に動作を止めて加工の仕上がりを確認するときなどに使います。

M02とM30
プログラムの終了です。どちらも同じ意味です。どちらを使用しても構いません。厳密にはちょっと違いますが、今のところ同じと思っていて構いません。

M03、M04、M05
M03が主軸正転、M04が主軸逆転、M05が回転停止です。M03とM04は、事前に(あるいはM03M04と同じ行で)回転数を指定する必要があります。回転数は「S」で指令できるので、「M03 S2000」といったように指令します。「毎分2000回転で主軸正転させろ」という意味になります。M05で止めるまで回り続けます。

M06
M06は工具交換です。今主軸についている工具から別の工具に自動交換するときに使います。工具の呼び出しは「T」を使用します。「M06 T2」であれば、2番に格納されている工具と現在主軸についている工具を交換しろ、ということになります。

M08とM09
クラーラント(切削液)のONです。OFFはM09です。第2クーラントは……メーカーによって、機械によってどのMコードなのかがバラバラなのでまたの機会にしましょう。

こんな感じです。Gコード同様もっとあるんですが、とりあえずということで。

SとかFとかTとか

アドレス「S」は主軸回転数を指定します。S1000といえば毎分1000回転です。これも周速一定とかいろいろあるんですが、とりあえず毎分n回転です。

アドレス「F」は送り速度を表します。毎分〇〇mmとなります。これも毎分送り(G94)と毎回転送り(G95)があるんですが……だいたいマシニングはG94で毎分〇〇mmの人が多いですので、そういうふうに覚えてもいいと思います。多分。

アドレス「T」は工具選択です。ATC(オートツールチェンジャー)に格納されている工具を呼び出すときに使用します。「T1」で1番のポッドに格納されている工具を呼びます。たいていの機械は呼ぶだけで交換はしません。実際の工具交換動作は「M06」で行います。
このとき、「M06 T1」のように同じ行で指令すると、T1の工具を呼び出し、交換まで行います。ある工具で加工中に「T10」などのように指令すると、交換位置まで移動して待機状態にしてくれます。
※ATCの形式によってはそうではない場合、機械メーカーがカスタマイズしていると「M06」以外で工具交換が行われる場合があります。あくまで、古くからある作法としては「M06」が工具交換ということです。

アドレス「H」と「D」は工具補正番号です。切削工具は長さも直径も様々です。なので「この工具の長さは○○mmです」とか宣言しておく必要があるんですね。それが「H」と「D」です。「H」が工具の長さの補正量です。Heightですね。「D」が工具径の補正量です。普通工具の半径をセットします。半径なのでRadiusのはずなんですが、なぜでしょうね。DiameterのDぽいですね。Rは別の意味で使うからなのでしょう。

アドレス「N」はシーケンス番号といいます。本のページ番号のようなものです。使わないくてもいいです。1ずつ増えなくてもいいです。10ずつでも100ずつでも増やせます。

あとはアドレス「O」ですね。プログラム番号を指します。O1234とか、O+4桁数字である場合が多いです。

それ以外の主なルール

・座標値の単位はmmです。「100.0」とか「100.」であれば100mmです。が、「100」と入力すると「100/1000」mmとなります。小数点の有無は大問題です。うっかり抜けると全く違う座標値になります。
※コントローラーのメーカーや型番や設定によっては小数点なしでもいい場合があります。

・NCデータの中でコメントをつけることができます。半角カッコ「(」と「)」で囲えばOKです。カッコのなかにもうひとつカッコを入れるとアラームになります。

・同じグループ(例えば、G00とG01)を同じ行に書いてはいけません。もし書いた場合はより後ろにあるものが有効になります。「G00G01G02X0Y0」と書いてしまったら、G02が有効です。でもやっちゃダメです。ややこしいから。

以上が、本当に大雑把なNCデータの構成です。

では、例題です。

縦横高さ100mmの立方体の外周をなぞりたい。使用する工具はΦ10のエンドミル、回転は2000回転/分、送りは400mm/分とする。原点は立方体上面中心にあるものとする。

O1000 (RENSHU)
M06 T01
N0001 G90 G00 X60.0 Y0
G43 Z50.0 H01
S2000 M03
M08
Z5.0
G01 Z-2.0 F400
X55.0 Y0
Y55.0
X-55.0
Y-55.0
X55.0
Y0
X60.0
G00 Z50.0
M09
Z300.0
M05
M30

と、こんな感じになります。本当はもっとGコードが必要です。分かる人が見れば原点復帰がないとか、径補正がないとか、平面指定がないとか、長補正もキャンセルしてないとかあると思いますが。とりあえずこんな感じです。雰囲気重視です。

これであなたもNCデータが作れますね!ってなればいいんですが、残念ながら全然足りません。こんな雰囲気なんだへぇーくらいで御の字です。

そしてこれは私の備忘録なので役に立たない可能性は高いです。でもネットの海は思ったよりNCの話が漂っていないので……なんででしょうね?

おわり。

この記事が気に入ったらサポートをしてみませんか?