LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

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

Autor tematu
drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 12
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#1

Post napisał: drzasiek90 » 25 lut 2024, 18:56

Post ma charakter instrukcji, jak podłączyć wiele czujników z kilku osi pod jeden pin LPT.

Korzystając z Portu LPT, jeśli chodzi o wejścia to nie ma czym szastać. Najczęściej port skonfigurowany jest w tryb OUT co daje 12 wyjść i 5 wejść. Mając kilka osi, szkoda marnować na każdą oś osobnego pinu na czujniki krańcowe i czujnik bazowania. Można podłączyć je wszystkie pod jeden pin.
Rozwiązanie to daje dwie małe niedogodności:
-nie można bazować kilku osi jednocześnie, osie muszą bazować się sekwencyjnie, ale w zdecydowanej większości przypadków nie będzie to żadnym problemem (bazowanie wykonuje się raz na początku pracy, jeśli będzie ono trwać 15 sekund zamiast 5 to raczej nikt nawet nie zauważy)
-W przypadku najechania osią na czujnik krańcowy, linuxcnc zgłosi błąd ale nie będzie informacji która to oś (ponieważ zgłosi wszystkie) Ale z drugiej strony, komunikat wygląda tak:Napęd 1 na krańcówce awaryjnej więc
i tak nigdy nie pamiętamy czy napęd 0 to jest X, czy y czy może inna oś, więc w zasadzie ta informacja nie jest niezbędna

Zaleta zaś jest ogromna - można bazować nawet 4, 5, 6 osi a zużyte jest do tego tylko jedno wejście.

Noto do dzieła.
Poszukałem co na ten temat mówi LinuxCNC:
http://linuxcnc.org/docs/devel/html/con ... _is_shared
Po pierwsze, musi być włączona opcja HOME_IGNORE_LIMITS ponieważ skoro czujnik bazowania jest na tym samym wejściu co krańcowy (u mnie to jeden czujnik) to w momencie bazowania, linuxcnc zgłaszałby najechanie na czujnik krańcowy.

Dalej, interesuje nas możliwość podłączenia wiele czujników z różnych osi pod jedno wejście. Dokumentacja mówi tylko tyle (a przynajmniej tyle znalazłem):
To use only one input for all homing and limits you will have to block the limit signals of the joints not homing in HAL and home one joint at a time.
postanowiłem wykorzystać piny joint.X.homing (mówiące o tym, że dana oś jest aktualnie bazowana) aby wykluczyć działanie czujnika na innej osi.
Czyli, przykładowo u mnie mam 2 osie X oraz Z, sygnał bazowania/krańcowy dla osi Z może być równy 1 tylko wtedy, gdy oś X nie jest aktualnie bazowana. I odwrotnie, dla osi Z.

Użyłem do tego komponentu and2 oraz not.
not służy do odwróceniu sygnału mówiącego o trwającym bazowaniu drugiej osi.
komponent and2 ma na wejścia podłączone wyjście komponentu not oraz wejście z czujników.
Innymi słowy:
Dla osi Z pojawi się sygnał zadziałania krańcówki tylko wtedy, gdy na pinie czujników pojawi się sygnał oraz jednocześnie oś X nie jest w tym momencie bazowana.
Dla osi X pojawi się sygnał zadziałania krańcówki tylko wtedy, gdy na pinie czujników pojawi się sygnał oraz jednocześnie oś Z nie jest w tym momencie bazowana.

A oto kod konfiguracji hal:

Kod: Zaznacz cały

#Tworzy dwa komponenty and2 oraz 2 komponenty not
loadrt and2 count=2
addf and2.0 servo-thread
addf and2.1 servo-thread
loadrt not count=2
addf not.0 servo-thread
addf not.1 servo-thread

#Tworzy sygnał both-home-xz i podłącza do niego pin 11 (jako wejście bazujące i krańcowe dla osi x oraz z):
net both-home-xz     <= parport.0.pin-11-in-not

#Tworzy sygnały (flagi) informujące o bazowaniu danej osi
net x_is_homing <=  joint.0.homing
net z_is_homing <=  joint.1.homing

#Podłącza do inwerterów sygnały informujące, że dana oś jest aktualnie bazowana
net x_is_homing => not.0.in
net z_is_homing => not.1.in

#podłącza do komponentów and2 (wejścia 0) sygnał both-home-xz
net both-home-xz => and2.0.in0
net both-home-xz => and2.1.in0

#Tworzy sygnały wyjściowe inwerterów
net not_0_out <=  not.0.out
net not_1_out <=  not.1.out

#podłącza do komponentów and2 (wejścia 1) zanegowany sygnał o bazowanu osi
net not_0_out => and2.0.in1
net not_1_out => and2.1.in1

#tworzy sygnały wyjściowe z komponentów and2
net and2_0_out <=  and2.0.out
net and2_1_out <=  and2.1.out

#podłącza sygnałe wyjście komponentu and2.1 na wejście bazujące i krańcowe x
net and2_1_out =>  joint.0.home-sw-in 
net and2_1_out =>  joint.0.neg-lim-sw-in
net and2_1_out =>  joint.0.pos-lim-sw-in

#podłącza wyjście komponentu and2.0 na wejście bazujące i krańcowe z
net and2_0_out =>  joint.1.home-sw-in 
net and2_0_out =>  joint.1.neg-lim-sw-in
net and2_0_out =>  joint.1.pos-lim-sw-in
Noi oczywiście w pliku ini trzeba ustawić dla poszczególnych napędów sekwencję bazowania HOME_SEQUENCE tak aby aby osie bazowały się sekwencyjnie.

Może można prościej, ja zrobiłem w ten sposób i działa.
Dzielę się, może się komuś przyda.




forestgril
Specjalista poziom 1 (min. 100)
Specjalista poziom 1 (min. 100)
Posty w temacie: 4
Posty: 124
Rejestracja: 09 paź 2023, 10:20

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#2

Post napisał: forestgril » 25 lut 2024, 19:37

A może by tak wziąć arduino albo nawet coś prostszego i potraktować jako demultiplexer? :) dać te wszystkie piny w jeden system a następnie zamienić na wartość w bitach i wysłać na 1 pin LPT i tam software'owo zinterpretować?

Awatar użytkownika

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

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#3

Post napisał: tuxcnc » 25 lut 2024, 19:47

drzasiek90 pisze:
25 lut 2024, 18:56
A oto kod konfiguracji hal:

Kod: Zaznacz cały

#Tworzy dwa komponenty and2 oraz 2 komponenty not
loadrt and2 count=2
addf and2.0 servo-thread
addf and2.1 servo-thread
loadrt not count=2
addf not.0 servo-thread
addf not.1 servo-thread

#Tworzy sygnał both-home-xz i podłącza do niego pin 11 (jako wejście bazujące i krańcowe dla osi x oraz z):
net both-home-xz     <= parport.0.pin-11-in-not

#Tworzy sygnały (flagi) informujące o bazowaniu danej osi
net x_is_homing <=  joint.0.homing
net z_is_homing <=  joint.1.homing

#Podłącza do inwerterów sygnały informujące, że dana oś jest aktualnie bazowana
net x_is_homing => not.0.in
net z_is_homing => not.1.in

#podłącza do komponentów and2 (wejścia 0) sygnał both-home-xz
net both-home-xz => and2.0.in0
net both-home-xz => and2.1.in0

#Tworzy sygnały wyjściowe inwerterów
net not_0_out <=  not.0.out
net not_1_out <=  not.1.out

#podłącza do komponentów and2 (wejścia 1) zanegowany sygnał o bazowanu osi
net not_0_out => and2.0.in1
net not_1_out => and2.1.in1

#tworzy sygnały wyjściowe z komponentów and2
net and2_0_out <=  and2.0.out
net and2_1_out <=  and2.1.out

#podłącza sygnałe wyjście komponentu and2.1 na wejście bazujące i krańcowe x
net and2_1_out =>  joint.0.home-sw-in 
net and2_1_out =>  joint.0.neg-lim-sw-in
net and2_1_out =>  joint.0.pos-lim-sw-in

#podłącza wyjście komponentu and2.0 na wejście bazujące i krańcowe z
net and2_0_out =>  joint.1.home-sw-in 
net and2_0_out =>  joint.1.neg-lim-sw-in
net and2_0_out =>  joint.1.pos-lim-sw-in
Jak zwykle nic nie rozumiesz, więc ostro przekombinowałeś....
U mnie, jedyną maszyną w której krańcówki są na jednym pinie LPT jest tokarka, bo tam trzy wejścia zajmuje enkoder wrzeciona, a chciałem mieć jeszcze estop...
Sprawę załatwia następujący wpis w pliku hal:

Kod: Zaznacz cały

net min-home joint.0.home-sw-in joint.1.home-sw-in parport.0.pin-15-in-not
Jeśli wartości parametru HOME_SEQUENCE w pliku ini są rózne dla różnych osi (a przecież muszą być różne w tej sytuacji), to nie ma możliwości bazowania więcej niż jednej osi równocześnie.


Autor tematu
drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 12
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#4

Post napisał: drzasiek90 » 25 lut 2024, 20:12

tuxcnc pisze:
25 lut 2024, 19:47
Jak zwykle nic nie rozumiesz
Jak zwykle to Ty nie przeczytałeś ze zrozumieniem, ale jak zwykle postanowiłeś się przypieprzyć bez powodu.
tuxcnc pisze:
25 lut 2024, 19:47
Sprawę załatwia następujący wpis w pliku hal:

Kod: Zaznacz cały

net min-home joint.0.home-sw-in joint.1.home-sw-in parport.0.pin-15-in-not
Nie załatwia.
Twój przykład dotyczy tylko czujników bazowania.

Ja podałem przykład z czujnikami bazowania i z czujnikami krańcowymi.
NIE PRZECZYTAŁEŚ ZE ZROZUMIENIEM bo to zupełnie inny przypadek.
Podczas bazowania jednej osi, Linux-cnc zgłasza czujnik krańcowy na pozostałych.

Ale dopieprzenie się bez powodu i kompromitację na dziś masz już zaliczoną, możesz iść spać :)
forestgril pisze:
25 lut 2024, 19:37
A może by tak wziąć arduino albo nawet coś prostszego i potraktować jako demultiplexer? :) dać te wszystkie piny w jeden system a następnie zamienić na wartość w bitach i wysłać na 1 pin LPT i tam software'owo zinterpretować?
Multiplekserem trzeba sterować. Poza tym, po co dokładać zewnętrzny układ, skoro sprawę załatwia kilka linijek w pliku hal?

Awatar użytkownika

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

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#5

Post napisał: tuxcnc » 25 lut 2024, 20:24

drzasiek90 pisze:
25 lut 2024, 20:12
Podczas bazowania jednej osi, Linux-cnc zgłasza czujnik krańcowy na pozostałych.
Podczas bazowania wszystkie czujniki krańcowe są w stanie nieaktywnym.
Znaczy się powinny być, ale jeśli nie są, to jest sytuacja awaryjna, wymagająca interwencji obsługi/serwisu.
Żadne alpejskie kombinacje tego nie zmienią, bo na jeden sygnał "coś gdzieś jest załączone" nie da się sensownie zareagować.
Tradycyjnie niczego nie rozumiesz, przekombinowałeś rozwiązanie, a na uzasadnioną krytykę reagujesz rżnąc urażonego narcyza...


Autor tematu
drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 12
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#6

Post napisał: drzasiek90 » 25 lut 2024, 20:32

Szanowni Moderatorzy, czy nie można tego gościa jakoś doprowadzić do porządku? Przecież to co wypisuje to jakieś herezje.
Uczepił się mnie jak rzep psiego ogona i nawet bez czytania, bez zrozumienia, nawet w tematach o których nie ma pojęcia, wchodzi i krytykuje. Nie ważne, że nieprawda, nie ważne, że bez sensu. Byle tylko zabłysnąć.
To czytają inni i mogą odebrać te bzdury jako "dobrą poradę".
tuxcnc pisze:
25 lut 2024, 20:24
Podczas bazowania wszystkie czujniki krańcowe są w stanie nieaktywnym.
Znaczy się powinny być, ale jeśli nie są, to jest sytuacja awaryjna, wymagająca interwencji obsługi/serwisu.
Brak ci wiedzy i doświadczenia.
Ale mam dobry dzień, więc ci wytłumaczę.

Podczas Bazowanie nie działają limity programowe - bo nie mogą.
Jeśli czujniki krańcowe byłyby wyłączone, to w przypadku awaryjnym, gdyby czujnik bazowania nie zadziałał (bo się coś uszkodziło) lub ktoś sobie dziwnie wymyślił, że czujnik bazowania ma na środku a nie na końcu i rozpoczął bazowanie z drugiej strony czujnika?
Czujniki krańcowe MUSZĄ działać podczas bazowania.
Gdyby były dostępne a nie działały, byłoby to skrajnie głupie.
I twórcy LinuxCNC o tym wiedzą, dlatego w LinuxCNC czujniki krańcowe działają podczas bazowania.

Widzisz, myślałeś że nic cię dobrego już nie spotka dziś, a znowu czegoś pożytecznego się nauczyłeś (o ile zrozumiałeś).

Awatar użytkownika

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

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#7

Post napisał: tuxcnc » 25 lut 2024, 21:01

drzasiek90 pisze:
25 lut 2024, 20:32
Czujniki krańcowe MUSZĄ działać podczas bazowania.
Piękny i klasyczny chochoł...
Pisałem, że czujniki muszą być nieaktywne w momencie rozpoczęcia procedury, a nie że mają nie zadziałać.

Tak w ogóle, to jesteś dla mnie zagadką.
Niby coś potrafisz zbudować, ale czasem popisujesz się inteligencją na poziomie dziecka z zespołem Downa...
Masz jedno wejście sygnału binarnego.
To wejście oznacza, że któryś czujnik zadziałał.
Jeśli na wejściu procedury bazowania sygnał jest aktywny, to w tym momencie program kapituluje, wyświetla komunikat o błędzie i przerywa działanie, co jest to prawidłowe i logiczne.
Nie da się ani ustalić, ani odciąć tego trefnego czujnika żadnymi kombinacjami, bo to jest jeden fizyczny sygnał.

A twoje modlitwy do moderatora są po prostu żałosne.

Ja nie piszę po to żebyś gorzej się poczuł.
Ja mam w du*** twoje istnienie i twoje samopoczucie.
Piszę, bo swoimi kretyńskimi wpisami wprowadzasz ludzi w błąd.
Już się znalazł jeden, co chce dołożyć Arduino, też nie wiadomo po co i w jaki sposób...


Autor tematu
drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 12
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#8

Post napisał: drzasiek90 » 25 lut 2024, 21:21

tuxcnc pisze:
25 lut 2024, 21:01
Masz jedno wejście sygnału binarnego.
To wejście oznacza, że któryś czujnik zadziałał.
Jeśli na wejściu procedury bazowania sygnał jest aktywny, to w tym momencie program kapituluje, wyświetla komunikat o błędzie i przerywa działanie, co jest to prawidłowe i logiczne.
Nie da się ani ustalić, ani odciąć tego trefnego czujnika żadnymi kombinacjami, bo to jest jeden fizyczny sygnał.
Kod konfiguracji którą podałem został sprawdzony na maszynie i działa.
Odcina reakcję na czujniki krańcowe na innych osiach, podczas bazowania danej osi.

Nie przeczytałeś ze zrozumieniem, czy to jest dla ciebie za trudne?

To co powyżej napisałeś oznacza, że nie rozumiesz istoty problemu.

Opiszę ci po kolei, może coś załapiesz:
Masz jedno wejście, które podłączone jest do czujników HOME i LIMIT dla osi X oraz HOME i LIMIT Y.
Masz ustaloną sekwencję bazowania, najpierw oś X potem oś Z.

Bazuje się oś X, Linux wykrywa zadziałanie czujnika bazowania, bazowanie przebiega prawidłowo.
Następnie bazuje się oś Z, zadziałał czujnik bazowania Z, ale linux wykrył także, że zadziałał czujnik krańcowy X (bo oś jest już zbazowana więc działa normalnie a czujnik jest na tym samym pinie) i zgłasza błąd: napęd X na krańcówce awaryjnej i wyłącza napędy i zatrzymuje bazowanie.

Łapiesz już?

Mój post pokazuje jak skonfigurować LinuxCNC, aby podczas bazowania jednej osi linux nie zgłaszał zadziałania krancówek na pozostałych osiach.
Ty zaś wpadłeś, skrytykowałeś i pokazałeś swój przykład, który jest zupełnie inny.
Twoja "interwencja" tutaj była zatem albo zwyczajnie złośliwa albo po prostu nie rozumiesz, co masz skonfigurowane.

A teraz darmowa porada (bo wychowanie na którymś etapie twojego życia zawiodło)
Nie każdy wszystko wie, nie każdy zawsze ma rację.
Jeśli wchodzisz do tematu, czytasz i uważasz, że się z czymś nie zgadzasz, to napisz to w sposób dyplomatyczny.
Ale rozmawiając w ten sposób:
tuxcnc pisze:
25 lut 2024, 21:01
Jak zwykle nic nie rozumiesz
Tradycyjnie niczego nie rozumiesz
reagujesz rżnąc urażonego narcyza...
popisujesz się inteligencją na poziomie dziecka z zespołem Downa...
swoimi kretyńskimi wpisami wprowadzasz ludzi w błąd.
ewidentnie nie wiesz czym się zajmujesz
bzdur które tu wygadywałeś?
Pieprznąłeś taką głupotę
Znowu pieprzysz jak potłuczony...
Chyba zamiast na fizykę chodziłeś na wagary...
Weź już przestań, bo tylko mieszasz ludziom w głowach.
to jest kwintesencja twojej głupoty....
zrozumiesz jakie głupoty wypisujesz...
wychodzisz na kretyna, tak jak teraz, gdy znowu okazuje się, że nie masz racji.

I kolejny raz, zamiast się przyznać, idziesz w zaparte...

Awatar użytkownika

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

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#9

Post napisał: tuxcnc » 25 lut 2024, 21:26

drzasiek90 pisze:
25 lut 2024, 21:21
Następnie bazuje się oś Z, zadziałał czujnik bazowania Z, ale linux wykrył także, że zadziałał czujnik krańcowy X (bo oś jest już zbazowana więc działa normalnie a czujnik jest na tym samym pinie) i zgłasza błąd: napęd X na krańcówce awaryjnej i wyłącza napędy i zatrzymuje bazowanie.
Tak to u Ciebie działa?
Czy sobie to wymyśliłeś?
Bo u mnie działa to inaczej...


Autor tematu
drzasiek90
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 12
Posty: 1769
Rejestracja: 25 kwie 2016, 11:58
Lokalizacja: Jodlowa
Kontakt:

Re: LinuxCNC - jak podłączyć wszystkie czujniki bazowania oraz krańcowe do jednego pinu LPT

#10

Post napisał: drzasiek90 » 25 lut 2024, 21:37

tuxcnc pisze:
25 lut 2024, 21:26
Tak to u Ciebie działa?
Czy sobie to wymyśliłeś?
Tak to działa na mojej maszynie. Tak działa LinuxCNC.
Tak to jest opisane w dokumentacji LinuxCNC.
tuxcnc pisze:
25 lut 2024, 21:26
Bo u mnie działa to inaczej...
Bo ty nie masz skonfigurowanych czujników krańcowych. Przecież ci to tłumaczyłem w pierwszej odpowiedzi, ale standardowo skupiony byłeś na rżnięciu specjalisty i obrażaniu mnie, zamiast czytać ze zrozumieniem.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”