Znaleziono 3 wyniki

autor: tuxcnc
10 cze 2012, 23:02
Forum: LinuxCNC (dawniej EMC2)
Temat: Rysowanie w 2D tego samego wzoru bez przerwy
Odpowiedzi: 8
Odsłony: 1778

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.

.
autor: tuxcnc
10 cze 2012, 14:01
Forum: LinuxCNC (dawniej EMC2)
Temat: Rysowanie w 2D tego samego wzoru bez przerwy
Odpowiedzi: 8
Odsłony: 1778

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: tuxcnc
10 cze 2012, 11:36
Forum: LinuxCNC (dawniej EMC2)
Temat: Rysowanie w 2D tego samego wzoru bez przerwy
Odpowiedzi: 8
Odsłony: 1778

Re: Rysowanie w 2D tego samego wzoru bez przerwy

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)
.

Wróć do „Rysowanie w 2D tego samego wzoru bez przerwy”