Zapętlenie G-CODU - jak zrobić?

Dyskusje dotyczące programowania G-Code

Autor tematu
jan g.
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 9
Rejestracja: 09 cze 2009, 13:30
Lokalizacja: Warszawa

Zapętlenie G-CODU - jak zrobić?

#1

Post napisał: jan g. » 12 paź 2013, 22:47

Witam,
zbudowałem prosty manipulator dwuosiowy XY. Moje zastosowanie jest niekomercyjne więc chcę wykorzystać wersję demo programu Mach3. Niestety napisany przeze mnie program jest za długi i po przekroczeniu limitu maszyna zatrzymuje się. W związku z tym muszę go zapętlić.
Manipulator wykonuje następującą sekwencję: w osi X robi 12 ruchów w prawo po 30 mm, po każdym ruchu uruchamia przekaźnik na czas t=1s. Po dojechaniu do X=300, Y=00 przesuwamy się do drugiego wiersza czyli X=300 Y=-30. Tutaj wykonywanych jest również 12 kroków po 30 mm ale tym razem w lewo. Po dojechaniu do X=00 Y=-30 przesuwamy się do trzeciego wiersza to jest do punktu X=00, Y=-60. Od tego momentu program mógłby rozpoczynać się od nowa. Niestety nie wiem jak to zrobić. Proszę o pomoc.



Tagi:


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

#2

Post napisał: tomcat65 » 12 paź 2013, 23:29

Cały cykl zrób jako podprogram, czyli:
O(tu numer, np 1)
cykl...
m99

Program zaczniesz od funkcji przygotowawczych i innych potrzebnych rzeczy, nast:
m98 P( tu nr podprogramu ), L( tu ilość jego powtórzeń )
na koniec M30

Po tym zapisujesz swój podprogram.
przykład:

(ruch ramienia)
g21 ....

m98 Px Lx
m30

Ox
cykl..
..
..
m99


PiRo_man
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 1
Posty: 329
Rejestracja: 23 sie 2010, 21:32
Lokalizacja: Świerklany

#3

Post napisał: PiRo_man » 13 paź 2013, 00:34

Hmmm... Szybciej, łatwiej, prościej i na pewno mniej miejsca zajmie zapętlenie pętli. Czyli zagnieżdżone M98.

Wygląda to mniej więcej tak:
1> Wywołanie głównego podprogramu
-2> Wywołanie podprogramu podrzędnego
--3> Podprogram podrzędny wykonujący się "x" razy (w Twoim przypadku 12) w którym jest zaprogramowany dosuw przyrostowy (G91) w kierunku X+
-2> Przejechanie na deklarowaną współrzędną Y (u Ciebie -30)
--4> Podprogram podrzędny wykonujący się "x" razy (w Twoim przypadku 12) w którym jest zaprogramowany dosuw przyrostowy (G91) w kierunku X-

* ilość "-" odpowiada za stopień zagłębienia programu, liczba po "-" to nr. wywołanego programu

Poniżej masz pseudokod którym możesz się posłużyć (napisałem z głowy ale powinien działać):

Kod: Zaznacz cały

%
O0001 (Program główny) 
(Tutaj cały wstęp, wczytanie bazy, wybór narzędzia, wczytanie kompensacji itp.) 
M98 P2 L... (L - ilość powtórzeń w zależności od potrzeb) 
(Odjazd od materiału, zakończenie programu) 
M30
%

Kod: Zaznacz cały

%
O0002
M98 P3 L12
G01 G91 Y-30 F...
M98 P4 L12
G01 G91 Y-30 F...
M99
%

Kod: Zaznacz cały

%
O0003
G01 G91 X30 F...
G04 X1000 (przerwa czasowa na 1 sek - wartość przy X podana w ms) 
M99
%

Kod: Zaznacz cały

%
O0004
G01 G91 X-30 F...
G04 X1000 (przerwa czasowa na 1 sek - wartość przy X podana w ms) 
M99
%


Autor tematu
jan g.
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 9
Rejestracja: 09 cze 2009, 13:30
Lokalizacja: Warszawa

#4

Post napisał: jan g. » 18 paź 2013, 21:50

Odnośnie awarii forum: ludzie dzielą się na tych, którzy robią kopie zapasowe i na tych, którzy będą je robili.
Udało mi się poprawić kod tak, że stół wykonuje prawidłowe ruchy. Kod wygląda tak:

F400
M98 P123 L1
G52 X-2 Y-60
M98 P123 L1
G52 X-4 Y-120
M98 P123 L1
G52 X-6 Y-180
M98 P123 L1
G52 X-8 Y-240
M98 P123 L1
G52 X-10 Y-300
M98 P123 L1
G52 X-12 Y-360
M98 P123 L1
G52 X-14 Y-420
M98 P123 L1

M30

O123
G1 X00 Y00
M3
G4 P01
M5
G1 X-30
M3
G4 P01
M5
G1 X-60
M3
G4 P01
M5
G1 X-90
M3
G4 P01
M5
G1 X-120
M3
G4 P01
M5
G1 X-150
M3
G4 P01
M5
G1 X-180
M3
G4 P01
M5
G1 X-210
M3
G4 P01
M5
G1 X-240
M3
G4 P01
M5
G1 X-270
M3
G4 P01
M5
G1 X-300
M3
G4 P01
M5
G1 X-330
M3
G4 P01
M5
G1 X-330 Y-30
M3
G4 P01
M5
G1 X-300
M3
G4 P01
M5
G1 X-270
M3
G4 P01
M5
G1 X-240
M3
G4 P01
M5
G1 X-210
M3
G4 P01
M5
G1 X-180
M3
G4 P01
M5
G1 X-150
M3
G4 P01
M5
G1 X-120
M3
G4 P01
M5
G1 X-90
M3
G4 P01
M5
G1 X-60
M3
G4 P01
M5
G1 X-30
M3
G4 P01
M5
G1 X00
M3
G4 P01
M5
M99

Musiałem wprowadzić korektę w osi X po każdym cyklu podprogramu gdyż wygląda na to, że na tym kierunku silnik gubi kroki w jednym kierunku. Podejrzewam śrubę kulową, która na pewnym odcinku obraca się ciężej w jedną stronę.
Mam pytanie: jak załączyć przekaźnik na czas krótszy od 1s? W tej chwili komenda G4 P01 powoduje załączenie przekaźnika na 1s. Próbowałem z wartościami P0.1 i P0,1 ale efekt był taki sam.


tomcat65
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 2
Posty: 1236
Rejestracja: 15 lis 2009, 02:46
Lokalizacja: Olsztyn
Kontakt:

#5

Post napisał: tomcat65 » 19 paź 2013, 01:02

Co do przekaźnika, spróbuj przestawić na milisekundy w ustawieniach. Czy pomoże,nie wiem, nie mam jak sprawdzić.

Tu masz inny sposób, bez kopiuj/wklej, a że plik pochodzi też sprzed awarii, więc nie uwzględnia zmian w osi X. Ale jak dojdziesz jak to działa, to i to przerobisz.

g54 g21 g40 g17 g90
F200
#1=0
#2=60

M98 P123 L8
g54
g0 x0 y0

M30

O123
G52 y#1
G1 X0 Y0
M3
G4 P1
M5
G1 X30
M3
G4 P1
M5
G1 X60
M3
G4 P1
M5
G1 X90
M3
G4 P1
M5
G1 X120
M3
G4 P1
M5
G1 X150
M3
G4 P1
M5
G1 X180
M3
G4 P1
M5
G1 X210
M3
G4 P1
M5
G1 X240
M3
G4 P1
M5
G1 X270
M3
G4 P1
M5
G1 X300
M3
G4 P1
M5
G1 X330
M3
G4 P1
M5
G1 X330 Y-30
M3
G4 P1
M5
G1 X300
M3
G4 P1
M5
G1 X270
M3
G4 P1
M5
G1 X240
M3
G4 P1
M5
G1 X210
M3
G4 P1
M5
G1 X180
M3
G4 P1
M5
G1 X150
M3
G4 P1
M5
G1 X120
M3
G4 P1
M5
G1 X90
M3
G4 P1
M5
G1 X60
M3
G4 P1
M5
G1 X30
M3
G4 P1
M5
G1 X00
M3
G4 P1
m5
#1=[#1-#2]
M99

Trochę dziwne wydaje mi się takie idealne gubienie kroków. Jakby coś innego tu grało rolę.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „G-CODE - programowanie”