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

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

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NCマクロからのサブプログラム呼び出し)

NCマクロからのサブプログラム呼び出しについて

2023/09/06 22:38

このQ&Aのポイント
  • マクロの勉強中です。使用機械は森精機NH5000DCG、制御装置はfanuc30iです。サブプログラムの呼び出し方法について質問です。
  • G65P0000X0Y0とサブプログラムの呼び出しでPで指定したサブプログラムをファイルとして用意せずに、メインプログラムに記述して実行する方法について教えてください。
  • また、文字刻印マクロプログラム、KST32B-FO-LMのサンプルファイルの記述もあります。デモ版lance for windowsというシュミレーションソフトで動作を見ていますが、実際に加工機にかける前に記述方法のアドバイスを頂きたいです。
※ 以下は、質問の原文です

NCマクロからのサブプログラム呼び出し

2016/03/15 15:23

マクロの勉強中です。

使用機械 森精機 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 というシュミレーションソフトで動きを見てみますと動作しています。

実際に加工機にかけてみてみればいいのですが、
その前にどなたかこういったサブプログラムの記述の仕方をお使いになって
いらっしゃいましたらアドバイスをお願いいたします。

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

ベストアンサー
2016/03/15 17:46
回答No.1

これPC上では1つのファイルになっていますが、
機械へ読み込むとO番号毎に別々のプログラム(ファイル?)として読み込まれます。
メインプログラムの中にサブプロが入っている訳ではありません。

機械の編集画面からプログラムを外部に出力する時に
 O1,O1000 と打って [出力] すると
“PROGRAM.ALL” という名前のファイルが1つ出力されますが、
そのファイルの中にはご質問のファイルと同じように
O1~O1000 までの全てのプログラムが入っています。

そのような複数のO番号のあるファイルを機械へ入力すると、
O番号毎に別々のプログラムとして入力されます。

O番号の行から、M2, M30, M99 何れかが出現する所までが
1つのプログラムとして扱われます。

従って1つのプログラムにこれらのMコードが複数回出現するような場合には
最初のMコードまでは正常に読み込まれますが、それ以降のブロックは欠落します。
出力時には問題ありませんが、入力時のみそのような問題があります。



拙い説明で分かりにくいかも知れませんが、実機の方で確認して頂ければ
どういう事かお分かりになるかと思います。

百聞は一見に如かず

新たなご質問ですね。
そういう場合、基本的には新たにスレッドを立てたほうが宜しいかと。
これは当人だけの問題ではなく、後に検索してたどり着いた人にも
有用な情報として利活用して頂く事がこの森の存在意義ですので。

まぁ堅苦しいことはおいとくとして。

マクロコール時にシーケンス番号を指定して分岐させるには、
基本的にはそのサンプルプログラムの形式で動作します。
変数番号はマクロコール時の引数に指定するアドレスと
きちんと対応が取れていれば何でも構いません。

こういったサンプルプログラムがある場合には、実際に試した方が早そうですが。


このサンプルプログラムの注意点としては、先の回答にも書きましたように、
M99が何箇所も出現するので、機械によっては入出力の際に後半が欠落する場合があります。
※全ての機械がそうなるわけでは無いようです。
複数あっても問題なく読んでくれる機械もあるようですので
おそらくパラメータ設定に依るのでしょうが、詳細は分かりません。

最初のM99までしか読み込んでくれない機械の場合、
機械のメモリ上で編集している分には特に問題ありませんが
バックアップやメモリ節約等の為に外部機器から出し入れすると
後半が欠落してしまい困った事になります。

そのような場合の対処方法はいくつかありますが、
1つはM99をプログラムの最後に1つだけにしておき
他からはGOTOでそこへ飛ばすという方法があります。

***************************************
サブプログラム
O9000
GOTO #1
GOTO9999
N1
動作プログラム1
GOTO9999
N2
動作プログラム2
GOTO9999

N9999 M99
***************************************
プログラムが長大な場合にGOTOのサーチに若干時間がかかります。

他のやり方としては、Mコードをマクロの形式でコールする方法があります。
***************************************
サブプログラム
O9000
GOTO #1
M[99]
N1
動作プログラム1
M[99]
N2
動作プログラム2
M[99]
..
M99
***************************************

[]を使うことでマクロの演算式と解釈され、M99などの制御用Mコードとは
認識されなくなるため、それが原因で入力時に欠落する事はなくなります。
ちょっと見苦しいのが難点ですが。


こんな事しなくて良い機械であれば、素直にサンプルプログラムの形式に
沿って記述しても特に問題は無いと思いますが、後々そういう機械に出くわした際には
そんな事もあったかなと思い出してやって下さい。

プログラム先頭から最初のM2,M30,M99が出現した時点で
読み込みが終わってしまう事に関して、パラメータの確認が出来ました。
FANUC 16iシリーズ以降。それ以前は調査対象外です。


N3201#5 N99 
 N3201#6が0の時、M99のブロックにて
  0:登録終了とみなす
  1:登録終了とみなさない


N3201#6 NPE
 M2,M30,またはM99のブロックにて
  0:登録終了とみなす
  1:登録終了とみなさない

お礼

2016/03/15 18:46

0歳様

アドバイスありがとうございます。

そういえば以前プログラムを一括で出力した時に
経験済みでした。

今回の質問はG65をメインプログラムで指令したとき
サブプログラム内に各動作(刻印文字加工動作)を
50文字程度記述してシーケンス番号等でそのアドレスに
ジャンプさせたいのです。

こちらのサイトで参考になる記述があったので以下に書きます。

*******************************************************
メインプログラム
O1
G65 P9000 A... ;A...にシーケンス番号
G65 P9000 A... ;A...にシーケンス番号
G65 P9000 A...をいくつでも追加出来ます。
M30

サブプログラム
O9000
GOTO #1
M99
N1
動作プログラム1
M99
N2
動作プログラム2
M99


*******************************************************

この記述でいけるのでしょうか?
#1は既に使われているので別の変数に代入してシーケンス番号を
割り振ればいいのでないかと考えています。

0歳様

パラメータの確認までしていただき
ありがとうございます。

FANUC 16iシリーズのマシニングセンターも
会社にはありますので大変助かります。

おっしゃる通り今流れている加工が終わり次第
テストしてみたいと思います。
お忙しいところありがとうございました。

0歳様

ご指導いただいたおかげで
無事動作いたしました。

ありがとうございました。

質問者

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

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

質問する

お礼をおくりました

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

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