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 :
(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ę.
.