Wiesz - naukowcy podobno wyliczyli, że trzmiel ma za małą powierzchnię skrzydeł, żeby mógł latać. A to bydlę tego nie wie, i se lata w najlepsze
Tuxcnc znalazł błąd, bo go szukał tam, gdzie wiadomo było od dawna, że jest. Myszkę na poziomym blacie mam i przy maszynie. Właśnie skończyłem implementować fazki wewnętrzne. Testowałem na takim układzie:
Materiał - wałek fi 60 rozwiercony na fi 10. Zadanie - roztoczyć na 20 mm zakończyć go na długości 10 mm stożkiem zewnętrznym i wewnętrznym, sfazować na szerokość 2 mm promieniem 4 mm.
Dwie zakładki, i jest. Z wymianą noży, etc.
Trzy średnice z fazami, stożkami etc to sto pól formularza niewyjęte, biorąc pod uwagę, że i noży trzeba będzie ustawić więcej. Tylko po co, jak szybciej ustawię to na trzy razy po jednej? Biorę pod uwagę możliwości ludzkiej percepcji. Jedną operację od jednej do drugiej średnicy da się w myśli powiązać z fazką na którymś z jej końców, albo i na obu końcach. Trzech nie.
Kod: Zaznacz cały
; Author: Z. Maciej "Miki" Bajkowski
;
; logiczny operator "lub" (OR)
; alternatywa wykluczająca (XOR) prawdziwe, gdy nieparzysta liczba argumentów jest prawdziwa
; logiczny operator "i" (AND)
; równe (EQ)
; nierówne (NE)
; większe od (GT)
; większe lub równe (GE)
; mniejsze (LT)
; mniejsze lub równe (LE)
;
; ATAN[Y]/[X] Four quadrant inverse tangent
; ABS[arg] wartość absolutna
; ACOS[arg] Inverse cosine
; ASIN[arg] Inverse sine
; COS[arg] cosinus
; EXP[arg] e raised to the given power
; FIX[arg] zaokrąglenie w dół
; FUP[arg] zaokrąglenie w górę
; ROUND[arg] zaokrąglenie
; LN[arg] logarytm
; SIN[arg] sinus
; SQRT[arg] Square Root
; TAN[arg] Tangens
; EXISTS[arg] szuka zmiennej
(info: Toczenie wałka od zewnątrz od prawej do lewej, planowanie czoła, fazowanie krawędzi, półkule, stożki, roztaczanie otworów)
o<toczenie> sub
#<stozek> =#1 (=0 1 włącza procedurę stożka)
#<korekta> = #2(=0 korekta stożka w mm...)
#<kat_stozka> =#3 (=0 ... lub kąt w stopniach)
#<sr_pocz> = #4 (=0 Średnica początkowa)
#<sr_koncowa> = #5 (=0 Średnica końcowa)
#<przybranie_materialu> = #6 (=0.3 Przybranie)
#<posuw> = #7 (=150 Posuw roboczy)
#<z_koncowe> = #8 (=-10 Punkt końcowy na osi Z)
#<z_pocz> = #9 (=0 Punkt początkowy na osi Z)
#<ostatnia_warstwa> = #10 (=0 Ostatnia warstwa)
#<posuw_koncowy> = #11 (=0 Posuw kończący)
#<czolo> =#12 (=0 planowanie czoła, 0 wyłącza)
#<posuw_czolo> = #13 (=0 Posuw czoła)
#<szerokosc_fazki> = #14 (=0 Szerokość fazki, zero wyłącza)
#<glebokosc_fazki> =#15 (=0 Głębokość fazki)
#<promien_fazki> =#16 (=0 Promień fazki, zero wyłącza)
#<wkleslosc_fazki> =#17 (=0 Wklęsłość fazki, zero wyłącza)
#<odjazd_z> =#18 (=1 odjazd od materiału w osi Z)
#<odjazd_x> =#19 (=1 odjazd od materiału w osi X)
#<skos_z_p> =#20 (=0 korekta skosu na początku w osi Z)
#<skos_z_k> =#21 (=0 korekta skosu na końcu w osi Z)
#<odjazd_z_k> =#22 (=99 pozycja końcowa w osi Z, 99 wyłącza)
#<odjazd_x_k> =#23 (=99 pozycja końcowa w osi X, 99 wyłącza)
#<pomijaj> =#24 (=0 ile milimetrów średnicy pominąć)
#<pomijaj_czolo> =#25 (=0 ile milimetrów czoła pominąć)
#<pomijaj_faza> =#26 (=0 ile milimetrów szer. fazki pominąć)
#<noz_wstepny>=#27 (=0 Nóż wstępny)
#<noz_czolo>=#28 (=0 Nóż do czoła)
#<noz_koncowy>=#29(=0 Nóż kończący)
#<woda> = #30(=8 Chłodziwo 8, 9 wyłączone)
; stałe wpisane na sztywno
#<ilosc_nozy_w_tabeli>=9
#<dl_stozka>=[abs[#<z_koncowe>]+abs[#<z_pocz>]]
#<korekta_polozenia_fazki> = [#<szerokosc_fazki>*#<korekta>/[#<dl_stozka>-#<czolo>]]
o15 if[#<posuw_koncowy> le 0]
#<posuw_koncowy>=#<posuw>
o15 endif
; G7: diameter mode
; G96: constant surface speed
; Włączamy procedurę
G43 G7 G96 S720 D1500
M3 M#<woda> ; start wrzeciona i uruchomienie chłodziwa
o2000 if[#<sr_pocz> ge #<sr_koncowa>]
#<roznica_srednic>=[#<sr_pocz>-#<sr_koncowa>]
#<sr_pocz> = [#<sr_pocz>-#<pomijaj>] (pomijania używamy,gdy poprawiamy detal i cześć procedury już jest wykonana)
#<akt_start_x>=#<sr_pocz>
#<z_k_stozka>=0
#<akt_pozycja>=0
(Dojazd na pozycję roboczą)
g0 z[#<z_pocz>+#<odjazd_z>]
g0 x[#<sr_pocz> +#<odjazd_x>]
(Planowanie czoła)
o40 if[#<czolo>gt 0]
#<akt_pozycja>=[#<z_pocz>-#<pomijaj_czolo>]
o43 if[[#<noz_czolo> gt 0]and[#<noz_czolo> lt #<ilosc_nozy_w_tabeli> ]]
o<loadtool> call [#<noz_czolo>]
g0 Z[#<z_pocz>+#<odjazd_z>] X[#<sr_pocz>+#<odjazd_x>]
o43 endif
o45 if[#<posuw_czolo> eq 0]
#<posuw_czolo>=#<posuw>
o45 endif
o50 while [#<akt_pozycja> gt -[#<czolo>]]
#<akt_pozycja> = [#<akt_pozycja> - #<przybranie_materialu>]
o52 if [#<akt_pozycja> lt -[#<czolo>]]
#<akt_pozycja> = -[#<czolo>]
o52 endif
g0 z#<akt_pozycja>
g1 x0 f[#<posuw_czolo>]
g0 z[#<akt_pozycja> + #<odjazd_z>]
g0 x[#<sr_pocz> +#<odjazd_x>]
o50 endwhile
o40 endif
(Koniec planowania czoła)
#<z_pocz>= [#<z_pocz>+#<akt_pozycja>] (Przesuwamy start na osi Z o grubość splanowanego czoła)
o100 while [#<akt_start_x> gt #<sr_koncowa>]
o101 if [#<akt_start_x>-#<przybranie_materialu> gt #<sr_koncowa>]
#<akt_start_x>=[#<akt_start_x>-#<przybranie_materialu>]
#<z_koncowe> = [#<z_koncowe>+#<skos_z_k>]
#<z_pocz>=[#<z_pocz>-[#<skos_z_p>]]
#<posuw1>=#<posuw>
o25 if[[#<noz_wstepny> ne 0]]
o<loadtool> call [#<noz_wstepny>]
g0 Z[#<z_pocz>+#<skos_z_p>+#<odjazd_z>] X[#<akt_start_x>+#<odjazd_x>]
o25 endif
o101 else
#<akt_start_x>=#<sr_koncowa>
#<posuw1>=#<posuw_koncowy>
#<z_koncowe> = [#<z_koncowe>+#<skos_z_k>]
#<z_pocz>=[#<z_pocz>-[#<skos_z_p>]]
o103 if[[#<noz_koncowy> gt 0]and[#<noz_koncowy> lt #<ilosc_nozy_w_tabeli> ]]
o<loadtool> call [#<noz_koncowy>]
g0 Z[#<z_pocz>+#<skos_z_p>+#<odjazd_z>] X[#<akt_start_x>+#<odjazd_x>]
o103 endif
o101 endif
o107 if[#<stozek> eq 1]
o80 if [#<sr_pocz> lt #<sr_koncowa>]
#<akt_startt> = #<sr_koncowa>
o85 while [#<akt_startt> gt #<sr_pocz>]
#<akt_startt> = [#<akt_startt> - #<przybranie_materialu>]
o88 if [#<akt_startt> lt #<sr_pocz>]
#<akt_startt> = #<sr_pocz>
o88 endif
g0 z#<z_pocz>
g0 x[#<akt_startt>]
; g1 x[#<sr_koncowa>] z[#<z_pocz> - [-1*[[#<sr_koncowa> - #<akt_startt>] * #<dl_stozka>] / [#<sr_koncowa> - #<sr_pocz>]]] f#<posuw>
g1 z[#<z_koncowe>] f#<posuw>
o85 endwhile
o80 endif
o90 if [#<sr_pocz> gt #<sr_koncowa>]
#<akt_koniec> = #<sr_pocz>
o95 while [#<akt_koniec> gt #<sr_koncowa>]
#<akt_koniec> = [#<akt_koniec> - #<przybranie_materialu>]
o96 if [#<akt_koniec> lt #<sr_koncowa>]
#<akt_koniec> = #<sr_koncowa>
o96 endif
g0 x[#<sr_pocz> + 1]
g0 z[#<z_pocz> - [-1 * [[#<sr_koncowa> - #<akt_koniec>] * #<dl_stozka>] / [#<sr_pocz> - #<sr_koncowa>]]]
g0 x#<sr_pocz>
g1 x[#<akt_koniec>] z[#<z_pocz> - #<dl_stozka>] f#<posuw>
o95 endwhile
o90 endif
o107 else
g1 X[#<akt_start_x>] Z#<z_pocz> F#<posuw1>
G1 Z#<z_koncowe> x[#<akt_start_x>+#<korekta>] F#<posuw1>
G1 F#<posuw1> X[[#<akt_start_x>+#<korekta>]+#<odjazd_x>] Z[#<z_koncowe>-#<skos_z_k>]
g0 X[#<akt_start_x>+#<korekta>+#<odjazd_x>]
Z[#<z_pocz>+#<skos_z_p>+#<odjazd_z>] X[#<akt_start_x>+#<odjazd_x>]
o107 endif
#<z_k_stozka>=-[#<z_k_stozka>+1]
o100 endwhile
(toczenie fazki)
o110 if [#<szerokosc_fazki> gt 0]
#<szerokosc_fazki_1> = #<pomijaj_faza>
#<glebokosc_fazki_1> = [#<glebokosc_fazki>*#<pomijaj_faza>/#<szerokosc_fazki>]
g0 Z[#<z_pocz>+#<odjazd_z>]
o200 if[#<stozek>eq 1]
#<sr_koncowa>=[#<sr_koncowa>+#<roznica_srednic>]
o200 endif
#<sr_koncowa>=[#<sr_koncowa>+#<korekta_polozenia_fazki>]
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[[#<sr_koncowa>]-#<glebokosc_fazki_1>*2] ( wjazd do fazki na fi #<sr_koncowa>)
g1 z[#<z_pocz>] F#<posuw>
o114 if [#<promien_fazki> lt 0.00001]
g1 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] F#<posuw> ( toczenie fazki na fi #<sr_pocz>)
o114 endif
o115 if [#<promien_fazki> gt 0]
o116 if [#<wkleslosc_fazki> gt 0]
g2 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<posuw>
o116 endif
o117 if [#<wkleslosc_fazki> lt 0.000001]
g3 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<posuw>
o117 endif
o115 endif
g0 x[[#<sr_koncowa>]+#<odjazd_x>]
Z[#<z_pocz>+#<odjazd_z>]
o111 endwhile ( koniec pętli )
o110 endif
(opcjonalny odjazd od materiału w obu osiach)
o120 if[#<odjazd_x_k> ne 99]
g0 x#<odjazd_x_k>
o120 endif
o130 if[#<odjazd_z_k> ne 99]
Z#<odjazd_z_k>
o130 endif
o2000 else
#<sr_pocz> = [#<sr_pocz>+#<pomijaj>] (pomijania używamy,gdy poprawiamy detal i cześć procedury już jest wykonana)
o2500 if[[#<noz_wstepny> ne 0]]
o<loadtool> call [#<noz_wstepny>]
o2500 endif
G0 X#<sr_pocz>
Z[#<z_pocz>+#<odjazd_z>]
#<Current-Diameter> = #<sr_pocz>
o500 while [#<Current-Diameter> lt #<sr_koncowa>]
o501 if [[#<Current-Diameter> + #<przybranie_materialu>]lt #<sr_koncowa>]
#<Current-Diameter> = [#<Current-Diameter> + #<przybranie_materialu>]
#<posuw1>=#<posuw>
#<z_koncowe> = [#<z_koncowe>+#<skos_z_k>]
o501 else
#<Current-Diameter> = #<sr_koncowa>
o1030 if[[#<noz_koncowy> gt 0]and[#<noz_koncowy> lt #<ilosc_nozy_w_tabeli> ]]
o<loadtool> call [#<noz_koncowy>]
o1030 endif
#<posuw1>=#<posuw_koncowy>
#<z_koncowe> = [#<z_koncowe>+#<skos_z_k>]
o501 endif
X#<Current-Diameter>
G1 Z[#<z_koncowe>] X[#<Current-Diameter>-#<korekta>] F#<posuw1>
G0 X[#<Current-Diameter>-#<korekta>-#<odjazd_x>]
Z[#<z_pocz>+#<odjazd_z>] X[#<Current-Diameter>-#<odjazd_x>]
o500 endwhile
G0 X[#<Current-Diameter>-#<odjazd_x>]
Z[#<z_pocz>+#<odjazd_z>]
(toczenie fazki)
o1100 if [#<szerokosc_fazki> gt 0]
#<szerokosc_fazki_1> = #<pomijaj_faza>
#<glebokosc_fazki_1> = -[#<glebokosc_fazki>*#<pomijaj_faza>/#<szerokosc_fazki>]
g0 Z[#<z_pocz>+#<odjazd_z>]
o2010 if[#<stozek>eq 1]
#<sr_koncowa>=[#<sr_koncowa>+#<roznica_srednic>]
o2010 endif
#<sr_koncowa>=[#<sr_koncowa>-#<korekta_polozenia_fazki>*2]
o1110 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]]
o1120 if [#<szerokosc_fazki_1> gt #<szerokosc_fazki>]
#<szerokosc_fazki_1> = #<szerokosc_fazki>
o1120 endif
o1130 if [#<glebokosc_fazki_1> gt #<glebokosc_fazki>]
#<glebokosc_fazki_1> = -#<glebokosc_fazki>
o1130 endif
x[[#<sr_koncowa>]+#<glebokosc_fazki_1>*2] ( wjazd do fazki na fi #<sr_koncowa>)
g1 z[#<z_pocz>] F#<posuw>
o1140 if [#<promien_fazki> eq 0]
g1 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] F#<posuw> ( toczenie fazki na fi #<sr_pocz>)
o1140 endif
o1150 if [#<promien_fazki> gt 0]
o1160 if [#<wkleslosc_fazki> gt 0]
g3 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<posuw>
o1160 endif
o1170 if [#<wkleslosc_fazki> eq 0]
g2 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki>] F#<posuw>
o1170 endif
o1150 endif
g0 x[[#<sr_koncowa>]-#<odjazd_x>]
Z[#<z_pocz>+#<odjazd_z>]
o1110 endwhile ( koniec pętli )
o1100 endif
(opcjonalny odjazd od materiału w obu osiach)
o1300 if[#<odjazd_z_k> ne 99]
Z#<odjazd_z_k>
o1300 endif
o1200 if[#<odjazd_x_k> ne 99]
g0 x#<odjazd_x_k>
o1200 endif
o2000 endif
M5 M9 ; stop wrzeciona, chłodziwo stop
o<toczenie> endsub
Wersja procedury z fazkami na roztaczaniu. Nadal nie działają stożki, więc pierwsza i trzecia pozycja formularza są bo są. Resztą można się bawić, albo pracować, jak kto woli.
Brak stożków nie ogranicza - da się tym zrobić wszystko, co złożone z walców, stożków i kawałków okręgu. A pozycje w formularzu są, bo tam widzę ich miejsce, i po skończeniu procedurki już nie będę zmieniał układu pól formularza ani powiązanych z nimi zmiennych. Wszelkie późniejsze udoskonalenia procedury nie wpłyną na możliwość powtórzenia jej z zapisanego pliku.
Acha - to, co nazywam fazkami, jest w istocie pełnymi implementacjami stożka wewnętrznego, zewnętrznego, półkuli wklęsłej i wypukłej. Tak więc w istocie w każdej zakładce można zrobić dowolny walec lub stożek, i ściśle z nim powiązany inny stożek, lub półkulę.