NGCGUI - toczenie, mocno rozbudowana procedura
: 06 lis 2012, 23:30
Dopiero stojąc przy tokarce widać, czego brakuje napisanym wcześniej procedurom. I procedury obrastają nowymi funkcjonalnościami.
I tak powstała procedura NGCGUI, która w jednej zakładce potrafi zrobić do pięciu operacji powiązanych wprawadzanymi średnicami: materiału, początkową i końcową. Średnica początkowa jest to średnica, od której zaczyna się główna procedura zakładki. Jest nią walec, albo stożek. Z tą główną procedurą w tej samej zakładce można powiązać aż cztery procedury podrzędne. Procedura inteligentnie rozpoznaje, czy wpisana średnica początkowa jest mniejsza od końcowej i uruchamia roztaczanie, jeżeli średnica początkowa jest większa od końcowej, procedura przetacza walec od zewnątrz.
Jeżeli początek na osi Z jest większy od końca, procedura toczy od prawej do lewej. Gdy początek na osi Z jest mniejszy od końca, procedura toczy od lewej do prawej, czyli od uchwytu do początku matriału. Odjazdy od materiału zmieniają się automatycznie.
Wprowadzenie korekty stożka powoduje odpowiednie przesunięcie punktu końcowego na osi Z w stosunku do osi materiału. W trakcie pisania jest opcja, podmieniająca walec na stożek w głównej procedurze. W ostatniej wersji pliku toczenie.ngc stożek już działa, ale jeszcze nie powiązałem z nim osadzanych na nim fazek.
Procedura na każdej ze średnic potrafi wykonać fazkę skośną, półkulistą i pólkulistą wklęsłą. Fazki te są w rzeczywistosci pełnymi implementacjami półkuli i stożka, i można poprzez wpisanie jednakowej średnicy początkowej i końcowej wyłączyć procedurę główną(walec), wykonując stożek czy półkulę jako samodzielną operację.
Dodatkowo w pierwszej wywoływanej zakładce możemy zaprogramować planowanie czoła materiału (zawsze od dowolnie wpisanej wartości w plusie do zera w osi Z) i przetoczenie włożonego w uchwyt surowego wałka do największej średnicy toczonego detalu na całej jego długości.
Co to wszystko daje? Nawet najbardziej skomplikowany detal można zaprogramować łatwo, i w minimalnej liczbie zakładek. Łatwo poprawiać, efekt widać od razu na podglądzie.
Wadą jest opanowanie liczącego kilkadziesiąt pól formularza. Niestety - ilość opcji, jakie można ustawić przy toczeniu jest duża. Nigdy się ich wszystkich na raz nie używa, ale jak nie można jakiejś zmienić z formularza, to gdy zajdzie potrzeba zmiany, trzeba ryć w kodzie, zamiast spokojnie toczyć detal.


Kod poniższy nie jest najnowszy. Ze względu na konieczność używania rekompilowanego do użycia w procedurach 60 zamiast 30 zmiennych LinuxCNC, i adekwatnie do tego zmienionego pliku ngcgui.tcl, w tym wpisie co jakiś czas umieszczam okastrowaną do 30 pól formularza wersję pliku toczenie.ngc.
Pełną wersję wraz z plikami do podmiany znajdziecie w ostatnich wpisach tego wątku, podobnie jak informacje, co należy zmienić w źródłach LinuxCNC przed rekompilacją, żeby chciał obsługiwać podprocedury z 60 zmiennymi zamiast 30.
Co ta procedura potrafi? Sporo więcej, niż pierwowzór J. Thorntona. Wywołana z domyślnymi parametrami robi dokładnie to samo - przetacza powierzchnię wałka z danej średnicy na mniejszą na zadanej długości.

Pierwsza pozycja - na razie nie działa, podobnie trzecia.
Druga pozycja - korekta stożka, podawana jako różnica w stosunku do średnicy początkowej w milimetrach. Skutkuje tym, co już udało ci się kiedyś wykonać. Wpisanie wartości ujemnej robi stożek odwrotny, czyli zwężający się w stronę uchwytu.
Do dziesiątej pozycji chyba tłumaczyć nie trzeba.
Jedenasta pozycja to szybkość posuwu w ostatnim, wykańczającym przebiegu. Pozostawienie zera nie zmienia prędkości ustawionej dla posuwu roboczego.
Pozycja 12 - planowanie czoła. Wpisujesz wartość w mm, jeżeli je planujesz splanować. Nie wpisane pomija procedurę, po wpisaniu wszystko przesuwa się o wartość splanowania automatycznie. Słowem - nie przeliczasz nic, program robi wszystko, jakby zero w Z było tam, gdzie skończyłeś planować czoło. Uwaga - splanowanie trzeba uwzględniać we wszystkich kolejnych podprocedurach. Nie sprawdzałem jeszcze, czy da się je wpisywać i pomijać w każdej kolejnej tabelce - mogą być jeszcze problemy z powiązanymi półkulami.
Ale można w pierwszej tabelce wystartować z Z o wartości planowania, i się wszystko potem będzie zgadzać.
Pozycja 13 - posuw czoła. Zostawiasz zero - idzie posuwem roboczym.
Pozycja 14 do 18 wykonanie fazki na zadaną głębokość i szerokość na średnicy końcowej. Wpisanie promienia robi fazkę półkulistą wypukłą, wpisanie jedynki w pozycji wklęsłość zmienia fazkę wypukłą we wklęsłą.
Wpisanie jednakowej wartości w pola średnica początkowa i średnica końcowa wyłącza pierwszą część procedury, czyli działa tylko fazka na zadanej średnicy, wtedy to jest stożek albo półkula.
Wpisanie średnicy początkowej mniejszej niż końcowa wywołuje procedurę roztaczania, i powiązanej z nią fazki wewnętrznej.
Pozycje 18 i 19 to odjazdy od materiału w poszczególnych przebiegach. Dość często potrzebuję to regulować z różnych powodów.
Pozycje 20 i 21 to korekta długości poszczególnych przejazdów w osi Z. Każdy kolejny przejazd jest skracany (albo wydłużany, choć to chyba nie znajdzie zastosowania) o podaną wartość. Kąt jest powiązany z wybraną wartością przybrania - jak przybranie ustawisz na większe, to i zwiększyć trzeba korektę.
Reszty chyba tłumaczyć nie muszę.
Kolejność pól sobie możesz zmienić bez trudu. Ja je ustawiłem tak, jak mi wygodnie. Komuś innemu może odpowiadać inna kolejność.
[ Dodano: 2012-11-25, 16:27 ]
Ta procedura nie ma robić cudów. Ona ma robić G1 G2 i G3 tam gdzie ja chcę, i tak jak ja chcę, z posuwem, jaki ustawię, nożem który wybiorę etc.
I to właśnie robi.
[ Dodano: 2012-11-25, 16:43 ]

Okazuje się, że i z lewa na prawo procedurka też toczy bez problemu. Czyli nie trzeba będzie ośmiu zakładek
Wystarczą cztery.


Trochę dziwoląg - lekki stożek z korektą dojazdu noża, tnącego skosem w kierunku uchwytu - jak się zada dojazdy na stałą odległość, kończy się nieprzyjemnym zgrzytem, gdy na końcu nóż zaczyna brać bardzo szeroki wiór. Dodatkowo wklęsła fazka na końcu.

Tu wcinamy się w wałek gdzieś na jego długości trójkątnym nożem. Operacja przebiega cicho, miło i przyjemnie.

Tu staczmy wałek, i robimy półkolistą sporą fazkę.

Półkulę też można z tej procedury zrobić.
Dodatkowo możemy zdecydować, o ile odjeżdżać od materiału w osi - niezależnie dla każdej z osi, oraz zadeklarować, gdzie ma pojechać nóż po skończonej procedurze.
Filmik, pokazujący, jak pracować w NGCGUI tą procedurą zmultiplikowaną, czyli z kilkoma zakładkami wykonującymi poszczególne etapy obróbki.
[youtube][/youtube]

I tak powstała procedura NGCGUI, która w jednej zakładce potrafi zrobić do pięciu operacji powiązanych wprawadzanymi średnicami: materiału, początkową i końcową. Średnica początkowa jest to średnica, od której zaczyna się główna procedura zakładki. Jest nią walec, albo stożek. Z tą główną procedurą w tej samej zakładce można powiązać aż cztery procedury podrzędne. Procedura inteligentnie rozpoznaje, czy wpisana średnica początkowa jest mniejsza od końcowej i uruchamia roztaczanie, jeżeli średnica początkowa jest większa od końcowej, procedura przetacza walec od zewnątrz.
Jeżeli początek na osi Z jest większy od końca, procedura toczy od prawej do lewej. Gdy początek na osi Z jest mniejszy od końca, procedura toczy od lewej do prawej, czyli od uchwytu do początku matriału. Odjazdy od materiału zmieniają się automatycznie.
Wprowadzenie korekty stożka powoduje odpowiednie przesunięcie punktu końcowego na osi Z w stosunku do osi materiału. W trakcie pisania jest opcja, podmieniająca walec na stożek w głównej procedurze. W ostatniej wersji pliku toczenie.ngc stożek już działa, ale jeszcze nie powiązałem z nim osadzanych na nim fazek.
Procedura na każdej ze średnic potrafi wykonać fazkę skośną, półkulistą i pólkulistą wklęsłą. Fazki te są w rzeczywistosci pełnymi implementacjami półkuli i stożka, i można poprzez wpisanie jednakowej średnicy początkowej i końcowej wyłączyć procedurę główną(walec), wykonując stożek czy półkulę jako samodzielną operację.
Dodatkowo w pierwszej wywoływanej zakładce możemy zaprogramować planowanie czoła materiału (zawsze od dowolnie wpisanej wartości w plusie do zera w osi Z) i przetoczenie włożonego w uchwyt surowego wałka do największej średnicy toczonego detalu na całej jego długości.
Co to wszystko daje? Nawet najbardziej skomplikowany detal można zaprogramować łatwo, i w minimalnej liczbie zakładek. Łatwo poprawiać, efekt widać od razu na podglądzie.
Wadą jest opanowanie liczącego kilkadziesiąt pól formularza. Niestety - ilość opcji, jakie można ustawić przy toczeniu jest duża. Nigdy się ich wszystkich na raz nie używa, ale jak nie można jakiejś zmienić z formularza, to gdy zajdzie potrzeba zmiany, trzeba ryć w kodzie, zamiast spokojnie toczyć detal.


Kod poniższy nie jest najnowszy. Ze względu na konieczność używania rekompilowanego do użycia w procedurach 60 zamiast 30 zmiennych LinuxCNC, i adekwatnie do tego zmienionego pliku ngcgui.tcl, w tym wpisie co jakiś czas umieszczam okastrowaną do 30 pól formularza wersję pliku toczenie.ngc.
Pełną wersję wraz z plikami do podmiany znajdziecie w ostatnich wpisach tego wątku, podobnie jak informacje, co należy zmienić w źródłach LinuxCNC przed rekompilacją, żeby chciał obsługiwać podprocedury z 60 zmiennymi zamiast 30.
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

Pierwsza pozycja - na razie nie działa, podobnie trzecia.
Druga pozycja - korekta stożka, podawana jako różnica w stosunku do średnicy początkowej w milimetrach. Skutkuje tym, co już udało ci się kiedyś wykonać. Wpisanie wartości ujemnej robi stożek odwrotny, czyli zwężający się w stronę uchwytu.
Do dziesiątej pozycji chyba tłumaczyć nie trzeba.
Jedenasta pozycja to szybkość posuwu w ostatnim, wykańczającym przebiegu. Pozostawienie zera nie zmienia prędkości ustawionej dla posuwu roboczego.
Pozycja 12 - planowanie czoła. Wpisujesz wartość w mm, jeżeli je planujesz splanować. Nie wpisane pomija procedurę, po wpisaniu wszystko przesuwa się o wartość splanowania automatycznie. Słowem - nie przeliczasz nic, program robi wszystko, jakby zero w Z było tam, gdzie skończyłeś planować czoło. Uwaga - splanowanie trzeba uwzględniać we wszystkich kolejnych podprocedurach. Nie sprawdzałem jeszcze, czy da się je wpisywać i pomijać w każdej kolejnej tabelce - mogą być jeszcze problemy z powiązanymi półkulami.
Ale można w pierwszej tabelce wystartować z Z o wartości planowania, i się wszystko potem będzie zgadzać.
Pozycja 13 - posuw czoła. Zostawiasz zero - idzie posuwem roboczym.
Pozycja 14 do 18 wykonanie fazki na zadaną głębokość i szerokość na średnicy końcowej. Wpisanie promienia robi fazkę półkulistą wypukłą, wpisanie jedynki w pozycji wklęsłość zmienia fazkę wypukłą we wklęsłą.
Wpisanie jednakowej wartości w pola średnica początkowa i średnica końcowa wyłącza pierwszą część procedury, czyli działa tylko fazka na zadanej średnicy, wtedy to jest stożek albo półkula.
Wpisanie średnicy początkowej mniejszej niż końcowa wywołuje procedurę roztaczania, i powiązanej z nią fazki wewnętrznej.
Pozycje 18 i 19 to odjazdy od materiału w poszczególnych przebiegach. Dość często potrzebuję to regulować z różnych powodów.
Pozycje 20 i 21 to korekta długości poszczególnych przejazdów w osi Z. Każdy kolejny przejazd jest skracany (albo wydłużany, choć to chyba nie znajdzie zastosowania) o podaną wartość. Kąt jest powiązany z wybraną wartością przybrania - jak przybranie ustawisz na większe, to i zwiększyć trzeba korektę.
Reszty chyba tłumaczyć nie muszę.
Kolejność pól sobie możesz zmienić bez trudu. Ja je ustawiłem tak, jak mi wygodnie. Komuś innemu może odpowiadać inna kolejność.
[ Dodano: 2012-11-25, 16:27 ]
Ta procedura nie ma robić cudów. Ona ma robić G1 G2 i G3 tam gdzie ja chcę, i tak jak ja chcę, z posuwem, jaki ustawię, nożem który wybiorę etc.
I to właśnie robi.
[ Dodano: 2012-11-25, 16:43 ]

Okazuje się, że i z lewa na prawo procedurka też toczy bez problemu. Czyli nie trzeba będzie ośmiu zakładek



Trochę dziwoląg - lekki stożek z korektą dojazdu noża, tnącego skosem w kierunku uchwytu - jak się zada dojazdy na stałą odległość, kończy się nieprzyjemnym zgrzytem, gdy na końcu nóż zaczyna brać bardzo szeroki wiór. Dodatkowo wklęsła fazka na końcu.

Tu wcinamy się w wałek gdzieś na jego długości trójkątnym nożem. Operacja przebiega cicho, miło i przyjemnie.

Tu staczmy wałek, i robimy półkolistą sporą fazkę.

Półkulę też można z tej procedury zrobić.
Dodatkowo możemy zdecydować, o ile odjeżdżać od materiału w osi - niezależnie dla każdej z osi, oraz zadeklarować, gdzie ma pojechać nóż po skończonej procedurze.
Filmik, pokazujący, jak pracować w NGCGUI tą procedurą zmultiplikowaną, czyli z kilkoma zakładkami wykonującymi poszczególne etapy obróbki.
[youtube][/youtube]

