サブプログラムについて

このQ&Aのポイント
  • サブプログラムには座標系を指定しないほうが都合が良いですが、複数の加工をする場合にどのような動きになるか分かりません。
  • 通常は一個だけの加工を行う場合はG54座標系を使用しますが、G55座標系に対する動きを理解していません。
  • 質問者はサブプログラムをメインプログラムとして使い、G54やG55座標系を適切に戻しておくことができるのか疑問に思っています。
回答を見る
  • ベストアンサー

サブプログラムについて

メインプログラムにG54等の座標系を指定すれば、他の座標系が指定されない限りモーダルで動くのでしょうか。 だとすれば、メインプログラムで座標系を変えて、サブプロはG90で座標系指定のないプログラムとして、一つだけにしてよいのでしょか。 例) O0001 G54G9OGOXOYOZ100. M98P0002 G55G9OGOXOYOZ100. M98P0002 M30 O0002 G80G40G49  G91G28G0Z0 T1 M6 G90G0X0Y0 ←座標系を設定しない ・ ・ ・ M99 それとも、サブプロにも座標系を入れて、別々にしないといけないのでしょうか。 そうすると、同じプログラムなのに加工する個数ぶん必要になってしまいますが・・・ もしG54、G55・・・がモーダルなら、つぎに使用するときにG54を指定して戻しておかないとないとG55のままになっているということでしょか。 普段は、サブプロをメインプロとして単品加工をし、夜間に無人加工するために部品を2~3個セットして、メインプロを別に設定してO0002をサブプロとして呼び出して使用したいというのがねらいです。 そのために、サブプロにG54等の座標系を入力しておかないほうが、都合が良いからです。 プロ編集なしでO0002をG54でもG55としてでも使用したからです。 通常は一個だけなので芯だしはG54で行います。 O0002に座標系を入力しなければG54中心で動きますが、G55を使用したことがないため、以上のような2個以上の加工をしようとすると、どのような動きになるのか分かりません。 わかるかたいましたら、教えてください。

noname#230358
noname#230358

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

  • ベストアンサー
noname#230359
noname#230359
回答No.1

> メインプログラムにG54等の座標系を指定すれば、 > 他の座標系が指定されない限りモーダルで動くのでしょうか。 Yes > だとすれば、メインプログラムで座標系を変えて、 > サブプロはG90で座標系指定のないプログラムとして、一つだけにしてよいのでしょか。 Yes お考えの方法で問題無いと思いますよ。 > O0001 > G54G9OGOXOYOZ100. > M98P0002 > G55G9OGOXOYOZ100. > M98P0002 > M30 メインプログラムの G54G9OGOXOYOZ100. の部分はちょっと気になりますね。 工具長補正が基本的にかかっていないので、 Z100.で干渉しなければ良いのですが... サブプロの中身を見ると、メインプログラムでの G9OGOXOYOZ100. 無くても問題無いと思います。 従って O0001 G54 M98P0002 G55 M98P0002 M30 の方が安全でしょう。 実機を使って確認出来るようでしたら、実際に思い通りに動くか試してみて下さい。 こうやってまた迷信が広まっていくのかなぁ。 パラメータ設定次第で如何ようにも動作が変わってくる物を、 そのパラメータも確認せずに機能の違いを説いた所で 実際にそうなるかどうか、分からないでしょうに。 たまたまそういう機械が有ったとしても、他の人の機械がそうだとは限らない。 例えばFANUC系の機械の場合、N3404#5が1になっている場合に プログラムエンドをM02にしているとリワインドされない為に 一々手動操作にてリセット&リワインド信号を送らねばならず面倒。 同様にM30の場合もパラメータ設定次第ではM02と同じ事になる。 一般的にはM30ではリワインドするようにするが、M02は機械によってばらばら。 ある機械はリワインドしないし、別の機械ではM30と同じ扱いになっている。 主流がどちらなのかは、そこまで沢山の機械を扱っていないので不明。 何れにしてもこの業界には迷信・都市伝説が多すぎて辟易する。

noname#230358
質問者

お礼

御指導ありがとうございます。 さっそくテストしてみます。

その他の回答 (1)

noname#230359
noname#230359
回答No.2

(1)さんのご回答で問題は完璧に解決済ですね あと、これは好き好きにもなりますが、小生はメインプログラムの お終いはM02にしています なんかの拍子にオートリスタートの機能がオンしていると、M30の後に 再度プログラムが走ってしまうからです (これで何回かイタイ思いをしました) ちょっと蛇足まで M02 プログラム終了 文字通りプログラムが終了し機械は停止し、その状態を維持します 自動起動ボタンを押しても動きません 従って、加工→ワーク交換→加工→...の連続作業の場合、毎回 プログラムを呼び出してから自動起動する必要があります 自動電源遮断機能がONの場合、電源が落ちます M30 リセット&リワインド リセットボタンを押したのと同じ効果で、モーダルは解除され初期状態 に戻ります(うろ覚えなので間違っていたらごめんなさい) また、プログラムの先頭に巻戻りますので、自動起動ボタンを押したら、 始めから再スタートします 従って、加工→ワーク交換→加工→...の連続作業の場合、いちいち プログラムを呼び出す必要がありません また上述の通り、オートリスタート機能がONであれば、自動的に再スタート しますので、横形マシニングセンタにおいてAPCしてワークを入れ替えて 連続加工するときにも用います またゼロさんに叱られた... パラメータで如何様にもなるとすれば、M02とM30の使い分けは 混乱の極みで、却ってユーザは困惑するような気がしますが、 工作機械メーカは業界で標準化することを極端に嫌うから致し方 ないのでしょうか。 都市伝説や風説の流布のつもりは毛頭ありませんが、古い知識で 余計な回答をしてはいけませんね、以後気を付けます。 質問者さん) 混乱させて申し訳ございません

noname#230358
質問者

お礼

M02とM30の使い分け方をご存知でしたら教えて頂けませんでしょうか。 お願いします。

関連するQ&A

  • サブプログラム とマクロについて

    OSG HPからダウンロードできるプラネット加工用のプログラム作成 ソフトで、プラネット加工のプログラムを出力すると メインプログラム例(ABS)とサブプログラム例(INC)が出力されます。 一穴加工用で 穴の座標は0,0として出力されています。 よって、ABSの 方を使うと座標を加工物の座標に合うように足し算していかないといけないので、間違いの元なので、  座標における足し算をしなくてもいいインクリ指令であるサブプログラム例の方を利用 しようと思います。まず質問ですが、 マクロでやる場合は 機械の中にそのマクロ用のプログラムをメインプログラムとは別に0番号を決めて入れ込まないといけなく、 サブプログラムの場合は メインプログラムの中にサブプログラムを書いたらよかったですね。 というのはOSGのソフトで出力されるプログラムはネジの長さ 材料 工具 下穴 Mいくつのタップを開けるかで毎回ちがってくるので、 マクロでやるとその違うプログラムをたくさん機械に別のプログラムとして いれるのはややこしく感じ、 サブプログラムで対処したら毎回違うプログラムをOSGソフトで出力したあとそれをメインの中に貼り 付けてやればいいだけなので、そっちの方が簡単だと思ったのです。 一回の加工で穴中心座標が違ういくつかの 同じ径の下穴に対してタップをするので、 同じタップ深さ 同じM というのが基本です、 だから 穴中心座標への誘導だけメインでやって、サブでタップ部を加工 するのが一番シンプルだとおもっているのです。 プラネットタップ品名 PNGT 呼び10*25*P1.5 工具径10 めねじM16*1.5  下穴φ14.5 ネジ長さ15 切削速度20m 送り0.03mm/min アップカット 下穴の中心座標が x30Y-30   X60Y-30 X90Y-30 の三つとするとき OSGのソフトで出力した サブプログラム例(INC) の方を変えないで、 穴中心の移動だけをメインでやる場合  どのようなプログラムがシンプルになるでしょうか? 今思うのは 穴中心の移動をメインで行い 穴中心からM98P@@ 穴中心へのメインでの移動 穴中心からM98P@@ しかわからないのですが、 もっとシンプルに出来るように思うのです

  • G52使用・不使用の判断

    エンドミルで円弧加工させる際に、G52を使用して座標移動させて行っています。下のようなプログラムです。プログラム作成でG52を入れ忘れてしまった場合、座標移動されずに加工原点(X0.0Y0.0)で加工してしまいます。 それを防ぐために、サブプロ(O1000)内でG52が使われていなかったらアラームで止まるようにしたいのですが、G52を使用しているかしていないかの判断はカスタムマクロで可能でしょうか? M98P1000はG52とセットで使用しています。O1000を呼び出すときにG52を使わないときはありません。 知恵を貸していただきたいです。よろしくお願いします。 O10(MAIN) G52X10.0Y10.0 M98P1000 G52X-10.0Y10.0 M98P1000 G52X0.0Y0.0 M30 O1000(SUB) X0.0Y0.0 G01Z-2.0F10. G41G01Y-3.0F5. G03J3.0 G03J3.0F10. G40G01Y0F50 G00Z10.0 M99 すいません。書き忘れたのですが、NCはファナック(21i)です。

  • ファナックのプログラムについて

    前まで、6年前にでた森精機の機械を使っていました。 プログラムはファナックでした。 その機械は同じプログラム内にサブプログラムを入れて加工することが出来たのですが、最近転職して20年ぐらい前のMCを使っています。 それもプログラムはファナックなのですが、同じプログラム内にサブプログラムを作って加工出来ません。 自分なりに調べて見て、無理とは書かれていたのは見つけたものの納得出来ず投稿しました。 昔の機械なので容量も少なくプログラムもあまり入れておけません。 リピート品やるときは、メインとサブプロを全部転送しなおしてやっています。 非常に不便です。 前は同じプログラム内にサブプロがあったので、メインだけ転送すれば大丈夫でした。 マクロ、変数、何を使ってもいいので、どなたかわかるかたいませんでしょうか? 同じプログラム内にサブプログラムを作り加工したい感じです。 前まで作っていたのは O100 メイン M30 N10 サブプロ M99 こんな感じでO100に全部入れて作っていました。 よろしくお願いいたします。

  • NCデータでの座標定義について

    NCプログラムの初心者です。NCプログラムに詳しい方どうか教えてください。 下の方にNCデータのソースの一例を記入しております。 その中で、パートAを行1~5、パートBを行6~25と定義します。 ●パートAは、加工原点からみて機械原点の距離は(+100,+100)。加工原点を(0,0)と定義したい。 ●パートBは、加工原点を(?X,?Y)と定義したい。 (パートAとは相対的に(+?X,+?Y)ずらした位置で加工したい。) 上記のようにしたいのですが、パートBの冒頭でG91G00?X?Yとしても、その後、G90の絶対座標系で動いているので、 だめかな、と思います。それともG92で定義し直すのでしょうか。。 パートB部分全体をパートA部分で定義した加工原点からある値をずらした加工原点で加工するには、 ひとつのNCデータ内でどのように定義すればよろしいのでしょうか? #ちなみに座標定義は下記です。 ・水平方向:右→左をプラスX方向 ・垂直方向:下→上をプラスY方向 1 O1000 :メインプログラムO1000 2 G92X100.Y100.Z0. 3 G90G00Z10. 4 M98P4003 :サブプロO4003呼び出し 5 G90G00Z0. 6 G54G90 :ワーク座標系G54(現在オフセット値は0,0) 7 G17G40G00X140.Y42.S18M13 8 M11 9 G01Z-40.F6000 10 G64G43H27Z-63.F2000 11 G41D25X130. 12 X50.F3000 13 G42X80. 14 Y70. 15 G41Y42. 16 X-993. 17 Y22. 18 X-1360.F3000 19 G40X-1325.Y-10.F6000 20 M98P5555 :サブプロO5555呼び出し 21 G91G01G49Z63.F5000M92 22 M95 23 G91G28X0Y0M07 24 M31 25 M30 お手数ですが宜しくお願い申し上げます。

  • M198サブプロ呼び出しのメインプログラムのついて

    ファナック製ロボドリルを使っています。 制御盤は16iになります。 通常はCAD/CAMにて作成したNCデータを DNC運転しているのですが、メインになるデータ をメモリー内に置き、M198にてサブプロ呼び出し にてCAD/CAMのデータを運転したいと考えています。 例えば下記のようなサブプロをデータサーバーに置き メインプログラムから 「X方向に100mm移動しながら2回繰り返す」 と言った指令を出すには、メインプログラムには どの様な記述をしたら良いのでしょうか? NC言語が殆ど分からないので、教えてください。 m(__)m サブプロ ---------------------- % O1000 G80G40G17 G91G28Z0 (T1/ENDMILL /4.0) G49T1M06 G90G54G00 G90G17G00X7.0Y0.0 G17G43Z5.0H1 S8000M03 M50 G01Z-1.0F1000 G02I-7.0F500 G00Z5.0 M09 M05 G91G28Z0 G28X0Y0 G49 M99 % ----------------------- 一応、自分なりに考えてみたのが メインプログラム ------------------------ % O2000 G80G40G17 G91G28Z0 G49 G90G54G00 M198P1000 G91G28Z0 G49 G90G54G00 X100. M198P1000 G91G28Z0 G49 G90G54G00 X100. M198P1000 M30 % ---------------------- と、こんな感じで良いのでしょうか? …ダメですよね。 ^^; お忙しいとは思いますが、お時間が取れる方が居ましたら 教えて頂けると助かります。 宜しくお願いします。

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

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

  • 上下異形状ワークを連続取りするためのプログラム作…

    上下異形状ワークを連続取りするためのプログラム作成方法  始めまして初投稿になります。なにとぞご教授願います。  早速ですが質問させていただきます。まず使用機械はブラザー工業のHS-70A(ワイヤー径0.25)で、CAD/CAMは浜松合同のナスカワイヤー等となります。  ワークは長さ530,厚み90のSKS3に60ピッチで上23.5,下12.5,深さ63.5の四角錐を6個あけるというものです。1個分のプログラムは問題なく作れましたが夜間無人運転を考えておりまして,連続加工用のプログラムは出来ないものかと試行錯誤しましたがどうにも上手く出来ない状況です。  今まで汎用フライスを半年,そして突然ワイヤーをあずけられ,毎日どうにか作業して参りましたが,NCも不慣れで困惑しております。CAD/CAMの講習は2日受けましたが,サブプロやサイクルプログラムについては一切講習は受けておりません。取説を読んでもプログラム前後の流れが書いておらずどうつないで良いか全く分かりません。マシニングセンタのベテランさんに聞いても見慣れないGコード等もあるため良い結果はでませんでした。通常の外形加工などはCAD/CAMで加工軌跡を複写すれば複数取プログラムを作ることができます。サブプロやサイプロを使って組みたかったのですが講習で来られた方に「容量が大きいのでメインプログラムだけでの羅列で大丈夫ですよ。」と言われてしまったので今までやらなかったのですが,上下異形状のCAMには軌跡複写がなく単体のみの加工しか出来ないのでしょうか?もし軌跡複写出来メインプログラムだけで作成したら恐ろしく長いプログラムになるのは分かっておりますが。  他に試したのはCAMで作った1個の加工プログラムの動きをサブプロとして,それぞれのスタートホールをワーク座標系(G54~59)に指定して,各穴で同じ動きをさせるように試みましたが,全く上手く行きませんでした。またサイプロは取説を読んでも全く理解できませんでした。GコードやMコードの指定方法や座標系の設定ミスかもしれませんが,複数取り加工が可能かだけでもご教授願います。  大変長くなってしまいましたが皆様のお知恵をお貸し頂ければ幸いです。 休み明けにメーカーにも問い合わせてみますが,担当者不在等なことが多く,また裏技などお持ちの方はやはり現場の方と思い投稿してみました。

    • ベストアンサー
    • CAM
  • NCマクロからのサブプログラム呼び出し

    マクロの勉強中です。 使用機械 森精機 NH5000DCG 制御装置 fanuc30i マクロの実行についての質問ですが、 G65P0000X0Y0・・・・・とサブプログラムの呼び出しで Pで指定したサブプログラムをファイルとして用意しないで メインプログラムに記述して実行するというプログラムを 目にしました。 KST32B-FO-LM という文字刻印マクロプログラムです。 サンプルファイルの記述は以下です。 *********************************************************************** (X:#24:文字の中心のX座標・省略時=現在位置 ) (Y:#25:文字の中心のY座標・省略時=現在位置 ) (R:#18:Z方向 R点・省略不可 ) (Z:#26:Z方向 終点・省略不可 ) (I:#4 :横方向の倍率[全角文字は29mm、半角文字は15mmに対する倍率]・省略時=1.0) (J:#5 :縦方向の倍率[全角半角文字共に31mmに対する倍率]・省略時=1.0 ) (E:#8 :Z方向の切削送り速度・省略時=F/2.0 ) (F:#9 :XY方向の切削送り速度・省略不可 ) O0001 G91G30Z0 T1M6 G54G90G0X0Y0 S1000M3 G43H1Z100.0 Z3.0 G65P1309X0Y0R3.0Z-0.2I0.3J0.3F100 G65P4836X10.0R3.0Z-0.2I0.3J0.3F100 G65P1023X20.0R3.0Z-0.2I0.3J0.3F100 G65P1012X25.0R3.0Z-0.2I0.3J0.3F100 G65P1016X30.0R3.0Z-0.2I0.3J0.3F100 G65P1016X35.0R3.0Z-0.2I0.3J0.3F100 G65P1016X40.0R3.0Z-0.2I0.3J0.3F100 G65P4589X50.0R3.0Z-0.2I0.3J0.3F100 G65P3245X60.0R3.0Z-0.2I0.3J0.3F100 G65P1538X70.0R3.0Z-0.2I0.3J0.3F100 G65P3861X80.0R3.0Z-0.2I0.3J0.3F100 G65P2309X90.0R3.0Z-0.2I0.3J0.3F100 G65P1310X100.0R3.0Z-0.2I0.3J0.3F100 G0Z300.0M5 G91G30Z0 M30 O1012(CD=002C) #1=#4001 #3=#4003 IF[#9EQ#0]GOTO1 IF[#18EQ#0]GOTO1 IF[#26EQ#0]GOTO1 IF[#18LE#26]GOTO1 IF[#4EQ#0]THEN#4=1 IF[#5EQ#0]THEN#5=1 IF[#8EQ#0]THEN#8=#9/2 G90G0X#24Y#25 Z#18 G91X[-1*#4]Y[-8.5*#5] G90G1Z#26F#8 G91X[-1*#4]Y[-2*#5]F#9 X[-1*#4]Y[2*#5] X[1*#4]Y[2*#5] X[2*#4]Y[-2*#5] X[-1*#4]Y[-3*#5] X[-3*#4]Y[-3*#5] G90G0Z#18 G91X[4*#4]Y[14.5*#5] G#1G#3 GOTO2 N1#3000=1 N2M99 *********************************************************************** デモ版lance for windows というシュミレーションソフトで動きを見てみますと動作しています。 実際に加工機にかけてみてみればいいのですが、 その前にどなたかこういったサブプログラムの記述の仕方をお使いになって いらっしゃいましたらアドバイスをお願いいたします。

  • G65を使ったプログラムについて

    使用機械 森精機(旧日立精機?) モデル vs60 O4200 G65P4201A100 G65P4201A200 M30 O4201 GOTO#1 N1 加工プログラム N2 加工プログラム M99 上記のようにサブプログラムにN100、N200のように加工プログラムを2つ記入している状態です。 メインプログラムにて、G65A100(A200)と引数指定にてN100とN200を読み出したいのですが、GOTO#1を読み込んだ瞬間に、   不明なシーケンス番号です のようなアラームが出てしまい止まってしまいます。 GOTO#1を IF[#1EQ100]GOTO100 IF[#1EQ200]GOTO200 と変えても指定したシーケンス番号まで飛んでくれません。 他の質問者様の回答に *************************************** サブプログラム O9000 GOTO #1 GOTO9999 N1 動作プログラム1 GOTO9999 N2 動作プログラム2 GOTO9999 N9999 M99 *************************************** このプログラムが記載されていましたので。参考に作ってみたのですが,,, わかる方いらっしゃいましたらお力添え頂ければと思います。 よろしくお願いします。

  • マシニングセンターで回転をさせたい

    いつもお世話になります。 立型マシニングでワークを3個取り(加工は3個同じ加工) で加工していますが、ピッチが基準に対し回転方向へずれて います。 3個同じ加工なのでサブプロで加工してますが サブプロが3個必要となります。(プログラムの座標をなおすため) 簡単に回転させることは出きるでしょうか? 旋盤のC軸みたいに簡単になおせたらいいのですが。 よろしくおねがいします