• 締切済み
※ ChatGPTを利用し、要約された質問です(原文:サブプロを途中から実行したい)

サブプロを途中から実行する方法

このQ&Aのポイント
  • M98P(プログラムNo)の後に任意のシーケンス番号を付け加えることで、サブプロを途中から実行することが可能です。
  • NCでM98でサブプロへ飛ぶ際、サブプロの先頭からでなく、任意のシーケンス番号から実行させることは可能でしょうか?
  • また、M98でサブプロを実行する際に、M98P(プログラムNo)の後に何か付け加えることで途中から実行することはできるのでしょうか?

みんなの回答

noname#230359
noname#230359
回答No.5

メルダスだけの機能でしょうか。ほかの制御装置では確認してませんが、 おそらくお望みの機能かと思われますので参考までに回答いたします。 M98P****H**** P:プログラム番号 H:シーケンス番号 で、任意のシーケンス番号から呼び出せます。 ちなみにこの機能は、 プログラム番号を呼び出しているメインプログラム番号にする もしくは省略することにより メインプログラムの任意のシーケンス番号から始めることができるので マクロを使わずともメインプログラム内にサブプログラムを配置することができます。 私はサブプログラムもメインプログラムに組み込みたかったのでこの機能を探し出しました。取説にはついてませんでした。 もちろんサブプログラムでも任意シーケンス番号から始められます。 しかし、あくまでメルダスのみの確認です。 O1234(メインプログラム) N1 . . . M98H1000(M98P1234H1000でも可) N2 . . . M98H1001 . . . N3 . . . M98H1002 M30 (同一プログラム内でここからサブプログラム) N1000 . . . M99 N1001 . . . M99 N1002 . . . M99

noname#230359
noname#230359
回答No.4

回答(1)さんで一部正常動作しないと思いますので補足します。 #1はローカル変数ですので、サブプログラム内には引き継がれません。 #100番台または#500以降の空変数を使用する方が好ましいです。 また、いつも同じシーケンス番号なら,ブロックスキップを使用する方法もあります。 操作盤にブロックスキップ等のスイッチが大半は付属していると思います。 スイッチオン・オフで切り替えが可能ですよ。 O1001(SUB) /GOTO100 ... ... ... ... N100 ... ... ... M99 >(1) M98の前にマクロ変数にシーケンス番号を設定しておく方法 >O1000(MAIN) >... >#1=200 >M98 P1001 >... >M30 >O1001(SUB) >GOTO#1 >... >N200 >... >M99

noname#230358
質問者

補足

回答ありがとうございます。 量産NC機で作業者にはブロックスキップの切替はさせない (常に「/」オフ状態で正規動作となるようプログラムする) のがルールとなっているので、 (1)のサンプルPGを参考にさせて頂きます。 余談ですが昔は同一PGの中でブロックデリートの切替によって 穴加工の有無や寸法違い(もう皮削るかどうか)を切替えたり していましたが、作業者のSWの切り替え忘れで大量に不良を作る事故が あるため最近はいじらせないようにルール化してきています。

noname#230359
noname#230359
回答No.3

回答(1)が正解です  なら、回答するなよですが コレは普通に使ってると思っていました。 サブプロは一個でいいんですよね O111(サブ) N1 ・ ・ ・ GOTO999 N2 ・ ・ ・ GOTO999 N3 ・ ・ ・ GOTO999 N999 M99 追記 O111 GOTO#( ) メインでの呼び出し G65で呼び出せば変数の引渡しも一行で済みます

noname#230358
質問者

お礼

回答ありがとうございます。 G65は実際使ったことがないのでやってみます。 サンプルプログラムのGOTO999は単純にM99にしても 同じ動作をしますよね。

noname#230359
noname#230359
回答No.2

できそうな気もしましたが、、、、回答(1)が正解。 飛ぶときでなく戻り M99 で指定のシーケンス番号に行けます。 ---- ---- M98P200 ---- ---- N20---- ---- N30---- ←戻る位置 ----    ↑  ---- O200 ---- M99P30  ↑ ---- 回答(1)は合ってます。回答(4)の指摘は誤解。 (1)M98でサブプログラムを起動すると、#1のローカル変数はそのままサブプログラムに引き継がれるから使える。 (2)G65でマクロ呼出しをして引数渡しをしている。   G65 P2001 A200 A→200を引数としてサブプログラムに渡しており、サブプログラム内のローカル変数 #1 に200が入った状態からスタート。したがって正常に動く。 メインプログラムの#1とサブプログラムの#1とは別物。 引数渡しをしないで、#100番台または#500以降のコモン変数を使うのは感心しないプログラムスタイルです。 回答(3) ?????

noname#230358
質問者

お礼

回答ありがとうございます。 戻り時のシーケンス番号指定は使っているのですが もしかしたら行きも出来ないかなと思いましたが マクロを使わないと駄目なようですね。

noname#230359
noname#230359
回答No.1

カスタムマクロを使わないと出来ませんね。 カスタムマクロを使う場合には2通りの方法があります。 (1) M98の前にマクロ変数にシーケンス番号を設定しておく方法 O1000(MAIN) ... #1=200 M98 P1001 ... M30 O1001(SUB) GOTO#1 ... N200 ... M99 (2) G65の引数としてシーケンス番号を設定する方法 O2000(MAIN) ... G65 P2001 A200 ... M30 O2001(SUB) GOTO#1 ... N200 ... M99 どちらの場合でも引数(変数)チェックは適宜に行なって下さい。

noname#230358
質問者

お礼

回答ありがとうございます。 やはりマクロを使わないと駄目なんですね・・ サンプルプログラムは参考にさせて頂きます。 現場にはマクロが付いてない機械もあり、 これは諦めます。

関連するQ&A