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

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

締切済み
※ ChatGPTを利用し、要約された質問です(原文:マクロとサブプロの違い!)

マクロとサブプロの違いとは?メリットや組み方も教えてください!

2023/10/13 16:34

このQ&Aのポイント
  • マクロとサブプロの違いについて教えてください。また、マクロにするメリットは何ですか?マクロの組み方も教えていただけると嬉しいです!
  • マクロとサブプロはどのように違うのでしょうか?マクロにするメリットがあるのでしょうか?マクロの組み方も知りたいです!
  • 「マクロとサブプロ」の違いとは何ですか?マクロのメリットは何ですか?また、マクロの組み方も教えてください!
※ 以下は、質問の原文です

マクロとサブプロの違い!

2004/10/17 22:13

 色々お世話になっています。

 質問ですが、「マクロとサブプロ」の違いというものはなんなのでしょうか?マクロもサブプロで組むことは可能ですよね?それをあえて、マクロにするということはなんらかのメリットがあると思うのですが、そのメリットとはなんなのでしょうか?

 今はサブプロしか組んだことしかなく、どのようにマクロを組むかもわかりませんが、もしよろしければマクロの組み方も含めて教えていただけるとうれしいです!

 どうかよろしくお願いします!

回答 (8件中 1~5件目)

2004/10/26 23:43
回答No.8

CALL文等で伸びだすのに「P」を付けると決まっているわけでは無いので、お間違えのないように・・・。ただ受け渡し変数を「P」を使えばプログラムをGコードマクロと共通に出来るので便利かと思います。
どちらも使い勝手は同じですが、慣れればGコードマクロは圧倒的に打ち込む文字数が少なくて済みますね。
マクロ内のみでつかう変数は好きな形で構いませんよ。
紹介したHPのマクロもたしかそのような作りになっていたかと思います。ちなみに、フロッピー等でNCへ入力出来る装置などがあるのであれば、あのマクロ集はそのまま使えますよ。


私もBASICは我流ですが中学の頃少々かじりました。趣味程度でたいしたことはないですよ。
ですからOSPは取っ付き易かったですね。

「プログラム言語」という話ではNC言語は非常に単純な言語といえます。難しいのは加工その物ですね。
BASICに限らずプログラム言語全般に共通する基本的な条件分岐や変数の扱いを知っているとかなりマクロ作りにはかなり活かせますよね。

さらには数学が非常に得意な人ならいろんな数式を活かせるかと思います。残念ながら私は普通レベルの数学しか知りませんが・・・。
とはいえそんなに数学の得意な人はきっと違う職業に就いていることでしょう(笑

MMHさんの質問でNo10062「ボールエンドミルの補正のかけ方」というのがありましたよね。
その回答でkinko-zさんが紹介されているURLは参考になります。私は頭から煙が出そうでしたが、あのような式を導き出せればプログラムに直すだけですね。(ってこれがなかなか・・)

あのようなプログラムは作れなかったとしても、少なくともあのような加工はマクロで可能であるということです。
CAD/CAMの時代ではありますが、マクロは出来た方が得ではあると思いますね。
マクロだからこそ良い点もあると思いますし。
容量少ないとか、後で融通が効く(変数の値を変更)とかですね。
頑張ってください!

ちなみに「While」文は使えないです。
「While」文はFANUC系なので使い方があまり詳しくないのですが、IFでも同じことは出来ると思います。
少々面倒でしょうが・・・。

お礼

2004/10/29 22:26

まーぼーさんありがとうございました。
 
 いま少し忙しいので、少し暇ができてきたら作ってみようと思います。また、そのときは、そのマクロを公開できれば、そのときは評価してくださいね!(辛口、甘口大歓迎ということで!)

質問者

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

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

質問する
2004/10/21 12:38
回答No.7

#4ですが、変数を一行にまとめる事について回答し忘れたので補足します。

まず、一行当たりの変数の数って決まりはありません。
1ブロック当たりの文字数で制限されていたと記憶しています。もしかしたら1ブロック当たりの変数の数も決まっていた様な気がしなくもないですが、マニュアルに書いてあるかと思います。
受け渡し変数の数に制限があったかも?
CALL文等の説明に記載があるかと思います。

そもそも「1行」というのはディスプレイの都合でしかありません。「1ブロック」にはかなり?長く書き込めます。

しかし古い機械では「改行」ってのが無いため普通に続けて打ち込んで1行を超えると別ブロックと判断されます。
領域加工など命令によっては長くなることも当然あるので困りますよね。アラームになってしまいます。

その場合は次のブロックの先頭に「&」を入れてください。
そうする事によって前の行と同一ブロックであるという扱いになります。

例)
CALL O____ LA=10000 LB=500 VC1=3000 VC
&2=1000 VC3=10
といった具合です。
これでこの2行は1ブロックとなります。

お礼

2004/10/22 21:39

 まーぼーさんありがとうございました。

 ディスプレー上の1行に入らなければ、「&」をつければよいのですね。そのように入力してみます!(なるべく変数を減らすほうがいいのかもしれませんが・・・)

 あと、jackalさんが言われてたように「While」は使えるのでしょか?もし使えるのでしたら、便利なのですが・・・。

質問者
2004/10/20 19:55
回答No.6

#4です。

私の書いたプログラムについては「P]に特別な意味はありません。適当に付けました。
ローカル変数は「英字2文字」+「英字2文字or数字2文字」の範囲で任意に決められます(ただし予約語やOとかN等意外/マニュアル参照)

また、マクロを作るのにローカル変数を使うという決まりはありません。ローカル変数でもコモン変数でも構いません。それぞれの特性を生かせばよいかと思います。

しかし、複雑なマクロを作りたい時等にはコモン変数では分かりにくいですよね?どれもVCですから区別が付きません。
ですから、同じ階層で使う変数はローカル変数のが良いでしょう。
例えば「VC1=10を半径10」と定義するより「KEI=10を半径10」のが見やすいですよね?意味を持たせやすいです。
ただし、メインで定義したローカル変数はサブで扱えませんので注意が必要です。
サブで扱いたい場合は「CALL O__ KEI=10」といったように引渡し変数にします。(これもマニュアル参照)

コモン変数の利点はパラメータ設定画面で内容が確認出来る事と、違うプログラムや一つのプラグラム内のどの階層からも参照出来る事です。
それと、設定画面で入力出来るのでプログラムを編集する事無く入力可能です。
逆に言えば、あるプログラムで設定した値が原因で別のプログラムに影響が出てしまう可能性もあります。
ローカル変数はプログラム内で設定しないといけないし、計算値の確認はしにくいです。
それぞれの長所、短所を考えて使うと良いでしょう。

あと聞いたことはあるかと思いますがGコードマクロやMコードマクロという機能があります。
これは任意のマクロをGコードに登録しておいて、必要なときに「Gコード+アドレス」で領域加工や固定サイクルの様な書式で実行させる事ができます。

最初に「P」に意味は無いと書きましたが、実はGコードマクロを利用する時には意味があります。
「P]+「英字」でマクロを作る事によって呼び出す時に「英字」をアドレスとして扱えます。
(アドレスというのは普段使っている「R」や「I」「H]などの事です)

例)
「G101」に「OREI」というマクロを作ってを登録しておく。

ファイル名「SAMPLE.MIN」
G15H1
G90G0X0Y0S__
G56Z100H_
M8
M3
G101 A_ B_ C_ D_ E_
X0 Y0
G100
M9
G0Z100M5
M2

あらかじめ作る「OREI」仮内容
ファイル名「MACRO.SSB](仮
OREI
G0Z3
G1Z-PA-PB-PC-PD
Z10
RTS

これはX0Y0の位置にA+B+C++D+Eの深さに切り込むだけの全く意味のないプログラムですが、Gコードマクロを使う時のPの扱いの例です。
私の考えでは初期値としてユーザーが指定する変数は「P」+「英字」でマクロを作っておけば、使うときGコードマクロ機能で呼び出す事も、通常通り「CALL」や「MODIN」で呼び出す事もどちらも出来るので便利かと思います。

マクロマクロといっても臆する事はありません。過去のやり取りを見る限り積極的に変数や条件分岐を使っているようなので、すでにマクロと言えるプログラム能力はあるのではないかと思われます。
汎用性や融通性を持たせて作ればいいだけです。「短径と長径を指定するだけで楕円を削るマクロ」とか・・・。「幅を指定するだけで正六角形を削るマクロ」とか、アイデア次第で可能性は無限大です。
まずは、日ごろ何度も作ってしまっている特定の加工などをマクロにすると便利かと思います。
作るのは少々大変ですが(作っていると欲が出てくる)使えば使うほど元がとれます。

簡単に言えばほとんど変数だけで作られたプログラムって感じです。
過去のやり取りからの推測ですがPCの「BASIC」も知っている?ようなのでMMHさんなら問題ないでしょう。
ちなみに必要なら配列変数も扱えますよ。

http://www.sjs.jp/~yosiki/

ここの「OSPカスタムマクロライブラリー」をお手本にしてみてください。
ネット上ではOSPのマクロは中々見つかりませんがこれはいいかなと思いました。
って使ってはいませんが(汗
作り方の参考にしようと思ってダウンロードはしましたが・・・。
擬似ヘリカルなんてのもあります。

人のプログラムを理解するのはたいへんですが、作り方のイメージの参考にはたいへん良いかと思います。

PS
いつも回答が長くて申し訳ありません。

お礼

2004/10/22 21:34

 まーぼーさんいつも本当に役に立つ情報ありがとうございます。

 「P」をつける変数はCALLなどで呼び出すときは、「CALL O_ PA=_」のように「P]+「英字」で呼び出すのでしょうか?GマクロやMマクロでは「P」+「英字」ではなく、「英字」だけでよろしいのですよね?

 あと、「Basic」は昔使ってました。「C」も少しかじりましたが。というまーぼーさんもよほどのプログラマーだと察しますが、なにかやられていたのですか?

質問者
2004/10/20 07:43
回答No.5

http://www.javada.or.jp/
http://www.apc.ehdo.go.jp/
http://www.chubu-center.ac.jp/pro-bin/pro1.cgi/semi/seminar.html

http://203.179.10.30/~seminar/menu.cgi

などです、講習会は予定に入っているところも有りますが、出ていない場合もありますので
まずは、お近くのセンター、カレッジに問い合わせ下さい。
中部とか高度は結構深い講習がありますよ。

お礼

2004/10/20 17:19

 HikaruSaiさんありがとうございます。

 色々あるのですね!近くの所を探してみます!

質問者
2004/10/19 02:15
回答No.4

OSPで分かりやすく言うなら、ポケットミルやラウンドミルと言う領域加工命令が存在しますよね?(マニュアル参照)
あれはメーカーが始めからNCに組み込んだマクロプログラムと言えます。

あのようなプログラム(中は見れないが)と同等かそれ以上の物を変数等を使ってユーザーが作れます。もちろんその気になればまったく同じ物を作れますよ。

拡張子MIN(メインプログラム)ではなくSSBやLIBといった物で登録することによって、どのメインプログラムからも登録したサブプログラムを呼ぶことが出来ます。

一般的なサブプログラムと言うのは今使うメインプログラムに対して専用(今しか使わない)サブプログラムです。
マクロプログラムはサブプログラムではありますが、今後作るどんな加工プログラムからも変数を割り当てて呼び出して使います。

冒頭で申したようにポケットミル等のマクロはアドレスで数値を指定することによって融通性、汎用性を持っています。
伝わりますでしょうか・・・。

たとえば簡単な真円切削・・・、
(普通こんな単純なプログラムであまりマクロ化はしなくて、どうせならIFなどを使いもっと変数を使っていろんな事に対応させるように作る。それこそ領域加工のように)

MACRO.SSB(仮ファイル名)
OENKO(ここの名前で呼び出す)
G90 G0 X=XX Y=YY
Z=PR
G1 Z=PZ F=PF
G91 G41 G1 Y=PI
G03 J-PI
G40 Y-PI
G90 G0 Z=PR
RTS

というサブプログラムを作っておきます。これで
どのメインプログラムからもOENKOを呼ぶ事が出来ます。
 
MAINPRO.MIN(仮ファイル名)
G15H1
G90 G0 X0 Y0 S1000
G56 Z100 H_
M3
CALL OENKO PX=10 PY=10 PI=25 PZ=-10 PR=3 PF=100 PD=1
G0 Z100
M5
M2

こんな感じです・・・。X10Y10の位置にΦ50で深さ10の穴を径補正D1を使って送り100で掘ります。
名付けて
「お粗末で誰も使わないし間違っているかも知れない即席例題用真円切削マクロ」!
何度も言いますがこの程度ではメリットがあまり無いのでマクロにしないです。あくまで例なので(汗汗
これなら今後円弧補間するときにいちいち作らなくてもCALL文で呼び出す際に穴位置や半径等の数値を指定するだけでよいですよね。

CALL(単純呼び出し)以外にもMODIN(モーダル呼び出し)やGコードマクロやMコードマクロなんてのもあります。(マニュアル参照)

フリーでたまに見かけますがヘリカルのオプションが無くてもユーザータスク2があればマクロを使ってヘリカル出来ます。
他にも固定サイクルで途中までG73で途中からG83に変えるマクロとか・・・。アイデア次第です。
私の機械ヘリカル無いので機械があれば作ってみたいところです。

うーん質問の返答になっていますでしょうか(汗

まあ、なんといいますかメインから一時的にあるいは何度か呼び出す別プログラムはサブプログラムです。
ですからマクロプログラムもメインから呼び出すのでサブプログラムの範囲にあります。
違いのはその中身の作りにあるのです。実際にマクロを使う人はメインから指定が必要な変数等の使い方だけ知っていればよくて、中ののプログラム自体を理解する必要も変更するも必要も無いのです。
我々がG83やG73の固定サイクルの中身を知らなくてよい様に・・。

皆さんが言うように面白い(頭は痛くなるが)ので機械があればチャレンジしてみるといいですよ。

私は会員にはなっていませんが何かの役に立つマクロあるかもしれません↓↓
http://www.okumamerit.com/

あとこんなの↓↓
http://homepage1.nifty.com/gch06102/

お礼

2004/10/20 17:18

 まーぼーさんありがとうございます。

 マクロを使うときは、”P"を変数の頭にして使うのでしょうか?「プログラムの本」には載っていなかったのですが・・・・・。
 あと、変数はどこまでつけることが可能なのでしょうか?前、サブプロで1行以上の変数(複数)をつけたところ、違う行のものは引数にならなかったのですが・・・(ちょっと多すぎたこともありますが・・)

 どうか教えてください!

質問者

お礼をおくりました

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

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