本文へ移動
サポートシェアリングソリューション
OKWAVE Plus

このQ&Aは役に立ちましたか?

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NCマクロ 固定サイクル中の工具交換)

NCマクロ中の固定サイクルでの工具交換について

2023/10/18 11:23

このQ&Aのポイント
  • NCマクロ中の固定サイクルでの工具交換についてお聞かせください。
  • 例えば、1本のドリルの工具寿命を100穴と設定して、200穴の加工を2本のドリルで行うとします。固定サイクルでの加工中に1本目のドリルで100穴加工したら2本目のドリルに工具交換して続きの座標から加工することは可能でしょうか?
  • 現在はサブプロをドリルの工具寿命穴数分に分けて作成していますが、ドリルの工具寿命穴数いっぱいまで無駄なく使いたいと思っています。皆さんのご意見をお聞かせください。
※ 以下は、質問の原文です

NCマクロ 固定サイクル中の工具交換

2010/01/01 11:39

NCはファナック16iです。

例えば、1本のドリルの工具寿命を100穴と設定して、200穴の加工を2本のドリルで行うとします。
下のような固定サイクルで加工して、1本目のドリルで100穴加工(X100.0Y0.0)したら
2本目のドリルに工具交換して、続きの座標(X101.0Y0.0)から加工させるようなことは
できるでしょうか?

P○○○はドリルステップ加工のマクロです。
この中で、加工穴数をカウントして工具交換できないかなと考えています。

G66 P○○○ Z-10.0 R0.2 F30. K0
M98 P1000
G67

O1000(200穴分の座標)
X1.0 Y0.0


X100.0Y0.0
X101.0Y0.0


X150.0YO.O
M99


現在はサブプロをドリルの工具寿命穴数分に分けて作成して、加工を行っています。ドリルの工具寿命穴数いっぱいまで無駄なく使いたい為、みなさんのご意見をお聞かせ下さい。よろしくお願いします。

質問者が選んだベストアンサー

ベストアンサー
2010/01/04 11:06
回答No.2

こんにちは。
マクロ、こんな感じでしょうかね。
あくまでも参考までに!
O100

#100=0(穴数カウントリセット)
#101=0(ツール番号リセット)
G66P1000Z-30.R3.Q-1.F50T2S600
(Z、R、Q、Fは、固定サイクルと同じ、Tは最初のツール番号あとは1番ずつ増加する、Sは、回転数)
M98P99(サブ番号、穴位置座標を呼ぶ)

M30


O1000(マクロ本体)

IF[#100EQ101]GOTO100(穴数が101ならN100へ飛ぶ)
IF[#100NE0]GOTO200(穴数がカウントされていたらN200へ飛ぶ)

IF[#101NE0]GOTO100(最初のツール番号がセットされていたらN100へ飛ぶ)

#101=#20(最初のツール番号をセット)

N100(ツール交換)

IF[#100NE101]GOTO300
#100=1.0(穴数が101ならば1にリセットする)
N300

G91G28Z0
T#101
M06
G90G00G43Z100.H#101
S#19M03
#101=#101+1

N200

G90G98G83Z#26R#18Q#17F#9
G80
#100=#100+1.0

M99

お礼

2010/01/04 13:36

回答ありがとうございます。
とても参考になりました。がんばってプログラム組もうと思います。

プログラム組んで、機械で動かしてみました。
ATCは30本使用で、工具オフセット(41番から)にそれぞれの工具寿命を入力して、加工穴数と工具寿命の比較をするようにしました。

G66P1000Z-1.0R0.2I-1.0J0.1K20. (ドリルステップ加工マクロ)
M98P2000
G67

P1000の中で寿命判断して、寿命がだったら今の座標を記憶して、工具交換して、座標に復帰してドリル加工スタートといった流れです。

ただ問題がありまして、G66P1000で呼び出したときの引数の値(ローカル変数#1~#33)が工具交換のM06指令で書き換えられてしまうので、一度コモン変数などで記憶させておかなければならないのかなと思います。
また、工具交換でローカル変数を使用する為かM06の指令の中でG66 ON中はエラーを出すようになっていました。

質問者

このQ&Aは役に立ちましたか?

この質問は投稿から一年以上経過しています。
解決しない場合、新しい質問の投稿をおすすめします。

質問する

その他の回答 (4件中 1~4件目)

2010/01/05 22:11
回答No.4

3さんとほぼ同意見。かなり面倒です。


工具ライフの設定、自動交換が可能な機械を使ったことがあります。その仕掛けは次のようなものです。
1.ツールのグループ管理のため、ツールグループNo.、設定ライフ、現在値をシステムパラメータとして持たせる。

2.切削(G1G2G3)1ブロック完了ごとの長さを現在値に加算していく。

3.T**で呼び出すマクロを書く。指令ごとに現在値を設定値と比較してオーバしたなら工具交換動作をして元の位置へ復帰。当然M指令、S指令の切り入りが必要。

4.寿命チエックに正確を期すなら、加工プログラム中でT**を繰返して通す必要がある(寿命以内なら何もしない。NCの処理速度には殆ど影響しない)

F社:16MBの黄色本にオプション機能の『工具寿命管理機能』の概説があります。難解だが参考になります。
それでは2.が時間または呼出し回数となってるようで、機械メーカが独自仕様で造らせているとのこと。

自作するのは可能ですが、、、
1.のパラメータを#500~に割当てる。
2.は回数、時間どちらでもカウンターを定めれば可能。
3.は慎重なデバッグを要する。交換後の復帰動作がXY先移動の後でZ下降で良いか? プログラム作成には、現在座標、グループ毎のGモード、Mの状態など必要事項を保存し、復帰させるテクニックを知ることが必要です。

お礼

2010/01/05 22:20

アドバイスありがとうございます。
みなさんのご意見にあるようにむずかしいようですね。
とりあえず、形だけでも作ってみて現状の方法と比較してみます。
ありがとうございました。

プログラム組んで、機械で動かしてみました。
ATCは30本使用で、工具オフセット(41番から)にそれぞれの工具寿命を入力して、加工穴数と工具寿命の比較をするようにしました。

G66P1000Z-1.0R0.2I-1.0J0.1K20. (ドリルステップ加工マクロ)
M98P2000
G67

P1000の中で寿命判断して、寿命がだったら今の座標を記憶して、工具交換して、座標に復帰してドリル加工スタートといった流れです。

ただ問題がありまして、G66P1000で呼び出したときの引数の値(ローカル変数#1~#33)が工具交換のM06指令で書き換えられてしまうので、一度コモン変数などで記憶させておかなければならないのかなと思います。
また、工具交換でローカル変数を使用する為かM06の指令の中でG66 ON中はエラーを出すようになっていました。

質問者
2010/01/05 11:06
回答No.3

あけましておめでとうございます。

まだ、休暇明けで頭がボーっとしていて自信ないのですが、ご希望のマクロはかなり困難なのではないでしょうか?
穴数のカウントから工具交換、そして復帰動作も当然ながら、プログラムで全て自動で行いたいのですよね?

例えば、あと残り400穴のドリルも使用したとすると、1600穴の加工の場合も工具が3本必要となります。
この場合、1)その工具の寿命穴数、2)1)の工具で加工した穴数のカウント、3)加工した穴数の総カウントと3つの変数が必要になってくると思われます。

ただ、固定サイクル中、もしくはG65等のマクロ呼出し中で工具交換し、穴位置サブの途中からスタートする方法の方が難しいような・・・。
例えば、X90.Y60.の次にX150.Y60.の穴を加工する場合、サブとしては
X90.Y60.
X150.

と通常はプログラムされますが、工具交換後、この間からスタートするには必ずXY出力をするか、一度工具交換前の座標に復帰しなければいけません。
また、復帰方法も座標値の先頭にシーケンスなどを出力しておいて、GOTOで復帰することになる気がします。
そのプログラムイメージがイマイチ、ピンときません・・・。

例えばですが、使用する工具本数分だけ同じサブを用意(サブ番号は別にしておく)し、PC上のエディターで寿命分の穴数に分けるといった編集作業を行うのが、一番確実で簡単な気がします。←回答(1)さんの手法ですね。
これを、秀丸等のマクロ機能がついたエディターで行えば、最初から寿命穴数毎にサブを作成して出力することも可能です。

あっ!言い忘れましたが、マクロをなんとか作成できたとして、それで加工を行う場合と、最初から加工可能穴数毎にサブを分けて用いた場合とでは、後者の方が加工時間が速くなる可能性が高いです。
制御器の能力次第ですが、前者が後者より速くなることはありません。

お礼

2010/01/05 22:20

アドバイスありがとうございます。
みなさんのご意見にあるようにむずかしいようですね。
とりあえず、形だけでも作ってみて現状の方法と比較してみます。
ありがとうございました。

プログラム組んで、機械で動かしてみました。
ATCは30本使用で、工具オフセット(41番から)にそれぞれの工具寿命を入力して、加工穴数と工具寿命の比較をするようにしました。

G66P1000Z-1.0R0.2I-1.0J0.1K20. (ドリルステップ加工マクロ)
M98P2000
G67

P1000の中で寿命判断して、寿命がだったら今の座標を記憶して、工具交換して、座標に復帰してドリル加工スタートといった流れです。

ただ問題がありまして、G66P1000で呼び出したときの引数の値(ローカル変数#1~#33)が工具交換のM06指令で書き換えられてしまうので、一度コモン変数などで記憶させておかなければならないのかなと思います。
また、工具交換でローカル変数を使用する為かM06の指令の中でG66 ON中はエラーを出すようになっていました。

質問者
2010/01/01 15:12
回答No.1

>>現在はサブプロをドリルの工具寿命穴数分に分けて作成して、
>>加工を行っています。
現在の方法がわかりやすくて手っ取り早いと考えます。


加工穴数をカウントして工具交換を行なうには、コモン変数と
マクロを用います。

<一例>
・最初に#501=1.をプログラムの冒頭で宣言
・1穴加工するごとに#501=#501+1.でカウント
・1穴加工するごとに変数チェックIF[#501EQ100]GOTO200して
 N200で工具交換&#501=1.を再宣言(色々な手法有り)
この場合、穴加工の1ワーク分の座標も、X[#502] Y[#503]の
ようにコモン変数にするとプログラミングしやすくなるでしょう。
但し、ドリルが途中で折れて再開する場合などにテクニックが
必要となります。

手元にマニュアルがなかったので、答えを端折りましたが
回答(2)さんんと同じイメージです。

・寿命穴数
・ツール番号
・加工位置の座標
・加工穴数のカウント
を全てコモン変数に置き換えて、IF文(WHILE文)で巧みに条件設定
すれば、お望みのプログラムは実現可能と考えます。
キチンとコモン変数を管理すれば、ドリル折損などにより中断した
ところから、加工を再開させることもできるでしょう。
FANUCのプログラミングマニュアルに使えそうなマクロ機能や
システム変数が色々と掲載されていますので、頑張ってください!
(私もマクロ文を駆使してマニアックなプログラミングに嵌った
時期がありました...)

お礼

2010/01/04 13:45

回答ありがとうございました。
参考にプログラム組もうと思います。

現在は工具寿命が1本1000穴のドリルで1ワークに1600穴加工だと、2本のドリルが必要でサブプロを2つ(800穴+800穴)作って加工しています。
これだとあと200穴加工できるドリルが2本残って、次に他のワークを加工するときにまたサブプロを組み直すのが大変になるので、加工穴数をカウントしたいと思いました。

ドリル1本の値段が数万円するので、工具寿命いっぱいまで使いきりたい為です。

プログラム組んで、機械で動かしてみました。
ATCは30本使用で、工具オフセット(41番から)にそれぞれの工具寿命を入力して、加工穴数と工具寿命の比較をするようにしました。

G66P1000Z-1.0R0.2I-1.0J0.1K20. (ドリルステップ加工マクロ)
M98P2000
G67

P1000の中で寿命判断して、寿命がだったら今の座標を記憶して、工具交換して、座標に復帰してドリル加工スタートといった流れです。

ただ問題がありまして、G66P1000で呼び出したときの引数の値(ローカル変数#1~#33)が工具交換のM06指令で書き換えられてしまうので、一度コモン変数などで記憶させておかなければならないのかなと思います。
また、工具交換でローカル変数を使用する為かM06の指令の中でG66 ON中はエラーを出すようになっていました。

質問者

お礼をおくりました

さらに、この回答をベストアンサーに選びますか?

ベストアンサーを選ぶと質問が締切られます。
なおベストアンサーを選びなおすことはできません。