ユーザーマクロについての質問

このQ&Aのポイント
  • ユーザーマクロを使ってみようと思い、CAMで出力したポストから作成したパスの加工方法について質問です。
  • シミュレーション時にエラーが発生しました。解決策を教えてください。
  • ファナック(M-18)で使用する際に009エラーが発生しました。アドレス関係のエラーの解決方法を教えてください。
回答を見る
  • ベストアンサー

ユーザーマクロについて。

初めてユーザーマクロを使ってみようと思い、 CAMで出力したポストをもとに作ってみました。 円の一部を2本の工具を使い加工するだけのパスです。 刃物はΦ6のエンドミル2本を使用しています。 変数として Aを加工する物の直径 Bをその半径 O100 G65P100A100. O200 #2=#1/2 (** P100**) T99 T01 (** 6H-A H01 D01 **) G54G00 G80G91G40G28Z0 G49G28X0Y0M05 M06 T02 G90G00X0Y0 G43Z50.H01 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F150 X-25.F500 G00Z20. Z50. X25. M09 (** 6H-S H02 D02 **) G80G91G40G28Z0 G49G28X0Y0M05 M06 T01 G90G00X0Y0 G43Z50.H02 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F30 X-25.F100 G00Z20. Z50. M09 (** End of tape **) G80G91G28Z0 G49G28X0Y0M05 M06 G90 M30 シミュレーションしてみるとエラーが出てしまいました。 どのようにすればイイですか? プログラム前半部分、訂正 (誤り) O100 G65P100A100. (正) O100 G65P200A100. 下記の皆様の回答をもとにこのようなプログラムで動かしてみました。 今回使用する機械にはファナック(M-18) 手打ちではなく下記のプログラムをコピーして機械に転送しております。 % O100 #1=100. #2=[#1]/2 (** P100**) T99 T01 (** 6H-A H01 D01 **) G54G00 G80G91G40G28Z0 G49G28X0Y0M05 M06 T02 G90G00X0Y0 G43Z50.H01 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F150 X-25.F500 G00Z20. Z50. X25. M09 (** 6H-S H02 D02 **) G80G91G40G28Z0 G49G28X0Y0M05 M06 T01 G90G00X0Y0 G43Z50.H02 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F30 X-25.F100 G00Z20. Z50. M09 (** End of tape **) G80G91G28Z0 G49G28X0Y0M05 M06 G90 M30 % しかし #2=[#1]/2 の場所で「009エラー」 と出ました。 アドレス関係のエラーのようです。 わかる方いましたらよろしくお願いします。 ファナック(M-16)で使用した結果 正常に動作いたしました。 改めて調べた結果 ファナック(M-18)の方にカスタムマクロを付けていなかったそうです。 マクロを使う以前の問題でした。 おさわがせしてもうしわけありませんでした。 今回初めてマクロを使用することになり ここで回答をいただいただけでも 大変ためになりました。

noname#230358
noname#230358
  • CAM
  • 回答数4
  • ありがとう数2

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

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

プログラムのフロー(流れ)が変です。マクロ呼び出しでもサブプログラム呼び出し(M98)でも同じですが、こんな関係でしょうか? 自宅→通勤→出社→出張→     →帰社→通勤→帰宅  =メインの流れ             ↓    ↑              →仕事→   =これがマクロ 出張先でお終いにしても加工はしますが、フローは良くないです(エラー?) % O100  ←メインプログラム G65P100A100. ←マクロプログラム呼び出し。Aの引数をマクロ側に伝える (** End of tape **) ←マクロプログラムのM99指令で戻って以下を実行 G80G91G28Z0 G49G28X0Y0M05 M06 G90 M30 O200  ←マクロプログラムの先頭 (Aの引数に応じた加工をする) M99  ←呼び出したプログラム(メイン)へ戻る % マクロ呼び出しのいきなりのエラーですね。シミュレータのバグだと思われます。 通常は座標系選択、工具交換、工具長補正、主軸回転、加工地点への移動とかの『通勤』部分はメインですませるのがスタイルですが、マクロでやっても間違いではありません。これらをメインに移動したら直る? 因みにそのシュミレータ、フリーなら紹介して貰えませんか。。。 ★小数点を付けたほうが良いというのは、『軸移動指令の小数点無し数値の扱い』がシステムパラメータで設定出来て、全く違う動きをすることがあるからです。 G00X100Y200Z-1 これをミリ単位か、最小指令単位(ミクロンが多い)の整数倍と解釈するかの選択。まったく動作が違ってくる。 軸移動指令でないF100S5000は上記と関係なく同じ意味になる。 以下のことは、目を皿にしてマニュアルの隅々まで読まないと辿り着かないし、私の理解が間違ってるかもしれないので、再確認してください。 ●変数を使うと小数点が無くとも同じ。でないと、小数点無し数値を整数倍とする設定のときにおかしくなる。     X[#1+100] 100を整数倍と解釈すると、どんな値にもなる#1の値次第で結果が異なってしまう。    #1=100  →100+100ミクロン    #1=100.5 →100.5ミリ+100ミクロン ●変数でなく[ ]を付けて計算させる場合もおなじ  整数だけの計算で+、-、*なら結果も整数になるが、[10/3]をどう解釈するか? 整数倍の設定は昔の機械用のプログラムとの互換性を考慮してるためと思います。 ★OKです。別にサブでもマクロでなくても計算は可能です。 変数の計算だけの#2=[#1]/2に[]は不要 X#1Y#2  OK X#1+2.  NG → X[#1+2.]

noname#230358
質問者

お礼

ありがとうございました。 今はマシニングの加工がたてこんでいますので、 来週中にでも今回のプログラムを使用して加工したいと思います。 普段は単品物が多くて今回のように 形状が微妙に変わる同形状の物が大量に来ることがなく カスタムマクロを使ったプログラムは初めてなので とても勉強になりました。

noname#230358
質問者

補足

% O100 G65P100A100. (** End of tape **) G80G91G28Z0 G49G28X0Y0M05 M06 G90 M30 O200 #2=#1/2 (** P100**) T99 T01 (** 6H-A H01 D01 **) G54G00 G80G91G40G28Z0 G49G28X0Y0M05 M06 T02 G90G00X0Y0 G43Z50.H01 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F150 X-25.F500 G00Z20. Z50. X25. M09 (** 6H-S H02 D02 **) G80G91G40G28Z0 G49G28X0Y0M05 M06 T01 G90G00X0Y0 G43Z50.H02 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F30 X-25.F100 G00Z20. Z50. M09 M99 % 説明の通りですとこのようになりますが シミュレータではエラーがでました。 社員と話してみましたが 実際に機械で動かすときちんと動いたりして。 と、このまま動かす気でいるのが怖いです。 また同じ間違いをしてしまいました。 プログラム前半部分、訂正 (誤り) O100 G65P100A100. (正) O100 G65P200A100. http://www.geocities.co.jp/MotorCity-Rally/7396/files.html ここで紹介されている「Ncmilmile」です。 変数と数値の演算部分で Y-[#2+1.]こう記述いたしましたが正しいでしょうか? Y-[#2+1]この方がイイとかありますか? あと、サブプログラムを使わないで下記のような方法でも可能ですか? % O100 #1=100. #2=[#1]/2 (** P100**) T99 T01 (** 6H-A H01 D01 **) G54G00 G80G91G40G28Z0 G49G28X0Y0M05 M06 T02 G90G00X0Y0 G43Z50.H01 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F150 X-25.F500 G00Z20. Z50. X25. M09 (** 6H-S H02 D02 **) G80G91G40G28Z0 G49G28X0Y0M05 M06 T01 G90G00X0Y0 G43Z50.H02 M03S3500 M50 X25.Y-[#2+1.] Z20. Z1. G01Z-1.F30 X-25.F100 G00Z20. Z50. M09 (** End of tape **) G80G91G28Z0 G49G28X0Y0M05 M06 G90 M30 %

その他の回答 (3)

noname#230359
noname#230359
回答No.4

シミュレータ側の問題のようです。 マクロ自体は正常に動くはずです。 回答(3)にあるサブを使わない方法でも問題はありません。 しいて言えば変数の演算においても少数点は付けた方が間違い無いと思います。 #2=#1/2. Y-[#2+1.]  など あとDOS版ですがフリーで下記のようなマクロシミュレータもありますので参考までに。

参考URL:
http://hp.vector.co.jp/authors/VA013450/
noname#230358
質問者

お礼

ありがとうございます。 MACRO TRACERも検索で見つけましたが、 操作が難しそうでしたので見るだけにとどまりました。

noname#230359
noname#230359
回答No.2

どのブロックで何というエラーが出たのか分かりましたら教えて下さい。 変数は#100からだったと記憶していますが。 (当方はメルダス500なので自信はまったく無しです)

noname#230358
質問者

補足

変数#2の部分でマクロエラーと表示されました。 社員の一人がマクロも確認できるフリーのシミュレーターソフトを使っています。

noname#230359
noname#230359
回答No.1

これだと、O100がメインプログラムでしょう。 O200がサブになりますから、M99が必要だと思いますが。 0100からO200に飛んでも戻り指令のM99が有りませんね。 それに、アラームとは直接の関係は有りませんが、工具経路がおかしいんでは? ドリル加工の経路ですが・・・エンドミルがどんなのか分かりませんが・・ #2=#1/2のブロックを #2=[#1]/2にしてはいかがでしょうか? #1/2でもいいような気もしますが、もしかしたら1/2を先に計算して#0.5と言う風に使用できないアドレスになったのかも知れません。

noname#230358
質問者

補足

確かにM99で終わっていませんでした。 すみません。 工具軌跡は円の端から2?切削するような軌跡になっていると思います。 その時に使用している工具がΦ6のエンドミルです。 エンドミルは http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%B3%E3%83%89%E3%83%9F%E3%83%AB この様な工具です。 シミュレータではあいかわらずエラーでしたが、 たしかに #2=[#1]/2 この記述の方が 視覚的にもわかりやすいと思いました。

関連するQ&A

  • 工具交換 G100の内部処理(マクロ処理)

    工具交換 G100の内部処理(マクロ処理)について G100は G91G28Z0 G80 G49 (M19) M09 M05 M06 を指令せずに工具交換をします。 ブラザー (例) タッピングセンター G100T1X-45.0Y40.0G43Z100.H1S750M03L2 G80 G49 M09 M05 をして原点復帰しT1を主軸に呼び XYZ(A軸C軸)同時位置決め補正番号Hで補正し回転S M03  L2 マガジンに待機工具 一行でここまで指令できます。 マクロを使えば G65 P○○○ .... .... .... ..... で呼び出すはず 現在使用しているのは、メルダス(マザック)、です。 上記はマクロで作ることはできるのですか 教えていただきたい。 立、横マシニング対話でしか動かせない者より よろしくお願いします。 メルダスマクロ詳しい方いらっしゃいますか? 翌日 簡単な プログラムを作成してみました。 特定のカスタムマクロを任意のGコードで呼び出す事が可能です。 呼び出すプログラムのワークNo 呼び出しに使うGコード番号 呼び出しタイプ M98 G65 G66 G66.1 が機械パラメータで設定可能でした。 まずはマクロで動かしてみます。 ブラザーのその機能に似たものはつくれますが、 おそらく全く同じには実装できません。 まねて動かすには O0010 G00G90G40G80; G00G90G54~G59; G65P8T85X0Y0G43Z150.H85S3000M03; (G66.1P8T85X0Y0G43Z150.H85S3000M03); O0008 (G40);必要に応じ G80M09; (G49M19);必要に応じ G91G28ZOM05; (G28X0); (G30Y0Z0); T#20T○○M06; G#10X#24#25Z#26H#11; S#19M#13; M99; % 上記では、T85を主軸にM06までは良いのですが G43で補正が出来ません。 良い方法はありませんか? G66.1ではG L N O Pが選択できるようですが 動作的にはG65呼び出しと変わりません。 また T#20T○○M06;のT○○待機工具も#に置き換えたい です。 こんな感じで間違っていませんか? とりあえずTツールを呼びH484 H485で補正がかかり 最後主軸T0 待機工具T0 で終了M30になりました。 A43長補正  B84次工具呼び出し  にしてみました。 次回G65P8 をG100に置き換えてみたいと 思います。 O0010 G00G90G40G80; G94; G00G90G54~G59; G65P8T85X0Y0A43Z150.H485S3000M03B84; G98固定サイクルZ R Q F; G65P8T84X0Y0A43Z150.H484S2000M03B80; G98固定サイクルZ R Q F; G65P8T0B0 M30; O0008; G40G80; M09; G91G28X0Y0Z0M05; G30Y0Z0; G90 忘れていました T#20T#2M06; M01; G#1X#24#25Z#26H#11; (M01); S#19M#13; M08; M99;

  • ISO/EIA マクロお詳しい方、ご教授願います。

    ISO/EIA マクロお詳しい方、+マザトロール(タンドウからマクロ呼び出し)について エアカットにて動作確認はしましたが、間違っているところはないでしょうか 確認お願いします。 機械使用上引数は X→#24 Y→#25 Z→#26 F→#9 R→#18 I→#4           J→#5 K→#6 P→#16 D→#7 しか使用できません    メインプラグラム  Oжжжжж G0G17G90G40G80G64G98 T1 G91G28Z0 M6 N0001 G0G90G54(X0Y0)X-70.Y0 G43Z50.H1 S750M3 M08 G65P7777 D73 Z-20. R3. I5. F600 J800  G80G0Z50.M9 G91G28Z0M5 G49 M30 O7777(サブプロ) G90 G98G#7Z#26R#18Q#4F#9P#5 M99 固定サイクル G73Z-20.R3.Q5.F600P800と 同じ動作をします。  こんな感じですが、 明らかに違っている点ありましたあら 指摘をしてくださいよろしく意お願いします。 参考 マザトロール(山崎マザック) タンドウからマクロ呼び出し    サブO7777は共通  G0 G90 X-70 Y0 Z100 M36 S495 M3 G94 G65P7777 D73 Z-20. R3. I5. F600 J800 G0G80 M9 M5 M1

  • 横マシニングセンターのマクロを消してしまいました。

    横マシニングセンターのマクロを誤操作により最初から入っていたプログラム以外全部消してしまいました。 機種は豊田工機のFH80B FUNUC Series 15-Mです。 バックアップをとっておらず(ここが問題なのですが…)大変困っております。 主に使っていたのが穴あけのプログラムで O0030; G65 P0405 A1.K90.; G65 P0405 A2.K90.; M98 P999; M06; M30; O0405; #101=#1; #106=#6; G65 P0306 B_.Z-_. F_. S_. I407. T_. K#306; G65 P0306 B_.Z-_. F_. S_. I407. T_. K#106; G65 P0306 B_.Z-_. F_. S_. I407. T_. K#106; O0407; X_. Y_.; X_. G80 G00 Z_.; M09; M05; M99; こういうプログラムが入っていたのですが、P999、P0306のところに何が入っていたのかわからず、あと#○○のところもわかりません。 結構前にいた人が作ったらしく、自分を含めマクロに明るい人間がいないため、どうしようかと頭を抱えています。 お詳しい方ご教授頂けないでしょうか!!

  • 順列・数え上げ

    よろしくお願いします。 ここに下のような390個の文字があります。 (A,B,C,D,E,F,G,H,I,J,K,L,M がそれぞれ10個ずつ、 N,O,P,Q,R,S,T,U,V,W,X,Y,Z がそれぞれ20個ずつあります。) この390個の文字から235文字を選んで一列に並べる方法は全部で何通りありますか。 A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 以下、私が考えたことを書きます。 この390個の文字から235個の文字を選ぶ組み合わせの総数は、 (Σ[k=0~10]x^k)^13*(Σ[k=0~20]x^k)^13 を展開したときのx^235の係数ですから、 23463540513956137996043929988 通りだということは分かります。 この23463540513956137996043929988 通りのそれぞれについて235個の文字 の順列(同種のものを含む順列)を数え上げれば答えは出ると思いますが、これは あまりにも大変な作業です。 何かよい知恵はないでしょうか。

  • G91による位置決め方法が知りたいです。

    最近、オークマの機械(OSP)で加工する事になったのですが、ファナックで操作出来たプログラム機械が動きません。 ファナックの時のプログラムを書きますので、アドバイスお願いします。 メインプログラム(ファナックの時のプログラム) G91G28Z0T1 M16M6 G90G0G54X0Y0T2 G43Z2.H1 S2500M3M8 G81R2.Z-1.F160K0 M98P22 G91G28Z0T2 M16M6 G90G0G54X0Y0T3 G43Z10.H2 S600M3M8 G73R2.Q5.Z-20.F60K0 M98P22 G91G28Z0T3 M16M6 G90G0G54X0Y0T4 G43Z2.H3 S600M3M8 G81R2.Z-2.75F120K0 M98P22 G91G28Z0T4 M16M6 G90G0G54X0Y0T1 G43Z5.H4 M00 M29S200 G84R5.Z-15.F160K0 M98P22 G91G28Y0Z0T#100 M30 サブプログラム(問題の位置決め) G90X10Y-20 G91X10 X10 X20K5(このX20を5回繰り返すのも、出来ないです) Y-20K10 X-20K5 M99 G90G0G54X0Y0 → G15 H1にする G43Z5.H4 → G56 H1にするとか、何とかOSP用に覚え直す事が出来たのですが、サブで位置決め「G91」使用では、思い通りに動きません。 面倒でも「G90」で座標を入力すると思い通りに動きます 単品の部品加工が主なので、G90でXY座標も入力出来るのですが、 出来ればG91を使用し、簡単に組みたいです。

  • JavaScriptの配列について

    var old_array = Array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); var new_array = Array('b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '<', '#', '/', '>', '%', '.', '*', '0', '!', '?', ':', '=', '|'); のような配列があり、 abcと入力するとbcd DEFと入力するとEFG 012と入力すると!23 というようなものを作りたいのですがどうすればいいでしょうか。

  • fanucの簡単なマクロ教えてください!

    okkのマシニングセンターを使い始めたんですが、簡単な慣らし運転のマクロを作りたいと思います(fanuc) O1 G91G28G00Z0 G28X0Y0 M03S500 G01X819Y-509F4000(最大ストロークX820Y-510) G28G01X0Y0 この作業(最後の2行)を繰り返したいのですがどういったマクロになるのでしょうか?

  • Excelマクロ 表の書き換え方法教えてください

    2日くらいあれこれやってみたのですが、全くできないためお教えいただけますでしょうか。 1 2 3 4 5 6 7 A a b c d e f g B h i j k l m n C o p q r s t D u v w x y z (以下続く) 注)A1セルは空白、1、a、h、o、uは同じ列になります という表(Book1.xls)を下記(Book2.xls)へ変更するマクロを作りたいと思っています。 A 1 a A 2 b A 3 c A 4 d A 5 e A 6 f A 7 g B 1 a B 2 b (以下略) Book1の行数は任意、1~7は固定、abcde…は空白セルもあります。 いいマクロがありましたらぜひご教授ください。 よろしくお願い致します。

  • fanucマクロについて

    O1 G90G00X0Y0 G43H1Z50 M03S1000 G65P9100X100Y50R30Z-50F100I100A0B45H5 M30 (I円の半径)(A穴初角)(B角度の増分)(H穴の個数) O9100 #3=#4003 G81Z#26R#18F#9K0 IF[#3EQ90]GOTO1 #24=#5001+#24 #25=#5002+#25 N1 WHILE[#11GT0]DO1 #5=#24+#4*COS[#1] #6=#25+#4*SIN[#1] G90X#5Y#6 #1=#1+#2 #11=#11-1 END1 G#3G80 M99 上記のように記述されているのですが < IF[#3EQ90]GOTO1 < #24=#5001+#24 < #25=#5002+#25 とされているのはG91モードの場合でも動作できるように という事ですよね? そこで質問なのですが上記の内容では穴あけサークル < G81Z#26R#18F#9K0 もG91モードで動作するのではとおもうのですが 実際はどうなのでしょうか? どなたか教えていただければ幸いです。

  • カスタムマクロで長穴加工

    お世話になってます。今回は、カスタムマクロで長穴加工のプログラムを製作したのですが、動いてくれません。どこか間違いがあれば、指摘の方お願いします。ちなみに、機械はマキノV56です。 G65P9000I30.J10.Z10.D99F200 X50.Y50. .... I:長穴の長さ J:長穴の幅の長さ Z:切り込み深さ D:補正番号 F:送り O9000 N1 G1Z#26F2000 G41D1X[#5/2]F#8 G3X-[#5/2]Y{#5/2]R{#5/2] G1X-[#4/2-#5/2] G3Y-#5R[#5/2] G1X[#4-#5] G3Y-#5R[#5/2] G1X-[[#4-#5]/2] G3X-[#5/2]Y-[#5/2]R[#5/2] G1X[#5/2] G0G40Z20. M99 こんな感じですが、よろしくお願いします。できれば解説なんかあるとありがたいです。