NGCGUI - toczenie, mocno rozbudowana procedura

Dyskusje dotyczące działania obsługi programu LinuxCNC

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

#121

Post napisał: kamar » 24 lis 2012, 22:32

MlKl pisze:Mógłbym każdą twoją rozbudować, ale nadal by się automatycznie nie wiązały. A o to mi głównie chodzi, żeby operacje się same agregowały. A to można zrobić tylko w jednej procedurze - stan na dziś.
Co Ci sie agreguje :) Ze fazkę zrobisz na już wpisanej srednicy. Współrzędne są jedne i znane. No ale jak sie tworzy detal z głowy a nie z rysunku to się początki i końce mogą rozjechac w przestrzeni. A wstawiając na drugą średnicę i tak musisz podać
Rysunek faktycznie juz był i kody na niego mam pisane z palca (tez były) ale było pare zmian w wymiarach i jest okazja sprawdzić zapis. Zrobię na symulatorze a na maszynce się sprawdzi. A to mi pasuje. Kłucić się wieczorami na forum a jednoczesnie zrobic coś pozytecznego :)
Ostatnio zmieniony 24 lis 2012, 22:49 przez kamar, łącznie zmieniany 1 raz.



Tagi:

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:

#122

Post napisał: MlKl » 24 lis 2012, 22:48

Właśnie o tę fazkę mi chodzi :) oszczędza połowę zużywanych zakładek, i 3/4 kombinowania, jak ją zrobić. Po dyskusji z tobą żałuję, że nie mam jeszcze dziesięciu pól do dyspozycji, bo bym sobie zafundował fazki na obu średnicach, i wtedy detal bym robił w tylu zakładkach, ile on ma średnic. Pracując wzdłuż warstwami, a nie po czopie.

Właśnie sprawdziłem - rowki pod segery, i odcinanie mogę też robić z tej procedury już teraz

:)

Obrazek

Z tymi znanymi średnicami też nie do końca tak. Na walcu znasz. Na stożku - nie. Można sobie radzić dając z nadmiarem. Ale zamiast ustawiać całą zakładkę, wolę wpisać głębokość i szerokość, oraz ewentualnie promień i wklęsłość, i robi się samo, w tym miejscu, co trzeba, i z odpowiednimi korektami na stożek.
Ostatnio zmieniony 24 lis 2012, 22:59 przez MlKl, łącznie zmieniany 1 raz.


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

#123

Post napisał: kamar » 24 lis 2012, 22:57

MlKl pisze: Właśnie sprawdziłem - rowki pod segery, i odcinanie mogę też robić z tej procedury już teraz :)
Nie do przejścia. :) Popatrz jeszcze dobrze - moze kawę zaparzy :)
Rzuć to w czotry i napisz CAM-a. :)

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:

#124

Post napisał: MlKl » 24 lis 2012, 23:01

Ta procedura to właśnie prawie CAM :)

Z naszych kłótni wynikają rzeczy dobre i pożyteczne. Ja się lubię tak kłócić. :)

I przecież po to wstawiłem procedurę "w budowie", żeby na bieżąco dostać opeer za błędy i wypaczenia.

I kolejny filmik, pokazujący, jak pracować w NGCGUI z kilkoma zakładkami.

[youtube][/youtube]


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

#125

Post napisał: kamar » 25 lis 2012, 05:53

MlKl pisze:Ta procedura to właśnie prawie CAM :)
]
prawie robi wielką różnicę :)
A teraz poważnie ( bo czasen sobie żartujemy)
Kol. tuxcnc to przynajmniej wgrał procedurę i szuka błędów. Mnie się nawet wgrać nie chciało.
A to z powodu błednych założeń wejściowych.
Podstawową funkcją tokarki jest toczenie średnic. Fazki podcinki i inne wodotryski są tylko przydatnymi, dodatkowymi funkcjami. Gdybyś przyjął na początku że procedurka tworzy
min. trzy średnice i na nich robi wodotryski, to bym zrozumiał chociaż nie poparł.
A nie poparł bym dlatego iż przed erą ngcgui mieliśmy coś podobnego zrobione w pytonie i tez za wygodnie nie było. Deklarowało się ilość średnic i dla każdej (z rozwijanych menu) wybierało wodotryski.
Jeśli już musisz coś stworzyć to idż w tę stronę.
Z filmiku wynika jedno - dobrze że masz myszkę na poziomym biurku i Ci kursor nie ucieka z tabelki :)
I na koniec sentencja :
Nie wystarczy wjechać kolejką na Kasprowy, żeby napisac poradnik dla GOPR-u. :)

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:

#126

Post napisał: MlKl » 25 lis 2012, 06:10

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 :P

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:

Obrazek

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ę.


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

#127

Post napisał: kamar » 25 lis 2012, 06:43

Toż dlatego mówię ze w ngcgui robienie tego jest nieporozumieniem.
Mieliśmy jeden program dla tokarki .
Tak to wyglądało :

Obrazek

I z wyprzedzeniem spełniony postulat tuxcnc o błędnych danych :)

Fragment kodu z przed dwóch lat:

Kod: Zaznacz cały

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ------------------------------ 
#         T O K A R K A
# ------------------------------ 
# Kamar
# Artur Maciąg <[email protected]> 
# Time-stamp: <2010-08-23 10:07> 

import sys, os
import pygtk
pygtk.require('2.0') 
import gtk
import pickle

class Tokarka: 

    def delete_event(self, widget, event, data=None): 
        return False


    def destroy(self, widget, data=None): 
        gtk.main_quit() 


    def rozwijaczka(self, widget): 
        self.l_sr_poczatkowa.hide() 
        self.sr_poczatkowa.hide() 
        self.l_sr_koncowa.hide() 
        self.sr_koncowa.hide() 
        self.l_dobieranie.hide() 
        self.dobieranie.hide() 
        self.l_poczatek.hide() 
        self.poczatek.hide() 
        self.l_koniec.hide() 
        self.koniec.hide() 
        self.l_posuw.hide() 
        self.posuw.hide() 
        self.l_kat.hide() 
        self.kat.hide()            
        
        string = widget.get_active_text() 
        if string == "Zewnętrzna" or string == "Wewnętrzna": 
            self.l_sr_poczatkowa.show() 
            self.sr_poczatkowa.show() 
            self.l_sr_koncowa.show() 
            self.sr_koncowa.show() 
            self.l_dobieranie.show() 
            self.dobieranie.show() 
            self.l_poczatek.show() 
            self.poczatek.show() 
            self.l_koniec.show() 
            self.koniec.show() 
            self.l_posuw.show() 
            self.posuw.show() 
        if string == "Skos": 
            self.l_sr_poczatkowa.show() 
            self.sr_poczatkowa.show() 
            self.l_sr_koncowa.show() 
            self.sr_koncowa.show() 
            self.l_dobieranie.show() 
            self.dobieranie.show() 
            self.l_posuw.show() 
            self.posuw.show()            
            self.l_kat.show() 
            self.kat.show() 
        if string == "Czoło": 
            self.l_sr_poczatkowa.show() 
            self.sr_poczatkowa.show() 
            self.l_sr_koncowa.show() 
            self.sr_koncowa.show() 
            self.l_poczatek.show() 
            self.poczatek.show() 
            self.l_koniec.show() 
            self.koniec.show() 
            self.l_dobieranie.show() 
            self.dobieranie.show() 
            self.l_posuw.show() 
            self.posuw.show()            
        if string == "Czop": 
            self.l_czop1_x.show() 
            self.czop1_x.show() 
            self.l_czop1_z.show() 
            self.czop1_z.show() 
            
            self.l_czop2_x.show() 
            self.czop2_x.show() 
            self.l_czop2_z.show() 
            self.czop2_z.show() 
            
            self.l_czop3_x.show() 
            self.czop3_x.show() 
            self.l_czop3_z.show() 
            self.czop3_z.show() 

            self.l_czop4_x.show()            
            self.czop4_x.show() 
            self.l_czop4_z.show() 
            self.czop4_z.show() 

        
    def __init__(self): 
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
        self.window.connect("delete_event", self.delete_event) 
        self.window.connect("destroy", self.destroy) 

        my_width = 300
        my_height = 400
        self.window.set_border_width(10) 
        self.window.set_default_size(my_width, my_height) 
        self.window.set_title("Tokarka") 
        root = self.window.get_screen() 
        w = root.get_width() 
        h = root.get_height() 

        self.window.move((w/2) - (my_width/2), (h/2) - (my_height/2)) 

        self.table = gtk.Table(2, 2, False) 
        self.window.add(self.table) 


        self.layout = gtk.Layout(hadjustment=None, vadjustment=None) 
        self.layout.set_size(600, 600) 
        self.table.attach(self.layout, 0, 1, 0, 1, gtk.FILL|gtk.EXPAND,gtk.FILL|gtk.EXPAND, 0, 0) 


        self.combo = gtk.combo_box_new_text() 


        self.combo.append_text("Wewnętrzna") 
        self.combo.append_text("Zewnętrzna") 
        self.combo.append_text("Skos") 
        self.combo.append_text("Czoło") 
        #self.combo.append_text("Faza") 
        #self.combo.append_text("Promień") 
        #self.combo.append_text("Czop")        
        self.layout.put(self.combo, 0, 0) 

        # konfig usera
        self.rc = os.path.expanduser("~/.emc_tokarkarc") 
        self.defaults = dict( 
            operacja = 0,

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:

#128

Post napisał: MlKl » 25 lis 2012, 07:12

A trzmiel se lata... :P

Kamar - ja tej procedury używam codziennie. Robię nią realne detale. Umożliwia mi łatwe zaprogramowanie tego, co twoimi procedurami tez się da zrobić, ale trzeba się mocno nagimnastykować, i dodatkowo pozwala robić rzeczy, których twoje procedurki nie zrobią.

Obrazek

Postulat tuxa jest słuszny, ino owe błędy wyskakują, bo nie ma tej części procedury, do której się mają owe pola formularza odwoływać. Jak napiszę procedurę, to dopiero mogę walczyć z komunikatami o konieczności wypełnienia tylko dwóch z trzech pól po zaznaczeniu stożka.

Nie jest to dla mnie strasznie pilne, bo i tak mogę sobie zaprogramować dowolny stożek używając do tego po prostu fazki, albo poprzez korektę stożka, która co prawda robi trochę pustych przebiegów w powietrzu posuwem roboczym, ale też się przydaje.


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

#129

Post napisał: kamar » 25 lis 2012, 07:35

MlKl pisze: Kamar - ja tej procedury używam codziennie. Robię nią realne detale. ]
Naprawdę ? Moje są tylko do pokazania na forum :) Na maszynach robię na Twojej. :)
Cholera, znowu dałem się wciągnąć :) ale finito.

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:

#130

Post napisał: MlKl » 25 lis 2012, 07:55

Twoje są proste, skuteczne i działają. Moja jest trochę bardziej skomplikowana, i może sporo więcej niż wszystkie twoje zusamen do kupy. I też działa. Ja nie poddaję w wątpliwość działania i przydatności twoich procedur. Ośmielam się jedynie marudzić, że moja działa lepiej, pozwala zrobić to samo łatwiej i szybciej.

Wystarczy sobie zakodować, że zakładka zawsze robi walec albo stożek, i to, co występuje za punktem startu noża w osi Z na średnicy końcowej tego walca lub stożka, a co nie jest kolejnym walcem. Bo stożek na stożku robi bez problemu.

Czyli zakładka robi jedną, albo dwie podprocedury, ściśle ze sobą związane.

Bawiłeś się kiedyś klockami? Miałeś takie sześciany i podwójne sześciany, czyli jakby dwa klocki sklejone do kupy? Ty masz zestaw pojedynczych, ja mam magiczne klocki, i jak chcę to są pojedyncze, albo podwójne. I dlatego łatwiej mi budować i szybciej mi to idzie.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”