Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:NCマクロからのサブプログラム呼び出し)

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

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

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

  • ベストアンサー
noname#230359
noname#230359
回答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:登録終了とみなさない

noname#230358
質問者

お礼

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