Temat potraktujcie jako wyzwanie, może sposób na zabicie koronawirusowej nudy, a może i na zrobienie czegoś całkiem użytecznego ...
Od dawna chodziło mi po głowie napisanie programu na radełkowanie nożem tokarskim.
Oczywiście nóż musi być specjalny, bo kąty są wariackie.
Teoretycznie problem jest trywialny - należy naciąć gwint wielozwojny, prawy na lewym, i gotowe.
W praktyce już tak różowo nie jest.
Ale do rzeczy.
Może gdzieś to jest napisane, ale ja się nigdy tym nie interesowałem, więc było to dla mnie zaskoczeniem.
Otóż gdy kontroler napotka kod G33 to czeka na sygnał indeksu z enkodera na wrzecionie. Zasadniczo wszyscy o tym wiedzą, że jest to po to, żeby kolejnymi przejściami trafiać w już naciętą nitkę gwintu.
Ale nigdzie nie widziałem rozważań na temat tego, co się stanie gdy kilka kodów G33 wystąpi bezpośrednio po sobie. Otóż kontroler czeka na indeks enkodera tylko przy pierwszym, kolejne jedzie już po kolei bez sprawdzania pozycji wrzeciona.
Co jest jeszcze ciekawsze, synchronizowana jest wyłącznie prędkość, bez znaczenia jest kierunek. Żeby było jeszcze ciekawiej, jeżeli kolejne ruchy G33 odbywają się w innych kierunkach, to suport zwalnia prze zmianie kierunku, po czym przyśpiesza i ruch coraz bardziej się rozjeżdża względem indeksu wrzeciona.
Krótko mówiąc uruchamiając poniższą sekwencję otrzymamy dość przypadkowe cuda :
Kod: Zaznacz cały
G0 Z0
G33 Z100 K1
G33 Z0 K1
G33 Z100 K1
G33 Z0 K1
G33 Z100 K1
G33 Z0 K1
G33 Z100 K1
G33 Z0 K1
; i tak dalej ...
Ale ma to też dobrą stronę.
Mianowicie nie ma potrzeby robić wybiegu wzdłuż osi Z aby przesunąć względem siebie kolejne nitki gwintu wielozwojnego. Taki wybieg skutecznie uniemożliwia wykonanie gwintu w przypadku gdy dalej pojechać się nie da.
Wybieg można zrobić nawet wzdłuż osi X, ważne żeby miał odpowiednią długość, bo będzie jechany z prędkością zsynchronizowaną z wrzecionem.
Ważne jest jeszcze to, że jeżeli każdy z następujących po sobie kodów G33 ma być osobno synchronizowany z indeksem wrzeciona, to trzeba po wykonaniu poprzedniego zerwać synchronizację, na przykład wykonując ruch G0 o niezerowej długości. Można nawet pojechać o milimetr w tą i z powrotem i kolejne G33 będzie już czekało na indeks wrzeciona.
Dzisiaj osiągnąłem spore postępy, ale program jest daleki od ideału.
Testowałem jeszcze z G61 i trochę mi się linie rozjeżdżały, teraz jest wpisane G64P0.5, ale jeszcze nie sprawdzałem na tokarce.
Ogólnie maszyna fajnie wygląda gdy tnie te helisy, jakby to dopracować, toby fajne rzeczy można było robić ...
Program to sub ngcgui, poniżej listing, oraz plik w załączniku.
Kod: Zaznacz cały
o<radełko> sub
#<Material_Dia> = #1 (=100 Średnica)
#<Pitch> = #2 (=3 Skok)
#<Mult> = #3 (=10 Krotność)
#<Z_Start> = #4 (=1 Początek w Z)
#<Z_End> = #5 (=-0 Koniec w Z)
#<Rpm> = #6 (=170 Obroty)
#<Coolant> = #7 (=1 <> Chłodziwo)
#<ToolNumber> = #8 (=99 Narzędzie)
#<Passed> = 0
#<Base_Dia> = [#<Material_Dia> + 2*#<Pitch>] ; 2*pitch because diameter mode
M6 T#<ToolNumber> G43 ;chose tool and load offsets
M3 S[#<Rpm>] G4P3 ; spindle start CW and wait for full speed
G64 P0.5
G7 ; diameter mode
G18 ; select XZ plane
G21 ; millimeters
o1 if [#<Coolant> eq 1]
M8
o1 endif
G0 X[#<Base_Dia>]
G0 Z#<Z_Start>
o100 while [#<Mult> gt #<Passed>]
#<Start>=[#<Base_Dia>-#<Passed>*2*#<Pitch>/#<Mult>] ; 2*pitch because diameter mode
G0 X[#<Start>]
G33 X[#<Material_Dia>] Z[#<Z_Start>] K[#<Pitch>]
G33 Z[#<Z_End>] K[#<Pitch>]
G0 X[#<Start>]
G33 X[#<Material_Dia>] Z[#<Z_End>] K[#<Pitch>]
G33 Z[#<Z_Start>] K[#<Pitch>]
#<Passed>=[#<Passed>+1]
o100 endwhile
G0 X[#<Base_Dia>]
M5 M9 ; stop spindle, all coolant off
G0 Z#<Z_Start>
o<radełko> endsub