Witam ponownie. Dalej jesteśmy w temacie programowania za pomocą zmiennych,a to jest kolejny artykuł poświęcony tej tematyce. Poniżej znajdują się linki do wszystkich.
- Programowanie Makro (parametryczne), Fanuc-wprowadzenie
- Zmienne systemowe
- G65, G66, G66.1, G67 Wywołanie Makra
- Zmienne wspólne
- Funkcje matematyczne Makro
- Warunki, zapętlenia Makro WHILE, IF, GOTO
Dzisiaj porozmawiamy o zmiennych lokalnych.
Zastanawiam się do czego je porównać, żebyś zrozumiał ich działanie.
Kalkulator.
Pamięć kalkulatora to takie zmienne lokalne. Coś jak pamięć podręczna. Licząc na kalkulatorze wpisujemy cyfry (zmienne lokalne) wykonujemy na nich działania (programy Macro). Gdy skończymy nasze obliczenia wciskamy przycisk CE, lub C i nasze obliczenia oraz pamięć są wyzerowane. Identycznie jest ze zmiennymi lokalnymi Po ich użyciu nie są już potrzebne i zostają wyzerowane. Jest kilka sposobów na wyzerowanie zmiennych lokalnych:
- Naciśnięcie przycisku Reset
- Naciśnięcie przycisku awaryjnego (czerwony grzyb)
- Wczytanie kodu M30
- Wczytanie kodu M99
- Ręczne wyzerowanie zmiennej
#1=200 Przypisanie wartości 200 dla parametru #1 ------ G1 Z#1 Wykonanie ruchu przy pomocy zmiennej ------ #1=#0 Wyzerowanie zmiennej #1
Jako, że zmienna #0 ma zawsze wartość zerową, zrównanie go z naszym parametrem zeruje wartości zapisane w tabeli przy #1.
Zmienne lokalne przenoszą dane wpisane przez programistę do szkieletu Macro. Czym on jest? Zobaczysz w przykładach. Zmienne są bezpośrednio przypisane do danego Macra i nie mogą być pomiędzy nimi transferowane. W programach Macro każda zmienna lokalna ma przypisaną konkretną literę z alfabetu angielskiego.
Dwie listy argumentów
Lista 1 – Składa się tylko z 21 zmiennych , którym przypisano litery. To ta lista jest używana przez większość maszyn i zapewniam Cię, że ta ilość jest w zupełności wystarczająca.
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 |
Tak wiem nie są odpowiednio przyporządkowane. Dlaczego tak jest? Nie mam pojęcia.
Dwie tajemnice
1 Co z pozostałymi zmiennymi? Przecież zostało jeszcze 12 miejsc którym nie została przyporządkowana żadna litera.
#10, #12, #14, #15, #16, #27, #28, #29, #30, #31, #32 i #33.
Nadal możesz ich zdefiniować, ale już wewnątrz podprogramu.
2 Dlaczego użyto tylko 21 liter alfabetu, a nie 26?
G L N O P To ich brakuje prawda? Odpowiedź jest oczywista.
- G Jest funkcją przygotowawczą i jest już użyta w bloku przy komendzie G65
- L Określa ilość powtórzeń w bloku przy komendzie G65
- N Numer bloku przy komendzie G65
- O Jest przeznaczone wyłącznie dla numerowania programów
- P W bloku przy komendzie G65 określa numer wezwanego podprogramu
Lista 2 – Niezbyt dużo maszyn używa tej listy. Ktoś wpadł na pomysł że 21 znaków to za mało i zrobił listę z 33 znakami.
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 |
No dobra tabele już znasz. Teraz pasowałoby wyjaśnić Ci jak się nimi posługiwać.
Aby to zrozumieć musisz wiedzieć jak działają funkcje G65, G66, G66.1, G67 . Klikając w jedną z nich zostaniesz przeniesiony na osobną stronę tam szczegółowo wyjaśniam jak one działają. Dzisiaj trochę powtórzę. No nie wszystko, tylko bardziej ogólnie.
W praktyce wygląda to tak, że za pomocą funkcji G65 zmienne lokalne zostają przeniesione z programu głównego do podprogramu tam są podstawiane w odpowiednio przygotowany szkielet programu.
Przykład 1:
Zapis Macra przy użyciu Listy 1. Mam do nagwintowania 2 otwory w odstępach takich jak na rysunku, na głębokość 10mm. Chcę zastosować takie parametry:
- Obroty 850obr/min
- Posuw na nominalny 425mm/min (850obr/min x skok 0,5mm)
- Posuw na wjeździe 80% posuwu nominalnego
- Posuw na wyjeździe 120% posuwu nominalnego
- Głębokość gwintu 10mm
Głównym celem makra jest wykonanie gwintu z mniejszym posuwem i wyjście z niego z większym. Ten sposób gwintowania używa się przy gwintowaniu drobnozwojowym w miękkich materiałach, w celu uniknięcia zacięć.
To jest nasz szkielet Macro, o którym wspominałem wcześniej. Albo inaczej, to jest podprogram
O8000 (GWINTOWANIE 2 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
Tak będzie wyglądała część programu odpowiedzialna za transfer naszych zmiennych do Macro za pomocą G65
T01 M6 G54 G0 X10 Y10 Najazd nad 1 otwór G43 H07 G0 Z10 G65 P8000 Z10 F425 S850 Otwor 1 G91 X20 Y20 Najazd na otwór nr 2 G65 P8000 Z10 F425 S850 Otwor 2 G90 Z50 Koniec gwintowania M1
Chyba w miarę jasno pokazane jest na przykładzie 2 otworów jak działa transmisja zmiennych lokalnych do makra.
W programie wpisałem Z10, F425, S850. Te wartości zostały wczytane odpowiednio pod numery #26, #9, #19, i wysłane do naszego Macra.
Pewnie chciałbyś wiedzieć jak wczytywać Listę 2.
Przykład 2:
G65 A10 C20 I30 J40 K50 I60 I70 K80
Posługując się tabelą zobaczysz, że do odpowiednich zmiennych zostały przypisane wartości.
- #1=10
- #3=20
- #4=30
- #5=40
- #6=50
- #7=60
- #10=70
- #9=80
Wygląda jak pomieszanie z poplątaniem zwłaszcza dla początkujących. Ale jeśli przyjrzymy się tabeli po krótkiej chwili widzimy zależność. Do I1 została przyporządkowana pierwsza I z bloku, do drugiej , druga itd.
Czy można używać zmiennych lokalnych w głównym programie?
Oczywiście że można. Co prawda są one przewidziane dla programów Macro, ale zasady są po to żeby ich łamać 🙂 .
Najprostrzym przykładem wykorzystania zmiennych w głównym programie jest wiercenie takich samych otworów w materiałach różnej twardości. Często się zdarza, że materiały od różnych dostawców, a nawet od tego samego tylko, że z innej serii będą się różniły twardością.
Program na podstawowy materiał będzie wyglądał tak:
N10 T01 (WIERTLO 5MM) N20 M06 N30G90 G00 G54 X100.0 Y100 (NAJAZD NA POZYCJE 1 OTWORU) N35S1000 M03 N40 G43 Z10 H01 M08 N50 G99 G83 R2.5 Z-80 Q10 F180 (WIERCENIE OTWORU 1) N60 X200 (WIERCENIE OTWORU 2) N70 Y200 (WIERCENIE OTWORU 3) N80 G80 G00 Z10 M09 N90 G28 Z10 M05 N110 M30
Następne będą się różnic tylko trzema rzeczami
- Q- głębokość wiercenia do momentu wycofania
- S- obroty
- F-posuw
Nasuwa się pytanie: czy trzeba pisać osobny program dla każdego materiału z osobna?
Nie
Wystarczy, że sparametryzuje kluczowe dla mnie dane .
Uniwersalny program będzie wyglądał w ten sposób
N10 T01 (WIERTLO 5MM) N11 #1=1500 (OBROTY 1500 MIEKKI 1000 TWARDY) N12 #2=240 (POSUW 240 MIEKKI 150 TWARDY) N13 #3=15 (ODWIOROWANIE 15 MIEKKI 10 TWARDY) N20 M06 N30 G90 G00 G54 X100.0 Y100 (NAJAZD NA POZYCJE 1 OTWORU) N35 S#1 M03 N40 G43 Z10 H01 M08 N50 G99 G83 R2.5 Z-80 Q#3 F#2 (WIERCENIE OTWORU 1) N60 X200 (WIERCENIE OTWORU 2) N70 Y200 (WIERCENIE OTWORU 3) N80 G80 G00 Z10 M09 N90 G28 Z10 M05 N110 M30
Łatwe, prawda? Tak jak mówiłem, zmienne dają Ci niewyobrażalną przewagę.
Zagnieżdżanie się zmiennych lokalnych w podprogramach
O podprogramach pisałem już w tym artykule. Dlatego nie będę się rozpisywał czym one są. Tutaj wyjaśnię jak parametry zagnieżdżają się w podprogramach.
Teraz jak to po po chłopsku wyjaśnić co to jest zagnieżdżanie? Załóżmy, że masz główny program. Ten program wywołuje podprogram za pomocą funkcji G65. W podprogramie mamy kolejne wywołanie podprogramu za pomocą tej samej funkcji itd. aż do czterech poziomów w dół. Przy każdym wywołaniu konkretne zmienne zostają przypisane do konkretnych podprogramów. Rzadko się spotyka żeby programować głębiej niż 2 poziomy.
Powyższa mapa pokazuje jak zmienne najpierw zagnieżdżają się w programie głównym, a potem 4 razy w podprogramach. Za każdym razem zmienne zagnieżdżają się w kolejnych poziomach, ale jednocześnie nie są kasowane z poprzednich. Dopiero Funkcja M99 kasuje zmienne lokalne z danego podprogramu, a na końcu funkcja M30 kasuje zmienne z głównego programu. Zmienne lokalne nie mogą być przekazywane z jednego podprogramu do drugiego. Dlatego nazywają się one lokalne. Ale jeśli pojawi się taka potrzeba, Fanuc ma dla nas rozwiązanie. Są nim zmienne wspólne. Ale o nich w następnym wpisie, bo ten i tak już wystarczająco się wydłużył.
Pozdrawiam i zapraszam do komentowania.