Żeby zrozumieć do czego służą tytułowe kody, musisz najpierw dowiedzieć się czym są zmienne lokalne oraz czym jest program Makro. Poniżej linki do wszystkich powiązanych artykułów.
- Programowanie Makro (parametryczne), Fanuc-wprowadzenie
- Zmienne systemowe
- Zmienne lokalne
- Zmienne wspólne
- Funkcje matematyczne Makro
- Warunki, zapętlenia Makro WHILE, IF, GOTO
Program makro to podprogram, ale nie taki zwykły jest on level wyżej . Ale najpierw wymienię cechy wspólne, a dopiero potem różnice i sam będziesz mógł je porównać.
Cechy wspólne
- Zawsze są zaangażowane przynajmniej dwa programy. Program główny i podprogram/Program Makro.
- W obydwóch przypadkach program główny wywołuje podprogram/Program Makro
- Oba mają swoje numery i są za ich pomocą wywoływane
- Po wywołaniu stają się środowiskiem podrzędnym dla środowiska nadrzędnego, którym jest program główny.
- Podprogramy tak samo jak programy makro mogą być wywołane nie tylko przez program główny ale również za pomocą innego podprogramu/Programu Mackro.
- W obu przypadkach, podprogram tak samo jak program Makro zawiera specjalne, powtarzające się dane takie jak np. ścieżka narzędzia lub określony wzór otworów.
- Oba kończą się kodem M99
No dobra skoro jest tyle podobieństw to jaka jest różnica?
Główną różnicą jest elastyczność.
- Podprogramy używają stałych danych, których nie da się zmienić.
- Programując programy Makro używamy elastycznych danych. Robi się to za pomocą zmiennych. Z ich pomocą można bardzo szybko określić wartości przejazdów, ale również bardzo łatwo można je zmieniać
Kolejną różnicą jest sposób wywołania.
- Podprogramy wywołuje się za pomocą funkcji M98 P…. Gdzie P to numer podprogramu.
- Programy Makro wywołuje się naszą funkcją tytułową G65 P…. Gdzie P to numer programu Makro.
- Wywołując podprogramy nie trzeba wpisywać dodatkowych danych
- Wywołując programy Makro trzeba dopisać dodatkowe dane po numerze programu.
Tak wygląda podprogram na nasz kanałek
O100 (KANALEK CZOLOWY FI60, L10) G0 X59 Z1 G1 Z-6 F0.1 G0 Z1 X53 G1 Z-7.8 G0 Z1 X49 G1 Z-6 G0 Z1 X44 G1 Z0 F0.2 G3 X48 Z-2 R2 G1 Z-6 G2 X52 Z-8 R2 G1 X55 G0 Z1 X64 G1 Z0 G2 X60 Z-2 R2 G1 Z-6 G3 X56 Z-8 R2 G1 X54 G0 Z10 M99
A to jest wywołanie tego podprogramu z poziomu programu głównego
O300 (NOZ DO KANALKOW CZOLOWY 4MM) T0303 G55 G96 S40 M3 M98 P100 (wywołanie podprogramu O100) G28 U0 W0 M30
Teraz taki sam kształt określę w programie Makro za pomocą zmiennych
O9000 (KANALEK CZOLOWY L10) G0 X=[59+#24] Z1 G1 Z=[-6-#26] F=[#9] G0 Z1 X=[53+#24] G1 Z[-7.8-#26] G0 Z1 X=[49+#24] G1 Z[-6-#26] G0 Z1 X=[44+#24] G1 Z0 F=[[#9*2] G3 X=[48+#24] Z-2 R2 G1 Z=[-6-#26] G2 X=[52+#24] Z=[-8-#26] R2 G1 X=[55+#24] G0 Z1 X=[64+#24] G1 Z0 G2 X=[60+#24] Z-2 R2 G1 Z=[-6-#26] G3 X=[56+#24] Z=[-8-#26] R2 G1 X=[54+#24] G0 Z10 M99
Tak się wywołuje program Makro z poziomu programu głównego
O300 (NOZ DO KANALKOW CZOLOWY 4MM) T0303 G55 G96 S40 M3 G65 P9000 L1 X0 Z0 F0,1 (wywołanie makra O9000) G28 U0 W0 M30
Dzięki naszemu programowi Makro możemy wykonać taki kanałek jak na rysunku. Mało tego, możemy wykonać taki kanałek na dowolnej średnicy, mający dowolną głębokość. Niezły bajer co nie?
Jak to działa?
Załóżmy, że zamiast głębokości 8mm kanałek będzie miał 13mm, a średnica to 160mm zamiast 60mm.
Nie trzeba pisać całego programu od nowa. Przecież kształt jest ten sam. Wystarczy zmienić 2 parametry w programie głównym.
O300 (NOZ DO KANALKOW CZOLOWY 4MM) T0303 G55 G96 S40 M3 G65 P9000 L1 X100 Z5 F0,1 (wywołanie makra O9000) G28 U0 W0 M30
I tym prostym sposobem w 2 sekundy zrobiliśmy program na nowy element.
Ja podaje przykłady z tokarki, ale z powodzeniem możesz to stosować na frezarce przy obróbce dowolnych kanałków stempli, czy otworów itd.
Skąd wiadomo która litera odpowiada której zmiennej? Specjalnie w tym celu wklejam tu tabelkę z przyporządkowanymi literami.
Lista 1
Argument dla Listy 1 | Zmienna lokalna |
---|---|
A | #1 |
B | #2 |
C | #3 |
D | #7 |
E | #8 |
F | #9 |
H | #11 |
I | #4 |
J | #5 |
K | #6 |
M | #13 |
Q | #17 |
R | #18 |
S | #19 |
T | #20 |
U | #21 |
V | #22 |
W | #23 |
X | #24 |
Y | #25 |
Z | #26 |
Lista 2
Argument dla Listy 2 | Zmienna lokalna |
---|---|
A | #1 |
B | #2 |
C | #3 |
I1 | #4 |
J1 | #5 |
K1 | #6 |
I2 | #7 |
J2 | #8 |
K2 | #9 |
I3 | #10 |
J3 | #11 |
K3 | #12 |
I4 | #13 |
J4 | #14 |
K4 | #15 |
I5 | #16 |
J5 | #17 |
K5 | #18 |
I6 | #19 |
J6 | #20 |
K6 | #21 |
I7 | #22 |
J7 | #23 |
K7 | #24 |
I8 | #25 |
J8 | #26 |
K8 | #27 |
I9 | #28 |
J9 | #29 |
K9 | #30 |
I10 | #31 |
J10 | #32 |
K10 | #33 |
Jak widzisz wrzuciłem dwie listy. Większość maszyn pracuje na liście nr1. Ale oczywiście nie jest to regułą.
Chyba trochę naświetliłem sprawę co nie? A może dalej masz więcej pytań niż odpowiedzi?
G65 P... L... ARGUMENTY
Gdzie
- G65 – Wywołanie programu Makro
- P – Numer programu Makro
- L – Liczba powtórzeń programu Makro
- Argumenty – Zmienne lokalne wysłane do Makra
Przykład
G65 P9000 L2 A300 B200 F50 S200
W tym przykładzie
- wywołałem program nr 9000 (P9000
- będzie on powtórzony 2 razy (L2)
- Przypisałem wartość 300 do zmiennej lokalnej A (#1) i wysłałem do programu 9000
- Przypisałem wartość 200 do zmiennej lokalnej B (#2) i wysłałem do programu 9000
- Przypisałem wartość 50 do zmiennej lokalnej F (#9) i wysłałem do programu 9000
- Przypisałem wartość 200 do zmiennej lokalnej S (#19) i wysłałem do programu 9000
Teraz pewnie się zastanawiasz po co jest funkcja G66 i G67.
Nie jest łatwo wyjaśnić G66 w 1 zdaniu.
Ponownie posłużę się przykładem. W ten sposób myślę, że najlepiej wchodzi do głowy.
Przykład:
Zakładam że otwory są już wykonane. Pozostało wykonanie gwintów. Nie wykonam ich za pomocą standardowej funkcji gwintowania G84. Zastosuję technikę stosowaną przy drobnych gwintach w miękkich materiałach. Czyli wolniejszy posuw na wejściu i szybszy na wyjściu. Dzięki temu unika się zacięć podczas operacji.
Tak wygląda mój program makro
O8000 (GWINTOWANIE 4 OTWORY) G0 G90 Z2 S#19 M3 G1 Z-[ABS[#26]] F[#9*0,8] M5 S#19 M4 G1Z2 F[#9*1,2] M5 M99
Na pierwszy strzał idzie G65
T01 M6 G54 G0 X10 Y10 Najazd nad 1 otwór G43 H07 G0 Z10 G65 P8000 Z10 F425 S850 Otwór 1 G0 X20 Y20 Najazd na otwór nr 2 G65 P8000 Z10 F425 S850 Otwór 2 G0 X40 Y40 Najazd na otwór nr 3 G65 P8000 Z10 F425 S850 Otwór 3 G0 X60 Y60 Najazd na otwór na 4 G65 P8000 Z10 F425 S850 Otwór 4 Z50 Koniec gwintowania M1
A teraz to samo tylko z wykorzystaniem G66
T01 M6 G54 G0 X10 Y10 Najazd nad 1 otwór G43 H07 G0 Z10 G66 P8000 Z10 F425 S850 Otwór 1 G0 X20 Y20 Najazd i wykonanie otworu nr 2 G0 X40 Y40 Najazd i wykonanie otworu nr 3 G0 X60 Y60 Najazd i wykonanie otworu nr 4 G67 Odwołanie funkcji G66 G0 Z50 Koniec gwintowania M1
Wygląda podobnie ale jest jedna zasadnicza różnica: G65 jest funkcją niemodalną . G66 Jest funkcją modalną.
Każdy blok w którym jest zapisany ruch osi po G66 będzie wywoływał program makro do momentu wpisania G67.
G67– Odwołanie funkcji G66
Dlatego G65 raczej stosuje się przy pojedynczych elementach, a G66 przy szeregu. W moim przykładzie był to ciąg gwintów.
Na dokładkę mam jeszcze jedną funkcję G66.1 (niedostępna w niektórych maszynach).
Działa ona podobnie jak G66 z tą różnicą, że makro jest wywoływane po dowolnej komendzie, w każdym następnym bloku po G66.1 do momentu odwołania za pomocą G67.
No dobra tyle na dzisiaj mam nadzieję przedstawiłem wszystko w sposób łatwy do przyswojenia. Jeśli chcesz się podzielić spostrzeżeniami, zapraszam do komentowania. No i oczywiście nie zapomnij zapisać się do newslettera.
Pozdrawiam PrzemoCNC