Podprogram w EMC2

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

ArturM
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 160
Rejestracja: 12 kwie 2008, 07:53
Lokalizacja: Kozienice
Kontakt:

#11

Post napisał: ArturM » 03 sty 2011, 16:44

pixes2 pisze: Wczoraj (a może już dzisiaj?) próbowałem prostych wycinanek z wielokrotnym użyciem tego samego podprogramu. Wyszło mi, że w podprogramie muszę użyć wymiarowania G91, bo inaczej wychodziły jakieś cuda. To normalne, czy coś poknociłem?
Poknociłeś :P
Nie wiem co masz w podprogramie - ale ja nic takiego u siebie nie robiłem.

Wrzuć te kółka z mojego pierwszego posta - powinny się ładnie rysować w Axisie wg zmienianych parametrów.
Może w podprogramie masz zmianę G90/G91 albo może masz zmianę układu współrzędnych (G54-G59) i potem nie przywracasz starego układu przed opuszczeniem podprogramu? Ciężko wyrokować.
pixes2 pisze: Teraz muszę ogarnąć to, co napisałeś w ostatnim swoim poście. Pewnie pojawią się kolejne niejasności i ponownie trzeba będzie zawracać Ci głowę.
Śmiało :)
Może się uda trochę 'odczarować' EMC2 - bo to kawał porządnego softu.



Tagi:


Autor tematu
pixes2
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 10
Posty: 582
Rejestracja: 07 sty 2009, 18:38
Lokalizacja: Zgierz

#12

Post napisał: pixes2 » 04 sty 2011, 18:18

ArturM pisze: Poknociłeś
Nie wiem co masz w podprogramie - ale ja nic takiego u siebie nie robiłem.
Robiłem to na szybko, próbując kierować się Twoimi wskazówkami. Następnym razem będzie lepiej. :wink: .
ArturM pisze:masz zmianę układu współrzędnych (G54-G59)
Chyba nie... jedyne, co zmieniałem, to offsety w G54. Pozostałe G..-G59 nawet nie wiem ,co oznaczają, dlateg profilaktycznie tego nie ruszam (może mnie oświecisz).

Wrzuciłem, jak pisałeś, te kółka z Twojego pierwszego postu i wszystko działa fajnie(przeedytowałem trochę prędkości), ale nie wiem dlaczego :roll:
Gapię się w kod od tego i dochodzę do wniosku, że... jestem prostym człowiekiem.
Widzę podprogram, póżniej.. nie wiem co widzę i zakończenie podprogramu i całości.
Nie widzę wywołania podprogramu. Ponadto jakiś tajemniczy "if" :shock: .
Za dużo szczęścia (zmiennych) na raz :grin:

Swietny natomiast jest sposób wycinania np. kółek z tymi parametrami w o<sub>call...
Czy mógłbys pokazać przykładowy, prosty program do wycięcia kilku różnych okręgów z kilkoma parametrami ? Chodzi oto, aby zobaczyć jak to powinno wyglądać w całości. Jestem zaskoczony, że można takie rzeczy robić "z palca"-myślałem, że od tego są postprocesory.

Długo już bawisz się tym softem? Zakładam, że od urodzenia :grin:...

Pozdrawiam.
Tomek.

Awatar użytkownika

freakolot
Sympatyk forum poziom 2 (min. 50)
Sympatyk forum poziom 2 (min. 50)
Posty w temacie: 2
Posty: 67
Rejestracja: 20 lip 2009, 14:37
Lokalizacja: mazowieckie

#13

Post napisał: freakolot » 04 sty 2011, 23:11

pixes2 pisze: Wrzuciłem, jak pisałeś, te kółka z Twojego pierwszego postu i wszystko działa fajnie(przeedytowałem trochę prędkości), ale nie wiem dlaczego :roll:
Gapię się w kod od tego i dochodzę do wniosku, że... jestem prostym człowiekiem.
Widzę podprogram, póżniej.. nie wiem co widzę i zakończenie podprogramu i całości.
Nie widzę wywołania podprogramu. Ponadto jakiś tajemniczy "if" :shock: .
To może ja się lekko wtrącę.. bo z tego co ja widze to tutaj:
o<okrag> sub
..
..
o<okrag> endsub

masz program, a przed samym m30 masz:
o<okrag> call [+parametry] - czyli wywołanie.
A potem drugie z innymi parametrami.

A if jest po to żebyś nie zjechał ponizej założonej wartości.
Czyli jeśli kopiesz to kółko na głębokość -10 a dobierasz np po 3 milimetry
to za trzecim wykonaniem pętli bedizesz na Z-9 a za czwartym
byłbyś na Z-12 - więc za głęboko.
Dlatego masz if'a - który mówi, że jeśli przy kolejnym
wykonaniu pętli (czyli zjechaniu po Z z aktualnej wysokości w dół o skok - czyli #5)
aktualna głębokość będzie niższa (lt) niż założona parametrem #4 - to
ma na to nie pozwolić tylko przypisać jej taką głębokość jaka była założona (#4)

Tak to na moje chłopskie oko wygląda :)

pozdrawiam,
F.


Autor tematu
pixes2
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 10
Posty: 582
Rejestracja: 07 sty 2009, 18:38
Lokalizacja: Zgierz

#14

Post napisał: pixes2 » 05 sty 2011, 12:20

freakolot pisze: masz program, a przed samym m30 masz:
o<okrag> call [+parametry] - czyli wywołanie.
A potem drugie z innymi parametrami.
Masz rację. Ostatnio noce zarywam, aby pobawić się cnc i chyba myślenie mi się wyłącza. Niestety nie rozumiem, jak spreparować kod na początku, aby póżniej móc wywoływać podprogram z tymi pięcioma parametrami.
Tymczasem napisałem coś takieg :
g90
g21
m3s1
g4p4
g0x30y40z2
#1=0
o100while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x30y40i10j0
o100endwhile
g0z2
g0x70y40
#1=0
o200while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x70y40i10j0
o200endwhile
g0z2
g0x19y20
#1=0
o300while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x19y20i1j0
o300endwhile
g0z2
g0x99y20
#1=0
o400while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x99y20i1j0
o400endwhile
g0z2
g0x99y60
#1=0
o500while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x99y60i1j0
o500endwhile
g0z2
g0x19y60
#1=0
o600while[#1gt-10]
#1=[#1-2]
g1z#1f1000
g2x19y60i1j0
o600endwhile
g0z2
g0x10y10
#1=0
o700while[#1gt-10]
#1=[#1-2]
g1z#1f1000
x110
y70
x10
y10
o700endwhile
g0z40
g0x0y0
m30

Okazało się to proste, ale pewnie, w myśl tego co piasł Artur, można to znacznie uprościć. Do tej pory umiałem napisać jedną warstewkę, więc i tak jest mocno do przodu. A będzie jeszcze lepiej, gdy spokojnie przeanalizuję wszystkie odpowiedzi z tego tematu. Niestety najwięcej wolnego czasu mam w nocy, a kiedyś trzeba spać :cry: .
Dzięki i pozdrawiam.
Tomek. :wink:

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 3975
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#15

Post napisał: markcomp77 » 05 sty 2011, 15:08

aż korci sprawdzić czy da się zrobić rekurencję?
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm


Autor tematu
pixes2
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 10
Posty: 582
Rejestracja: 07 sty 2009, 18:38
Lokalizacja: Zgierz

#16

Post napisał: pixes2 » 05 sty 2011, 16:39

markcomp77 pisze:aż korci sprawdzić czy da się zrobić rekurencję?
Kiedyś coś obiło mi się o uszy o ciągu rekurencyjnym :?: , ale nie mam pojęcia co to jest.

Pozdrawiam.
Tomek.

Awatar użytkownika

markcomp77
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 5
Posty: 3975
Rejestracja: 18 wrz 2004, 12:51
Lokalizacja: k/w-wy
Kontakt:

#17

Post napisał: markcomp77 » 05 sty 2011, 16:49

rekurencja to takie wywoływanie procedury samej przez siebie...
http://pl.wikipedia.org/wiki/Rekurencja

jest wiele algorytmów elegancko w ten sposób dających się zapisać...
niestety - takie samo-wywoływania wymaga dużego stosu na odkładanie danych...
SpotkanieCNC: STOM-TOOL Marzec 2014
http://www.cnc.info.pl/topics79/spotkan ... t55028.htm

Awatar użytkownika

ArturM
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 7
Posty: 160
Rejestracja: 12 kwie 2008, 07:53
Lokalizacja: Kozienice
Kontakt:

#18

Post napisał: ArturM » 06 sty 2011, 13:23

pixes2 pisze: Tymczasem napisałem coś takieg :

[ciach program]
Zamorduję! :lol: Spacja Ci się zepsuła? Przecież bez spacji to nic nie widać.

Dopisałem spacje, wywaliłem powtarzający sie fragment do podprogramu i wyszło mi tak:

Kod: Zaznacz cały

o<okrag> sub
	g0 z2
	g0 x#1 y#2
	#5 = 0	
	o100 while [#5 gt -10] 
		#5 = [#5 - 2] 
		g1 z#5 f1000
		g2 x#1 y#2 i#3 j0
	o100 endwhile
	g0 z2
o<okrag> endsub

g90
g21
m3 s1
g4 p4

o<okrag> call [30] [40] [10] 
o<okrag> call [70] [40] [10] 
o<okrag> call [19] [20] [1] 
o<okrag> call [99] [20] [1] 
o<okrag> call [99] [60] [1] 
o<okrag> call [19] [60] [1] 

g0 z2
g0 x10 y10
#1 = 0
o700 while [#1 gt -10] 
#1 = [#1 - 2] 
g1 z#1 f1000
x110
y70
x10
y10
o700 endwhile

g0 z40
g0 x0 y0
m30 
W o<okrag> sub .... o<okrag> endsub jest Twój progam na okrąg - to jest te kilka linijek które się ciągle powtarzały. Rożniły się tylko współrzędnymi - więc zamieniłem współrzędne wpisane na sztywno na zmienne #1 - X, #2 - Y, #3 - średnica. No i automatycznie Twoje #1 czyli aktualną głębokość wyrzuciłem do #5 żeby konfliktu nie było.

Prostokąta nie ruszałem - można go też wywalić do podprogramu - no ale wywoływany byłby tylko raz a pozatym nie chciałem zaciemniać obrazu.

EMC2 nie bawię sie od urodzenia :D pierwsza maszyne zrobilismy w maju 2008, długo robiliśmy na TurboCNC, więc EMC2 pewnie gdzieś od 2009 roku.

[ Dodano: 2011-01-06, 13:37 ]
markcomp77 pisze:aż korci sprawdzić czy da się zrobić rekurencję?
:D nie ma co korcić - nc_files/flowsnake.ngc

Kod: Zaznacz cały

%
(Program to mill a flowsnake) 
(K. Lerman) 

o1000 sub
#<level> = #1
#<startX> = #2
#<startY> = #3
#<endX> = #4
#<endY> = #5

  o1001 if [#<level> EQ 0] 
    g1 f10 x#<endX> y#<endY> 
  o1001 else
    #<p1X> = [[#<startX> * 2 + #<endX>]/3] 
    #<p1Y> = [[#<startY> * 2 + #<endY>]/3] 

    #<p2X> = [[#<startX> + #<endX>]/2 + [#<endY> - #<startY>]/[SQRT[12.0]]] 
    #<p2Y> = [[#<startY> + #<endY>]/2 - [#<endX> - #<startX>]/[SQRT[12.0]]] 

    #<p3X> = [[#<startX> + 2 * #<endX>]/3] 
    #<p3Y> = [[#<startY> + 2 * #<endY>]/3] 

    o1000 call [#<level>-1] [#<startX>] [#<startY>] [#<p1X>] [#<p1Y>] 
    o1000 call [#<level>-1] [#<p1X>] [#<p1Y>] [#<p2X>] [#<p2Y>] 
    o1000 call [#<level>-1] [#<p2X>] [#<p2Y>] [#<p3X>] [#<p3Y>] 
    o1000 call [#<level>-1] [#<p3X>] [#<p3Y>] [#<endX>] [#<endY>] 
  o1001 endif
o1000 endsub

S1M3
g0 z1
g0 x.25 y1.0
g1 f10 z0
#<level> = 5
#<_foobar> = 729
(debug, param 2:#2) 
(debug, level:#<level>) 
(debug, _foobar:#<_foo bar>) 
o1000 call [#<level>] [.25] [1.0] [3.75] [1.0] 
o1000 call [#<level>] [3.75] [1.0] [2.0] [3.95] 
o1000 call [#<level>] [2.0] [3.95] [.25] [1.0] 
g0 z1
M5
%
To program na płatek śniegu - no i jak widać śmiało wołają o1000 call ze środka podprogramu o1000 - nie wiem jak duży stos jest ale generalnie sie da :)

Ale czemu program sie nazywa 'flowsnake' a nie 'snowflake' to ja już nie wiem :)


Autor tematu
pixes2
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 10
Posty: 582
Rejestracja: 07 sty 2009, 18:38
Lokalizacja: Zgierz

#19

Post napisał: pixes2 » 06 sty 2011, 18:05

ArturM pisze:Zamorduję!
Jeżelli musisz, to tak, żeby nie bolało... :lol:
ArturM pisze:Spacja Ci się zepsuła?
Sprwdzę. To możliwe, bo jej się najczęściej obrywa, gdy mi coś nie idzie-w końcu jest największa :mrgreen: .
Zaoszczędziłem po kilka kliknięć w każdej linii-w sumie będzie z 5 sekund, a na przejżystości faktycznie dużo straciło. Mówią, że oszczędzać trzeba z głową...

Po Twojej ingerencji program stał się zdecydowanie mniejszy i wreszcie wiem, o co w tym chodzi.
Próbowałem jeszcze zapisać program do wycięcia większego otworu tak, aby frez zaczął od wycinania okręgu o r=1 , potem r=5, r=... (to idzie w pętli), po czym zagłębił się o wartość kolejnej zmiennej i powtarzał tą czynność aż do osiągnięcia zadanej głębokości. Pierwsza część zadania się powiodła, ale przy pogłębianiu poległem.
Po godzince kombinowania wywiesiłem białą szmatę :sad: . Da się to jakoś prosto zapisać?

Mam jeszczy pytanie odnośnie tego "if" Jak to zastosować w takim np. zapisie :
#1=0
o100while [#1 gt -10]
#1=[#1-3]
g2 x50 y50 i20 j0
o100endwhile

Dzięki i pozdrawiam.
Tomek.

ps. masz jeszcze odrobinę cierpliwości ? :wink:

[ Dodano: 2011-01-06, 18:38 ]
#1=0
o100while[#1 gt -10]
#1=[#1-3]
g1 z#1 f1000
g2 x50 y50 i20 j0
o100endwhile

Zapomniałem o jednej linijce :???:

Awatar użytkownika

freakolot
Sympatyk forum poziom 2 (min. 50)
Sympatyk forum poziom 2 (min. 50)
Posty w temacie: 2
Posty: 67
Rejestracja: 20 lip 2009, 14:37
Lokalizacja: mazowieckie

#20

Post napisał: freakolot » 06 sty 2011, 19:11

pixes2 pisze: #1=0
o100while[#1 gt -10]
#1=[#1-3]
g1 z#1 f1000
g2 x50 y50 i20 j0
o100endwhile
Głębokość na którą chcesz zjechać to -10
więc należy przed zjazdem w dół:
g1 z#1 f1000
sprawdzić czy nie jesteś już za nisko,
czyli wstawić:
o110 if [#1 lt -10]
#1 = -10
o110 endif

oczywiście zdarzy się tak za czwartym razem, kiedy #1 = -9
wiec warunek do while jest spełniony,
ale #1 = [#1 -3]
spowoduje, że zjedziesz Z na -12 czyli za głęboko.
Dlatego potrzebny jest ten if który to sprawdzi.

pozdrawiam,
F.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”