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:

#101

Post napisał: MlKl » 24 lis 2012, 17:13

Toć jak wywołuje procedurę, to wie jaką :)

Jak woła o<toczenie> call []... , to przecie odwołuje się do procedury toczenie, a nie innej. Czyli LinuxCNC musi wpisać dane z nawiasów w tabelkę toczenie. Jak w następnej wywołanej procedurze znowu jest o<toczenie> call []... LinuxCNC musi utworzyć zakładkę toczenie-1 na podstawie zakładki toczenie, i wypełnić ją danymi z nawiasów za drugim wywołaniem. I tak dalej.

Naprawdę nic więcej nie trzeba.



Tagi:


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

#102

Post napisał: kamar » 24 lis 2012, 17:29

MlKl pisze:
Naprawdę nic więcej nie trzeba.
Własciwie tak.
Ale strzeliłeś se w kolano :) :)


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

#103

Post napisał: hecza » 24 lis 2012, 17:37

MlKl pisze:Toć jak wywołuje procedurę, to wie jaką :)

Jak woła o<toczenie> call []... , to przecie odwołuje się do procedury toczenie, a nie innej. Czyli LinuxCNC musi wpisać dane z nawiasów w tabelkę toczenie. Jak w następnej wywołanej procedurze znowu jest o<toczenie> call []... LinuxCNC musi utworzyć zakładkę toczenie-1 na podstawie zakładki toczenie, i wypełnić ją danymi z nawiasów za drugim wywołaniem. I tak dalej.

Naprawdę nic więcej nie trzeba.
Może być i tak (byle było) - za bardzo się chcę zabezpieczać :smile: &#8211; bo jak się nawet wgra starszy plik do nowocześniejszej procedurki i coś będzie nie tak, to będzie widać na podglądzie.
Spojrzeć trzeba zawsze.

Pozdrawiam


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

#104

Post napisał: kamar » 24 lis 2012, 17:47

hecza pisze:[ &#8211; bo jak się nawet wgra starszy plik do nowocześniejszej procedurki i coś będzie nie tak, to będzie widać na podglądzie.
Spojrzeć trzeba zawsze.

Pozdrawiam
Najpierw sprawdz jak działa a potem sie będziesz martwil :)
Tylko dlaczego dopiero po roku.
Ostatnio zmieniony 24 lis 2012, 17:49 przez kamar, łącznie zmieniany 1 raz.

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:

#105

Post napisał: MlKl » 24 lis 2012, 17:49

Dało by się i przed wgraniem zmienionej procedury zabezpieczyć, ale wtedy by trzeba dodawać w każdej procedurze obowiązkowo sygnaturę czasową ostaniej modyfikacji, i zapisywać ją w pliku .ngc za każdym razem. Potem przy wywołaniu sprawdzać, czy się sygnatury zgadzają.

Można rzecz uprościć, i sprawdzać datę modyfikacji pliku z procedurą, to system sam zapisuje po każdej edycji. Trzeba by to tylko wpisywać do pliku .ngc

kamar - piszę, co wystarczy programowi do importu danych z pliku. Mnie proste procedurki składowe nie wystarczają. Chyba, że programiści wymyślą, jak jedne mają po drugich dziedziczyć ustawienia, czy łączyć się automatycznie. Np jak po procedurze walec wywołam procedurę faza, to okienko mi się podstawia z wpisaną średnicą końcową procedury walec, i muszę tylko podać głębokość i szerokość. A jak po stożku podam półkulę, to mi ją automatycznie zakotwiczy na ściance stożka, zaczynając tak, by wychodziła jako styczna do niej. Dopóki tego nie ma, będę używał procedur bardziej skomplikowanych, ale nie zmuszających mnie do żmudnego dopasowywania klocków do siebie metodą prób i błędów, na oko, albo przy użyciu kalkulatora.


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

#106

Post napisał: kamar » 24 lis 2012, 17:54

Do tej dyskusji nie wracam, wymyslasz problemy żeby je pieknie rozwiązywać.
A że po edycji zapisanych procedurek danego detalu do ewentualnych poprawek, giniesz w przedbiegach, to fakt bezsporny :)

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:

#107

Post napisał: MlKl » 24 lis 2012, 18:06

Detal sobie zawsze mogę łatwo i szybko zaprogramować od nowa, nawet, jak pozmieniałem procedurki.

A problemy mi się pojawiają w trakcie pracy, i je po prostu rozwiązuję. Hecza już to zrozumiał, ty - jeszcze nie.

Wkleił obrazek:

Obrazek

Na którym widać, że jeszcze nie do końca dopracowałem osadzanie półkuli na stożku.

W tej chwili da się to zrobić metodą "na oko"

Obrazek

ale właśnie dopisuję kod, który będzie zwężał podaną szerokość fazki tak, by początek półkuli był styczną do powierzchni stożka, i wtedy juz się nie będę nigdy nad tym musiał gimnastykować.


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

#108

Post napisał: kamar » 24 lis 2012, 19:09

MlKl pisze:Detal sobie zawsze mogę łatwo i szybko zaprogramować od nowa, .
To po co Ci zapis :)
Dla mnie to potężne narzedzie i dzieki Ci za to. !!!
Nawet powtarzalne detale mogę poskladać i zapisac do bazy detali a nie pisac paluchem.
I to nie tylko na tokarce.
Ale że przez 11miesiecy nikt nie spróbował po prostu zapisac układu to jednak dziwne :)
Może ktoś spróbować to wgrać do siebie i sprawdzić czy pójdzie ? Jako normalny plik .ngc oczywiście. Ale chyba sie nie da. Pójdzie tylko na maszynie na której powstał ? Chyba że będzie miala takie same zakładki ale u mnie to sie da zrobić.

Kod: Zaznacz cały

(ngcgui: FEATURE 121124:18.13.12) 
(ngcgui: files: </home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc /home/cnc/linuxcnc/kody/suby_tokarka/zew.ngc >) 
(ngcgui: feature line added) #<_feature:> = 0
(ngcgui: preamble file: /home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc) 
g18 (xz plane) 
g21 (mm) 
g40 (cancel cutter radius compensation) 
g49 (cancel tool lengthoffset) 
g90 (absolute distance mode) 
g94 (units/min feedrate) 
g54 (Coordinate system 1 default) 
#<tol>  = 0.001
g64 p#<tol> (path control stop) 
(ngcgui: Wywołaj plik procedury: /home/cnc/linuxcnc/kody/suby_tokarka/zew.ngc) 
(ngcgui: positional parameters:) 
(         #1 =      sr_pocz =           60) 
(         #2 =   sr_koncowa =           40) 
(         #3 =   dobieranie =            2) 
(         #4 =     poczatek =            0) 
(         #5 =       koniec =          -60) 
(         #6 =        posuw =           50) 
(         #7 =         woda =            1) 
o<zew> call [60][40][2][0][-60][200][1] 
(ngcgui: FEATURE 121124:18.13.12) 
(ngcgui: files: </home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc /home/cnc/linuxcnc/kody/suby_tokarka/stozek.ngc >) 
(ngcgui: feature line added) #<_feature:> = 1
(ngcgui: preamble file: /home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc) 
g18 (xz plane) 
g21 (mm) 
g40 (cancel cutter radius compensation) 
g49 (cancel tool lengthoffset) 
g90 (absolute distance mode) 
g94 (units/min feedrate) 
g54 (Coordinate system 1 default) 
#<tol>  = 0.001
g64 p#<tol> (path control stop) 
(ngcgui: Wywołaj plik procedury: /home/cnc/linuxcnc/kody/suby_tokarka/stozek.ngc) 
(ngcgui: positional parameters:) 
(         #1 = sr_materialu =           40) 
(         #2 =      sr_pocz =           34) 
(         #3 =   sr_koncowa =           40) 
(         #4 =       z_pocz =          -20) 
(         #5 =    dl_stozka =            4) 
(         #6 =          kat =            0) 
(         #7 =   dobieranie =            2) 
(         #8 =        posuw =           60) 
(         #9 =      korekta =            0) 
(        #10 =         woda =            1) 
o<stozek> call [40][34][40][-20][4][0][2][60][0][1] 
(ngcgui: FEATURE 121124:18.13.12) 
(ngcgui: files: </home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc /home/cnc/linuxcnc/kody/suby_tokarka/zew.ngc >) 
(ngcgui: feature line added) #<_feature:> = 2
(ngcgui: preamble file: /home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc) 
g18 (xz plane) 
g21 (mm) 
g40 (cancel cutter radius compensation) 
g49 (cancel tool lengthoffset) 
g90 (absolute distance mode) 
g94 (units/min feedrate) 
g54 (Coordinate system 1 default) 
#<tol>  = 0.001
g64 p#<tol> (path control stop) 
(ngcgui: Wywołaj plik procedury: /home/cnc/linuxcnc/kody/suby_tokarka/zew.ngc) 
(ngcgui: positional parameters:) 
(         #1 =      sr_pocz =           40) 
(         #2 =   sr_koncowa =           20) 
(         #3 =   dobieranie =            2) 
(         #4 =     poczatek =            0) 
(         #5 =       koniec =          -20) 
(         #6 =        posuw =           50) 
(         #7 =         woda =            1) 
o<zew> call [40][20][2][0][-20][50][1] 
(ngcgui: FEATURE 121124:18.13.12) 
(ngcgui: files: </home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc /home/cnc/linuxcnc/kody/suby_tokarka/stozek.ngc >) 
(ngcgui: feature line added) #<_feature:> = 3
(ngcgui: preamble file: /home/cnc/linuxcnc/ngcgui_lib/lathe/lathe_std.ngc) 
g18 (xz plane) 
g21 (mm) 
g40 (cancel cutter radius compensation) 
g49 (cancel tool lengthoffset) 
g90 (absolute distance mode) 
g94 (units/min feedrate) 
g54 (Coordinate system 1 default) 
#<tol>  = 0.001
g64 p#<tol> (path control stop) 
(ngcgui: Wywołaj plik procedury: /home/cnc/linuxcnc/kody/suby_tokarka/stozek.ngc) 
(ngcgui: positional parameters:) 
(         #1 = sr_materialu =           20) 
(         #2 =      sr_pocz =           14) 
(         #3 =   sr_koncowa =           20) 
(         #4 =       z_pocz =            0) 
(         #5 =    dl_stozka =            3) 
(         #6 =          kat =            0) 
(         #7 =   dobieranie =            2) 
(         #8 =        posuw =           60) 
(         #9 =      korekta =            0) 
(        #10 =         woda =            1) 
o<stozek> call [20][14][20][0][3][0][2][60][0][1] 
(ngcgui: m2 line added) m2 (g54 activated) 
Obrazek

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:

#109

Post napisał: MlKl » 24 lis 2012, 19:52

To jeszcze powrzucaj wszystkie użyte procedury - bo one muszą być w katalogu, skąd je wciąga NGCGUI. Przecież o tym mówiliśmy przed chwilą - zastanawialiśmy się co będzie, jak się coś w procedurze zmieni w międzyczasie.

I zmiany w wykonywalnym kodzie mają niewielki wpływ na powtórzenie operacji później. Nie można tylko zmienić kolejności wprowadzanych parametrów, ani ich ująć, czy dodać bo NGCGUI się zapluje, że nie ma wartości startowej dla jakiejś zmiennej.

To, co sobie zapisałeś, jest tylko wywołaniem procedur w plikach.

To forum ma służyć wymianie wiedzy. Ale jak sam kiedyś zauważyłeś - niektóre rzeczy człowiekowi wydają się tak oczywiste, iż sam się nie domyśli, że drugi tego nie wie...


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

#110

Post napisał: kamar » 24 lis 2012, 20:09

Kod: Zaznacz cały

( ------------------------------ )            
(     Z E W N E T R Z N A        ) 
( ------------------------------ ) 
( Kamar                          ) 
( Time-stamp: <2012-01-24 09:45> ) 
( ------------------------------ ) 

(info: Średnica zewnetrzna ) 

o<zew> sub

#<sr_pocz> = #1 (=60 średnica początkowa) 
#<sr_koncowa> = #2 (=40 średnica końcowa) 
#<dobieranie> = #3 (=2 dobieranie) 
#<poczatek> = #4 (=0 początek) 
#<koniec> = #5 (=-40 koniec) 
#<posuw> = #6 (=50 posuw) 
#<woda> = #7 (=1 Woda) 

g61

m3 s1
o1 if [#<woda> eq 1] 
   M8
o1 endif


g0 z[#<poczatek> + 1] 
g0 x[#<sr_pocz> + 1] 

o10 while [#<sr_pocz> gt #<sr_koncowa>] 
  #<sr_pocz>=[#<sr_pocz> - #<dobieranie>] 
  o402 if [#<sr_pocz> lt #<sr_koncowa>] 
    #<sr_pocz> = #<sr_koncowa> 
  o402 endif
  g0 x#<sr_pocz> 
  g1 z#<koniec> f#<posuw> 
  g1 x[#<sr_pocz> + 2] 
  g0 z[#<poczatek> + 1] 
o10 endwhile

o<zew> endsub

Kod: Zaznacz cały

( ------------------------------ ) 
(          S T O Z E K           ) 
( ------------------------------ ) 
( Kamar                          ) 
( Time-stamp: <2012-09-19 12:31> ) 
( ------------------------------ ) 

(info: Stożek ) 

o<stozek> sub

#<sr_materialu> = #1 (=40 Średnica materiału) 
#<sr_pocz> = #2 (=20 Średnica początkowa) 
#<sr_koncowa> = #3 (=30 Średnica końcowa) 
#<z_pocz> = #4 (=0 Z początkowe) 
#<dl_stozka> = #5 (=20 Długość stożka) 
#<kat> = #6 (=0 kąt) 
#<dobieranie> = #7 (=2 Dobieranie) 
#<posuw> = #8 (=60 Posuw) 
#<korekta> = #9 (=0 Korekta) 
#<woda> = #10 (=1 Woda) 

g7
g61

m3 s1
o1 if [#<woda> eq 1] 
   M8
o1 endif

( jeżeli podany kąt) 
o10 if [#<kat> gt 0] 
  o11 if [#<sr_pocz> lt #<sr_koncowa>] 
    (rosnacy) 
    #<krok> = 0
    #<akt_start> = #<sr_materialu> 
    o12 while [#<akt_start> gt #<sr_pocz>] 
      #<akt_start> = [#<akt_start> - #<dobieranie>] 
      #<krok> = [#<krok> + 1] 
      o13 if [#<akt_start> lt #<sr_pocz>] 
        #<akt_start> = #<sr_koncowa> 
      o13 endif
      g0 x#<akt_start> 

			o14 if [#<sr_koncowa> gt #<sr_materialu>] 
			  #<sr_koncowa> = #<sr_materialu> 
			o14 endif
      g1 x#<sr_koncowa> z[-1 * [[#<z_pocz> + [#<krok> * #<dobieranie> / 2]] / tan[#<kat>]]] f#<posuw> 
      g0 z#<z_pocz> 
    o12 endwhile
  o11 endif
	
  o20 if [#<sr_pocz> gt #<sr_koncowa>] 
    (malejacy) 
    #<dl_stozka> = [[tan[#<kat>] * [#<sr_pocz> - #<sr_koncowa>]] / 2] 
    #<akt_koniec> = #<sr_pocz> 
    o25 while [#<akt_koniec> gt #<sr_koncowa>] 
      #<akt_koniec> = [#<akt_koniec> - #<dobieranie>] 
      o21 if [#<akt_koniec> lt #<sr_koncowa>] 
        #<akt_koniec> = #<sr_koncowa> 
      o21 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> 
    o25 endwhile
  o20 endif
(--------------------) 
o10 else (kat == 0) 
(--------------------) 
  o100 if [#<sr_pocz> lt #<sr_koncowa>] 
    (rosnacy) 
		
    #<krok> = 0
		( jezeli srednica koncowa mniejsza niz material to zbieram naddatek)		
		o101 if [#<sr_koncowa> lt #<sr_materialu>] 
		  #<x_akt_start> = #<sr_materialu> 
			#<x_akt_koniec> = #<sr_koncowa> 
      o102 while [#<x_akt_start> gt #<x_akt_koniec>] 
			  #<x_akt_start> = [#<x_akt_start> - #<dobieranie>] 
				o103 if [#<x_akt_start> lt #<x_akt_koniec>] 
				  #<x_akt_start> = #<x_akt_koniec> 
				o103 endif
        g0 z[#<z_pocz> + 1] 
        g0 x#<x_akt_start> 
				g1 z[#<z_pocz> - #<dl_stozka>] F#<posuw> 
				g0 x[#<x_akt_start> + 1] 
				g0 z[#<z_pocz> + 1] 
			o102 endwhile
		o101 endif
		
    #<z_krok> = [[#<dl_stozka> * #<dobieranie>] / [#<sr_koncowa> - #<sr_pocz>]] 
    #<x_akt_start> = #<sr_koncowa> 
    #<z_akt_koniec> = #<z_pocz> 
		o311 if [#<korekta> eq 1] 
		  #<x_akt_start> = [#<sr_pocz> + #<dobieranie>] 
			#<z_akt_koniec> = [-1 * [#<dl_stozka> - #<z_krok>]] 
		o311 endif
    o6 while [#<x_akt_start> gt #<sr_pocz>] 
      #<x_akt_start> = [#<x_akt_start> - #<dobieranie>] 
      #<krok> = [#<krok> + 1] 
      o11 if [#<x_akt_start> lt #<sr_pocz>] 
        #<x_akt_start> = #<sr_pocz> 
      o11 endif
      #<z_akt_koniec> = [#<z_akt_koniec> - #<z_krok>] 
      o14 if [#<z_akt_koniec> lt [#<z_pocz> - #<dl_stozka>]] 
        #<z_akt_koniec> = [#<z_pocz> - #<dl_stozka>] 
      o14 endif
      g0 z[#<z_pocz> + 1] 
      g0 x#<x_akt_start> 
      g1 z#<z_pocz> f#<posuw> 
(			o312 if[#<sr_koncowa> ge #<sr_materialu>]) 
			g1 x#<sr_koncowa> z#<z_akt_koniec> f#<posuw> 
(			o312 else) 
(        g1 x#<sr_materialu> z#<z_akt_koniec> f#<posuw>) 
(			o312 endif) 

      g0 z#<z_pocz> 
    o6 endwhile
  o100 endif

  o200 if [#<sr_pocz> gt #<sr_koncowa>] 
  (malejacy) 

    #<akt_koniec> = #<sr_pocz> 
		o312 if [#<korekta> eq 1] 
		  #<akt_koniec> = [#<sr_koncowa> + #<dobieranie>] 
		o312 endif

    o205 while [#<akt_koniec> gt #<sr_koncowa>] 
      #<akt_koniec> = [#<akt_koniec> - #<dobieranie>] 

      o210 if [#<akt_koniec> lt #<sr_koncowa>] 
        #<akt_koniec> = #<sr_koncowa> 
      o210 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> 
    o205 endwhile
  o200 endif

o10 endif

o<stozek> endsub
Pierwsza ma sie nazywać "zew" a druga "stozek"

P.S. Na powyższych przykładach widać dobitnie różnicę miedzy tokarzem a programistą.
Jedną pisał tokarz. Zgadnijcie ktorą ? :)

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”