Rysowanie w 2D tego samego wzoru bez przerwy

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

Autor tematu
belin
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 3
Posty: 13
Rejestracja: 19 cze 2008, 20:34
Lokalizacja: Łódź

Rysowanie w 2D tego samego wzoru bez przerwy

#1

Post napisał: belin » 09 cze 2012, 17:49

Jestem początkujący w temacie- czy poniźszy program będzie rysował - powtarzał ten sam wzór bez przerwy .Jeźeli nie to proszę o pomoc by program wykonywał się z powtarzaniem bez przerwy.

G3 X17 Y38 I-32.85294 J37.5
G3 X0 Y75 I-49.85294 J-0.5
G2 X-17 Y112 I32.85294 J37.5
G2 X0 Y150 I49.85294 J0.5
G99



Tagi:


G3d
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 324
Rejestracja: 02 sty 2009, 18:07
Lokalizacja: Warszawa

#2

Post napisał: G3d » 10 cze 2012, 11:13

Nie bedzie.
Nie rozumiem tego g99 w tym miejscu.
Tutaj masz wszystko czego ci trzeba: http://linuxcnc.org/docs/html/gcode/o-code.html

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 7781
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: Rysowanie w 2D tego samego wzoru bez przerwy

#3

Post napisał: tuxcnc » 10 cze 2012, 11:36

belin pisze:czy poniźszy program będzie rysował - powtarzał ten sam wzór bez przerwy .Jeźeli nie to proszę o pomoc by program wykonywał się z powtarzaniem bez przerwy.
1. Nie będzie.
2. Tego się nie da zrobić.

LinuxCNC sprawdza poprawność programu przy jego wczytywaniu.
Jak go wpuścisz w martwą pętlę, to będzie sprawdzał w nieskończoność.
Tak więc nawet poprawnie napisanego programu z pętlą bez końca nie uruchomisz.
A poprawnie napisany i nie dający się uruchomić program wygląda tak :

Kod: Zaznacz cały

o100 while [1] 
o100 endwhile 
M2 (Prgram end)
.


G3d
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 324
Rejestracja: 02 sty 2009, 18:07
Lokalizacja: Warszawa

#4

Post napisał: G3d » 10 cze 2012, 12:27

Swoja droga zasadniczo "bez przerwy" nie oznacza "w nieskonczonosc".
Kolega musi sprecyzowac o co mu chodzi, bo moze wystarczy np. 1000razy powtorzyc.

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 7781
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#5

Post napisał: tuxcnc » 10 cze 2012, 14:01

Zasadniczo można tak zrobić, żeby program raz uruchomiony wykonywał się w nieskończoność.
Trzeba by tylko tak wykombinować, żeby przy wczytywaniu programu warunek pętli był niespełniony, a przy uruchomieniu spełniony.
Oczywiście sam program nie może być tak napisany.
Jak sam sobie zmieni warunek, to sprawdzanie się nigdy nie skończy.
Potrzeba ingerencji z zewnątrz, na przykład zmienić zawartość pliku wywoływanego instrukcją CALL.

Zróbmy tak :

Tworzymy dwa pliki :

program.ngc :

Kod: Zaznacz cały

o<warunek> CALL
o200 while [#999 EQ 10] 
G0 Z0
G0 Z20
G4 P1
o200 endwhile 
M2 (Prgram end) 
oraz warunek.ngc :

Kod: Zaznacz cały

o<warunek> sub 
#999=0
o<warunek> endsub 
(Oczywiście podprogram warunek.ngc musi byc zapisany we właściwym miejscu, żeby mógł być wczytany, ale to już inny temat.)

Teraz uruchamiamy LinuxCNC i wczytujemy program.ngc.
Wywołany podprogram warunek.ngc ustawia wartość zmiennej #999 na zero, więc pętla while/endwhile nie wykona się ani razu.
Sprawdzenie daje wynik pozytywny.
Program się wczytał, ale jego uruchomienie nie daje żadnego efektu.

Teraz niewyłączając LinuxCNC z wczytanym program.ngc otwieramy dowolny edytor tekstu i zmieniamy plik warunek.ngc na :

Kod: Zaznacz cały

o<warunek> sub 
#999=10
o<warunek> endsub
.
Zmieniony plik oczywiście zapisujemy, a LinuxCNC zmiany nie zauważa.
Tylko teraz jak uruchomimy wczytany program.ngc, to on już zmieniony podprogram wywoła, a ten zwróci wartość zmiennej #999 równą 10.
Program wpadnie w pętlę bez końca i dzięcioł zacznie pracować.

Teraz wszystko działa jak powinno, program daje się uruchomić, zapauzować i zatrzymać.
Natomiast nie da się go ponownie wczytać.

Jak się komuś by chciało, to można bardziej elegancko to zrobić, bez dłubania w edytorze tekstu, ale ja chciałem pokazać tylko zasadę.

.


Autor tematu
belin
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 3
Posty: 13
Rejestracja: 19 cze 2008, 20:34
Lokalizacja: Łódź

#6

Post napisał: belin » 10 cze 2012, 21:29

Jest to przerobiona maszyna do pikowania materiału -tkaniny. Oś x to ruch maszyny szyjącej a oś Y przesów materiału nawawjanego po przepikowaniu wzorem fali w bele - z pisaniem g-kodów nie miałem nigdy do czynienia , przewinięta przez oś Y tkanina będzie pikowana wzorem sinusojdy - fali kilka tyasięcy okresów.

[ Dodano: 2012-06-10, 22:19 ]
Czy poniźszy program powtórzy się 10000 razy

o103 repeat [10000] ; 10000-cy powtórzeń)
G3 X17 Y38 I-32.85294 J37.5
G3 X0 Y75 I-49.85294 J-0.5
G2 X-17 Y112 I32.85294 J37.5
G2 X0 Y150 I49.85294 J0.5
m64 P0 ;cięcie odcinka materiału dł. okresu sinusojdy - opuszczenie noźa silownik noża ster. z wyjscia motion.digital-out-00
g4 p2 ; pauza 2sek sek
m65 p0 ; podniesienie noźa
g4 p0.5
o103 endrepeat

Awatar użytkownika

tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 3
Posty: 7781
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

#7

Post napisał: tuxcnc » 10 cze 2012, 23:02

belin pisze:Oś x to ruch maszyny szyjącej a oś Y przesów materiału nawawjanego po przepikowaniu wzorem fali w bele
Nie bardzo rozumiem.
Czy maszyna może się przesuwać dowolnie po osi X, a materiał tylko w jedną stronę po osi Y ?

Załączony program nie wykona się nawet jednen raz.
Dość prosty błąd, wchodzisz do pętli z przypadkowej pozycji X i Y i próbujesz wykonać łuk.
Komenda G3 musi po prostu zgłupieć.
Zasada jest taka, że dowolny ruch wykonuje się od aktualnej pozycji do podanej pozycji.
Na przykład G0X0 oznacza posów do pozycji X0 i jest oczywiste że stąd gdzie się maszyna aktualnie znajduje.
Przy łukach obowiązuje ta sama zasada i zawsze łuk jest obliczany od aktualnej pozycji do pozycji zadanej.
Jeśli podajesz przy tym współrzędne środka okręgu, to się może zdarzyć, że takiego łuku wyznaczyć się nie da.
Czyli komendy G2 lub G3 z określonymi parametrami wykonają się tylko wtedy, gdy maszyna będzie na określonej pozycji.
Inaczej wynik będzie daleki od oczekiwań, albo wywali błąd.

.


G3d
Specjalista poziom 2 (min. 300)
Specjalista poziom 2 (min. 300)
Posty w temacie: 3
Posty: 324
Rejestracja: 02 sty 2009, 18:07
Lokalizacja: Warszawa

#8

Post napisał: G3d » 11 cze 2012, 07:26

I do tego G91, chyba ze bedziesz liczyl luki dla 10000 powtorzen :P


Autor tematu
belin
Czytelnik forum poziom 1 (min. 10)
Czytelnik forum poziom 1 (min. 10)
Posty w temacie: 3
Posty: 13
Rejestracja: 19 cze 2008, 20:34
Lokalizacja: Łódź

#9

Post napisał: belin » 11 cze 2012, 20:27

Dziękuje za cenne wskazówki . Przed przeróbką maszyna wykonywała jedynie interpolacje liniowe a więc proste wzory tójkąty, linie, prostokąty, bowiem sterowana była przaz sterownik wykonany na mikroprocesorze starej daty. Modernizacja ma na celu rozszerzenie gamy pikowanych wzorów na bazie interpolacji liniowych i kołowych moźliwych do zrealizowania przy przesuwie w jednym kierunku w osi Y a więc łuki półokręgi , fale i.t.p.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”