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

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

1人が「役に立った」と評価
締切済み
※ ChatGPTを利用し、要約された質問です(原文:サブプロを途中から実行したい)

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

2023/10/19 06:24

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

サブプロを途中から実行したい

2013/03/13 12:48

いつもお世話になっております。

NCでM98でサブプロへ飛ぶ際、サブプロの先頭からでなく、
任意のシーケンス番号から実行させることは可能でしょうか?

M98P(プログラムNo)の後に何か付け加えると
そういうことが出来たりしないでしょうか?

回答 (5件中 1~5件目)

2013/03/13 21:26
回答No.5

メルダスだけの機能でしょうか。ほかの制御装置では確認してませんが、
おそらくお望みの機能かと思われますので参考までに回答いたします。

M98P****H****

P:プログラム番号
H:シーケンス番号

で、任意のシーケンス番号から呼び出せます。
ちなみにこの機能は、
プログラム番号を呼び出しているメインプログラム番号にする
もしくは省略することにより
メインプログラムの任意のシーケンス番号から始めることができるので
マクロを使わずともメインプログラム内にサブプログラムを配置することができます。
私はサブプログラムもメインプログラムに組み込みたかったのでこの機能を探し出しました。取説にはついてませんでした。
もちろんサブプログラムでも任意シーケンス番号から始められます。

しかし、あくまでメルダスのみの確認です。


O1234(メインプログラム)
N1
.
.
.
M98H1000(M98P1234H1000でも可)
N2
.
.
.
M98H1001
.
.
.
N3
.
.
.
M98H1002
M30

(同一プログラム内でここからサブプログラム)
N1000
.
.
.
M99

N1001
.
.
.
M99

N1002
.
.
.
M99

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

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

質問する
2013/03/13 19:52
回答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

補足

2013/03/13 21:05

回答ありがとうございます。
量産NC機で作業者にはブロックスキップの切替はさせない
(常に「/」オフ状態で正規動作となるようプログラムする)
のがルールとなっているので、
(1)のサンプルPGを参考にさせて頂きます。

余談ですが昔は同一PGの中でブロックデリートの切替によって
穴加工の有無や寸法違い(もう皮削るかどうか)を切替えたり
していましたが、作業者のSWの切り替え忘れで大量に不良を作る事故が
あるため最近はいじらせないようにルール化してきています。

質問者
2013/03/13 17:35
回答No.3

回答(1)が正解です  なら、回答するなよですが

コレは普通に使ってると思っていました。
サブプロは一個でいいんですよね


O111(サブ)

N1



GOTO999

N2



GOTO999

N3



GOTO999






N999

M99

追記
O111
GOTO#( )



メインでの呼び出し
G65で呼び出せば変数の引渡しも一行で済みます

お礼

2013/03/13 20:55

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

質問者
2013/03/13 15:44
回答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)
?????

お礼

2013/03/13 20:53

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

質問者
2013/03/13 13:55
回答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



どちらの場合でも引数(変数)チェックは適宜に行なって下さい。

お礼

2013/03/13 20:47

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

質問者

お礼をおくりました

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

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