Znaleziono 1 wynik

autor: MlKl
30 paź 2012, 06:27
Forum: LinuxCNC (dawniej EMC2)
Temat: NGCGUI - podstawowe procedury, ciut bardziej funkcjonalne
Odpowiedzi: 19
Odsłony: 3891

NGCGUI - podstawowe procedury, ciut bardziej funkcjonalne

Rok temu jeszcze nie wiedziałem, że będę pracował na CNC, dziś już złapałem trochę praktyki. Oczywiście - daleko mi do doświadczenia starych wyjadaczy. Ale od zawsze lubiłem sobie życie upraszczać w miarę dostępnych możliwości.

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
Procedura ma jeszcze wadę - gubi się, gdy początek w osi Z nie jest ustawiony na zero.

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

Dodałem fazowanie zwykłe i wypukłe, jak komuś potrzeba wklęsłego, to wystarczy zmodyfikować według poprzedniego kodu na fazowanie walca.


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
Oczywiście wszystkie fazy wykonywane są z przybraniami, jakie zadeklarowano, czyli można temperować wałki jak ołówki, czy kończyć je półkulami.

Wróć do „NGCGUI - podstawowe procedury, ciut bardziej funkcjonalne”