Zamocz
: 06 cze 2021, 20:32
Co prawda mam sikacz do chłodziwa, ale postanowiłem go na razie nie montować, przede wszystkim z braku cichego kompresora, bo frezarka stoi w mieszkaniu i trzeba szanować zdrowie sąsiadów...
Alternatywą jest zanurzanie co jakiś czas narzędzia w pojemniku z olejem, bo problem dotyczy przede wszystkim obróbki aluminium i klejenia się wióra do frezów i wierteł.
Ponieważ ma być wszystko automatycznie, to narzuca się użycie jakiegoś kodu M.
Użycie definiowanych przez użytkownika kodów z zakresu M100-M199 jest nieporozumieniem, bo to ma być zwykły podprogram korzystający ze zmiennych Linuxcnc. Dlatego postanowiłem przemapować nieistniejący póki co kod M89.
Kodu nie ma ale przemapować się dał.
Nawiasem mówiąc, można go też wywoływać normalnie, czyli o<zamocz> call ale po co tyle pisaniny?
Zasadniczo wszystko jest w komentarzach, ale napiszę kilka słów.
Sekcja [LUBRICANT] w pliku INI opisuje położenie puszki ze smarem. ZPOS to wysokość na której ma się znaleźć koniec narzędzia, więc smaru musi być trochę wyżej.
Parametr Z_SAFE_POS dodany do sekcji [AXIS_Z] jest zasadniczo nadmiarowy, oznacza maksymalne górne położenie zetki w koordynatach maszynowych. Można by było to wyliczyć z innych parametrów w pliku ini, ale tak jest prościej, bezpieczniej i elastyczniej.
Program ma uwzględniać offset narzędzia, to znaczy że dowolne narzędzie ma być zanurzone o tyle samo.
Można dodać warunek sprawdzający parametr 5400 - Tool Number, i narzędzie o określonym numerze zanurzać mniej lub bardziej. Linia z G4 definiuje oczywiście jak długo narzędzie ma pozostać w kąpieli i też można sobie zmienić.
Co do samej jazdy, to są dwie zasady.
Pierwsza, że narzędzie ma wracać skąd wyruszyło, co jest raczej oczywiste.
Druga zasada wynika z moich prywatnych standardów. Otóż mam na maszynie zamontowanych kilka rzeczy na stałe, co grozi kolizją przy ruchach na przełaj. Dlatego istnieje założenie że w lewo nie ma niczego i na brzegach stołu nie ma niczego. Dlatego wszystkie ruchy których z zasady nie da się przewidzieć skąd się zaczną, odbywają się najpierw G53G0X0 a potem dookoła stołu. Przy innej maszynie może być potrzeba to zmienić.
Program zapamiętuje czy były uruchomione kody modalne zmieniane w programie i na koniec je przywraca.
UWAGA! Program nie był testowany na rzeczywistej maszynie. Na symulatorze działa, ale niczego nie gwarantuję. Trzeba sprawdzić i tyle.
Alternatywą jest zanurzanie co jakiś czas narzędzia w pojemniku z olejem, bo problem dotyczy przede wszystkim obróbki aluminium i klejenia się wióra do frezów i wierteł.
Ponieważ ma być wszystko automatycznie, to narzuca się użycie jakiegoś kodu M.
Użycie definiowanych przez użytkownika kodów z zakresu M100-M199 jest nieporozumieniem, bo to ma być zwykły podprogram korzystający ze zmiennych Linuxcnc. Dlatego postanowiłem przemapować nieistniejący póki co kod M89.
Kodu nie ma ale przemapować się dał.
Nawiasem mówiąc, można go też wywoływać normalnie, czyli o<zamocz> call ale po co tyle pisaniny?
Zasadniczo wszystko jest w komentarzach, ale napiszę kilka słów.
Sekcja [LUBRICANT] w pliku INI opisuje położenie puszki ze smarem. ZPOS to wysokość na której ma się znaleźć koniec narzędzia, więc smaru musi być trochę wyżej.
Parametr Z_SAFE_POS dodany do sekcji [AXIS_Z] jest zasadniczo nadmiarowy, oznacza maksymalne górne położenie zetki w koordynatach maszynowych. Można by było to wyliczyć z innych parametrów w pliku ini, ale tak jest prościej, bezpieczniej i elastyczniej.
Program ma uwzględniać offset narzędzia, to znaczy że dowolne narzędzie ma być zanurzone o tyle samo.
Można dodać warunek sprawdzający parametr 5400 - Tool Number, i narzędzie o określonym numerze zanurzać mniej lub bardziej. Linia z G4 definiuje oczywiście jak długo narzędzie ma pozostać w kąpieli i też można sobie zmienić.
Co do samej jazdy, to są dwie zasady.
Pierwsza, że narzędzie ma wracać skąd wyruszyło, co jest raczej oczywiste.
Druga zasada wynika z moich prywatnych standardów. Otóż mam na maszynie zamontowanych kilka rzeczy na stałe, co grozi kolizją przy ruchach na przełaj. Dlatego istnieje założenie że w lewo nie ma niczego i na brzegach stołu nie ma niczego. Dlatego wszystkie ruchy których z zasady nie da się przewidzieć skąd się zaczną, odbywają się najpierw G53G0X0 a potem dookoła stołu. Przy innej maszynie może być potrzeba to zmienić.
Program zapamiętuje czy były uruchomione kody modalne zmieniane w programie i na koniec je przywraca.
UWAGA! Program nie był testowany na rzeczywistej maszynie. Na symulatorze działa, ale niczego nie gwarantuję. Trzeba sprawdzić i tyle.
Kod: Zaznacz cały
O<zamocz> SUB
(file zamocz.ngc)
(--- header ---)
(tuxcnc 2021)
(M89 routine for immerse tool in lubricant )
(replaces non existing M89 g-code)
(we assume that, lubricant can is permanently mounted)
(you must have the following in your INI file)
(without semicolons and you can change parameters)
;[RS274NGC]
;FEATURES = 4
;REMAP=M89 modalgroup=6 ngc=zamocz
;[LUBRICANT]
;XPOS = 230
;YPOS = 0
;ZPOS = -100
;[AXIS_Z]
;Z_SAFE_POS = 0
(--- end of header ---)
(--- store existing parameters ---)
#<current_x> = #5420
#<current_y> = #5421
#<current_z> = #5422
#<absolute> = #<_absolute> (remember in local variable if G90 was set)
#<mist> = #<_mist> (remember in local variable if M7 was set)
#<feed> = #<_feed> (remember feed value)
#<flood> = #<_flood> (remember in local variable if M8 was set)
#<spindle_on> = #<_spindle_on> (remember in local variable if spindle was on)
G90 (absolute mode)
M9 (coolant off)
M5 (spindle off)
G53 G0 Z[#<_ini[AXIS_Z]Z_SAFE_POS>] (spindle up to safe position)
G53 G0 X0
G53 G0 Y[#<_ini[LUBRICANT]YPOS>]
G53 G0 X[#<_ini[LUBRICANT]XPOS>]
G53 G0 Z[#<_ini[LUBRICANT]ZPOS> + #5403]
G4 P1
G53 G0 Z[#<_ini[AXIS_Z]Z_SAFE_POS>] (spindle up to safe position)
G53 G0 X0
O<restore_spindle_on> if [#<spindle_on>]
O<restore_spindle_cw> if [#<_spindle_cw>]
M3
O<restore_spindle_cw> else
M4
O<restore_spindle_cw> endif
O<restore_spindle_on> endif
G0 Y#<current_y>
G0 X#<current_x>
G0 Z#<current_z>
(--- restore parameters ---)
O<restore_inc> if [#<absolute> NE 1]
G91 (restore only if it was set on entry:)
O<restore_inc> endif
O<restore_mist> if [#<mist>]
M7 (restore only if it was set on entry:)
O<restore_mist> endif
O<restore_flood> if [#<flood>]
M8 (restore only if it was set on entry:)
O<restore_flood> endif
(--------------------------)
O<zamocz> ENDSUB
M2