pixes2 pisze:
Po M30 dopisałem podprogram, ale emc nie rozpoznaje polecenia M98. Wczytanie całego programu zaowocowało tym, że w oknie na dole jest kod, ale w podglądzie nic nie widać (jest widok rysunku testowego). Maszyna mimo wszystko zaczyna realizować program, dojeżdża do trzeciej linii kodu i wywala komunikat "nieznany kod M". Może w emc podprogram wywołuje się inaczej, może nie obsługuje wszystkich komend? Zastanawia mnie to, że w zakładce MDI jest wyświetlona lista aktywnych kodów i nie ma na niej M98. Chyba, że nie ma to znaczenia.
emc2 nie obsługuje M98, podprogram się wywołuje tak jak podałem w przykładzie z kołem, czyli:
Kod: Zaznacz cały
(podprogram)
o100 sub
g1 x10 f20
o100 endsub
(i wywołanie)
o100 call
od wersji 2.3 podprogram może się 'normalnie' nazywać - więc można robić zapis typu:
Kod: Zaznacz cały
o<okrag> sub
(jakis tam kod)
o<okrag> endsub
o<kwadrat> sub
(jakiś inny kod)
o<kwadrat> endsub
(i potem można to wywoływac tak)
o<kwadrat> call
o<okrag> call
Kolejny "stopień wtajemniczenia" to podprogramy z podawaniem argumentu.
Jeżeli wywołanie zrobimy tak:
to wtedy w podprogramie te argumenty mamy dostępne jako zmienne #1, #2, #3 itd.
No i tu dochodzimy pewnie do tych 'podprogramów na zagłębienie'. Bo programy do generowania gcodu z reguły generują taką sieczkę:
Kod: Zaznacz cały
(----------------------)
G1 Z-2. F30
M98 P3
G1 Z-4. F30
M98 P3
G1 Z-6. F30
M98 P3
G1 Z-8. F30
M98 P3
G1 Z-10. F30
M98 P3
G1 Z-12. F30
M98 P3
G1 Z-14. F30
M98 P3
G1 Z-16. F30
M98 P3
G1 Z-18. F30
M98 P3
G1 Z-20. F30
M98 P3
G1 Z-22. F30
M98 P3
G1 Z-24. F30
M98 P3
G0 Z2.
(..... ciach inne smieci ...)
O3
G2 X9.25 Y16. I-0.25 J0. F50
M99
no i jeżeli chcesz to zapisac do emc2 to trzeba jakoś tak:
Kod: Zaznacz cały
o100 sub
G2 X9.25 Y16. I-0.25 J0. F50
o100 endsub
G1 Z-2. F30
o100 call
G1 Z-4. F30
o100 call
G1 Z-6. F30
o100 call
G1 Z-8. F30
o100 call
G1 Z-10. F30
o100 call
G1 Z-12. F30
o100 call
G1 Z-14. F30
o100 call
G1 Z-16. F30
o100 call
G1 Z-18. F30
o100 call
G1 Z-20. F30
o100 call
G1 Z-22. F30
o100 call
G1 Z-24. F30
o100 call
G0 Z2.
Dla mnie taki zapis jest totalnie bez sensu - bo jak zmienić skok? Jak zwiekszyć glębokość? Mam generowac od nowa? Mam dopisać/przeedytowac 20 linijek dla takiej głupotki? Tak to se można na Machu robić

a nie na porządnych programach
W 'porządnych programach' to się zapisuje tak:
Kod: Zaznacz cały
o100 sub
G2 X9.25 Y16. I-0.25 J0. F50
o100 endsub
#1 = 0
o200 while [#1 gt -24]
#1 = [#1 - 2]
g1 z#1 f30
o100 call
o200 endwhile
Czyli:
podprogram został jak jest a zagłębianie robimy w pętli.
Pętlę tworzą linie:
Pętla wykonuje wszystko co jest zawarte pomiędzy 'while' a 'endwhile' dopóki warunek jest spełniony. Jeżeli warunek przestanie być spełniony to pętla przestaje się wykonywać.
Warunek to z reguły zapis w stylu '#1 gt -20' czy '#2 lt 20'
gt to 'greater than' (większe niż)
lt to 'less than' (mniejsze niż)
#numerek to zmienna - czyli takie 'pudełeczko' w którym możesz przechować jakąś wartość - to pudełeczko nazywa się zawsze tak samo (np. #1, #<skok>, itp), a to co jest 'w środku' może się zmieniać.
Czyli mamy taki zapis:
Kod: Zaznacz cały
#1 = 0
o200 while [#1 gt -24]
#1 = [#1 - 2]
g1 z#1
o100 call
o200 endwhile
Co znaczy:
- nadaj zmiennej #1 wartość 0
- dopóki wartość zmiennej #1 jest wieksza niż -24 wykonuj:
--- nadaj zmiennej #1 wartość #1 - 2 (czyli zmniejsz wartość #1 o 2)
--- zjedź Zetem na wysokość równą wartości zmiennej #1
--- wywołaj podprogram o100
- zamknięcie pętli (czyli 'powtarzaj')
Jak widzisz można tu łatwo sobie regulowac głębokość - wystarczy zmienić -24 na inna wartość. I tak samo skok - zamiast - 2 dajemy - 1 i już mamy zagłębianie o 1 a nie o 2.
Jeżeli program będzie wykorzystywany więcej niż raz to warto parametry wywalic na początek i nadac im znaczące nazwy, czyli np. tak:
Kod: Zaznacz cały
#<glebokosc> = -24
#<skok> = 2
o100 sub
G2 X9.25 Y16. I-0.25 J0. F50
o100 endsub
#1 = 0
o200 while [#1 gt #<glebokosc>]
#1 = [#1 - #<skok>]
g1 z#1 f30
o100 call
o200 endwhile
wtedy zmieniasz tylko 2 pierwsze linijki - no i jeżeli program jest bardziej skomplikowany to łatwiej się w tym połapać po pół roku
