Login          

NCプログラム/プログラム構造

NCプログラム/プログラム構造

最近の投稿は、覚書きとしても残しておきたかったので、素人ながらLinux系の投稿が連続していましたが、今回は気分を変えて、今まで携わってきたNC関連の記事を書こうと思います。

NCプログラムとは?

NC工作機械のコントローラへの指令の集まりです。
プログラムとありますが、ファナック系は基本的には命令コードの羅列ですね。 通常のプログラミング言語とはちょっと違います。
オプションでカスタムマクロという言語もありますが、分岐や条件判断機能はありますが、変数に制限が多くて一般的なプログラミング言語とは程遠いです。
主要なコントローラは、「Fanuc系」「Heidenhain」「Siemens」「Roeders」などが上げられますが、 構文は全く違います。
  参照( ファナック vs ハイデンハイン vs レダース )
各コントローラの言語構文はぜんぜん違いますが、主なコントローラは基本的な工具経路を指令するGコード構文は理解できるようにはなっています。
ただし、まったく同一ではないので、その違いの知識は必要です。
日本製の工作機械の場合ほとんど「Fanuc系」ですが、その中でも工作機械メーカーによって、「Fanuc」「Meldas」「OSP」「Tosnuc」「Sodick」など、微妙な違いがあり完全な互換性はありません。
さらに、 「 同じFanuc製」「 同じ機械メーカー製」であっても、コントローラの仕様やバージョンによっても一部違いがあり、同じNCプログラムが使用できない場合も多いのでやっかいです。
数種類の機械メーカー製の工作機械を扱う場合、ユーザー側からみるとかなり面倒な仕様ですね。
ただし、補助機能と呼ばれる「工具交換」「冷却装置制御」「コンベア」「吸引器作動」など加工そのものではなく、加工に必要な補助的な部分は機械に依存するので互換性は少ないです。
対して機械に依存しない加工経路を指令する基本的なGコード部分は大きな違いはありません。
まずは、基本的で一番重要な、工具の動きを制御する部分のGコードを理解しましょう。
海外機も含めFanuc以外のコントローラでも動作させられる可能性が増えます。

プログラムの構成

通常コントローラはNCプログラムを1行づつ実行していきます。
その一行を「ブロック」と呼びます。
「ブロック」「ワード」と呼ばれる、コントローラが理解できる単語が集まったものです。
さらに「ワード」は、「半角英大文字」と「数字または数値」が合体したもので、「 半角英大文字 」は「アドレス」と呼ばれます。
アドレス」によって「数字/数値」の部分は、どちらになるか決まります
移動の動作方法を指令する「ワード」は「G」アドレスが主です。
「補助機能」である「M」アドレスなども含めて、基本動作指令を総称してGコード(GCode)と呼ぶ場合もあります。
「数字」と「数値」の違いはなんでしょうか?

「数値」は量を表す値ですが「数字」は「0~9」までの単なる文字です。
NC的には、動作指令の一つで各「ワード」を識別するための文字といえます。
ワード」の中でも、「Gアドレス」のワードは「Gコード/準備機能」と呼ばれ、この指令により次の動作方法を決める一番重要な「ワード」です。
「数値」の場合は、次に変化する量を指令します。
「数値」は、移動する先の座標(X,Y,Zなど)であったり、送り速度(F)だったり、主軸の回転数(S)だったりします。

N0001     G01               X10.123   Y23.567    F2000    <----- ブロック
------------------------------------------------------------
整理番号  直線で移動     X軸座標    Y軸座標    送り速度

この例では、「N」「G」「X」「Y」「F」が「アドレス」です。
「G01」や「X10.123」が「ワード」。
全体の一行が「ブロック」となります。
また、「N0001」や「G01」のような、「アドレス」+「数字」の場合
「数字」は値ではなく、動作の指令を識別するための文字です
また「01」の「0」は主なコントローラからは無意味です。
「G01」と「G1」は同等です。(3DプリンタのGCodeでは文字数が一定でないと、エラーになる場合がありました)
「X」「Y」「F」などは、 「アドレス」+「数値」となります。
「数値」はとしての意味を持ちます。「X」「Y」は各軸の位置情報、「F」はスピード値を指令しています。

ファナックの資料ですが、一部資料を添付します

アドレスはこの他にもいろいろありますが、必要あれば今後追加説明しますがファナック系であればネット上にもたくさん情報はあるので検索してみてください。
基本的にコントローラは、この一行「ブロック」単位で、機械に指令を送り機械を動作させます。

コメント文

コントローラ的には無意味ですが、オペレータへの情報用として、コメント文が用意されています。
コメント文は、コントローラにより違いがあります。
・ファナック系
  「(」から「)」までをコメントとする。
  ただし、FanucとOSPは若干違いがあり、OSPは行を跨がない
  したがって、OSPでは、「(」から行末までをコメントとするが、
  ファナックでは、「)」で閉じるまでコメントとして扱われる。
  また、ソディックの場合には漢字が使用できて便利。
・ハイデンハイン
 「;」文字から行末までをコメントして扱う。
 「*」文字もコメントと扱うが、見出しの意味も持つ
・レダース
 「//」の2文字から行末までコメントとして扱う
 「/*」から「*/」で挟まれた文はすべてコメントとなる
コメント文は必須ではありませんが、うまく使用すると、プログラムが見やすくなります。

「%」ファナックの特殊文字

ファナックの場合、NC指令の始まりと終わりを示す文字として「%」が必要になります。
海外製やOSPの場合には、必要ありません。
紙テープ時代には実際の指令コードの前に、人間が読める文字をパンチする花文字と呼ばれる部分がありましたが花文字と分離するための処理だったのかもしれませんね。

Nアドレス+数字 / シーケンス番号

「N0102」のような「ワード」となります。
動作的には意味を持ちませんが、プログラムを途中から始めたい場合のジャンプキーに使用したり、カスタムマクロという複雑なプログラムでジャンプ先に指定したりします。
番号の桁数や順番、混同も問題ありませんが、ジャンプする場合、上の行から検索されます。
全ての「ブロック」に連番で使用する場合もありますが、あまり意味がないので必要な箇所のみに、付加する場合が多いです。

Gアドレス+数字 / Gコード

マニュアルには「準備機能」とありますが、実際の工具移動位置を指令する前か同じ行で指令し、主に動作方法を指令します。
移動位置指令と共に一番基本的なコードです。
基本的に位置指令は、「この座標値へ行け」と指令しますが、その位置へ行くのにどのように行くのか?例えば、直線でとか右回り円弧で・・とかのイメージで指令します。
上にも少し触れましたが、移動指令のコードは他の制御機でも互換性を持たせている場合が多いので、基本的なコードを理解しておくと、ファナック以外の機械も動作させる事は可能です。
Gコードについては、また別のページでまとめたいと思います

軸+数値 / X,Y,Z、A,B,C,・・

「アドレス」で移動させる軸を指令し、その後に座標値を繋げます
軸は機械によりさまざまですが、3軸の機械の場合にはX,Y、Z軸が一般的です。5軸機械の場合、さらにA,B,Cのうちどれか2軸が回転軸として追加されます。
さらにワイヤカット放電加工機の場合、U,V軸でワイヤーの傾きが追加される場合もあります。
治具研削盤の場合、U軸を切込み軸として使う場合もあります。

Mアドレス+数字 / Mコード

「補助機能」と呼ばれています。
工具を移動させる指令の前後で、機械へ補助的な動作をさせる指令です。
たとえは、「回転しろ」とか「冷却水を出せ」とか「コンベア起動」などを指令します。
このMコードも加工に必須の指令はファナック以外の制御機でも互換性が高いコードが多いです。

Fアドレス+数値 / 送り速度

機械の構成によって、テーブルが動く場合と工具(主軸)が動く場合がありますが、NCプログラム的には、工具が動いた方向で考え、その時の送り速度を指示します。(Tool Motion)
単位はmm/minで指定し、1分間に工具が動く距離になります。
「F2000」 の指令では、「一分間で2000mmで動け」の指令になります
ただし、実際のスピードが指令値と同じ速さで動くとは限りません。
機械は、動作の始まりと終わりで加減速の影響で指令値よりも遅くなります。
機械によって、同じNCデータで指令しても、加工スピードは変化します。
また、「F3」のように数値が一桁の場合には、 制御機によっては、一桁の数字がパラメータとして理解され、別に設定された数値で動作する場合もあります。
F一桁指令と呼ばれています。

Sアドレス+数値 / 主軸回転数

主軸の回転数です。
一分間の回転数を指令します。
通常、この指令は回転数を設定するのみで、「Mコード」で回転を制御します。
具体的には、M03で正回転(時計回り)、M04で反回転(反時計回り)で回転を実施し、M05で回転を停止します。

Tアドレス+数値 /  工具指定

マシニングセンターの場合、自動で工具交換ができます。
「どの工具を使用するか」を「Tコード」で指定します。
ただし、この指令はファナック系と他の制御機(ハイデンハインやレダース)では若干違います。
ファナックでは、工具番号の指定のみですが、工具交換まで行う制御機もあります。
ファナック系の場合は、「T03」の指令の場合、「工具番号3の工具を準備しろ!」の指令で、実際の工具交換は行われません。
実際に工具交換させるには、「M06」の指令を実行させます。
ハイデンハインの場合は、「TOOL CALL」というコマンドを使用します。
「TOOL CALL 3」のみで「工具番号3」の工具を主軸に持ってきます。
レダースの場合には、「T3」の指令だけで「工具番号3」と交換します
さらに、「TT=(工具の名前)」の指令では、事前に工具に名前をつけておくと、工具番号ではなく、工具名で交換させる事もできます
工具交換した後の状態もファナック系とは違うのですが、詳細は後日紹介しようと思います。

まとめ

NCプログラムは、コントローラの種類によって全く違う構文となりますが工具径路を指令するGコードは、他の制御機でもある程度互換性を持たせています。
「ワード」が集まった「ブロック」を一行づつ機械へ送り、動作(加工)させるための命令の集まりです。
次回はこの「工具経路」を指令するコード部分(Gコード)の説明しようと思います

NCプログラムの記事

1 2 3 4 5 6 7

%d人のブロガーが「いいね」をつけました。