1. Utworzenie przycisku do pomiaru długości narzędzia
W katalogu z ustawieniami linuxcnc (tam gdzie między innymi znajduje się plik .ini) tworzymy nowy dokument (np. poprzez edytor tekstu) i zapisujemy go pod nazwą panel.xml
Otwieramy dokument w dowolnym edytorze tekstu i tworzymy własny przycisk wklejając poniższy kod:
Tekst w cudzysłowu w linii 4 oznacza nazwę pliku z programem który będzie odpowiedzialny za obsługę pomiaru długości narzędzia. Plik stworzymy później.
Tekst w linii 5 to nazwa jaka będzie wyświetlana na przycisku.
Zapisujemy plik i zamykamy.
W edytorze tekstu otwieramy plik z ustawieniami linuxcnc czyli plik z rozszerzeniem .ini
W sekcji [DISPLAY] dodajemy linię:
Zapisujemy plik i zamykamy.
Uruchamiamy LinuxCNC, na panelu powinien być widoczny nasz nowy przycisk.
Zamykamy LinuxCNC.
2. Stworzenie pliku z programem wykonującym procedurę wymiany i pomiaru długości narzędzia
W katalogu z ustawieniami maszyny tworzymy katalog w którym znajdować się będą nasza algorytmy (czyli na początek program realizujący obsługę wymiany i pomiaru narzędzia) Przechodzimy do katalogu algorytmy i tworzymy w nim plik z programem (za pomocą edytora tekstu) o nazwie jaką podaliśmy w pliku panel.xml Teraz kilka słów o tym jak zaplanowałem swoją procedurę wymiany i pomiaru długości narzędzia:
1) Maszyna ustawia się do wymiany narzędzia na zdefiniowanej pozycji wymiany i wyświetla pierwszy komunikat aby zamontować/wymienić narzędzie. Po zamontowaniu nowego narzędzia operator wciska przycisk kontynuuj.
2) Maszyna ustawia się na zdefiniowanej pozycji w której znajduje się czujnik długości narzędzia i wyświetla drugi komunikat aby zamontować czujnik. (a to dlatego, że nie każda maszyna posiada czujnik zamontowany na stałe. Niektóre posiadają również czujniki dotykowe, które wymagają aby do narzędzia podłączyć przewód. To jest właśnie ten czas aby zamontować czujnik i/lub zamontować przewód). Po zamontowaniu czujnika operator wciska przycisk kontynuuj. 3) Maszyna obniża narzędzie w osi Z ze zdefiniowaną prędkością aż do dotknięcia narzędziem czujnika. Po dotknięciu czujnika oś Z podnosi się bardzo powoli do góry aż do momentu gdy narzędzie przestanie dotykać czujnika i ta pozycja używana jest do ustalenia długości narzędzia. Po zakończeniu procedury narzędzie podnosi się do góry w osi Z do zdefiniowanej pozycji czujnika długości narzędzia i wyświetla trzeci komunikat aby zdemontować czujnik. Po zdemontowaniu czujnika operator klika przycisk kontynuuj i maszyna ustawia się na zdefiniowanej pozycji po wymianie czujnika i jest gotowa do pracy z nowym narzędziem.
A teraz program:
Otwieramy plik wymiana_narzedzia.ngc w edytorze tekstu i piszemy program który będzie wywoływany po wciśnięciu przycisku Nowe narzędzie
Kod: Zaznacz cały
O <wymiana_narzedzia> sub
O100 IF [ EXISTS[#<_FirstTool>] EQ 0 ] (Jeśli nie istnieje parametr (flaga) <_FirstTool>)
#<_FirstTool> = 0 (Tworzy flagę <_FirstTool> i przypisuje jej wartość 0)
O100 ENDIF
O105 IF [ #<_FirstTool> EQ 0 ] (Jeśli flaga <_FirstTool> jest równa 0)
G49 (Anuluje kompensację narzędzia)
O105 ENDIF
M70 (Zapisuje aktualny stan)
G21 (Jednostką odległości są [mm])
G94 (Jednostką ruchu jest [jednostka/min])
G90 (Programowanie absolutne)
G53 G0 Z0 (Podnosi oś Z do bezpiecznej wysokości - w tym przypadku maksymalna wysokość = 0)
G53 G0 X#<_ini[TOOL_CHANGE_POS]X> Y#<_ini[TOOL_CHANGE_POS]Y> (Przesówa w osi X i Y do zdefiniowanego punktu wymiany narzędzia)
G53 G0 Z#<_ini[TOOL_CHANGE_POS]Z> (Przesówa w osi Z do zdefiniowanego punktu wymiany narzędzia)
M100 P0 (Wyświetla komunikat aby zamontować/zmienić narzędzie. Czeka na kliknięcie "Kontynuuj")
G53 G0 Z0 (Podnosi oś Z do bezpiecznej wysokości - w tym przypadku maksymalna wysokość = 0)
G53 G0 X#<_ini[TOOLSENSOR]X> Y#<_ini[TOOLSENSOR]Y> (Przesówa w osi X i Y do zdefiniowanego punktu pomiaru długości narzędzia)
G53 G0 Z#<_ini[TOOLSENSOR]Z> (Przesówa w osi Z do zdefiniowanego punktu pomiaru długości narzędzia)
M100 P1 (Wyświetla komunikat aby zamontować czujnik. Czeka na kliknięcie "Kontynuuj")
G91 (Programowanie przyrostowe)
O200 IF [ #<_FirstTool> EQ 0 ] (Jesli pomiar pierwszego narzędzia)
G38.3 Z-#<_ini[TOOLSENSOR]MAX_CHANGE> F50 (Obniża narzędzie do momentu kontaktu)
G38.4 Z10 F1 (Podnosi narzędzie do utracenia kontaktu)
#<_FirstMeasureZ> = #5063 (Zapisuje wynik pierwszego pomiaru w osi Z)
#<_FirstTool> = 1 (Ustawia flage <_FirstTool>)
O200 ELSE (Jesli pomiar kolejnego narzedzia)
G38.3 Z-#<_ini[TOOLSENSOR]MAX_CHANGE> F50 (Obniża narzędzie do momentu kontaktu)
G38.4 Z10 F1 (Podnosi narzędzie do utracenia kontaktu)
#<_ActualMeasureZ> = #5063 (Zapisuje wynik aktualnego pomiaru w osi Z)
G43.1 Z[#_ActualMeasureZ> - #<_FirstMeasureZ>] (Ustawia dynamicznie offset długości aktualnego narzędzia -działa do momentu wystąpienia M72)
O200 ENDIF
G90 (Programowanie absolutne)
G53 G0 Z#<_ini[TOOLSENSOR]Z> (Podnosi oś Z do zdefiniowanego punktu czujnika)
M100 P2 (Wświetla komunikat aby zdemontować/zabezpieczyć czujnik)
G53 G0 Z #<_ini[AFTER_CHANGE_POSITION]z> (Przesówa oś Z do zdefiniowanego punktu po wymianie narzędzia)
G53 G0 X #<_ini[AFTER_CHANGE_POSITION]x> Y #<_ini[AFTER_CHANGE_POSITION]y> (Przesówa oś X,Y do zdefiniowanego punktu po wymianie narzędzia)
M72 (Przywraca zapisany stan)
G43.1 Z[#_ActualMeasureZ> - #<_FirstMeasureZ>] (Ponownie ustawia dynamicznie offset długości aktualnego narzędzia)
O <wymiana_narzedzia> endsub
m2
Wartości definiujemy w pliku z ustawieniami czyli otwieramy w edytorze tekstu plik z rozszerzeniem .ini i dodajemy definicje wartości wykorzystywanych w programie wymiany długości narzędzia
Kod: Zaznacz cały
[TOOL_CHANGE_POS]
X = 120
Y = 0
Z = 0
[TOOLSENSOR]
X = 220
Y = 13
Z = -48
MAX_CHANGE = 32
[AFTER_CHANGE_POSITION]
X = 120
Y = 0
Z = 0
Linia 68-70: Współrzędne maszynowe na których ustawia się maszyna do pomiaru długości narzędzia. Tak jak pisałem wyżej, na osi Z musi to być wartość ok 2-3mm nad czujnikiem długości narzędzia dla najdłuższego narzędzia jakie montujemy w maszynie.
Linia 71: Wartość zakresu pomiaru (jaki zakres w osi Z obniża się narzędzie w oczekiwaniu na zadziałanie czujnika długości narzędzia). Wartość ta po dodaniu do wartości jaką w osi Z pokonała maszyna od pozycji najwyższej do punktu nad czujnikiem nie może być większa od całego zakresu ruchu w osi Z. Przykład:
Moja maszyna ma zakres ruchu w osi Z równy 90mm.
Najwyższa pozycja w osi Z we współrzędnych maszynowych wynosi 0.
Najniższa pozycja w osi Z we współrzędnych maszynowych wynosi -90.
A więc, jeśli wartość w osi Z na której maszyna ma zdefiniowany czujnik jest równa -48, to znaczy że maszyna może się obniżyć w osi Z jeszcze jedynie o 32mm ponieważ taki ma zakres ruchu, dlatego u mnie MAX_CHANGE = 32
Linia 75-77: Pozycja na jaką maszyna ustawi się po wymianie i zmierzeniu długości narzędzia.