44) Warunki, zapętlenia Makro WHILE, IF, GOTO.

To jest już siódmy wpis na temat programowania Makro. Dzisiaj wyjaśnię na czym polega ta ogromna moc, o której mówię praktycznie od samego początku.

Wszystkie poprzednie wpisy są bardzo ważnie i wiedza o nich jest niezbędna. Ale nie będą zbyt przydatne jeśli będziesz chciał ich użyć pojedynczo. Potrzebują one czegoś jeszcze. Taki final touch. Niezbędne są jakieś formy manipulacji, żeby nasze działania stały się decyzyjne.

Proces decyzyjny w Fanucu jest oparty na najstarszym, a zarazem najprostszym języku komputerowym: BASIC. Był on najpotężniejszym językiem w swoich czasach. Do dzisiaj ewoluował już tak wiele razy, że mało co przypomina swojego pradziadka. Ale zasady działania i struktury programu do tej pory istnieją.

Weźmy na przykład nasze tytułowe funkcje zapętlania (WHILE, IF, GOTO) . To cały czas jest język Basic

  • WHILE– Dopóki
  • IF– Jeśli
  • IF_THEN ; Jeśli_Wtedy
  • GOTO– Idź do

Zasadę działania pokażę Ci na przykładzie.

If I will have a money, I will buy a car. ( Jeśli będę miał pieniądze, kupie sobie samochód)

Teraz nasze zdanie podzielę na 2 części. Warunek: If I will have a money(Jeśli będę miał pieniądze) . Rozwiązanie warunku Jeśli masz pieniądze kupisz sobie samochód, natomiast jeśli nie masz tych pieniędzy, samochodu nie będzie. Tak albo tak. Warunek prosty sam w sobie, ale bardzo potężny jeśli zastosujesz go w programowaniu makro.

IF

Funkcja decyzyjna lub Funkcja warunkowa. Jak kto woli

W programie zapisuje się ją w ten sposób:

IF [warunek zapętlenia] GOTOn

Tłumacząc to po ludzku. Dopóki warunek zapisany w nawiasach będzie spełniany, TRUE program będzie przeskakiwał do bloku n. Natomiast jeśli warunek nie będzie spełniony, FALSE maszyna przejdzie do następnego bloku.

#1=10      (naddatek w osi Z)

N10 G0 X300 Z=[0+#1] 
N20 G1 X100 F0.3
N30 G0 Z=[1+#1]
N40 X300

#1=[#1-2] 
IF [#1 GE 0] GOTO10

N50 G28 U0 W0
N60 M30

Jest to prosty program na planowanie czoła. Ale bardzo dobrze obrazuje zasadę działania funkcji IF.

W pierwszym przejściu naddatek wynosi 10mm. Program dochodzi do odejmowania od #1 są odejmowane 2mm. W tym momencie Nasz #1 wynosi 8. Następnie dochodzimy do naszego warunku. Czytając mój poprzedni wpis odczytasz, że GE znaczy większy lub równy.

Czyli tłumacząc na nasz język warunek wygląda tak:

Jeśli #1 jest większy lub równy 0 idź do bloku N10 .

Tak więc biorąc wynik z działania widzimy, że warunek jest spełniony i program przeskakuje do bloku N10.

Schemat działania funkcji IF

Po kolejnym przejściu znowu program dochodzi do działania #1= [#1-2]. Tym razem zamiast od 10 maszyna odejmuje od 8. Przechodzimy blok dalej, nasz warunek znowu jest spełniony, czyli przeskakujemy do bloku N10.

Po sześciu przejściach, gdy już maszyna splanuje na Z0, dochodzimy do działania. Wynik nie może być inny niż -2. Po przejściu do następnego bloku okazuje się, że warunek nie jest spełniony, bo -2 jest mniejsze niż 0. W tym momęcie maszyna automatycznie przeskakuje do bloku następnego czyli N50.

To tylko jeden przykład ale myślę, że zasada działania jest jasna.

Można za pomocą zmiennej określić nr bloku, do którego ma nastąpić skok.

#40=60
......
IF [#1 LT 0] GOTO#40
......
......
......
N60 M30

GOTO

Funkcja GOTO może być używana bez dodawania innych takich jak IF . Jest to bezwarunkowy skok. Czyli jeśli zapiszesz w programie:

.........
GOTO 100
N50 .........
N60..........
N70..........
N80..........
N90..........
N100 G28 U0 W0
N110 M30

Maszyna przeskoczy wszystkie bloki pośrednie i przejdzie do N100.

Starajcie się utrzymać porządek w programach. Numerujcie bloki po kolei. Najlepiej co 5 lub 10, żeby w razie czego można było dopisać bloki pomiędzy. Jeśli będziesz miał bałagan w programie to maszyna nie będzie wiedziała, do którego bloku ma przeskoczyć, bo na przykład ma dwa lub 3 bloki ponumerowane jako N100. To, że teraz wiesz co chcesz zrobić nie znaczy, że za tydzień będziesz wiedział co miałeś na myśli.

IF-THEN

Ta funkcja nie działa we wszystkich wersjach oprogramowania.

Fanuc 10/11/15/21 działa

Fanuc 0/16/18 Nie działa

Głównym celem polecenia IF-THEN jest prostota. Gdy do wyboru są tylko dwie opcje, ta funkcja jest idealnym rozwiązaniem. Zastępuje połączenie dwóch poprzednich, czyli IF i GOTO .

Po spodem dwie wersje. Obie mają takie same znaczenie.

N10 #100=30

N30 IF [#100 EQ 30] GOTO50
N40 IF [#100 EQ 40] GOTO60
N50 #102=50
GOTO100
N60 #102=10

N70..........
N80..........
N90 M30

Ten sam program można zapisać w ten sposób

N10 #100=30

N30 IF [#100 EQ 30] THEN #102=50
N40 IF [#100 EQ 40] THEN #102=10
N50..........
N60 M30

Prościej łatwiej szybciej. A przecież o to nam chodzi.

AND OR

Przy bardziej złożonych kalkulacjach nie wystarczy wynik zero jedynkowy. Czasami trzeba porównać jedną lub więcej wartości.

I znowu angielski się przydaje. If I will have a money and time I will take a vacation. ( Jeśli będę miał pieniądze i czas pojadę na wakacje). Dwa warunki muszą być spełnione. Co z tego jak będziesz miał pieniądze, ale czasu brak. Nie pojedziesz na wakacje.

W drugim przypadku jest trochę inaczej. If I earn money or borrow from my frend I will take a vacation. ( Jeśli zarobie pieniądze lub pożyczę je od przyjaciela, pojadę na wakacje). Wystarczy, że spełnisz jeden warunek z dwóch. Nie musisz pożyczać pieniędzy jeśli je zarobisz i na odwrót. Podsumowując

  • AND– oba warunki muszą się zgadzać żeby całe wyrażenie było prawdą
  • OR– wystarczy że jeden warunek się zgadza żeby całe wyrażenie było prawdą

Jest jeszcze funkcja XOR, ale jest ona tak rzadko stosowana że nie będą Ci zawracał nią głowy.

WHILE

Funkcja zapętlenia.

WHILE [WARUNEK] DO1

W prostym tłumaczeniu:

Dopóki będzie spełniany warunek w nawiasach wykonuj część programu zakończoną słowem END1.

Zasada działania funkcji WHILE

Pokażę to na takim samym przykładzie co funkcja IF.

WHILE [#1 GE 0] DO1
#1=10      (naddatek w osi Z)

N10 G0 X300 Z=[0+#1] 
N20 G1 X100 F0.3
N30 G0 Z=[1+#1]
N40 X300

#1=[#1-2] 
END1

N50 G28 U0 W0
N60 M30

Dopóki zmienna #1 będzie większa lub równa 0, wykonuj część programu zakończoną wyrazem END1.

Numery przy słowach DO i END są ze sobą ściśle powiązane. Służą utrzymaniu porządku w programie gdybyśmy chcieli programować pętle do kilku poziomów. Sterowanie Fanuc pozwala zagnieździć pętle do trzech poziomów. Gdzie DO1 będzie odwoływać się do END1 a DO3 do END3.

Poniższe schematy pokazują zasadę działania zagnieżdżania.

Jeden poziom pętli
Dwa poziomy pętli
Trzy poziomy pętli

Jeden i dwa poziomy pętli są najczęściej spotykane. Pierwszy jest łatwy do zrozumienia. Drugi jest już trochę trudniejszy.

Trzy poziomy są rzadziej używane i zrozumienie ich może przysporzyć trochę kłopotu. Powtórzę to jeszcze raz: Musisz utrzymać porządek w programie, bez tego nawet podwójne zagnieżdżanie będzie skutkowało alarmami.

To by było tyle na dzisiaj. Nie pozostaje nic innego tylko siadać i pisać programy Makro. Masz wszystko wyłożone na tacy. Wydaje mi się, że prościej się wyjaśnić tego nie da. Ale Gdybyś miał jakieś wątpliwości zapraszam do komentowania lub do bezpośredniego kontaktu. Nie zapomnij o subskrybowaniu. Po prawej stronie jest zakładka Newsletter. Pozdrawiam PrzemoCNC

3 odpowiedzi na “44) Warunki, zapętlenia Makro WHILE, IF, GOTO.”

  1. Pięknie.
    Właśnie to wykorzystuję.
    Tylko czy w przykładzie z WHILE deklaracja:
    #1=10
    powinna być raczej przed pętlą WHILE ?
    Dziękuję za łopatologiczne tłumaczenia. 🙂

  2. Super lekcja. Co jakiś czas wracam do lektury by się douczyć i jeszcze bardziej wykorzystać potencjał maszyny, za każdym razem mnie oświeca i jeszcze bardziej ulatwiam sobie życie stojąc przy maszynie.

    Dzięki wielkie!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.