Zmienna #5041 użyta jako warunek funkcji staje się stałą

Dyskusje dotyczące programowania G-Code

Autor tematu
Saxery
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 4
Rejestracja: 22 kwie 2015, 13:25
Lokalizacja: Polska

Zmienna #5041 użyta jako warunek funkcji staje się stałą

#1

Post napisał: Saxery » 11 paź 2015, 15:19

Jak w temacie. W krótkim macro przeznaczonym do planowania powierzchni czołowej, zamiast tzw. zmiennej iteracyjnej użyłem prostego warunku z wykorzystaniem aktualnego położenia na osi X, które to przechowywane jest pod zmienną #5041, który przedstawia się następująco:

Kod: Zaznacz cały

WHILE [[#5041-[#7/2]] LT [#2+2]] DO2
Z pozoru wszystko wygląda poprawnie, wykonuj, dopóki położenie na X (#5041) pomniejszone o połowę średnicy (#7/2) jest mniejsze niż zadany wymiar (#2) powiększony o dwa (wyjście poza materiał).

Nie mniej jednak, pojawia się błąd, pętla nie jest wykonywana. Po przebadaniu różnych możliwości błędu, otrzymałem jednobrzmiący wniosek: zmienna #5041, użyta jako warunek w pętli będzie zwracać 250 (odległość od zera roboczego do zera maszyny), ZAWSZE, nie zwracając żadnej uwagi na to, że aktualne położenie wskazuje na co innego, np wartość 50...

Reasumując, pętla ta nigdy się nie wykona. Idąc za ciosem dodałem do warunku porównywanego wspominaną wartość 250 (którą zawsze reprezentuje "stała" #5041):

Kod: Zaznacz cały

WHILE [[#5041-[#7/2]] LT [#2+2+250]] DO2
efekt jest łatwy do przewidzenia, tym razem pętla się wykona, nieskończoną liczbę razy, bo w końcu nasza zmienna #5041 jest "stałą"...

Pracowałem na symulatorze z poziomu PC, pomyślałem więc że może zaburzone jest zwracanie poprawnej wartości zmiennej, poprzez co udałem się do pracowni i skorzystałem z oryginalnego symulatora HAAS. Efekt ten sam. Tam jednak zbadałem zmiany wartości zm. #5041 na dwa sposoby:
1. Dopisanie 250 do warunku pętli celem jej wykonania, następnie wprowadzenie wyrażenia w pętli F#5041 (czyli wartość posuwu wynosi tyle samo, co aktualna liczba reprezentowana przez #5041) (a jak wiemy, tę wartość można na bieżąco podglądać na ekranie symulacji). Efektem była jednorazowa zmiana F na 250, i choć zmieniał się X, to wyświetlana wartość F zawsze byłą taka sama.
2. Podobnie jak przedtem dodałem 250, tym jednak że do sprawdzenia wartości #5041 użyłem zmiennej globalnej #105: #105=#5041, a następnie sprawdzałem ją z poziomu MDI DNC->CURNT COMDS->2xPAGE DOWN->3x strzałka w prawo. Ku mojemu zdumieniu, owa wartość zmieniała się poprawnie, co było widać nawet wówczas, gdy zwracana wartość powinna zakończyć pętle a ta jednak nadal się wykonywała poprzez stałą zmienną #5041, której poza warunkiem obserwowałem jako zmienną.

Ktoś może powiedzieć, o co do jasnej chodzi?... Siedziałem wiele godzin nad tym problemem, wiem że dodanie osobnej zmiennej iteracyjnej załatwi problem, ale tak się problemów nie rozwiązuje, czyż nie tak? Dostępu do maszyny celem dobitnego sprawdzenia niestety nie mam.

//edit
gdyby kogoś interesowała całość kodu: http://pokazywarka.pl/5gqp7c/



Tagi:


irbal
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 122
Rejestracja: 24 sie 2006, 23:20
Lokalizacja: Opole

Re: Zmienna #5041 użyta jako warunek funkcji staje się stałą

#2

Post napisał: irbal » 12 paź 2015, 20:48

Może bez przekazywania zmiennej globalnej do pętli:

#105=#5041
i poza pętlą wyliczona potrzebna do przebycia DROGA
Pętla pracuje do spełnienia warunku DROGA


Próbowałeś tak?


Autor tematu
Saxery
Nowy użytkownik, używaj wyszukiwarki
Nowy użytkownik, używaj wyszukiwarki
Posty w temacie: 2
Posty: 4
Rejestracja: 22 kwie 2015, 13:25
Lokalizacja: Polska

#3

Post napisał: Saxery » 13 paź 2015, 21:09

Próbowałem przypisać właśnie coś takiego: #105=#5041 , ale wewnątrz pętli (o to przecież chodzi że to się zmienia), następnie #105 użyć jako warunku pętli, niestety, nie przyniosło to żadnego skutku..

Projekt już oddałem, niestety musiałem się zadowolić wpisami #105=0 oraz #106=0... It's Haas :)


irbal
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 2
Posty: 122
Rejestracja: 24 sie 2006, 23:20
Lokalizacja: Opole

#4

Post napisał: irbal » 14 paź 2015, 00:01

"Próbowałem przypisać właśnie coś takiego: #105=#5041 , ale wewnątrz pętli (o to przecież chodzi że to się zmienia), następnie #105 użyć jako warunku pętli, niestety, nie przyniosło to żadnego skutku..


Napisałem skrótowo i chaotycznie więc nie do końca mnie zrozumiałeś
chodziło mi o coś takiego:
- z zmiennej systemowej #5041 wyliczyć najpierw drogę do przebycia przez nóż
- zapisać wynik np pod zmienną #105
- w pętli sprawdzać #105 jako warunku pętli

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „G-CODE - programowanie”