Rysowanie w 2D tego samego wzoru bez przerwy
-
Autor tematu - 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
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
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:
-
- Lider FORUM (min. 2000)
- Posty w temacie: 3
- Posty: 9323
- Rejestracja: 26 lut 2011, 23:24
- Lokalizacja: mazowieckie
Re: Rysowanie w 2D tego samego wzoru bez przerwy
1. Nie będzie.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.
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)
-
- Lider FORUM (min. 2000)
- Posty w temacie: 3
- Posty: 9323
- Rejestracja: 26 lut 2011, 23:24
- Lokalizacja: mazowieckie
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 :
oraz warunek.ngc :
(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 :.
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ę.
.
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)
Kod: Zaznacz cały
o<warunek> sub
#999=0
o<warunek> endsub
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 - Czytelnik forum poziom 1 (min. 10)
- Posty w temacie: 3
- Posty: 13
- Rejestracja: 19 cze 2008, 20:34
- Lokalizacja: Łódź
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
[ 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
-
- Lider FORUM (min. 2000)
- Posty w temacie: 3
- Posty: 9323
- Rejestracja: 26 lut 2011, 23:24
- Lokalizacja: mazowieckie
Nie bardzo rozumiem.belin pisze:Oś x to ruch maszyny szyjącej a oś Y przesów materiału nawawjanego po przepikowaniu wzorem fali w bele
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.
.
-
Autor tematu - Czytelnik forum poziom 1 (min. 10)
- Posty w temacie: 3
- Posty: 13
- Rejestracja: 19 cze 2008, 20:34
- Lokalizacja: Łódź
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.