変数講座5 マクロにして使い回す
前回まででプログラムの汎用性はだいぶ高まりました。今回はこのプログラムをマクロにして、専用プログラムに組み込めるようにしましょう。
% O100(ANA AKE) #100=130(F) #101=0(Z KIRIKOMI START) #102=-2.0(Z KIRIKOMI END) #103=0.2(KIRIKOMI RYOU) #104=10.(ANA KEI) #105=6.(KOUGU KEI) #106=[#104-#105]/2 #107=0(X CYUUSHIN) #108=0(Y CYUUSHIN) G91G28Z0 G90G00G54X#107Y#108 Z50. M3S1300 M8 -------------------- (ここから分割) G01X[#106+#107]F1000 Z1.F2000 Z0.2F100 N10(KAKOU START) WHILE[#101GT#102]DO1 G03I-#106Z#101F#100 #101=#101-#103 END1 I-#106Z#102 I-#106 G01X#107 Z10.F2000 -------------------- M9 M5 G91G28Z0 G28Y0 M30 %
前回までに作成したプログラムを分割していきます。#106の計算はマクロの中で行うようにするので削除します。G54の座標系選択時に穴中心に移動してますが、これもマクロ内で行いますのでここでは加工原点(X0,Y0)に移動させます。分割したマクロプログラムのプログラム番号はここでは"O10"にします。
(メインプログラム) % O100(ANA AKE) #100=130(F) #101=0(Z KIRIKOMI START) #102=-2.0(Z KIRIKOMI END) #103=0.2(KIRIKOMI RYOU) #104=10.(ANA KEI) #105=6.(KOUGU KEI) #107=0(X CYUUSHIN) #108=0(Y CYUUSHIN) G17 G91G28Z0 G90G00G54X0Y0 Z50. M3S1300 M8 M9 M5 G91G28Z0 G28Y0 M30 % -------------------- (マクロプログラム) % O10(ANA AKE MACRO) G01X[#106+#107]F1000 Z1.F2000 Z0.2F100 N10(KAKOU START) WHILE[#101GT#102]DO1 G03I-#106Z#101F#100 #101=#101-#103 END1 I-#106Z#102 I-#106 G01X#107 Z10.F2000 %
#100番台はコモン変数ですのでメインプログラムでも使用する可能性があり、万が一気付かずに使用してしまうと非常に危険ですので#1〜#33のローカル変数に変更しましょう。メインプログラムからの引数を受け取る際に自動的にローカル変数に入りますので、それを考慮して変更していきます。まずどの変数に何をいれるかを決めていきます。
(マクロプログラム)
%
O10(ANA AKE MACRO)
(A=ANA KEI)
(B=Z KIRIKOMI START)
(C=Z KIRIKOMI END)
(K=KIRIKOMI RYOU)
(D=KOUGU KEI)
(F=F)
(X=X CYUUSHIN)
(Y=Y CYUUSHIN)
G01X[#106+#107]F1000
Z1.F2000
Z0.2F100
N10(KAKOU START)
WHILE[#101GT#102]DO1
G03I-#106Z#101F#100
#101=#101-#103
END1
I-#106Z#102
I-#106
G01X#107
Z10.F2000
%
このようにどの変数に何を入れるのかを記述しておくと、後で見たときに間違えたり迷ったりせずに済みます。それではコモン変数をローカル変数に変えていきましょう。因みに引数は下記表のアルファベットにローカル変数が対応しています。
アルファベット | 対応する ローカル変数 |
---|---|
A | #1 |
B | #2 |
C | #3 |
I | #4 |
J | #5 |
K | #6 |
D | #7 |
E | #8 |
F | #9 |
H | #11 |
M | #13 |
Q | #17 |
R | #18 |
S | #19 |
T | #20 |
U | #21 |
V | #22 |
W | #23 |
X | #24 |
Y | #25 |
Z | #26 |
(マクロプログラム) % O10(ANA AKE MACRO) (A=ANA KEI) (B=Z KIRIKOMI START) (C=Z KIRIKOMI END) (K=KIRIKOMI RYOU) (D=KOUGU KEI) (F=F) (X=X CYUUSHIN) (Y=Y CYUUSHIN) #30=[#1-#7]/2 G01X#24Y#25F2000 G01X[#30+#24]F1000 Z1.F2000 Z0.2F100 N10(KAKOU START) WHILE[#2GT#3]DO1 G03I-#30Z#2F#9 #2=#2-#6 END1 I-#30Z#3 I-#30 G01X#24 Z50.F2000 M99 %
これでマクロプログラムの出来上がりです。一番最後の"M99"はメインプログラムに戻る指令です。ではメインプログラムからこのマクロプログラムを呼び出してみましょう。マクロプログラムの呼び出しには"G65"を使用します。
(メインプログラム)
%
O100(ANA AKE)
#100=130(F)
#101=0(Z KIRIKOMI START)
#102=-2.0(Z KIRIKOMI END)
#103=0.2(KIRIKOMI RYOU)
#104=10.(ANA KEI)
#105=6.(KOUGU KEI)
#107=0(X CYUUSHIN)
#108=0(Y CYUUSHIN)
G17
G91G28Z0
G90G00G54X0Y0
Z50.
M3S1300
M8
G65P10A#104B#101C#102K#103D#105F#100X#107Y#108
M9
M5
G91G28Z0
G28Y0
M30
%
これで完成です。10ブロック以上あったコードを1ブロックにすることが出来ました。では実際に専用プログラムに組み込んでみましょう。加工するのは下図の穴とザグリで、加工原点はワークの中心にします。
% O101(SAMPLE) #107=4.0(KOUGU KEI) G17 G91G28Z0 G90G00G54X0Y0 Z50. M3S2000 M8 (6.5 ANA) G65P10A6.5B0C-10.5K0.13D#107F200X15.Y15. G65P10A6.5B0C-10.5K0.13D#107F200X15.Y-15. G65P10A6.5B0C-10.5K0.13D#107F200X-15.Y-15. G65P10A6.5B0C-10.5K0.13D#107F200X-15.Y15. (11 ZAGURI) G65P10A11.B0C-6.5K0.36D#107F200X15.Y15. G65P10A11.B0C-6.5K0.36D#107F200X15.Y-15. G65P10A11.B0C-6.5K0.36D#107F200X-15.Y-15. G65P10A11.B0C-6.5K0.36D#107F200X-15.Y15. M9 M5 G91G28Z0 G28Y0 M30 %
今回は工具径を変数にしてみました。穴位置や穴径などが違っても、マクロプログラム一つあれば簡単にプログラミングすることができます。
- 当サイトのPDF版を作成しました。教育資料やリファレンスとして使用して頂ければと思います。
→ NCプログラムの教科書 - 上級編も作成しました。
→ NCプログラム上級編