• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロ)

マクロの使用方法とOSPPとVCの使い分けについてのアドバイス

このQ&Aのポイント
  • マクロを組む際の使用方法についてのアドバイスについてまとめました。
  • マクロの番号による違いや、#100~の使用方法について詳しく解説しました。
  • また、OSPPとVCの使い分けについてもアドバイスをしています。

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

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

回答1です。 1、について ファナックの角度変換というものがどういった仕様かは判りませんが、 OSPでの「G11]はローカル座標設定です。その際に角度を付けることが可能です。 G17平面であれば、G11 X** Y** P** で、X,Yの値の座標をローカルな原点ゼロとし、なおかつそこを基準に角度を振ることが可能です。 この座標はを新たなローカル座標が設定されるか、「G10」でキャンセル(通常座標へ戻る)まで有効です。 質問に記載されている「G91」は特に必要ないと思いまが、X** と Y** の値が必要なのではないか(多分)と思います。 2、について まず、Gコードマクロとして作るか、サブプロ呼び出し命令で呼び出すのかで違ってきます。 把握したと仰っていた「CALL」「MODIN」等でマクロを呼び出す場合はアドレス(G*** A1 X100 Y100 のような)による引数指定は行えません。 CALL OSUB LX=** LY=** RAD=** といった感じですね。 おそらく質問者様はGコードマクロとして扱いたいのだと解釈し、それを前提に以下に説明しますね。 OSPでは、GコードマクロやMコードマクロを作るときには、あらかじめ作成したマクロを決められたパラメータでGコードに割り当てておきます。 G101~G110が「MODIN]と同等で、G111~G120が「CALL」と同様だったかと思います。G100でG101~G110のキャンセル「MODOUT」です。 これらにパラメータで作成した登録しておくことで、「CALL」「MODIN」ではなくGコードで呼び出せます。これが、Gコードマクロです。 たとえば「OSUB」というマクロをG111に登録したとします。 通常「CALL OSUB」と打ち込むのを「G111」で済ますことが出来ます。この時に引数を使うことが出来ます。 「G111 X** Y** I** K**」といった指定が可能になります。 では、質問にあるこれらの変数をマクロ内ではどう扱うのかと言いますと(これが知りたいのですよね?) 自分が使いたい任意のアドレス(アルファベット1文字)の前に「P」を付加します。 具体的には、 G111 X** Y** R** Z** F**(G111には「OSUB」が登録されていると仮定) とします。 マクロ側では、 OSUB G0 X=PX Y=PY Z=PR G1 Z=PZ F=PF G0 Z=R3 RTS となります。これをGコードマクロでなく通常の書式で呼び出す時に直すと CALL OSUB PX=** PY=** PR=** PZ=** PF=** と記述します。両者は同じ働きですが入力する量が違いますし、固定サイクル感覚で組めます(それがGコードマクロ) 私はマクロと組む時はGコードマクロに割り当てる割り当てないに関わらず受け渡し変数には「P」を付けておく方がいいと思います。 どちらでも呼び出せるので。 マクロ内での引数以外の演算はどんな変数を使っても構いません。 ちなみに、ローカル変数で使える文字は、「英数字2文字」では無く「英字2文字+英数字2文字」の計4文字です。(Gコードマクロでは「P」と任意の英字の2文字ですが) 英字+英字+英数+英数なわけです。 ですから、「XMAX」とか「LMAX」の様な英字4文字でも良いですし、「XA10」とかでも良いです。 補足的には ローカル変数の指定には2種類あり、 1、「O,N,V,Pを除く英字」+「英字」+「英数字2文字」 2、「P」+「英字」+「英数字2文字」 使い方は同じですが、「1」の場合は未定義の場合に参照すると未定義エラーとなり、「2」の場合はエラーでは無く値が「EMPTY」として処理されます。 感の良い人は気づくかもしれませんが、「P」を付加することで受け渡し変数や引数を使った際、値の設定を省略した場合の処理をマクロに反映出来るわけです。 「IF」文で変数の値が「EMPTY」の場合の動きを作ることが出来ます。 「1」だと省略するとアラームになってしまいますので引数には不向きです。 でも、引数以外の演算では未定義なのに動作すると問題がある為アラームになる「1」を使う方が方が良いのです。 ありえないくらい長くなってしまい余計判りづらいかもしれませんが、道が開けると良いかなと思います。 PS、記憶が曖昧な部分もありますので、マニュアル等での確認もしていただけると良いかと思います。

noname#230358
質問者

お礼

回答ありがとうございます。 親切に教えていただき感謝致します。 私が疑問に思っていた事をピンポイントで回答頂きました。 なるほど!!です。 私が間違って理解していた事も指摘していただいてありがとうございます。 道が開けました!感覚がつかめてきました。 明日から制作にかかれそうです。頑張ります!! 本当にありがとうございます。 参考にさせて頂きます。

その他の回答 (1)

noname#230359
noname#230359
回答No.1

当方OSPでFANUCは詳しくないですが。 OSPにおいてアルファベットでの変数はローカル変数、VC**はコモン変数と呼ばれます。 FANUCでも両者はあり、多分仰る#1~#33はローカルで#100~がコモンではないでしょうか・・。 変数の使い方という点においてはおおむね同じように使うことが出来ます。 それぞれ特性が違うので目的にあわせて使い分ければ良いかと思います。 大きな違いは、ローカル変数が一つの階層でしか機能しないのに対して、コモン変数は他のプログラムやサブプロ等の他の階層からも参照出来ることですね。 以下はOSPでの話です。 「コモン変数」 コモン変数の利点は、他のプログラムから参照出来るため、別のプログラムでも共通で使うことが出来る事です。また、パラメーターからも内容を設定出来るので、プログラムを編集する事無く数値を設定する事も可能です。 たとえば、全長は何種類もあるけど加工内容は同じでプログラムは同じでよいなんて時に、全長にVC**を利用します。 代入はプログラム内でも出来ますが、それはせずにパラメータから設定してあげます。そうすれば、自動運転からモードを切り替える事無く代入が出来、全長にあわせた動きを可能にします。 注意点として、プログラムが終了しても電源を落としても最終の値はクリアされません。(電源オフでクリアされる領域もありますが) 共通で使用できるが故に以前の演算結果や入力した値が残っていた事が原因で他のプログラムでの変数使用にも当然影響が出てしまいます。 あとは複雑なプログラムでVC**を多用すると見づらくなり、意味も分かりにくくなります。 「ローカル変数」 一つの階層でしか使えず、メインプログラムで設定した同じ変数は、サブプロ等の別階層では使用できません。 ただし、受け渡し変数として設定するとサブプロで有効となります。 通常、マクロを作成するにはこちらを使うのが良いでしょう。アルファベットと数字なので大変意味を持たせやすく、複雑な物とか作成がしやすいと思います。 基本的にはローカル変数を使い、コモン変数の特性が必要になったらコモン変数を使うと良いと思います。 ローカル変数はコモン変数と違い、パラメータ等で内容を確認出来ません。 なので、作成した式が正しく動作しなかった時に内容が分からず間違いを特定しづらい時があります。 そんなときは一時的に、ローカル変数をコモン変数に代入して、パラメータからどのような値が出てきているか確認出来ます。 長くなりましたが、マニュアルなどで両者の違いを良く理解し、どちらも使っていくと自然と、「この場合はこちらかな」と思うようになります。 どうぞご参考に。。。 >一部分からないところがありました。コモン変数をパラメータ内で確認と >ありますがパラメータのどの部分で設定するのですか? 「自動運転」や「MDI」、「手動運転」、「プログラム編集」等のモード切替ボタンが操作盤の上のほう?に並んでいるかと思います。 その中に「パラメータ設定」というボタンがあります。 年式により異なるかもしれませんが、その中のページをめくっていくとコモン変数(「コモン変数VC**」って感じのタイトルが出ていたように思います)のページがあります。 多分パラメータ設定ボタンを押したときに通常は最初に出てくるページだったような気もするのですが・・・(未確認)。 そこから設定出来ますし。プログラム内で設定されたコモン変数の値も確認出来ます。 FANUCについては判りかねます。 余談ですが、 コモン(common)は、「共同の」「共有の」という意味があり、 ローカル(local)は特定の場所[土地]の, 地元の, 局地的な地域限定の・・といった意味があります。 それを踏まえると、二つの変数の性質がなんとなく見える気もしますね。

noname#230358
質問者

お礼

回答ありがとうございます。 本当に大変さんこうになります!! かなり分かりやすい説明ありがとうございます。 私はファナックしか勉強していないのでOSPはあまりわかりませんが、 確かに#1から#33までがローカル変数で、#100からがコモン変数です。今回のアドバイスをこれにあてはめて勉強します。 一部分からないところがありました。コモン変数をパラメータ内で確認とありますがパラメータのどの部分で設定するのですか? お忙しいでしょうがお願いいたします。 なるほど、ありがとうございます。 現在ファナックしか扱ってなく、OSPの方は少しいか使っていないため マクロ文の作り方はほとんど分かりません。 今日プログラムの取り説を見て勉強しました。 CALL、MODIN、COPY,LAA、OMIT・・・・・などの機能は把握しました。 1、あとファナックと違うのは、角度変換機能は、G68R45.又はG91G68R45.キャンセルG69など指令するのですが、OSPでは、G11P45又はG91G11P45、キャンセルG10でいいのでしょうか? 2、マクロの方だと例えば、G65P100X10.Y10.R10. この時サブでは、X=#24Y=#25R=#18と決まっていますが OSPでは英数2文字以内で任意で変数を指定できるみたいなのですが どのように設定すればいいのでしょうか? 今の私の考えだと1、最初に任意で英数を決める。たとえばAとします。 次にXだとAX、YだとAY、RだとARと二文字目のその英数を入れればいいのでしょうか? お暇な時にでも回答宜しくお願いできないでしょうか?

関連するQ&A