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

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

ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ユーザーマクロについて。)

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

2023/09/07 03:42

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

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

2007/07/24 11:51

初めてユーザーマクロを使ってみようと思い、
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)の方にカスタムマクロを付けていなかったそうです。
マクロを使う以前の問題でした。
おさわがせしてもうしわけありませんでした。

今回初めてマクロを使用することになり
ここで回答をいただいただけでも
大変ためになりました。

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

ベストアンサー
2007/07/24 15:59
回答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.]

お礼

2007/07/27 09:16

ありがとうございました。
今はマシニングの加工がたてこんでいますので、
来週中にでも今回のプログラムを使用して加工したいと思います。

普段は単品物が多くて今回のように
形状が微妙に変わる同形状の物が大量に来ることがなく
カスタムマクロを使ったプログラムは初めてなので
とても勉強になりました。

質問者

補足

2007/07/24 22:23

%
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
%

質問者

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

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

質問する

その他の回答 (4件中 1~4件目)

2007/07/25 11:51
回答No.4

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

あとDOS版ですがフリーで下記のようなマクロシミュレータもありますので参考までに。

お礼

2007/07/25 14:22

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

質問者
2007/07/24 13:20
回答No.2

どのブロックで何というエラーが出たのか分かりましたら教えて下さい。

変数は#100からだったと記憶していますが。
(当方はメルダス500なので自信はまったく無しです)

補足

2007/07/24 22:13

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

質問者
2007/07/24 13:08
回答No.1

これだと、O100がメインプログラムでしょう。
O200がサブになりますから、M99が必要だと思いますが。
0100からO200に飛んでも戻り指令のM99が有りませんね。
それに、アラームとは直接の関係は有りませんが、工具経路がおかしいんでは?
ドリル加工の経路ですが・・・エンドミルがどんなのか分かりませんが・・

#2=#1/2のブロックを #2=[#1]/2にしてはいかがでしょうか?
#1/2でもいいような気もしますが、もしかしたら1/2を先に計算して#0.5と言う風に使用できないアドレスになったのかも知れません。

補足

2007/07/24 22:18

確かに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 この記述の方が
視覚的にもわかりやすいと思いました。

質問者

お礼をおくりました

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

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