Suby ngcgui

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

prm_ex
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 4
Posty: 80
Rejestracja: 28 lip 2015, 15:55
Lokalizacja: Poznań

#21

Post napisał: prm_ex » 03 gru 2015, 20:36

Witam
Ngcgui zmuszone do ładowania się - działa.
Wciągnąłem suba Kamarowego czolo - działa.
Zrobiłem sobie swojego suba i .... nie działa :cry:

Kod: Zaznacz cały

(2015-12-01 sub do blablabla)				

(info: mojsub)

o<anie> sub
#<przesuwX> = #1 (=1194)
#<przesuwZ> = #2 (=400)
#<obsuwZ> = #3 (=6.28)
#<liczba_przejazdow> = #4 (=30)
#<aktualny_Z> = 0
#<licznik> = 0

o100  while [#<licznik> LT #<liczba_przejazdow>]
#<aktualny_Z> = [#<aktualny_Z> + #<przesuwZ>]
G0 x#<przesuwX> z#<aktualny_Z>
#<aktualny_Z> = [#<aktualny_Z> + 60]
G0 z#<aktualny_Z>
#<aktualny_Z> = [#<aktualny_Z> + #<przesuwZ>]
G0 x0 z#<aktualny_Z>
o101 while [[#<aktualny_Z> MOD 60 ] NE 0]
#<aktualny_Z> = [#<aktualny_Z> + 1]
o101 endwhile
#<aktualny_Z> = [#<aktualny_Z> + 60 + #<obsuwZ>]
G0 z#<aktualny_Z>
#<licznik>=[#<licznik> + 1]
o100 endwhile
o<anie> endsub
Oczywiście nazwa pliku to anie.ngc
Wyczyszczone preamble i postamble.

Co jest nie tak? Klikam "Create feature", potem "Finalize" i rozpoczyna się ładowanie.
Na dole pasek na niebiesko dojeżdża do połowy i się wiesza emc.
(Można okno zamknąć ale wewnątrz okna nic nie działa)
Szukałem literówki, braku nawiasu itp ale nic nie znalazłem.
Pętle while chyba mogą być zagnieżdżone?
Jakieś pomysły?
pozdrawiam



Tagi:


szary11
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 9
Posty: 383
Rejestracja: 16 lut 2011, 22:44
Lokalizacja: Tarnogród

#22

Post napisał: szary11 » 04 gru 2015, 06:51

Pewnie każdy ma jakiś sposób na nesting, przedstawiam mój troche prosty, ale zawsze coś jest:

Kod: Zaznacz cały

( ------------------------------ )
(       Pętla dla DXF2GCODE      )
( ------------------------------ )
( Adam                          )
( Time-stamp: <2015-10-14 10:56> )

( ------------------------------ )
(          USTAWIENIA            )
( ------------------------------ )

o<petla> sub


#<powt_x> = #1 (=1 wystąpienia X)
#<powt_y> = #2 (=1 wystąpienia Y)
#<odl_x> = #3 (=0 skok X)
#<odl_y> = #4 (=0 skok Y)

(definuje poczatek ukladu wspolrzednych aby potem inkrementowac wartosci)

#<y_pocz> = 0
#<x_pocz> = 0

o100 repeat[#<powt_x>]  (PETLA po x)

	g0 x#<x_pocz> y#<y_pocz>
	
	G92 x0 y0
	
	/g1 x10 y10 f1000

	o<input> call 
	
	
	o110 repeat[#<powt_y>-1] (pętla po Y)
	
		#<y_pocz> = #<odl_y>
		
		g0 x0 y#<y_pocz>
	
		G92 x0 y0 
		
		/g1 x10 y10 f1000
	
		o<input> call
	

	o110 endrepeat

	
#<y_pocz> = -[#<odl_y> * [#<powt_y>-1] ]		
#<x_pocz> = #<odl_x>

o100 endrepeat	


o<petla> endsub

generuje w subie , lub camie jakiś kształt, zapisuje jako "input", otwieram pentelke i rozrzucam jak obornik :lol:, bo ja ze wsi i niechce do miasta


prm_ex
Znawca tematu (min. 80)
Znawca tematu (min. 80)
Posty w temacie: 4
Posty: 80
Rejestracja: 28 lip 2015, 15:55
Lokalizacja: Poznań

#23

Post napisał: prm_ex » 04 gru 2015, 13:01

U kolegi z posta poprzedniego mój sub zachowuje się tak samo.
Czyli raczej będzie chodziło o składnię w którymś miejscu choć nie widzę.
A może wbrew literaturze jest problem z operatorem MOD .....
problem nadal występuje

Dopisano 2015-12-04 17:37
W moim subie został znaleziony BABOL.
Pętla o101 tylko na początku ma zmienną #aktualny_Z która jest całkowita.
Każdy następny przebieg już będzie float więc MOD nigdy nie wyjdzie 0 zwiększając dzielną o 1.

dodanie przed o101 linii

Kod: Zaznacz cały

#<aktualny_Z> = FUP[#<aktualny_Z>]
załatwia sprawę.

Mam jeszcze jedno pytanie. Aby wprowadzić poprawne odpowiednie dane potrzebny mi arkusz kalkulacyjny Excel/gnumeric aby na podstawie pewnych danych otrzymać te które wprowadzam do suba.
Jest jakaś możliwość aby w subie były dwie grupy okien do wprowadzania danych? Tzn w jednej grupie wprowadzam dane pojawiają się "obrobione" w polach które zostaną wzięte pod uwagę przy finalizacji sub'a?
pozdrawiam


szary11
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 9
Posty: 383
Rejestracja: 16 lut 2011, 22:44
Lokalizacja: Tarnogród

Re: Suby ngcgui

#24

Post napisał: szary11 » 10 sty 2018, 09:31

sub do rowków klinowych dla przecinaka
może komuś się przyda

Kod: Zaznacz cały


( ------------------------------ )
(       WYBRANIE     PASEK       )
( ------------------------------ )
( Adam                  )
( Time-stamp: <2017-12-23 21:00>  )
( ------------------------------ )
(info: klin )

o<klin> sub



#<nr> = #1 (=1 nr narzędzia)
#<obr> = #2 (=400 obroty)
#<odboczka> = #3 (=0 <> odboczka)

#<z_pocz> = #4 (=-5 Z początkowe)
#<sr_zew_duza> = #5 (=17 szerokość zewn.)
#<sr_wew_duza> = #6 (=5 szerokość wewn.)
#<kat> = #7 (=15.5 ...lub kąt) 
#<szer_noza> = #8 (=4 szerokość noża) 

#<poczatek> = #9 (=100 średnica duża)
#<koniec> = #10 (=80 średnica mała)
#<dobieranie> = #11 (=1 dobieranie)

#<posuw> = #12 (=0.1 posuw [mm/obr] v [mm/min])
#<posuw_na_obrot> = #13 (=0 <> posuw/obrot)

#<w_z> = #14 (=50 Z  do zmiany)
#<w_x> = #15 (=110 X  do zmiany)

#<woda> = #16 (=1 <> chłodzenie)

#<stala_pr_skrawania> = #17 (=0 <> stała pr. skrawania)
#<obroty_max> = #18 (=1200 obroty max)
#<pr_skrawania> = #19 (=200 prędkość skrawania [m/min])
#<dlugosc_z> = #20 (=1 długość fazki)


	o1 if [#<w_x> lt #<poczatek> or #<w_z> lt 0]
	(msg, KOLIZJA ! zły wyjazd)
	M30
	o1 endif
	
	
#<glebokosc_promieniowa> = [#<poczatek> - #<koniec>]


(kąt nachylenia paska liczony z wymiarow, potrzebny do obliczenia kątu sfazowania)

#<kat_paska> = atan[#<sr_zew_duza> - #<sr_wew_duza>]/[#<glebokosc_promieniowa>]
	
(obliczenia pomocnicze kątowe)



(wymiar katowy - zamiana srednicy wew jako wynikowej kata)
o10 if [#<kat> gt 0]
	#<sr_wew_duza> = [#<sr_zew_duza> - [2 * tan[#<kat>] * #<glebokosc_promieniowa> / 2]]
	#<kat_paska> = #<kat>
o10 endif
	
(roznica sredni to tak naprawde polowa roznicy szerokosci duzej i malej)
#<roznica_srednic> = [[#<sr_zew_duza> - #<sr_wew_duza>]/2]


(koniec obliczen)	
	
	

	o2 if [#<sr_zew_duza> lt #<sr_wew_duza>]
	(msg, chyba coś Ci zewnetrzne srednice popierniczyły)
	M30
	o2 endif



	

(M6 T#<nr> G43)

	o5 if [#<odboczka> eq 1]
	  #<obr> = [#<obr> * 8]
	o5 endif


	o6 if [#<odboczka> eq 1]
	  #<pr_skrawania> = [#<pr_skrawania> * 8]
	  #<obroty_max> = [#<obroty_max> * 8]
	o6 endif


	o7 if [#<woda> eq 1]
	   M8
	o7 endif


	o8 if [#<posuw_na_obrot> eq 1]
		G95 
	o8 endif

M3 s#<obr>



g0 x[#<poczatek> + 10]
g0 z#<z_pocz>

#<akt_pozycja> = #<poczatek> 






o4 if [#<stala_pr_skrawania> eq 1]
		G96 s#<pr_skrawania> D#<obroty_max>
o4 endif

	
	
	
(Zagłebiania prostopadłe, schodki na ukosach z prawej)

#<z_teoretyczny> = #<z_pocz> 
#<przesuw_limit_lewo_teoretyczny> =  [#<z_pocz>  - #<roznica_srednic>]

#<przesuw_limit_lewo> = [#<przesuw_limit_lewo_teoretyczny>  - #<szer_noza>]  (w drugim wariancie będzie prawo)
#<akt_przesuw> = [#<z_teoretyczny> - #<szer_noza>]
#<zaglebienie> = [[#<z_pocz> - #<z_teoretyczny>] * #<glebokosc_promieniowa> / #<roznica_srednic>]  (zagłebienie  proporcjonalne do przesuniecia z na ukosie)

o101 while [#<z_teoretyczny> gt #<przesuw_limit_lewo_teoretyczny>]

	o151 if [#<z_teoretyczny> lt #<przesuw_limit_lewo_teoretyczny>]  (ostatni przejazd)
		 #<z_teoretyczny>  = #<przesuw_limit_lewo_teoretyczny>
		o151 endif 
		 
		#<przesuw_limit_lewo> = [#<przesuw_limit_lewo_teoretyczny>  - #<szer_noza>]  (przelicz wartosci z uwzglednieniem kompensacji narzedzia)
		#<akt_przesuw> = [#<z_teoretyczny> - #<szer_noza>]
		#<zaglebienie> = [[#<z_pocz> - #<z_teoretyczny>] * #<glebokosc_promieniowa> / #<roznica_srednic>]  (zagłebienie  proporcjonalne do przesuniecia z na ukosie)
		
		
	    g0 z#<akt_przesuw> 
		g0 x[#<poczatek> + 2] 
		g1 x#<poczatek> f#<posuw> 
		
		g1 x[#<poczatek> - #<zaglebienie>] f#<posuw> 
		
		g0 x[#<poczatek> + 2] 
	
		#<z_teoretyczny> = [#<z_teoretyczny> - [#<szer_noza> /2]]   (przesuniecie w lewo na kolejne zaglebienie)
		
o101 endwhile

g0 x[#<poczatek> + 10] 



(Zrob cześć prostą rowka.)


#<akt_przesuw> = [#<z_pocz> - #<roznica_srednic> - #<szer_noza>]
#<przesuw_limit_lewo> = [#<z_pocz>  - #<roznica_srednic> - #<sr_wew_duza>]   (usuniete dzielenie szerokosci noza przez 2)

#<akt_przesuw> = [#<akt_przesuw> + [#<szer_noza>/2]] (sztuczna inkrementacja bo na poczatku pętli jest dekrementowane)

o100 while [#<akt_przesuw> gt #<przesuw_limit_lewo>]
	
	#<akt_przesuw> = [#<akt_przesuw> - [#<szer_noza>/2]]

	o150 if [#<akt_przesuw> lt #<przesuw_limit_lewo>]  (ostatni przejazd)
		 #<akt_przesuw>  = #<przesuw_limit_lewo>
	o150 endif
		
		g0 z#<akt_przesuw> 
		g0 x[#<poczatek> + 2] 
		g1 x#<poczatek> f#<posuw>
		g1 x#<koniec> 
		g0 x[#<poczatek> + 2]
		
			
		
o100 endwhile	 

g0 x[#<poczatek> + 10] 






(Zagłebiania prostopadłe, schodki na ukosach z lewej)

#<z_teoretyczny> = [#<z_pocz> - #<sr_zew_duza>]
#<przesuw_limit_prawo_teoretyczny> =  [#<z_teoretyczny> + #<roznica_srednic>]
#<przesuw_limit_prawo> = #<przesuw_limit_prawo_teoretyczny>      (w drugim wariancie będzie prawo)

#<akt_przesuw> = #<z_teoretyczny> 
#<zaglebienie> = [[#<z_pocz> - #<z_teoretyczny>] * #<glebokosc_promieniowa> / #<roznica_srednic>] (zagłebienie  proporcjonalne do przesuniecia z na ukosie)


o102 while [#<z_teoretyczny> lt #<przesuw_limit_prawo_teoretyczny>]

	o152 if [#<z_teoretyczny> gt #<przesuw_limit_prawo_teoretyczny>]  (ostatni przejazd)
		 #<z_teoretyczny>  = #<przesuw_limit_prawo_teoretyczny>
	o152 endif		 
		 
		#<przesuw_limit_prawo> = #<przesuw_limit_prawo_teoretyczny>  (tutaj nie trzeba kompensacji szerokosci, bo zerowanie Z bylo do lewej krawędzi noża)
		#<akt_przesuw> = #<z_teoretyczny>
		#<zaglebienie> = [[#<z_teoretyczny> - [#<z_pocz> - #<sr_zew_duza>]] * #<glebokosc_promieniowa> / #<roznica_srednic>]  (zagłebienie  proporcjonalne do przesuniecia z na ukosie)
		
		
	    g0 z#<akt_przesuw> 
		g0 x[#<poczatek> + 2] 
		g1 x#<poczatek> f#<posuw> 
		
		g1 x[#<poczatek> - #<zaglebienie>] f#<posuw> 
		
		g0 x[#<poczatek> + 2] 
	
		#<z_teoretyczny> = [#<z_teoretyczny> + #<szer_noza> /2]   (przesuniecie w lewo na kolejne zaglebienie)
			
o102 endwhile

g0 x[#<poczatek> + 10] 


(wygładzanie ukos  - prawy)

#<poszerzenie> = 0
#<wygladzenie_dna> = 1


o20 repeat[2]

g0 z[#<z_pocz>  - #<szer_noza> + #<poszerzenie>]
g0 x[#<poczatek> + 2]
g1 x[#<poczatek>] f#<posuw>
g1 x[#<koniec>] z[#<z_pocz> - #<szer_noza> - #<roznica_srednic> + #<poszerzenie>]


	o31 if[#<wygladzenie_dna> eq 1]
		
		g1 z[#<z_pocz> - #<roznica_srednic> - #<sr_wew_duza>]
	
		#<wygladzenie_dna> = 0
	o31 endif


g0 x[#<poczatek> + 2]

#<poszerzenie> = 0.1

o20 endrepeat

g0 x[#<poczatek> + 10] 


(wygładzanie ukos  - lewy)

#<poszerzenie> = 0
o21 repeat[2]

g0 z[#<z_pocz> - #<sr_zew_duza> - #<poszerzenie>]
g0 x[#<poczatek> + 2]
g1 x[#<poczatek>]
g1 x[#<koniec>] z[#<z_pocz> - #<sr_zew_duza> + #<roznica_srednic> - #<poszerzenie>]
g0 x[#<poczatek> + 2]

#<poszerzenie> = 0.1

o21 endrepeat

g0 x[#<poczatek> + 10]

(fazowanie - kąt w zaleznosci od nachylenia paska)



#<kat_fazy> = [[180 - #<kat_paska> - 90]/2]
#<dlugosc_x> = [tan[#<kat_fazy>] * #<dlugosc_z>]

	(lewa fazka)
	
#<start> = [#<z_pocz> - #<sr_zew_duza> - #<poszerzenie> - [#<dlugosc_z>/2]]

g0 z[#<start>]
g0 x[#<poczatek> + 2]
g1 x[#<poczatek>] f#<posuw>
g1 x[#<poczatek> - #<dlugosc_x>*2] z[#<start> + #<dlugosc_z>] f#<posuw>

g0 x[#<poczatek> + 10]

	(prawa fazka)
	
#<start> = [#<z_pocz>  + #<poszerzenie> - #<szer_noza> + [#<dlugosc_z>/2]]

g0 z[#<start>]
g0 x[#<poczatek> + 2]
g1 x[#<poczatek>] f#<posuw>
g1 x[#<poczatek> - #<dlugosc_x>*2] z[#<start> - #<dlugosc_z>] f#<posuw>





g0 x[#<poczatek> + 10]
m5
g0 z#<z_pocz>	

g0 x#<w_x>
g0 z#<w_z>





o<klin> endsub


Awatar użytkownika

Autor tematu
senio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 101
Posty: 1473
Rejestracja: 25 maja 2006, 14:39
Lokalizacja: koło.wlkp

Re: Suby ngcgui

#25

Post napisał: senio » 10 sty 2018, 10:55

szary11 pisze:
10 sty 2018, 09:31
może komuś się przyda
Dzięki przyda się :).

Awatar użytkownika

Autor tematu
senio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 101
Posty: 1473
Rejestracja: 25 maja 2006, 14:39
Lokalizacja: koło.wlkp

Re: Suby ngcgui

#26

Post napisał: senio » 18 sty 2018, 10:43

Przerobiłem Kamarowego suba osi obrotowej frezarki na tokarkę. Lata aż miło i wszystko OK. Jednak w Kamarowym subie jest tylko jedna prędkość dla wszystkich osi. Potrzebuję oddzielne prędkości dla Z i X. Nie wiem jak to zrobić. POMOŻECIE ? :).

Kod: Zaznacz cały

( ------------------------------ )
(   obrotnica Tokarka os C )
( ------------------------------ )
( Time-stamp: <2018-01-17 17:43> )
( ------------------------------ )

o<obrotnica> sub

#<obr> = #1 (=0 obroty)
#<liczba_operacji> = #2 (=10 liczba operacji)
#<kat> = #3 (=-36 kąt)
#<predkosc> = #4 (=100 prędkość)
#<c_poczatkowe> = #5 (=0 C początkowe)
#<zpocz> = #6 (=0 Z początkowy)
#<zkonc> = #7 (=-5 Z końcowy)
#<glebokosc> = #8 (=-1 głębokość)
#<skok> = #9 (=1 skok)
#<xpocz> = #10 (=0 x początkowy)
#<woda> = #11 (=0 <> chłodzenie)
#<w_z> = #12 (=5 wyjazd Z)
#<w_x> = #13 (=1 wyjazd X)


( ------------------------------ )

#<operacja> = 0
g0 x1
g0 z#<zpocz> x#<zpocz> 

m3 s#<obr>
o1 if [#<woda> eq 1]
m8
o1 endif

o100 while [#<operacja> lt #<liczba_operacji>]
  g0 c[#<c_poczatkowe> + [#<operacja> * #<kat>]]
   
( --- tu operacja --- )

#<akt_x> = #<xpocz>
o200 while [#<akt_x> gt #<glebokosc>]
  #<akt_x> = [#<akt_x> - #<skok>]
    o210 if [#<akt_x> lt #<glebokosc>]
      #<akt_x> = #<glebokosc>
    o210 endif

  g0 x#<akt_x> 
    g1 z#<zkonc> f#<predkosc>         
  g0 x1
  g0 z#<zpocz> 
   
o200 endwhile

( --- koniec operacji --- )

  #<operacja> = [#<operacja> + 1]
o100 endwhile

g0 z#<w_z>
g0 x#<w_x>

o<obrotnica> endsub 
 


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

Re: Suby ngcgui

#27

Post napisał: kamar » 18 sty 2018, 18:29

Możesz dodać zmienne prędkości do każdej osi
#<predkosc_X> = #4 (=100 prędkość osi X) itd. ale zadziała tylko przy jezdach pojedyńczą osią.

Awatar użytkownika

Autor tematu
senio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 101
Posty: 1473
Rejestracja: 25 maja 2006, 14:39
Lokalizacja: koło.wlkp

Re: Suby ngcgui

#28

Post napisał: senio » 18 sty 2018, 19:04

Uwierz mi na słowo , że gdyby to było tak proste to tego postu bym nie napisał. To nic kompletnie nie zmienia i nie daje. Robiłem nie takie sztuczki. Parę ładnych godzin nad tym przesiedziałem i pomysły się skończyły bo nie jestem programistą.

U Bartka w temacie tłumy znawców linuxa do bajery jak pod budką z browarem, a tu gdzie naprawdę potrzeba pomocy każdy leje cienkim sikiem na zagadnienia. Dlatego ten dział to trup. Jeszcze Miki coś tu z Tobą napędzał trochę, ale jak poszedł w politykę i został się sam biedny Kamar to jest po prostu żal na to patrzeć. A jeden Kamar działu nie uciągnie. Dokładnie to co napisałem u Bartka w temacie. Dlatego nie dziw się Kamar tym od macha że olewają totalnie linuxa i idą tam gdzie jest prosto, łatwo i ludzie pomogą w potrzebie. Wszystko trzeba wyprosić, wyżebrać i liczyć że jakiś łaskawca może coś czasami bąknie pod nosem. Żal..........


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

Re: Suby ngcgui

#29

Post napisał: kamar » 18 sty 2018, 19:41

Przesadzasz, większość użytkowników linuxCNC ma tak jak i machowcy, podstawowe funkcje i basta. Widuje nawet takich bez ngcgui.
I kto ma Ci pomóc jak Ty coś wymyślasz co i rusz :) A z tymi prędkościami to nie kumam. g1 x100 f200 w jednej a g1 y200 f10 w drugiej
nie zmienia posuwu?

Awatar użytkownika

Autor tematu
senio
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 101
Posty: 1473
Rejestracja: 25 maja 2006, 14:39
Lokalizacja: koło.wlkp

Re: Suby ngcgui

#30

Post napisał: senio » 18 sty 2018, 19:55

kamar pisze:
18 sty 2018, 19:41

I kto ma Ci pomóc jak Ty coś wymyślasz co i rusz :)
Bez przesady. Dwa lata mnie tu nie było. Teraz z ośką obrotową walczę i jak tego suba zwalczę to jest finał walki.
kamar pisze:
18 sty 2018, 19:41
A z tymi prędkościami to nie kumam. g1 x100 f200 w jednej a g1 y200 f10 w drugiej
nie zmienia posuwu?
Dopisz proszę do tego suba wyżej całość i wklej bo się do Wielkanocy nie dogadamy. Osie aktywne są X i Z a nie Y

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”