NCプログラムの構成は、大きく分けると2種類にわける事ができます。
一つは加工に必要な準備機能で、もう一つは、実際の加工経路の動作指令です。
さらに、マシニングセンターを対象にすると、準備機能は4つに分ける事ができます。
CAMのポストプロセッサを編集する場合やプログラム全体の構成を検討する際、この基本構成から検討していけば、複数の機械を使用する場合に互換性を持たせやすくなります。
準備機能指令と加工経路指令
加工経路指令
加工経路指令は、主にGコードのページで説明したような、実際の工具の動きを定義する部分です。
使用される指令(Gコード)はかなり少なく、移動先の座標値が主ですね。
% O0402 (T=T02, D=8.00) G90G00G17 Z50. X0Y150.65 Z3. G90G01Z-6.99F1050 G41X2.5Y154.98D01F300 G03X0Y155.65I-2.5J-4.33 G02X-32.502Y159.641J134.35F1120 X-50.886Y168.633I11.842J47.496 G03X-58.513Y170.962I-6.823J-8.691 G02X-68.09Y180.562I-.652J8.927 G03X-72.281Y191.868I-14.409J1.088 G01X-75.372Y194.959 ・ ・ G02X32.502Y-130.359I-39.048J29.518 X0Y-134.35I-32.502J130.359 G03X-2.5Y-135.02J-5. G40G01X0Y-139.35 G00Z50. X0Y0 M99 %
上は、ファナック機用の実際の加工データの一部ですが、このように実際の加工経路を指令するコードは
- 「G90/G91」の座標系の指令
- 「G17/G18/G19」の平面指定
- 「G00/G01/G02/G03」の移動指令
- 「G40/G41/G42」の工具径補正
この程度です。
基本のコードばかりなので、この加工経路指令の部分は、機械の種類や制御機が違ってもかなり互換性は高いです。
おそらく、 オークマOSP やソディックの制御機など国産の機械では、 「%」や「M99」 の違いがありますが、 基本部分はそのまま使用できると思います。
さらに、ハイデンハインのISOコードやレダースでも若干の修正で使用できます。
ただし、穴あけなどの、「固定サイクル」は互換性は低いです。
ファナックとOSPでも違いがあります。
また、EU機の場合、円弧補間の(I , J , K)のデフォルトが一般的な「インクリメンタル/相対値」でなく「アブソリュート/絶対値」の場合もあるので注意が必要です。
明示的にどちらを使用するかの指令はあるとは思いますので、事前の調査は必要ですね。
このように制御機により若干の違いはありますが、同じ制御機であれば、同じプログラムが使用できます。
準備機能指令
これは工具の動きではなく実際の加工に必要な準備をさせる指令の集まりです。
マシニングセンターであれば、主軸に使用工具を装着したり、回転させたり、工具長補正を完成させたり、クーラントのON・OFFなどです。
この部分は、機械への依存度が高いため、互換性は少ないです。
同じファナックの制御機であっても、機械メーカーや機械仕様によって指令コード番号が違います。
補助機能とも呼ばれる「Mコード」での指令が多いですが、この「Mコード」はユーザー側でもカスタマイズが可能なので同じ機械でも、部署や担当者により違いが出てくる可能性があります。
% O6412(PARTS-02 CAVITY V33 2020/01/01 ) G90G00G17G40G80G49 <------- デフォルトとキャンセル G54 <------- ワーク座標系 N0001 ( N0001 T01 DIA = 8.000 ) T01 <------- 工具指示 M06 <------- 工具交換 G90G00X0Y0 G43Z50.H01 <------- 工具長補正 S4000 <------- スピンドル回転数 M03 <------- 回転指令 M07 <------- クーラント G04X30. <------- 暖機 ・ ・ <------- 実際の加工経路 ------------------- ・ M09 <-------- クーラント停止 G91G28Z0 <-------- Z軸退避 G49 <-------- 工具長補正キャンセル G90M05 <-------- 回転停止 M30 <-------- 終了 %
上の例では一般的なコードを使用したので、ファナック機であれば互換性は高そうですが、「ワーク座標系」「工具長補正」「クーラント」などの指令は制御機や機械仕様により変わってきます。
特に、「クーラント指令」は、同じ機械メーカー、同じ制御機であっても指令コードが違う場合が多いのでかなり厄介です。
また、コード的には同じでも、使用者(会社・部署)によって出力の順番が違う場合もあります。
例えば、工具を回転させる場合、暖気を考慮すれば工具交換後すぐに回転させたい場合もあれば、危険を考慮すれば加工近くまで移動した後に回転させたい場合もあります。
クーラントも、冷却水状態が安定してから加工したい場合、早めに吐き出したいかもしれません。
逆に、工具が高い位置で出してしまうと、冷却水の周辺への飛び散りなど周りへの影響を気にする場合もあるかもしれません。
このように、準備機能は、機種によるコードの違いと共にユーザーの経験や考え方でも違ってきます。
逆に考えると、ノウハウの対応や数種類の機械を使用する場合、この部分は機械依存で用意する必要がありますが、この準備機能指令と工具経路指令を分けて構成する事で比較的簡単に、違う機種でも動作させる事ができそうです。
準備機能指令 を4種類に整理
さらにマシニングセンターを対象に、準備機能指令を考えてみると、全体の最初と最後、各加工工程の前後で4種類に分類できます。
例として、このように分割してみましょう。
「全加工の始まり:Header.nc」
「全加工の終わり:Footer.nc」
「加工工程の前 :ProcessStart.nc」
「加工工程の後 :ProcessEnd.nc」
「全加工の始まり:Header.nc」 % O「番号」(コメント) G90G00G17G40G80G49 G「ワーク座標番号」 (初期暖気など、最初のみやらせたい指令)
「加工工程の前 :ProcessStart.nc」 N「工程番号」 ( NO.「工程番号」 T「工具番号」 DIA = 「工具径」 必要なら工具情報など) G「ワーク座標番号」 T「工具番号」 M06 G90G00X0Y0 G43Z50.0H「工具長補正番号」 S「回転数」 M03 M「クーラント指令」 G04X「暖気時間」
( ここに、実際の加工経路プログラムを置く )
「加工工程の後 :ProcessEnd.nc」 M09(Coolant off) G91G28Z0 G49 G90M05
「全加工の終わり:Footer.nc」 (自動掃除など、加工終了のみやらせたい指令) M30 %
こんな感じでしょうか。
この構成の「加工工程の前・後」の間に、加工経路指令のNCプログラムを挿入すれば、マシニングセンターでの自動加工プログラムの完成ですね。
メイン・サブ プログラム方式
もちろん上記のように、「加工工程の前・後」の間に、加工経路指令を直接挿入してもいいですが、「加工経路指令」部分をサブプログラムとして呼びだす方法もあります。
こちらのほうが、「機種依存」だけのプログラムになるので、より読みやすくなります。
上の説明のように、「加工経路指令」は互換性が高いですから、この部分をサブプロとして、互換性の低い「準備機能指令」をメインプロとしてこのメインから呼び出す構成にします。こうする事で、多機種に対応したい場合、メインプロのみ機種依存に応じたデータを用意すればよく、管理も楽になります。
さらに「加工経路指令」部分は、複雑になれば手作業での作成は難しいのでCAMのお世話になる事が多いですが、メインプロだけであれば、テンプレートを作成しておき、少しの編集で作成可能です。
下の例でも、編集箇所はそれほど多くないのがわかります。
% O6412(PARTS-02 CAVITY V33 2020/01/01 ) G90G00G17G40G80G49 G54 N0001 T01 <---------- 使用工具に番号に変更 M06 G90G00X0Y0 G43Z50.H01 <---------- 使用工具長補正番号に変更 S4000 <---------- 使用回転数に変更 M03 M07 <---------- 使用クーラントに変更 G04X30. ・ M98P2000 <-- 実際の加工経路 この部分をサブプロ化し呼び出す ・ M09 G91G28Z0 G49 G90M05 M30 %
メインプロのみ、エディタなどで作成すれば、互換性の高いサブプロ部分は、CAMの標準的なポストプロセッサで出力できますから、最小限のポストプロセッサで、複数の機械を動作させる事ができます。
M98・M198 / ファナック、サブプロ呼び出し
ファナックでは、サブプロ呼び出しに、「M98 / M198」を使用します
このMコードに、サブプログラムのファイル名を付加して指令します。
二つの違いは、サブプログラムを保存している制御機内の場所になります。
基本的にメインプログラムはメモリー内に登録して実行しますが、「M98」は、メインプログラムと同じメモリーの場所に保存してあるNCプログラムを呼び出します。
「M198」は、メモリとは別に、ハードディスクなど補助記憶装置に保存してあるNCプログラムを呼び出します。
昔はファナック制御機のメモリ容量を増やすのはかなり高価でしたが、3D加工が主流になりプログラム容量が大きくなるにつれて、補助記憶装置を設備する場合が多くなっていると思います
サブプログラムのファイル名
基本的には、ファナックは「O番号」と呼ばれる番号でプログラムを識別するのでその番号と同じファイル名を使用します。
例えば、プログラム番号を「O1234」とした場合、サブプログラムのファイル名も「O1234」とします。
その後、「O」を「P」に変更し、このメインプロに「M98 P1234」の指令をする事で、その箇所にサブプログラムを挿入する事ができます
また多くは、「O」+「数字4桁」という制限があり、4桁の番号で加工プログラムを識別しなければいけません。
なんとも厄介な仕様ですが、制御機によってはファイル名で呼び出せる機種もあります。
こちらであれば、かなりわかりやすいです。
「< >」内に、ファイル名を書いて呼び出しが可能な機種もあります。
こちらであれれば、ファイル管理はかなり楽になりますね。
(例) M198 <Running.nc>
ただし、ソディックの場合は、「< >」でなく「( )」になります。
またまた、面倒ですね~。いじめです!
M99
通常NCプログラムの最後は「M30(もしくはM02)」ですが、サブプログラムの最後は、「M99」にしなければいけません。
完成された一連のNCプログラムを使用する場合には、そえほど問題になりませんが、既存のプログラムを使用して、多数個や多品種加工に対応したい場合、かなり面倒です。
サブプログラムだけでも加工ができる場合、メインプログラムとして使用したいですが、最後の「M99」をそのままにすると、永遠にプログラムを繰り返す事になります。
また、逆にメインプログラムを別のプログラムから呼び出して、サブプログラムとして使用したい場合、最後の「M30」をそのままにすると、そこで終了してしまい、呼び出し元に戻ってきません。
ちなみに、ハイデンハインもレダースも、メイン・サブの違いはありません。
ハイデンハインは「END PRM 」が終了コードですし、レダースはすべてが「M30」です。
まとめ
機械が増えてきて、同じ制御機でもバージョンが変わってきたり、機械メーカー独特の指令が増えてきたりすると、NCプログラムの管理も大変になってきます。
ポストプロセッサでの対応でどうにかなりますが、CAM作成時に加工機械が決定されていない場合、機械の種類だけポストを準備して数種類のNCプログラムを作成しなくてはいけません。
このメイン・サブ方式にすることで、メインプログラムのみを複数作ることで対応できます。
メインプログラムは、エディタ編集やエクセルのマクロでも作成可能です。
私は、ファナックとOSPの機械は、基準のメインプロデータのみ作成し、変換ソフトで複数の機械へ対応させる方法で運用しています。
メイン・サブ方式のほうが変換ソフトを開発する場合でも、作成しやすいです。
コメント