LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
W temacie przedstawiam poradnik jak dodać przycisk pomiaru długości narzędzia do LinuxCNC.
-
- Lider FORUM (min. 2000)
- Posty w temacie: 21
- Posty: 16284
- Rejestracja: 18 wrz 2010, 06:17
- Lokalizacja: Kozienice
- Kontakt:
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Nie wiem , nie znam się, czujnik długości narzędzia bez automatycznej wymiany to dla mnie bezsens. Ale jeśli już to nie w G53.
Baza maszynowa jest stała, święta i zgodna z fizyczną.
Baza maszynowa jest stała, święta i zgodna z fizyczną.
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 4
- Posty: 1563
- Rejestracja: 09 lip 2012, 20:34
- Lokalizacja: Poznań
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Amen
Dodane 24 minuty 22 sekundy:
A ponieważ softlimity odnoszą się do bazy maszynowej to powinny zawsze działać poprawnie.
I jeszcze jedna uwaga, jeśli kładziemy czujnik na materiale to mierzymy bazę materiałową. Oczywiście możemy to sobie potem przeliczyć na co chcemy.
Nie tak dawno poprawiałem po kimś skrypty na "firmowym" ploterze. Zamiast używać tabeli narzędzi (były tylko dwa, mocowane na stałe) i baz materiałowych całość była obsługiwane przez przesunięcia osi. No i nie działało i nie dało się poprawić. Zrobić od nowa owszem.
Dodane 24 minuty 22 sekundy:
A ponieważ softlimity odnoszą się do bazy maszynowej to powinny zawsze działać poprawnie.
I jeszcze jedna uwaga, jeśli kładziemy czujnik na materiale to mierzymy bazę materiałową. Oczywiście możemy to sobie potem przeliczyć na co chcemy.
Nie tak dawno poprawiałem po kimś skrypty na "firmowym" ploterze. Zamiast używać tabeli narzędzi (były tylko dwa, mocowane na stałe) i baz materiałowych całość była obsługiwane przez przesunięcia osi. No i nie działało i nie dało się poprawić. Zrobić od nowa owszem.
-
- Sympatyk forum poziom 2 (min. 50)
- Posty w temacie: 1
- Posty: 61
- Rejestracja: 24 gru 2008, 22:09
- Lokalizacja: Limanowa
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
ja używam tego i działa według mnie tak jak powinno:
nie zgodzę się z tym stwierdzeniem, jak masz program na kilka narzędzi to jednak bardzo to ułatwia sprawę i oszczędza trochę czasu.
Kod: Zaznacz cały
O<tool-change> SUB
( Filename: tool-change.ngc )
( LinuxCNC Manual Tool-Change Subroutines for Milling Machines version 1.1: subroutine 1/2 )
( BEFORE USING CHANGE "CONFIGURATION PARAMETERS" BELOW FOR YOUR MACHINE! )
( )
( In the LinuxCNC .ini config file, under the [RS274NGC] section add: )
( # change/add/use SUBROUTINE_PATH to point to the location where these tool-change subroutines are located: )
( SUBROUTINE_PATH = /home/linuxcnc/linuxcnc/nc_files )
( REMAP=M6 modalgroup=6 ngc=tool-change )
( REMAP=M600 modalgroup=6 ngc=tool-job-begin )
( and under the [EMCIO] section add: )
( TOOL_CHANGE_AT_G30 = 0 )
( and ensure neither TOOL_CHANGE_POSITION nor TOOL_CHANGE_QUILL_UP is set. )
( )
( In the LinuxCNC .hal config file, map some input pin to be the probe input, e.g.: )
( net probe-z parport.0.pin-12-in => motion.probe-input )
( )
( Usage: M6 in the g-code will invoke a manual tool change with automatic tool height adjustment. )
( M600 is used at the beginning of the first g-code file of a job so that the next M6 will measure the tool for reference )
( instead of caluculating a tool length offset. It can also be invoked manually through the MDI before a job starts. )
( )
( General theory of operation: touches each tool off to the tool height sensor. The first tool is used as the reference, all )
( subsequent tools adjust the tool offset. The tip of the tool is always placed back at the position it started in before )
( any of the subroutines are called. It is moved away by raising Z to _TravelZ before moving towards the switch, and when )
( moving back from the switch again moves at height _TravelZ before going straight back down to the original position. Set )
( all necessary modes to ensure correct operation no matter what state the program is in when this is called. We eliminate )
( almost all side effects by saving and restoring the modal state. )
( )
( Side effects: sets G30, sets motion mode to G1. )
(------------------------------- CONFIGURATION PARAMETERS ----------------------------------------------)
#<_UseInches> = 0 ( set to 1 to use inches here, or 0 to use millimeters; should match units on tool.tbl dimensions )
#<_TravelZ> = 41.0 ( machine Z coordinate for travelling, typically near max Z to avoid ever hitting the work )
#<_TravelFeed> = 1000.0 ( feedrate used for general Z moves when avoiding G0 )
#<_ProbeX> = 145.0 ( machine X coordinate of switch/touch-off plate )
#<_ProbeY> = 0.0 ( machine Y coordinate of switch/touch-off plate )
#<_ProbeFastZ> = 5.0 ( machine Z coord to move to before starting probe, longest tool should not touch switch at this Z )
#<_ProbeMinZ> = -37.0 ( machine Z coord to stop probe, shortest tool must touch switch at this Z, must be > min Z )
#<_ProbeRetract> = 1.5 ( small distance to retract before approaching switch/touch-off plate second time )
#<_ProbeFastFeed> = 400.0 ( feed rate for moving to _ProbeFastZ )
#<_ProbeFeed1> = 80.0 ( feed rate for touching switch/touch-off plate first time )
#<_ProbeFeed2> = 10.0 ( feed rate for touching switch/touch-off plate second time )
#<_ToolChangeX> = 0.0 ( machine X coordinate to pause at for manual tool changing )
#<_ToolChangeY> = -50.0 ( machine Y coordinate to pause at for manual tool changing )
#<_MistOnDuringProbe> = 1 ( set to 1 for mist, or 2 for coolant, or 0 for nothing during probing, to clear switch of swarf )
(-------------------------------------------------------------------------------------------------------)
O100 IF [ EXISTS[#<_ToolDidFirst>] EQ 0 ]
#<_ToolDidFirst> = 0
O100 ENDIF
O105 IF [ #<_ToolDidFirst> EQ 0 ]
G49 ( clear tool length compensation prior to saving state if this is first time )
O105 ENDIF
M6 ( do the normal M6 stuff )
M70 ( save current modal state )
M9 ( turn off coolant, will be restored on return if it was on )
M5 ( turn off spindle, cannot be on during the probe )
G[21 - #<_UseInches>] ( use inches or millimeters as required here, units will be restored on return )
G30.1 ( save current position in #5181-#5183... )
G49 ( clear tool length compensation )
G90 ( use absolute positioning here )
G94 ( use feedrate in units/min )
G40 ( turn cutter radius compensation off here )
O200 IF [ #<_ToolDidFirst> EQ 0 ]
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>] ( go to high travel level on Z )
G53 G0 X[#<_ProbeX>] Y[#<_ProbeY>] ( to probe switch )
G53 G1 F[#<_ProbeFastFeed>] Z[#<_ProbeFastZ>]( move tool closer to switch -- we shouldn't hit it )
G54 G1 F[#<_ProbeFeed1>] G91 ( use relative positioning )
O101 IF [ #<_MistOnDuringProbe> EQ 1 OR #<_MistOnDuringProbe> EQ 2 ]
M[7 + #<_MistOnDuringProbe> - 1] ( turn on mist/coolant )
O101 ENDIF
G38.2 Z[#<_ProbeMinZ> - #<_ProbeFastZ>] F[#<_ProbeFeed1>] ( trip switch slowly )
G0 Z[#<_ProbeRetract>] ( go up slightly )
G38.2 Z[#<_ProbeRetract>*-1.25] F[#<_ProbeFeed2>] ( trip switch very slowly )
M9 ( turn off mist )
G90 ( use absolute positioning )
#<_ToolZRef> = #5063 ( save trip point )
#<_ToolZLast> = #<_ToolZRef> ( save last tool Z position )
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>] ( return to safe level )
G53 G0 X[#5181] Y[#5182] ( return to where we were in X Y)
G53 G1 F[#<_TravelFeed>] Z[#5183] ( return to where we were in Z )
M72 ( restore modal state )
#<_ToolDidFirst> = 1 ( we have been in this section to set reference value already )
O200 ELSE
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>] ( go to high travel level on Z )
G53 G0 X[#<_ToolChangeX>] Y[#<_ToolChangeY>] ( nice place for changing tool )
O107 IF [#<_UseInches> EQ 1 ]
#<ToolDiamIn> = #5410
#<ToolDiamMM> = [ #<ToolDiamIn> * 25.4 ]
O107 ELSE
#<ToolDiamMM> = #5410
#<ToolDiamIn> = [ #<ToolDiamMM> / 25.4 ]
O107 ENDIF
O102 IF [ #<_current_tool> EQ 0 AND #<ToolDiamIn> EQ 0 ]
(MSG, Change tool then click Resume )
O102 ELSE
#<ToolDiamMM> = [ #<ToolDiamIn> * 25.4 ]
(DEBUG, Change to tool #<_current_tool> with diameter #<ToolDiamMM>mm, #<ToolDiamIn>in then click Resume )
O102 ENDIF
M0 ( pause execution )
G53 G0 X[#<_ProbeX>] Y[#<_ProbeY>] ( to high place directly over switch )
G53 G1 F[#<_ProbeFastFeed>] Z[#<_ProbeFastZ>]( move tool closer to switch -- we shouldn't hit it )
G54 G1 F[#<_ProbeFeed1>] G91 ( use relative positioning )
O103 IF [ #<_MistOnDuringProbe> EQ 1 OR #<_MistOnDuringProbe> EQ 2 ]
M[7 + #<_MistOnDuringProbe> - 1] ( turn on mist/coolant )
O103 ENDIF
G38.2 Z[#<_ProbeMinZ> - #<_ProbeFastZ>] F[#<_ProbeFeed1>] ( trip switch slowly )
G0 Z[#<_ProbeRetract>] ( go up slightly )
G38.2 Z[#<_ProbeRetract>*-1.25] F[#<_ProbeFeed2>] ( trip switch very slowly )
M9 ( turn off mist )
G90 ( use absolute positioning )
#<_ToolZ> = #5063 ( save new tool length )
G43.1 Z[#<_ToolZ> - #<_ToolZRef>] ( set new tool length Z offset, we do this now to show operator even though it has to be set again after M72 )
G53 G1 F[#<_TravelFeed>] Z[#<_TravelZ>] ( return to high travel level )
G53 G0 X[#5181] Y[#5182] ( return to where we were in X Y)
G53 G1 F[#<_TravelFeed>] Z[#5183 - #<_ToolZLast> + #<_ToolZ>] ( return to where we were in Z, ajusting for tool length change )
#<_ToolZLast> = #<_ToolZ> ( save last tool length )
M72 ( restore modal state )
G43.1 Z[#<_ToolZ> - #<_ToolZRef>] ( set new tool length Z offset )
O200 ENDIF
O<tool-change> ENDSUB
M2
kamar pisze:Nie wiem , nie znam się, czujnik długości narzędzia bez automatycznej wymiany to dla mnie bezsens
nie zgodzę się z tym stwierdzeniem, jak masz program na kilka narzędzi to jednak bardzo to ułatwia sprawę i oszczędza trochę czasu.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 62
- Posty: 2337
- Rejestracja: 25 kwie 2016, 11:58
- Lokalizacja: Jodlowa
- Kontakt:
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Poradnik miał na celu zapisanie procedury jak dodać obsługę pomiaru długości narzędzia do LinuxCNC. Co zostanie zapisane w pliku (w tym przypadku) wymiana_narzedzia.ngc zależy od tego jakie mamy potrzeby.
Kod który ja wrzuciłem, to kod znaleziony w sieci. Kod który "działa", ale jak sami zauważyliście (istotnie, mi to umknęło) przesuwa on wszystkie układy współrzędnych (niestety włącznie z G53 którego ruszać się nie powinno). Nie wiem czemu byłem przekonany, że G92 przesuwa tylko układy względne, stąd nie mogłem załapać o co wam chodzi mówiąc o problemie z dużą różnicą w długości narzędzia. Postaram się go przerobić i wrzucić kod który tego nie robi (o ile będę miał możliwość edytowania pierwszego postu).
Co do pomiaru długości narzędzia w maszynie bez automatycznego pomiaru. Dlaczego miałoby to być bez sensu? Miałem maszynę bez pomiaru długości narzędzia i mam maszynę z pomiarem, obydwie posiadają wrzeciona z manualną wymianą narzędzia. Rzadko zdarza się, żeby detal wymagał tylko jednego narzędzia, a odczuwam ogromną różnicę z tą procedurą. Mam przygotowany postprocesor, każda wymiana jest sygnalizowana, otrzymuję informację jakie narzędzie zamontować. Sama wymiana i pomiar trwa kilkadziesiąt sekund i maszyna rusza dalej do pracy.
Kod który ja wrzuciłem, to kod znaleziony w sieci. Kod który "działa", ale jak sami zauważyliście (istotnie, mi to umknęło) przesuwa on wszystkie układy współrzędnych (niestety włącznie z G53 którego ruszać się nie powinno). Nie wiem czemu byłem przekonany, że G92 przesuwa tylko układy względne, stąd nie mogłem załapać o co wam chodzi mówiąc o problemie z dużą różnicą w długości narzędzia. Postaram się go przerobić i wrzucić kod który tego nie robi (o ile będę miał możliwość edytowania pierwszego postu).
Co do pomiaru długości narzędzia w maszynie bez automatycznego pomiaru. Dlaczego miałoby to być bez sensu? Miałem maszynę bez pomiaru długości narzędzia i mam maszynę z pomiarem, obydwie posiadają wrzeciona z manualną wymianą narzędzia. Rzadko zdarza się, żeby detal wymagał tylko jednego narzędzia, a odczuwam ogromną różnicę z tą procedurą. Mam przygotowany postprocesor, każda wymiana jest sygnalizowana, otrzymuję informację jakie narzędzie zamontować. Sama wymiana i pomiar trwa kilkadziesiąt sekund i maszyna rusza dalej do pracy.
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 4
- Posty: 1563
- Rejestracja: 09 lip 2012, 20:34
- Lokalizacja: Poznań
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
No właśnie przy braku automatycznej wymiany czujnik jest przydatny najczęściej bo po każdej wymianie. Z magazynem używa się tylko przy dokładaniu narzędzi a i to niekoniecznie. Ja mierze na stanowisku pomiarowym poza maszyna.
Jak się mocuje narzędzie ręcznie we wrzecionie to jak inaczej mierzyć?
Jak się mocuje narzędzie ręcznie we wrzecionie to jak inaczej mierzyć?
-
- ELITA FORUM (min. 1000)
- Posty w temacie: 9
- Posty: 1473
- Rejestracja: 25 maja 2006, 14:39
- Lokalizacja: koło.wlkp
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Prosta procedurka. Moja płytka PCB z przylutowanym kabelkiem ma 1.62 mm grubości. Można to przerobić na sub , dopisać to w kodzie, wczytać do ngcgui i będzie pod jednym kliknięciem. Można jako *.ngc wczytywać. Edytować tylko pod grubość swojej płytki parametr [#5063+8.38]. W moim przypadku grubość płytki 1.62 + 8.38 ma dać razem = 10 mm, bo na tyle odjeżdża po pomiarze i tak ustawiam offset. Kilka lat używam i działa bezbłędnie.
Kod: Zaznacz cały
%
G21
G91 G38.2 F100 Z-15
G90 G1 F10 Z[#5063+0.05]
G91 G38.2 F10 Z-0.06
G90 G1 F300 Z[#5063+8.38]
(debug,Ruch zakończony. Narzędzie jest 10mm nad materiałem. Offset Z = +10)
%
-
- Lider FORUM (min. 2000)
- Posty w temacie: 28
- Posty: 9340
- Rejestracja: 26 lut 2011, 23:24
- Lokalizacja: mazowieckie
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Można wcale nie mierzyć, na co znam dwie metody.
Pierwsza to pierścień zaciśnięty na części chwytowej wiertła/freza.
Druga to zderzak wewnątrz wrzeciona.
W obydwu przypadkach narzędzia nie da się włożyć głębiej, więc wystarczy wepchnąć do oporu, zacisnąć, i można spokojnie korzystać z tabeli narzędzi.
-
Autor tematu - Lider FORUM (min. 2000)
- Posty w temacie: 62
- Posty: 2337
- Rejestracja: 25 kwie 2016, 11:58
- Lokalizacja: Jodlowa
- Kontakt:
Re: LinuxCNC - pomiar długości narzędzia - instrukcja jak skonfigurować
Tak się przejąłem tym bublem w moim kodzie, że skleciłem nową procedurę (bardzo prostą) do wspomagania wymiany i pomiaru długości narzędzia, na podstawie mojego wcześniejszego programu jak i programu wrzuconego przez kolegę gniazdo. Wieczorem sprawdzę na maszynie. Tymczasem wrzucam, może komuś będzie się chciało rzucić okiem i wyłapie błędy.
Tutaj kod, ale edytor tutaj strasznie go rozwala:
Aby lepiej się czytało wrzucam też obrazek.
Tutaj kod, ale edytor tutaj strasznie go rozwala:
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