Kamar pewnie zaraz bedzie marudził, że to wszystko da się poskładać z prostych klocków - pewnie, że się da, ale po co wypełniać kilka tabelek, jak można kilka procedur zrobić w jednej?
I tak powstała procedura walca z możliwością korekty stożka, i z fazowaniem krawędzi na prosto i z promieniem wypukłym, oraz wklęsłym. W tej samej procedurze można zrobić półkulę. Jest też możliwość ustawienia, o ile ma odjeżdżać od czoła materiału nóż z osi Z - ilekroć toczę plastik, wkurza mnie nawijający się na materiał wiór, którego nie można usunąć w trakcie, bo nóż ani na chwilę nie odjeżdża od materiału.
Kod: Zaznacz cały
; Author: jthornton
; Zmodyfikował: Z. Maciej "Miki" Bajkowski
(info: Toczenie wałka od zewnątrz)
o<walec> sub
#<Material_Dia> = #1 (=26 Średnica początkowa)
#<Final_Dia> = #2 (=22 Średnica końcowa)
#<przybranie_materialu> = #3 (=0.3 Przybranie)
#<Final_Cut> = #4 (=0.1 Ostatnia warstwa)
#<FeedRate> = #5 (=150 Posuw roboczy)
#<Max_RPM> = #6 (=1500 Maksymalne obroty wrzeciona)
#<Z_EndOfCut> = #7 (=-20 Punkt końcowy na osi Z)
#<Z_StartOfCut> = #8 (=0 Punkt początkowy na osi Z)
#<Coolant> = #9(=8 Chłodziwo 8, 9 wyłączone)
#<korekta> = #10(=0 korekta stożka)
#<szerokosc_fazki> = #11 (=0 Szerokość fazki, zero wyłącza)
#<glebokosc_fazki> =#12 (=0 Głębokość fazki)
#<promien_fazki> =#13 (=0 Promień fazki, zero wyłącza)
#<wkleslosc_fazki> =#14 (=0 Wklęsłość fazki, zero wyłącza)
#<odjazd_z> =#15 (=1 odjazd od materiału w osi Z)
#<odjazd_x> =#16 (=1 odjazd od materiału w osi X)
#<skos_z_p> =#17 (=0 skos na początku w osi Z)
#<skos_z> =#18 (=0 skos na końcu w osi Z)
#<odjazd_z_k> =#19 (=99 pozycja końcowa w osi Z, 99 wyłącza)
#<odjazd_x_k> =#20 (=99 pozycja końcowa w osi X, 99 wyłącza)
; G7: diameter mode
; G96: constant surface speed
G43 G7 G96 D#<Max_RPM> S720
; Turn the OD
M3 M#<Coolant> ; spindle cw, coolant on/off
G0 Z[#<Z_StartOfCut>+#<odjazd_z>]
G0 X#<Material_Dia>
#<Current_Dia>=#<Material_Dia>
o100 while [#<Current_Dia> gt #<Final_Dia>]
O101 if [#<Current_Dia>-#<przybranie_materialu> gt #<Final_Dia>]
#<Current_Dia>=[#<Current_Dia>-#<przybranie_materialu>]
#<Z_EndOfCut> = [#<Z_EndOfCut>+#<skos_z>]
#<Z_StartOfCut>=[#<Z_StartOfCut>-[#<skos_z_p>]]
O101 else
#<Current_Dia>=#<Final_Dia>
#<Z_EndOfCut> = [#<Z_EndOfCut>+#<skos_z>]
#<Z_StartOfCut>=[#<Z_StartOfCut>-[#<skos_z_p>]]
O101 endif
g1 X[#<Current_Dia>] Z#<Z_StartOfCut> F#<FeedRate>
G1 Z#<Z_EndOfCut> x[#<Current_Dia>+#<korekta>] F#<FeedRate>
G1 X[[#<Current_Dia>+#<korekta>]+#<odjazd_x>] Z[#<Z_EndOfCut>-#<skos_z>] F#<FeedRate>
g0 X[#<Current_Dia>+#<korekta>+#<odjazd_x>]
Z[#<Z_StartOfCut>+#<skos_z_p>+#<odjazd_z>] X[#<Current_Dia>+#<odjazd_x>]
o100 endwhile
o110 if [#<szerokosc_fazki> gt 0]
#<szerokosc_fazki_1> = 0
#<glebokosc_fazki_1> = 0
g0 Z[#<Z_StartOfCut>+#<odjazd_z>]
o111 while [#<szerokosc_fazki_1> lt #<szerokosc_fazki>]
#<szerokosc_fazki_1>=[#<szerokosc_fazki_1>+#<przybranie_materialu>/2]
#<glebokosc_fazki_1>=[#<glebokosc_fazki_1>+[#<glebokosc_fazki>*#<przybranie_materialu>/#<szerokosc_fazki>/2]]
o112 if [#<szerokosc_fazki_1> gt #<szerokosc_fazki>]
#<szerokosc_fazki_1> = #<szerokosc_fazki>
o112 endif
o113 if [#<glebokosc_fazki_1> gt #<glebokosc_fazki>]
#<glebokosc_fazki_1> = #<glebokosc_fazki>
o113 endif
x[#<Final_Dia>-#<glebokosc_fazki_1>*2] ( wjazd do fazki na fi #<Final_Dia>)
z[#<Z_StartOfCut>]
o114 if [#<promien_fazki> lt 0.00001]
g1 x[#<Final_Dia>] z[#<Z_StartOfCut>-[#<szerokosc_fazki_1>]] F#<FeedRate> ( toczenie fazki na fi #<sr_pocz>)
o114 endif
o115 if [#<promien_fazki> gt 0]
o116 if [#<wkleslosc_fazki> gt 0]
g2 x[#<Final_Dia>] z[#<Z_StartOfCut>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<FeedRate>
o116 endif
o117 if [#<wkleslosc_fazki> lt 0.000001]
g3 x[#<Final_Dia>] z[#<Z_StartOfCut>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<FeedRate>
o117 endif
o115 endif
g0 x[[#<Final_Dia>]+#<odjazd_x>]
Z[#<Z_StartOfCut>+#<odjazd_z>]
o111 endwhile ( koniec pętli )
o110 endif
o120 if[#<odjazd_x_k> gt 99]
g0 x#<odjazd_x_k>
o120 endif
o130 if[#<odjazd_z_k> gt 99]
Z#<odjazd_z_k>
o130 endif
o140 if[#<odjazd_x_k> lt 99]
g0 x#<odjazd_x_k>
o140 endif
o150 if[#<odjazd_z_k> lt 99]
Z#<odjazd_z_k>
o150 endif
M5 M9 ; stop spindle, all coolant off
o<walec> endsub
Przy korekcie stożka też powstaje schodek na fazce. Ale to się z czasem poprawi, na razie wrzucam jak jest, może komuś się przyda.
Procedura zastępuje całkowicie poprzednie: walec i półkula, i częściowo stożek. Półkulę robi lepiej od poprzedniczki, bo przybranie materiału jest zgodne z zadeklarowanym, i można tę półkulę dowolnie rozciągać lub spłaszczać tocząc owale.
Kolejną zmodyfikowaną procedurą jest czoło
Kod: Zaznacz cały
( ------------------------------ )
( C Z O Ł O )
( ------------------------------ )
( Kamar )
( Time-stamp: <05-02-2012 17:31> )
( ------------------------------ )
(info: Czoło )
o<czolo> sub
#<sr_pocz> = #1 (=26 Średnica początkowa)
#<sr_koncowa> = #2 (=0 Średnica końcowa)
#<poczatek> = #3 (=0 Początek)
#<koniec> = #4 (=-1 Koniec)
#<przybranie_materialu> = #5 (=0.2 Dobieranie)
#<szybkosc_posuwu> = #6 (=50 Posuw)
#<szerokosc_fazki> = #7 (=0 Szerokość fazki, zero wyłącza)
#<glebokosc_fazki> =#8 (=0 Głębokość fazki)
#<promien_fazki> =#9 (=0 Promień fazki, zero wyłącza)
g7
m3 s1
M8
o1 if [#<poczatek> lt #<koniec>]
(msg, Początek musi być większy niż koniec!)
m30
o1 endif
g0 z[#<poczatek>]
g0 x[#<sr_pocz> + 2]
#<akt_pozycja> = #<poczatek>
o100 while [#<akt_pozycja> gt #<koniec>]
#<akt_pozycja> = [#<akt_pozycja> - #<przybranie_materialu>]
o102 if [#<akt_pozycja> lt #<koniec>]
#<akt_pozycja> = #<koniec>
o102 endif
g0 z#<akt_pozycja>
g1 x#<sr_koncowa> f#<szybkosc_posuwu>
g0 z[#<akt_pozycja> + 1]
g0 x[#<sr_pocz> + 2]
o100 endwhile
o110 if [#<szerokosc_fazki> gt 0]
#<szerokosc_fazki_1> = 0
#<glebokosc_fazki_1> = 0
g0 z[#<koniec>]
o111 while [#<szerokosc_fazki_1> lt #<szerokosc_fazki>]
#<szerokosc_fazki_1>=[#<szerokosc_fazki_1>+#<przybranie_materialu>]
#<glebokosc_fazki_1>=[#<glebokosc_fazki_1>+[#<glebokosc_fazki>*#<przybranie_materialu>/#<szerokosc_fazki>]]
o112 if [#<szerokosc_fazki_1> gt #<szerokosc_fazki>]
#<szerokosc_fazki_1> = #<szerokosc_fazki>
o112 endif
o113 if [#<glebokosc_fazki_1> gt #<glebokosc_fazki>]
#<glebokosc_fazki_1> = #<glebokosc_fazki>
o113 endif
x[#<sr_pocz>-#<glebokosc_fazki_1>*2] ( wjazd do fazki na fi #<sr_pocz>)
z[#<koniec>]
o114 if [#<promien_fazki> lt 0.00001]
g1 x[#<sr_pocz>] z[#<koniec>-[#<szerokosc_fazki_1>]] f[#<szybkosc_posuwu>] ( toczenie fazki na fi #<sr_pocz>)
o114 endif
o115 if [#<promien_fazki> gt 0]
g3 x[#<sr_pocz>] z[#<koniec>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] f[#<szybkosc_posuwu>]
o115 endif
g0 x[[#<sr_pocz>]+2]
z[#<koniec>+2]
o111 endwhile ( koniec pętli )
o110 endif
m5
o<czolo> endsub
I kolejna procedura - czop wału. Też z fazowaniem płasko i wypukle obu krawędzi
Kod: Zaznacz cały
( ------------------------------ )
( czop )
( ------------------------------ )
( Z. Maciej Miki Bajkowski)
(---na podstawie kodu Kamara-----)
( Time-stamp: <2012-04-14 00:39> )
(info: Czop )
o<czop> sub
( ------------------------------ )
( Zmienne do tabelki )
( ------------------------------ )
(wszystkie wartosci w milimetrach)
#<srednica_surowego_walka> = #1 (=23 Średnica surowego wałka)
#<dlugosc_detalu> = #2 (=15 Długość gotowego detalu)
#<srednica_walka> = #3 (=22 Średnica gotowego detalu)
#<srednica_czopu> = #4 (=19 Średnica czopu)
#<dlugosc_czopu> = #5 (=10 Długość czopu)
#<glebokosc_fazki_czopu> = #6 (=1 Głębokość fazki czopu)
#<szerokosc_fazki_czopu> = #7 (=1 Szerokość fazki czopu, zero wyłącza)
#<promien_fazki_czopu> = #8 (=0 Promień fazki czopu, zero wyłącza)
#<glebokosc_fazki_walka> = #9 (=0 Głebokość fazki wałka)
#<szerokosc_fazki_walka> = #10 (=0 Szerokość fazki wałka, zero wyłącza)
#<promien_fazki_walka> = #11 (=0 Promień fazki wałka, zero wyłącza)
#<planowanie_czola> =#12 (=0 O ile mm splanować czoło, zero wyłącza)
#<poczatek_z>=#13 (=0 Początek na osi Z)
#<szybkosc_posuwu> = #14 (=120 Posuw)
#<obroty_wrzeciona> = #15 (=1000 Obroty)
#<przybranie_materialu> = #16 (=0.3 Przybranie)
#<odjazd_z> =#17 (=2 odjazd od materiału w osi Z)
(koniec zmiennych)
#<baza_x> = [#<srednica_walka> + 2] (tu zjedzie w osi x noz po pracy, ustawić tyle, by można swobodnie zmierzyć, czy wyjąć materiał)
#<srednica_walka_do_fazki> = #<srednica_walka> (zmienna #<srednica_walka> zmniejsza się w trakcie wykonywania programu, zapamietuję ją więec w zmiennej do późniejszego fazowania)
M3 s#<obroty_wrzeciona> (wlaczamy wrzeciono)
(Planowanie powierzchni)
G0 X[#<srednica_surowego_walka>+2] Z[#<poczatek_z>+#<odjazd_z>]
X#<srednica_surowego_walka>
#<Current_Dia>=#<srednica_surowego_walka>
o60 while [#<Current_Dia> gt #<srednica_walka>]
o61 if [#<Current_Dia>-#<przybranie_materialu> gt #<srednica_walka>]
#<Current_Dia>=[#<Current_Dia>-#<przybranie_materialu>]
o61 else
#<Current_Dia>=#<srednica_walka>
o61 endif
X#<Current_Dia>
Z#<poczatek_z>
G1 Z-[#<dlugosc_detalu>] F#<szybkosc_posuwu>
G0 X[#<Current_Dia>+2]
Z[#<poczatek_z>+#<odjazd_z>]
o60 endwhile
(Koniec planowania powierzchni)
(Planowanie czoła)
g0 z[#<poczatek_z> + #<odjazd_z>]
g0 x[#<srednica_walka> + 2]
#<akt_pozycja> = #<poczatek_z>
o50 while [#<akt_pozycja> gt -[#<planowanie_czola>]]
#<akt_pozycja> = [#<akt_pozycja> - #<przybranie_materialu>]
o52 if [#<akt_pozycja> lt -[#<planowanie_czola>]]
#<akt_pozycja> = -[#<planowanie_czola>]
o52 endif
g0 z#<akt_pozycja>
g1 x0 f[#<szybkosc_posuwu>/3]
g0 z[#<akt_pozycja> + #<odjazd_z>]
g0 x[#<srednica_walka> + 2]
o50 endwhile
(Koniec planowania czoła)
(Toczenie czopa)
G0 z[#<odjazd_z>-[#<planowanie_czola>+#<poczatek_z>]]
o100 while [#<srednica_walka> gt #<srednica_czopu>] ( wykonuj dopoki #<srednica_walka> wiekszy od #<srednica_czopu> )
#<srednica_walka>=[#<srednica_walka>-#<przybranie_materialu>] ( deklarowane zmniejszenie)
o102 if [#<srednica_walka> lt #<srednica_czopu>]
#<srednica_walka> = #<srednica_czopu>
o102 endif
G0 x[#<srednica_walka>+2] (ustawienie noza na pozycji )
x[#<srednica_walka>]
z-[#<planowanie_czola>]
g1 z[[-#<dlugosc_czopu>]-[#<planowanie_czola>+#<poczatek_z>]] f#<szybkosc_posuwu> ( toczenie )
G0 x[#<srednica_walka>+2] ( odjazd od materialu)
z[#<odjazd_z>-[#<planowanie_czola>+#<poczatek_z>]] ( powrot na poczatek i wykonywanie ponowne )
o100 endwhile ( koniec toczenia czopa)
o110 if [#<szerokosc_fazki_czopu> gt 0] (procedura wykonania fazki na wytoczonym czopie, wykonywana tylko, gdy zadeklarowana szerokość fazki jest większa od zera)
#<szerokosc_fazki_czopu_1> = 0
#<glebokosc_fazki_czopu_1> = 0
z[[#<poczatek_z>]-[#<planowanie_czola>]+#<odjazd_z>]
o111 while [#<szerokosc_fazki_czopu_1> lt #<szerokosc_fazki_czopu>] ( wykonuj dopoki #<szerokosc_fazki_czopu_1> wiekszy od zera)
#<szerokosc_fazki_czopu_1>=[#<szerokosc_fazki_czopu_1>+#<przybranie_materialu>] ( deklarowane zmniejszenie)
#<glebokosc_fazki_czopu_1>=[#<glebokosc_fazki_czopu_1>+[#<glebokosc_fazki_czopu>*#<przybranie_materialu>/#<szerokosc_fazki_czopu>]]
o112 if [#<szerokosc_fazki_czopu_1> gt #<szerokosc_fazki_czopu>]
#<szerokosc_fazki_czopu_1> = #<szerokosc_fazki_czopu>
o112 endif
o113 if [#<glebokosc_fazki_czopu_1> gt #<glebokosc_fazki_czopu>]
#<glebokosc_fazki_czopu_1> = #<glebokosc_fazki_czopu>
o113 endif
x[#<srednica_czopu>-#<glebokosc_fazki_czopu_1>*2] ( wjazd do fazki na fi #<srednica_czopu>)
z[[#<poczatek_z>]-[#<planowanie_czola>]]
o114 if [#<promien_fazki_czopu> lt 1]
g1 x[#<srednica_czopu>] z-[[#<szerokosc_fazki_czopu_1>]+[#<planowanie_czola>]] f[#<szybkosc_posuwu>] ( toczenie fazki na fi #<srednica_czopu>)
o114 endif
o115 if [#<promien_fazki_walka> gt 0]
g3 x[#<srednica_czopu>] z-[[#<szerokosc_fazki_czopu_1>]+[#<planowanie_czola>]] r[#<promien_fazki_czopu>] f[#<szybkosc_posuwu>]
o115 endif
g0 x[[#<srednica_czopu>]+2]
z[[#<poczatek_z>]-[#<planowanie_czola>]+#<odjazd_z>]
o111 endwhile ( koniec pętli czopa)
o110 endif (koniec procedury fazowania krawędzi czopa)
o120 if [#<szerokosc_fazki_walka> gt 0] (procedura wykonania fazki na pozostałej krawędzi wałka, wykonywana tylko, gdy zadeklarowana szerokość fazki jest większa od zera)
#<szerokosc_fazki_walka_1> = 0
#<glebokosc_fazki_walka_1> = 0
g0 z-[[#<dlugosc_czopu>]+[#<planowanie_czola>]] x[#<srednica_walka_do_fazki> - #<glebokosc_fazki_walka>*2] ( dojazd do fazki na fi #<srednica_walka_do_fazki>)
o121 while [#<szerokosc_fazki_walka_1> lt #<szerokosc_fazki_walka>] ( wykonuj dopoki #<szerokosc_fazki_walka_1> wiekszy od zera)
#<szerokosc_fazki_walka_1>=[#<szerokosc_fazki_walka_1>+#<przybranie_materialu>] ( deklarowane zmniejszenie)
#<glebokosc_fazki_walka_1>=[#<glebokosc_fazki_walka_1>+[#<glebokosc_fazki_walka>*#<przybranie_materialu>/#<szerokosc_fazki_walka>]]
o122 if [#<szerokosc_fazki_walka_1> gt #<szerokosc_fazki_walka>]
#<szerokosc_fazki_walka_1> = #<szerokosc_fazki_walka>
o122 endif
o123 if [#<glebokosc_fazki_walka_1> gt #<glebokosc_fazki_walka>]
#<glebokosc_fazki_walka_1> = #<glebokosc_fazki_walka>
o123 endif
x[#<srednica_walka_do_fazki>-#<glebokosc_fazki_walka_1>*2] ( wjazd do fazki na fi #<srednica_czopu>)
z-[[#<dlugosc_czopu>]+[#<planowanie_czola>]] x[#<srednica_walka_do_fazki> - #<glebokosc_fazki_walka_1>*2]
o124 if [#<promien_fazki_walka> lt 1]
g1 x[#<srednica_walka_do_fazki>] z-[[#<szerokosc_fazki_walka_1>]+[#<planowanie_czola>]+#<dlugosc_czopu>] f[#<szybkosc_posuwu>] ( toczenie fazki na fi #<srednica_czopu>)
o124 endif
o125 if [#<promien_fazki_walka> gt 0]
g3 x[#<srednica_walka_do_fazki>] z-[[#<szerokosc_fazki_walka_1>]+[#<planowanie_czola>]+#<dlugosc_czopu>] r[#<promien_fazki_walka>] f[#<szybkosc_posuwu>]
o125 endif
g0 x[[#<srednica_walka_do_fazki>]+2]
z-[[#<dlugosc_czopu>]+[#<planowanie_czola>]]
o121 endwhile ( koniec pętli czopa)
o120 endif (koniec procedury fazowania pozostałej krawędzi wałka)
g0 x[[#<srednica_walka_do_fazki>]+2]
G0 z0
M30
o<czop> endsub