NGCGUI - toczenie, mocno rozbudowana procedura

Dyskusje dotyczące działania obsługi programu LinuxCNC
Awatar użytkownika

Autor tematu
MlKl
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 143
Posty: 3705
Rejestracja: 15 sie 2010, 13:44
Lokalizacja: Błonie
Kontakt:

#201

Post napisał: MlKl » 01 gru 2012, 22:34

tuxcnc pisze:
MlKl pisze:

Kod: Zaznacz cały

        || [string match *#<*>=#\[1-3\]\[0-9\]*  $line] \
Ta linia jest zła.

Kod: Zaznacz cały

        || [string match *#<*>=#\[1-6\]\[0-9\]*  $line] \ 
Powinno być tak?

kamar
- osadzenie czyjegoś kodu we własnym zawsze bywa skomplikowane. Na tą chwilę zmusiłem twój kod do współdziałania z moim w sposób sensowny, ale nie do końca prawidłowy logicznie. Ale jak działa, to poprawiać można aż będzie tak, jak być powinno.

Projektując kobyłę zastanawiałem się nad pozycją "Średnica surowego wałka". Wsadziłem taką w czop.ngc razem z "Długością gotowego detalu" co pozwalało zrobić przygotówkę na całej długości jednym poleceniem. W kobyle nie umieściłem, bo mi było szkoda każdej pozycji w formularzu. Zakładałem, że jak będzie potrzeba, zrobię to po prostu osobną zakładką.

Dlatego żeby uruchomić twój stożek z korektą wzięta z kobyły, musiałem tą średnicę surowego wałka obliczyć dodając do wysokości stożka zadane przesunięcie w kierunku osi materiału.

U mnie średnica początkowa jest od strony, od której nóż dojeżdża do materiału. Tak jest prawidłowo dla walca, czyli podstawowej procedury. W przypadku stożka opartego na tych samych średnicach toczenie zaczyna się też od średnicy początkowej, która jest jednocześnie średnicą końcową stożka, następuje zamiana tych średnic funkcjonalnie.

Pewnie lepiej by je było nazwać "Średnica 1" i "Średnica 2". Jednak rysunek wyjaśnia, gdzie jest która średnica. Czyli stożek w kobyle ma średnicę początkową tam, gdzie zaczyna (łapie pierwszy styk z materiałem).



Tagi:

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 9340
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#202

Post napisał: tuxcnc » 02 gru 2012, 06:57

Kod: Zaznacz cały

    if {   [string match *#<*>=#\[1-9\]*         $line] \ 
        || [string match *#<*>=#\[1-4\]\[0-9\]*  $line] \ 
        || [string match *#<*>=#50*              $line] } { 
To jest procedura sprawdzania, czy łańcuch znaków pasuje do wzorca.
Tłumacząc na ludzkie to by było :

Kod: Zaznacz cały

czy jedna cyfra z zakresu 1-9
lub dwie cyfry, pierwsza z zakresu 1-4, druga z zakresu 0-9
lub łańcuch znaków 50
.


hecza
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 19
Posty: 403
Rejestracja: 06 mar 2012, 13:25
Lokalizacja: Częstochowa

#203

Post napisał: hecza » 02 gru 2012, 10:23

Nadal wyświetla błąd : Za dużo parametrów procedury.

Nigdy nie instalowałem ze źródeł i chciałem się upewnić czy jeżeli wykonam następującą kolejność nowej instalacji powinno być ok.
1 - instalacja z obrazu ze strony LinuxCNC
2 - instalacja gita według https://www.cnc.info.pl/topics54/instal ... t33560.htm
3 - w ściągniętych źródłach w pliku / src / emc / rs274ngc / interp_internal.hh poprawiamy na -
Kod:
// Subroutine parameters
#define INTERP_SUB_PARAMS 50
#define INTERP_SUB_ROUTINE_LEVELS 10
#define INTERP_FIRST_SUBROUTINE_PARAM 1
// max number of local variables saved (?)
#define MAX_NAMED_PARAMETERS 60

4 - instalacja LinuxCNC ( czy trzeba coś robić z istniejącą wersją, czy się nadpisze ? )
5 - poprawianie NGCGUI wg zamieszczonego pliku ( czy NGCGUI instaluje się razem, czy osobno z linuxcnc, bo jeżeli razem, to czy tych poprawek nie można wykonać też w źródłach przed instalacją )

Pozdrawiam

Awatar użytkownika

Autor tematu
MlKl
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 143
Posty: 3705
Rejestracja: 15 sie 2010, 13:44
Lokalizacja: Błonie
Kontakt:

#204

Post napisał: MlKl » 02 gru 2012, 11:12

Oczywiście, że można poprawić źródło przed instalacją również w zakresie NGCGUI, tylko jak się instaluje in place, to nie poprawi w /usr, a zawsze korzysta z tego NGCGUI z /usr, a nie z katalogu utworzonego przez gita.

Jeżeli wywala błąd "Za dużo parametrów procedury" to oznacza, że NGCGUI przekazuje do LinuxCNC więcej parametrów, niż ten jest w stanie przyjąć. Czyli NGCGUI działa, ale nie zrobiłeś poprawek w samym LinuxCNC prawidłowo.

NGCGUI będziesz miał prawidłowe, jak zobaczysz po wybraniu zakładki tabelkę z 45 polami wypełnioną do końca danymi. Ona się komunikuje z LInuxCNC dopiero po kliknięciu "Zatwierdź".

Gita instalujesz raz - to system do uaktualniania oprogramowania.

Potem tylko pobierasz źródła i je kompilujesz.

Poprawki w żródłach dokonujesz po ściągnięciu. Czyli w konsoli wydajesz polecenie:

Kod: Zaznacz cały

git clone git://git.linuxcnc.org/git/linuxcnc.git linuxcnc-git
po jego wykonaniu poprawiasz źródła, i dopiero kontynuujesz instalowanie, czyli kolejne operacje ./autogen.sh, ./configure, make, make install.
Ostatnio zmieniony 02 gru 2012, 11:18 przez MlKl, łącznie zmieniany 1 raz.

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 9340
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#205

Post napisał: tuxcnc » 02 gru 2012, 11:16

Zacznijmy od końca.
Ngcgui jest napisany w języku interpretowanym, co znaczy że się go nie kompiluje.
Tak więc proces kompilacji omija plik ngcgui.tcl, pozostaje on taki jak w momencie sciągnięcia z gita, mozna go zmienić przed, po i w trakcie.

LinuxCNC ma domyślnie ustawioną opcję configure --enable-run-in-place, co oznacza że domyślnie zainstaluje się w tym katalogu, w którym są źródła.
Inne instalacje pozostaną nietknięte.
W związku z czym powstaje drobny, acz uciążliwy problem.
Otóż jeśli jest inna instalacja w katalogu /usr to programy z tamtąd będą uruchamiane.
Czyli polecenie linuxcnc otworzy program /usr/bin/linuxcnc, jeśli taki istnieje.
Jeśli przykładowo ostatnio kompilowałem w katalogu /opt/linuxcnc-lathe.sim, to muszę uruchomić poleceniem ./opt/linuxcnc-lathe.sim/scripts/linuxcnc.
Ale jeśli mam w katalogu /usr/lib/tcltk plik ngcgui.tcl, to on zostanie wczytany, a nie /opt/linuxcnc-lathe.sim/tcl/ngcgui.tcl.

I na koniec, nie potrzeba mieć jądra rtai i portu lpt, można skonfigurować program z opcją --enable-simulator.
Wtedy oczywiście nie da rady sterować żadną maszyną ani też uruchomić konfiguracji odwołujących się do sprzętu, ale można sobie skonfigurować fajny symulator do sprawdzania programów na sucho.
Ja na przykład piszę programy na netbooku, który oczywiście ani LPT nie ma, ani żadnego oprogramowania realtime na nim uruchomić się nie da, bo odwołanie do danych na dysku potrafi trwać sekundę.
A system jest Ubuntu 12.04, 64-bitowy na dodatek.
Jak sobie wszystko dopieszczę to dopiero przegrywam na komputer sterujący maszyną.

.


hecza
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 19
Posty: 403
Rejestracja: 06 mar 2012, 13:25
Lokalizacja: Częstochowa

#206

Post napisał: hecza » 02 gru 2012, 11:28

Czyli te poprawki odnośnie pliku interp_internal.hh które wymieniłem są prawidłowe i to wszystko przed instalacją.
Sam symulator mogę zainstalować na dowolnym linuxie bez RT np. Kubuntu 12.04 64 bit ?

Awatar użytkownika

Autor tematu
MlKl
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 143
Posty: 3705
Rejestracja: 15 sie 2010, 13:44
Lokalizacja: Błonie
Kontakt:

#207

Post napisał: MlKl » 02 gru 2012, 11:42

Symulator można zainstalować na każdym Linuxie, nawet na Virtualboxie - opisywałem jak to zrobić w przyklejonym wątku o instalacji.

Poprawki w źródłach trzeba zrobić przed instalacją. Po zainstalowaniu to nic nie da.

Wrzucenie kodu na stożek kamara uswiadomiło mi, że muszę przebudować pół kobyły. Kamar logicznie i prawidłowo przyjmuje odwrotną niż przy walcu kolejność średnic. To jest intuicyjne, i to nie kod kamara muszę dostosować do kobyły, tylko kobyłę do kodu kamara.

Najprawdopodobniej pojawią się na samym początku pola "Średnica surowego wałka" i "Długość gotowego detalu". Pozwoli to wykonać przygotówkę surowca przed wykonaniem reszty operacji. A przy okazji załatwi sprawę kompatybilności z kodem kamara.

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 27
Posty: 9340
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#208

Post napisał: tuxcnc » 02 gru 2012, 12:12

hecza pisze:Sam symulator mogę zainstalować na dowolnym linuxie bez RT np. Kubuntu 12.04 64 bit ?
Ja mam jedną instalację na Ubuntu z Fluxboxem.
Pierwotnie to był system tylko w trybie tekstowym.
Żadne Gnome, KDE czy inne cuda nigdy nie były tam instalowane.
Teoretycznie wystarczą same iksy żeby LinuxCNC uruchomić, ale na tak okrojonym systemie pracować się nie da.
Jakiś menadżer okien musi być, ale absolutnie dowolny.
Natomiast problem może być ze spełnieniem zależności, to znaczy czasem niespełnienie jakiejś skutkuje dość mylącym komunikatem o błędzie w czasie kompilacji.
Jakbyś trafił na problem, to daj znać.

.

Awatar użytkownika

Autor tematu
MlKl
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 143
Posty: 3705
Rejestracja: 15 sie 2010, 13:44
Lokalizacja: Błonie
Kontakt:

#209

Post napisał: MlKl » 02 gru 2012, 12:23

Kobyła pełnej krwi z wmontowanym stożkiem i korektą. W wersji kamara korekta po prostu wyłącza wszystko, poza końcowym przebiegiem, który wykonuje z przesunięciem zadanym w polu korekta. W kobyle jest to pole "Ile mm średnicy pominąć". Idea takiej korekty jest dobra, ale nie da się powrócić do toczenia w połowie operacji stosując korektę. Niestety, wszystkiego na raz mieć nie można. Chyba, że znowu podwoję liczbę pól na korektę, albo dodam pole zmieniające system korekty...


Implementacja stożka w tej chwili wygląda tak:

Obrazek

Obrazek

Stożek wykonywany jest pomiędzy średnicami na długości określonej przez początek i koniec na Z.

Korekta stożka nie ingeruje w sam stożek, tylko zdejmuje materiał od jego podstawy do średnicy surowego wałka, którą program wylicza sumując średnicę podstawy stożka (średnicę początkową) z wartością, wpisaną w polu korekta.

Słowem - jak wkładamy w uchwyt wałek fi 100, a chcemy wytoczyć stożek od fi 40 do fi 50, to korekta wyniesie 50. Program za średnicę początkową uznaje wartość 50, a nie 40. Jest to nieintuicyjne, więc ulegnie niedługo zmianie.

Niemniej - do używania tego jako zamiennika procedury stożek kamara wystarczy pamiętać, że wprowadzamy w polu korekta różnicę średnicy materiału i podstawy stożka, zamiast średnicy surowego wałka w kamarowym skrypcie.


I kolejny pomysł - nie będę więcej wsadzał całego kodu podprocedury.

Kod: Zaznacz cały

o8000 else (wykonuje się po zaznaczeniu stożka) 

#<sr_materialu>=[#<sr_pocz>+#<korekta>] 
o<stozek> call [#<sr_materialu>][#<sr_koncowa>][#<sr_pocz>][#<z_pocz>][#<dl_stozka>][#<kat_stozka>][#<przybranie_materialu>][#<posuw>][#<pomijaj_srednica>][#<woda>] 
#<sr_pocz>=[#<sr_pocz>+#<korekta>] 

o8000 endif 
To mi osadza kod kamara w kobyle. Czyli to jest właściwy trop. Muszę wydzielić z kobyły poszczególne operacje do osobnych plików .ngc, a kobyła ma je tylko integrować, wywołując z odpowiednimi parametrami. Wtedy można ich używać po kamarowemu ze wszelkimi ograniczeniami, albo wywołać przez kobyłę z regulacją dodatkowych parametrów i integracją z innymi.

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

#<czolo> =#1 (=0 planowanie czoła, 0 wyłącza) 
#<posuw_czolo> =  #2 (=40 Posuw czoła) 
#<stozek> =#3 (=0 1 stożek, 0 walec) 
#<korekta> = #4(=0 korekta stożka w mm...) 
#<kat_stozka> =#5 (=0 ... lub kąt w stopniach) 
#<sr_pocz> =  #6 (=0 Średnica początkowa) 
#<sr_koncowa> =  #7 (=0 Średnica końcowa) 
#<z_pocz> =  #8 (=0 Punkt początkowy na osi Z) 
#<z_koncowe> =  #9 (=0 Punkt końcowy na osi Z) 
#<przybranie_materialu> =  #10 (=2 Przybranie) 
#<posuw> =  #11 (=80 Posuw roboczy) 
#<ostatnia_warstwa> =  #12 (=0 Ostatnia warstwa) 
#<posuw_koncowy> =  #13 (=30 Posuw kończący) 
#<szerokosc_fazki_s_k> = #14 (=0 Szerokość fazki śr.k, 0 wyłącza) 
#<glebokosc_fazki_s_k> =#15 (=0 Głębokość fazki śr.k) 
#<promien_fazki_s_k> =#16 (=0 Promień fazki śr.k, 0 wyłącza) 
#<wkleslosc_fazki_s_k> =#17 (=0 1 wklęsłość fazki śr.k, 0 wyłącza) 
#<zaglebienie_fazki_s_k> =#18 (=0 zagłębienie fazki śr.k, 0 wyłącza) 
#<podciecie> =#19 (=0 Podcięcie A 1, B 2, C 3, D 4, 0 wyłącza) 
#<szerokosc_fazki_s_p> = #20 (=0 Szerokość fazki śr.p, 0 wyłącza) 
#<glebokosc_fazki_s_p> =#21 (=0 Głębokość fazki śr.p) 
#<promien_fazki_s_p> =#22 (=0 Promień fazki śr.p, 0 wyłącza) 
#<wkleslosc_fazki_s_p> =#23 (=0 1 wklęsłość fazki śr.p, 0 wyłącza) 
#<zaglebienie_fazki_s_p> =#24 (=0 zagłębienie fazki śr.p, 0 wyłącza) 
#<skos_z_p> =#25 (=0 korekta skosu na początku w osi Z) 
#<skos_z_k> =#26 (=0 korekta skosu na końcu w osi Z) 
#<odjazd_z_k> =#27 (=99 pozycja końcowa w osi Z, 99 wyłącza) 
#<odjazd_x_k> =#28 (=99 pozycja końcowa w osi X, 99 wyłącza) 
#<pomijaj_srednica> =#29 (=0 ile milimetrów średnicy pominąć) 
#<pomijaj_czolo> =#30 (=0 ile milimetrów czoła pominąć) 
#<pomijaj_faza_s_k> =#31 (=0 ile milimetrów szer. fazki śr.k pominąć) 
#<pomijaj_faza_s_p> =#32 (=0 ile milimetrów szer. fazki śr.p pominąć) 
#<odjazd_z> =#33 (=0.25 odjazd od materiału w osi Z) 
#<odjazd_x> =#34 (=0.5 odjazd od materiału w osi X) 
#<noz_wstepny>=#35 (=0 Nóż wstępny) 
#<noz_czolo>=#36 (=0 Nóż do czoła) 
#<noz_koncowy>=#37(=0 Nóż kończący) 
#<noz_fazki_s_k>=#38 (=0 Nóż fazki na śr. końcowej) 
#<noz_fazki_s_p>=#39 (=0 Nóż fazki na śr. pocz.) 
#<woda> = #40(=8 Chłodziwo 8, 9 wyłączone) 
#<g5x> = #41(=54 Układ odniesienia G5x) 
#<m> = #42(=3 kierunek obrotów, 4 w lewo) 
#<inwersja> = #43(=0 1 inwersja, zero wyłącza) 
#<rpm> = #44 (=720 obroty) 
#<max_rpm> = #45 (=1500 obroty maksymalne) 

; stałe wpisane na sztywno
#<ilosc_nozy_w_tabeli>=9



; G7:  diameter mode
; G96: constant surface speed
; Włączamy procedurę 



G#<g5x> G43 G7 G96  S#<rpm> D#<max_rpm> 

M#<m> M#<woda> ; start wrzeciona i uruchomienie chłodziwa

o1000 if[#<sr_pocz> ge #<sr_koncowa>] (toczenie od zewnątrz walca lub stożka) 

#<odjazd_x>=[#<odjazd_x>*2+#<przybranie_materialu>] 
#<roznica_srednic>=[#<sr_pocz>-#<sr_koncowa>] 
;#<sr_pocz> = [#<sr_pocz>-#<pomijaj_srednica>] (pomijania używamy,gdy poprawiamy detal i cześć procedury już jest wykonana) 
#<akt_start_x>=[#<sr_pocz>-#<pomijaj_srednica>] 
#<z_k_stozka>=0
#<dl_stozka>=[abs[#<z_koncowe>]+abs[#<z_pocz>]] 
#<akt_pozycja>=0

o5 if[#<dl_stozka> ne 0] 
	#<korekta_polozenia_fazki> = [#<szerokosc_fazki_s_k>*#<korekta>/#<dl_stozka>] 
o5 else
	#<korekta_polozenia_fazki>=0
o5 endif



o10 if[#<z_pocz> le #<z_koncowe>] (Zmiana kierunku odjazdu w osi Z gdy toczymy od lewej do prawej i poprawka wklęsłości fazki) 
		#<odjazd_z> = -[#<odjazd_z>] 
	o12 if[#<wkleslosc_fazki_s_k>eq 1] 
		#<wkleslosc_fazki_s_k>=0
	o12 else
		#<wkleslosc_fazki_s_k>=1
	o12 endif
o10 endif


o15 if[#<posuw_koncowy> le 0] 
	#<posuw_koncowy>=#<posuw> 
o15 endif


(Dojazd na pozycję roboczą) 

g0 z[#<z_pocz>+#<odjazd_z>] 
g0 x[#<sr_pocz> +#<odjazd_x>+#<korekta>] 


(Planowanie czoła, od dowolnej wartości w plusie na Z do zera. Wykonywane opcjonalnie, zero wyłącza) 
o40 if[#<czolo>gt 0] 
#<akt_pozycja>=[#<z_pocz>+#<czolo>-#<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 0] 
  #<akt_pozycja> = [#<akt_pozycja> - #<przybranie_materialu>] 
  o52 if [#<akt_pozycja> lt 0] 
    #<akt_pozycja> = 0
  o52 endif

  g0 z#<akt_pozycja> 

  g1 x0 f[#<posuw_czolo>] 
  g0 z[#<akt_pozycja> + #<odjazd_z>] 
  g0 x[#<sr_pocz>+#<korekta>+#<odjazd_x>] 

o50 endwhile
o40 endif
(Koniec planowania czoła, zaczynamy procedurę główną - walec, walec z korektą stożka, lub stożek) 
o8000 if[#<stozek> eq 0] 

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

       g0 X[#<akt_start_x>] 
       G1 Z#<z_pocz>  F#<posuw1> 
       G1 Z#<z_koncowe> x[#<akt_start_x>+#<korekta>]   F#<posuw1> 
       G1 X[[#<akt_start_x>+#<korekta>]+#<odjazd_x>] Z[#<z_koncowe>-#<skos_z_k>] F#<posuw1> 
       g0 X[#<akt_start_x>+#<korekta>+#<odjazd_x>] 
          Z[#<z_pocz>+#<skos_z_p>+#<odjazd_z>] X[#<akt_start_x>+#<odjazd_x>] 

o100 endwhile (koniec procedury głównej toczenie walca) 

o8000 else (wykonuje się po zaznaczeniu stożka) 

#<sr_materialu>=[#<sr_pocz>+#<korekta>] 
o<stozek> call [#<sr_materialu>][#<sr_koncowa>][#<sr_pocz>][#<z_pocz>][#<dl_stozka>][#<kat_stozka>][#<przybranie_materialu>][#<posuw>][#<pomijaj_srednica>][#<woda>] 
#<sr_pocz>=[#<sr_pocz>+#<korekta>] 

o8000 endif 

(toczenie fazki na średnicy końcowej od zewnątrz) 
o133 if[#<z_pocz> le #<z_koncowe>] (Ustawienie połączenia fazki ze stożkiem) 

#<sr_koncowa>=[#<sr_koncowa>+#<korekta_polozenia_fazki>*3] 
o133 else
#<sr_koncowa>=[#<sr_koncowa>+#<korekta_polozenia_fazki>] 
o133 endif

o110 if [#<szerokosc_fazki_s_k> gt 0] 
#<szerokosc_fazki_1> = #<pomijaj_faza_s_k> 
#<glebokosc_fazki_1> = [#<glebokosc_fazki_s_k>*#<pomijaj_faza_s_k>/#<szerokosc_fazki_s_k>] 
 

o111 while [#<szerokosc_fazki_1> lt #<szerokosc_fazki_s_k>] 
#<szerokosc_fazki_1>=[#<szerokosc_fazki_1>+#<przybranie_materialu>] 
#<glebokosc_fazki_1>=[#<glebokosc_fazki_1>+[#<glebokosc_fazki_s_k>*#<przybranie_materialu>/#<szerokosc_fazki_s_k>]] 
 o112 if [#<szerokosc_fazki_1> gt #<szerokosc_fazki_s_k>] 
    #<szerokosc_fazki_1> = #<szerokosc_fazki_s_k> 
  o112 endif     
  o113 if [#<glebokosc_fazki_1> gt #<glebokosc_fazki_s_k>] 
    #<glebokosc_fazki_1> = #<glebokosc_fazki_s_k> 
  o113 endif   


o1300 if[#<z_pocz> ge #<z_koncowe>] (toczenie fazki od prawej do lewej) 

G0 x[[#<sr_koncowa>]-#<glebokosc_fazki_1>*2]            

g0 Z[#<z_pocz>+#<odjazd_z>] 

G1 z[#<z_pocz>] F#<posuw> 

o114 if [#<promien_fazki_s_k> lt 0.00001] 
g1 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]]  F#<posuw>   
o114 endif
o115 if [#<promien_fazki_s_k> gt 0] 
o116 if [#<wkleslosc_fazki_s_k> gt 0] 
g2 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o116 endif
o117 if [#<wkleslosc_fazki_s_k> lt 0.000001] 
g3 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o117 endif
o115 endif
g0 x[[#<sr_koncowa>]+#<odjazd_x>] 
g0 Z[#<z_pocz>+#<odjazd_z>] 

o1300 else (toczenie fazki od lewej do prawej) 


G0 x[[#<sr_koncowa>]-#<glebokosc_fazki_1>*2]             

g0 Z[#<z_pocz>+#<odjazd_z>] 

G1 z[#<z_pocz>] F#<posuw> 

o124 if [#<promien_fazki_s_k> lt 0.00001] 
g1 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]]  F#<posuw>   
o124 endif
o125 if [#<promien_fazki_s_k> gt 0] 
o126 if [#<wkleslosc_fazki_s_k> gt 0] 
g2 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o126 endif
o127 if [#<wkleslosc_fazki_s_k> lt 0.000001] 
g3 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o127 endif
o125 endif
g0 x[[#<sr_koncowa>]+#<odjazd_x>] 
Z[#<z_pocz>+#<odjazd_z>] 
o1300 endif

o111 endwhile 
o110 endif  ( koniec fazki na średnicy końcowej ) 


(toczenie fazki na średnicy początkowej od zewnątrz) 
#<sr_pocz>=[#<sr_pocz>+#<pomijaj_srednica>] 

o5110 if [#<szerokosc_fazki_s_p> gt 0] 
#<szerokosc_fazki_2> = #<pomijaj_faza_s_p> 
#<glebokosc_fazki_2> = [#<glebokosc_fazki_s_p>*#<pomijaj_faza_s_p>/#<szerokosc_fazki_s_p>] 
 

o5111 while [#<szerokosc_fazki_2> lt #<szerokosc_fazki_s_p>] 
#<szerokosc_fazki_2>=[#<szerokosc_fazki_2>+#<przybranie_materialu>] 
#<glebokosc_fazki_2>=[#<glebokosc_fazki_2>+[#<glebokosc_fazki_s_p>*#<przybranie_materialu>/#<szerokosc_fazki_s_p>]] 
 o5112 if [#<szerokosc_fazki_2> gt #<szerokosc_fazki_s_p>] 
    #<szerokosc_fazki_2> = #<szerokosc_fazki_s_p> 
  o5112 endif     
  o5113 if [#<glebokosc_fazki_2> gt #<glebokosc_fazki_s_p>] 
    #<glebokosc_fazki_2> = #<glebokosc_fazki_s_p> 
  o5113 endif   


o5300 if[#<z_pocz> ge #<z_koncowe>] (toczenie fazki na średnicy początkowej od prawej do lewej) 

G0 x[[#<sr_pocz>]-#<glebokosc_fazki_2>*2]            

g0 Z[#<z_koncowe>+#<odjazd_z>] 

G1 z[#<z_koncowe>] F#<posuw> 

o5114 if [#<promien_fazki_s_p> lt 0.00001] 
g1 x[#<sr_pocz>] z[#<z_koncowe>-[#<szerokosc_fazki_2>]]  F#<posuw>   
o5114 endif
o5115 if [#<promien_fazki_s_p> gt 0] 
o5116 if [#<wkleslosc_fazki_s_p> gt 0] 
g2 x[#<sr_pocz>] z[#<z_koncowe>-[#<szerokosc_fazki_2>]] r[#<promien_fazki_s_p>]   F#<posuw> 
o5116 endif
o5117 if [#<wkleslosc_fazki_s_p> lt 0.000001] 
g3 x[#<sr_pocz>] z[#<z_koncowe>-[#<szerokosc_fazki_2>]] r[#<promien_fazki_s_p>]   F#<posuw> 
o5117 endif
o5115 endif
g0 x[[#<sr_pocz>]+#<odjazd_x>] 
g0 Z[#<z_koncowe>+#<odjazd_z>] 

o5300 else (toczenie fazki na średnicy początkowej od lewej do prawej) 


G0 x[[#<sr_pocz>]-#<glebokosc_fazki_2>*2]             

g0 Z[#<z_koncowe>+#<odjazd_z>] 

G1 z[#<z_koncowe>] F#<posuw> 

o5124 if [#<promien_fazki_s_p> lt 0.00001] 
g1 x[#<sr_pocz>] z[#<z_koncowe>+[#<szerokosc_fazki_2>]]  F#<posuw>   
o5124 endif
o5125 if [#<promien_fazki_s_p> gt 0] 
o5126 if [#<wkleslosc_fazki_s_p> gt 0] 
g3 x[#<sr_pocz>] z[#<z_koncowe>+[#<szerokosc_fazki_2>]] r[#<promien_fazki_s_p>]   F#<posuw> 
o5126 endif
o5127 if [#<wkleslosc_fazki_s_p> lt 0.000001] 
g2 x[#<sr_pocz>] z[#<z_koncowe>+[#<szerokosc_fazki_2>]] r[#<promien_fazki_s_p>]   F#<posuw> 
o5127 endif
o5125 endif
g0 x[[#<sr_pocz>]+#<odjazd_x>] 
Z[#<z_koncowe>+#<odjazd_z>] 
o5300 endif

o5111 endwhile 
o5110 endif  ( koniec fazki na średnicy początkowej ) 


(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

o1000 else (Procedura główna - roztaczanie walca lub stożek od wewnątrz) 

#<sr_pocz> = [#<sr_pocz>+#<pomijaj_srednica>] (pomijania używamy,gdy poprawiamy detal i cześć procedury już jest wykonana) 
 o1500 if[[#<noz_wstepny> ne 0]] 
         o<loadtool> call [#<noz_wstepny>] 
         
  o1500 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>+#<pomijaj_srednica>] F#<posuw1> 
       G0 X[#<Current-Diameter>+#<pomijaj_srednica>-#<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 na średnicy końcowej roztaczanie) 

#<odjazd_x>=[#<odjazd_x>*2+#<przybranie_materialu>] 
#<roznica_srednic>=[#<sr_pocz>-#<sr_koncowa>] 
#<sr_pocz> = [#<sr_pocz>+#<pomijaj_srednica>] (pomijania używamy,gdy poprawiamy detal i cześć procedury już jest wykonana) 
#<akt_start_x>=#<sr_pocz> 
#<z_k_stozka>=0
#<dl_stozka>=[abs[#<z_koncowe>]+abs[#<z_pocz>]] 
#<korekta_polozenia_fazki> = [#<szerokosc_fazki_s_k>*#<korekta>/[#<dl_stozka>]] 

o170 if[#<wkleslosc_fazki_s_k>eq 1] 
		#<wkleslosc_fazki_s_k>=0
	o170 else
		#<wkleslosc_fazki_s_k>=1
	o170 endif


o189 if[#<z_pocz> le #<z_koncowe>] 

#<sr_koncowa>=[#<sr_koncowa>+#<korekta_polozenia_fazki>*3] 
o189 else
#<sr_koncowa>=[#<sr_koncowa>+#<korekta_polozenia_fazki>] 
o189 endif
o188 if[#<sr_koncowa> lt #<sr_pocz>] 
o188 endif
o180 if [#<szerokosc_fazki_s_k> gt 0] 
#<szerokosc_fazki_1> = #<pomijaj_faza_s_k> 
#<glebokosc_fazki_1> = [#<glebokosc_fazki_s_k>*#<pomijaj_faza_s_k>/#<szerokosc_fazki_s_k>] 
 




o181 while [#<szerokosc_fazki_1> lt #<szerokosc_fazki_s_k>] 
#<szerokosc_fazki_1>=[#<szerokosc_fazki_1>+#<przybranie_materialu>] 
#<glebokosc_fazki_1>=[#<glebokosc_fazki_1>+[#<glebokosc_fazki_s_k>*#<przybranie_materialu>/#<szerokosc_fazki_s_k>]] 
 o182 if [#<szerokosc_fazki_1> gt #<szerokosc_fazki_s_k>] 
    #<szerokosc_fazki_1> = #<szerokosc_fazki_s_k> 
  o182 endif     
  o183 if [#<glebokosc_fazki_1> gt #<glebokosc_fazki_s_k>] 
    #<glebokosc_fazki_1> = #<glebokosc_fazki_s_k> 
  o183 endif   


o1380 if[#<z_pocz> ge #<z_koncowe>] 

G0 x[[#<sr_koncowa>]+#<glebokosc_fazki_1>*2]             ( wjazd do fazki na fi #<sr_koncowa> +- zmienia) 

g0 Z[#<z_pocz>+#<odjazd_z>] 

G1 z[#<z_pocz>] F#<posuw> 

o184 if [#<promien_fazki_s_k> lt 0.00001] 
g1 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]]  F#<posuw>   ( toczenie fazki na fi #<sr_pocz>) 
o184 endif
o185 if [#<promien_fazki_s_k> gt 0] 
o186 if [#<wkleslosc_fazki_s_k> gt 0] 
g2 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o186 endif
o187 if [#<wkleslosc_fazki_s_k> lt 0.000001] 
g3 x[#<sr_koncowa>] z[#<z_pocz>-[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o187 endif
o185 endif
g0 x[[#<sr_koncowa>]-#<odjazd_x>] 
g0 Z[#<z_pocz>+#<odjazd_z>] 

o1380 else


G0 x[[#<sr_koncowa>]-#<glebokosc_fazki_1>*2]            

g0 Z[#<z_pocz>+#<odjazd_z>] 

G1 z[#<z_pocz>] F#<posuw> 

o194 if [#<promien_fazki_s_k> eq 0] 
g1 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]]  F#<posuw>  
o194 endif
o195 if [#<promien_fazki_s_k> gt 0] 
o196 if [#<wkleslosc_fazki_s_k> gt 0] 
g2 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o196 endif
o197 if [#<wkleslosc_fazki_s_k> eq 0] 
g3 x[#<sr_koncowa>] z[#<z_pocz>+[#<szerokosc_fazki_1>]] r[#<promien_fazki_s_k>]   F#<posuw> 
o197 endif
o195 endif
g0 x[[#<sr_koncowa>]-#<odjazd_x>] 
Z[#<z_pocz>+#<odjazd_z>] 
o1380 endif

o181 endwhile ( koniec pętli ) 
o180 endif  ( koniec fazki na średnicy końcowej ) 

(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
o1000 endif (koniec procedury głównej bez inwersji) 


g54

M5 M9               ; stop wrzeciona, chłodziwo stop

o<toczenie> endsub


kamar
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 99
Posty: 16283
Rejestracja: 18 wrz 2010, 06:17
Lokalizacja: Kozienice
Kontakt:

#210

Post napisał: kamar » 02 gru 2012, 14:58

MlKl pisze:Korekta stożka nie ingeruje w sam stożek, tylko zdejmuje materiał od jego podstawy do średnicy surowego wałka, którą program wylicza sumując średnicę podstawy stożka (średnicę początkową) z wartością, wpisaną w polu korekta.
Już dawno przestałem próbować nadązyc za tokiem Twojego myslenia :) Ale korekta w moim zamyśle ma słuzyć do ewentualnego poprawienia już wytoczonego stozka. Świat nie jest idealny i zawsze się może okazać że pochylenie lekko nie takie lub średnice w plusie.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”