CL-253ローダー自働化への挑戦
第5回
「自働化を行うためのプログラム知識 マクロプログラム」
ここが解からないと機械を動かす等 やりたいことが出来ません。
なぜならローダーは「マクロプログラム」で形成されています。
今回は、ネットの記事を引用します。
マクロの中の~マクロの演算~までを今回は説明します。
NCプログラムのマクロを説明(ファナック編)
最初にマクロプログラムの目的
さて、普段仕事をしていると加工したことがあるプログラムを、編集して使うこともあると思いますが面倒な作業ですよね?
単純に1ヵ所ずつ編集したり、置換機能を使ったり・・・全部直して「OK」と思っても後で「あっ、直し忘れてた」なんてこと、よくありませんか?
マクロ機能を使うとプログラムを短くか、見やすく、計算も自動化できたりします。
もちろん何でも楽になるわけでありません。
しかし、例えば自分好みの穴加工用サイクルや、ポケット穴用のサイクルも作ることができます。手打ちでプログラミングしている人にはメリットが大きい機能です。
マクロは難しそうなイメージがありますが、簡単なマクロでも十分プログラミングの楽になります。
分厚い取説より簡単にまとめてます。この機会にぜひ目を通してみてください。
・ローダープログラムも決まった動きなので、マクロを使う事で、名番が変わっても変更が簡単になるという事からマクロを使っているのです。
NCプログラムのマクロって?
NCプログラムのマクロを簡単に説明すると、仮の数字「変数」を使ったり、「演算」したり、条件により「分岐や繰返し」するのがマクロプログラムです。これらを表現するためマクロ文を使います。詳しく説明していきます。
簡単なマクロプログラム
まず簡単なマクロプログラムを紹介します。
G0 G90 G54 X0 Y0
#1=100.
X#1Y10.
M30
プログラムの説明
- 最初に X0Y0 に移動します。
- 次に X100.Y10. に移動して終わりです。
#1 は変数といいファナックでは「#」と「数字」の組み合わせて使います。「#1=100」で変数 #1 に数値 100 が代入されます。(定義ともいいます。)
したがって「X#1」 は「X100.」という意味になります。
変数
変数にはローカル変数、コモン変数、システム変数の3つがあり、「#」の後ろの数字で決まります。
また、初期状態で、定義されてない変数を未定義変数といい「#0」で表されます。
ローカル変数
ローカル変数は#1~#33で表される変数です。メインプログラム、サブプログラム(G65、G66)にそれぞれ個別に用意された変数でリセットやプログラムエンドで初期化されます。
G65、G66はマクロ呼び出しと呼ばれる機能です。サブプログラムを実行するとき、ローカル変数に数値を定義する機能があります。
X軸の移動するマクロプログラムの例
O100 (MAIN)
#1=500.
G0 G90 X#1
G65 P101 A600.
X#1
M30
O101 (SUB)
G0G90X#1
M99
上のプログラム例は次の順番で動きます。
- X500 (メインプログラムで#1には500が入っているため)
- X600 (サブプログラムO101の#1には600が入ってるため)
- X500 (メインプログラムの#1は500から変わってないため)
G65P101A600. でサブプログラムO101のローカル変数 #1 に数値を入れることできます。
対応するアルファベットと変数には決まりがあり引数と呼ばれます。
次にサブプログラムについて説明します。
サブプログラムの呼び出しについて
サブプログラムを呼び出すには「M98」や「G65」を使いますが、M98で呼び出されサブプログラムはメインプログラムのローカル変数と同じ扱いになります。
O100(MAIN)
#1=200
M98P101
M30
O101(SUB)
G0 G90 X#1
M99
結果はG0 G90 X200. に位置決め動作するだけです。 M98 で呼び出されたサブプログラムの #1 とメインプログラムで定義された #1 は同じになります。
マクロ呼び出しについて
マクロ呼び出し
G65 P「プログラム番号」 L「 繰返し回数」 「引数指定」
例)G65 P101 L2 A10. B20.
呼び出しマクロプログラムは O101、繰返しは2回 、マクロに渡すデータはA10とB20という意味になります。
マクロ呼び出しの引数の使い方には2通りあります。
- G L O N P 以外の A~Z を1回だけ使う場合(引数指定Ⅰ)
- A B C を一回と I J Kを10組まで使う場合(引数指定Ⅱ)
*使わない引数は省略できます。どちらの引数指定になるかは自動で判別されます。
引数指定Ⅰ
A~Z を使うタイプ(G L N O P 以外)
G65 P101 A10. C12. U30. X20.
基本的に引数の順番は関係ありませんが、I J K を使う場合はアルファベットの順番通りに入力が必要です。 I→J→K
#10, #12, #14~#16, #27~#33 のローカル変数は引数でサブプログラムへ受け渡しできません。

引数指定Ⅱ
ABC IJK を使うタイプ(ABCを一回IJKを最大10組)
G65 P102 A10. B11. C12. I20. J21. K22. I30. J31. K32.
I J K は入力の順序でマクロの#4から順番に割り当てられます。

コモン変数
コモン変数は#100~#199と#500~#999の変数です。制御装置やカスタムマクロのオプションにより使える範囲が違います。
コモン変数はメインプログラムとサブプログラム共通で1つか存在しない変数です。
#100~#199は制御装置の電源が切れると初期化されます。
#500~#999は制御装置の電源が切れても記憶されています。
システム変数
システム変数は#1000より大きい変数で補正関係のデータやNCの状態などを扱うことができます。
登録してある工具径補正を読取りや書換え、有効なGコードやMコードを調べたりもできます。
システム変数は用途により決まっていますが、制御装置により違います。取説で確認してください。
未定義変数
未定義変数は中身がない「空」という意味で#0であらわされます。
#0に数値を代入することはできません。
変数の初期値は「空」です。変数を初期化したいときは #1=#0 と入力します。
未定義変数の演算について
位置決め指令の座標値が未定義(空)の場合無視されます。
#1=#0
G0 G90 X#1 Y100.
→G0 G90 Y100.と同じ
X#1は無視されます。
未定義変数が演算された場合は 0 として扱われます。
#1=#0
#2=#1+5
→ #2=5
#2=#1*5
→ #2=0
比較演算子の EQ と NE は #0と 0 は異なる値として処理されます。
その他の比較演算子(GT, GE, LT, LE)は #0 と 0 は同じ値として処理されます。
次回はこの変数を使用したプログラム内での計算 ~演算とは~ を説明していきます。
今回はここまでです。

No responses yet