AuxIO czyli dodatkowe wejścia/wyjścia przez Ethernet

Dyskusje dotyczące działania obsługi programu LinuxCNC
Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 4
Posty: 9400
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

AuxIO czyli dodatkowe wejścia/wyjścia przez Ethernet

#1

Post napisał: tuxcnc » 18 maja 2025, 21:15

Sterownik urodził się z (niestety strasznie zaśmieconego) wątku topic125134.html
Pisałem tam, że wziąłem na warsztat moduł WT32-ETH01, który akurat miałem z innego projektu, a kosztujący naprawdę grosze (Na Aliexpress nawet poniżej 25 PLN).
Ten moduł zawiera na jednej płytce mikroprocesor ESP32 i układ obsługi Ethernetu LAN8720 z gniazdem RJ45, nic nadzwyczajnego, ale aż się prosi żeby go do czegoś użyć...
Postanowiłem oprzeć się na projekcie https://github.com/jzolee/HAL2UDP/tree/1.0 (wersja 1.0), który co prawda zawiera błędy i bez poprawek nie działa, ale jest wyjątkowo schludnie i przejrzyście napisany, dzięki czemu wiadomo co jest od czego i jak ma działać.
Niestety, większość kodu dostępnego w necie jest tak pisana, że rozumie ją tylko autor i to niekoniecznie, więc nawet drobne zmiany są męczarnią...
Zmiana biblioteki z W5500 na LAN8720 była drogą przez mękę, ale kiedy już się udało, to wszystko okazało się banalnie proste.
No i tak narodził się AuxIO, który nie powala możliwościami, ale zacząć trzeba było od czegoś prostego.
Dało się z przedmiotowej płytki wycisnąć sześć wyjść i osiem wejść cyfrowych z dość prostym zabezpieczeniem przed błędami transmisji (suma kontrolna danych otrzymywanych z komputera).
Tutaj mała dygresja. Otóż są rzeczy, które muszą być szybkie i takie które nie muszą. Jeśli chcemy sprawdzić czy ktoś nie otworzył osłony, albo włączyć chłodziwo, to nie musimy tego robić tysiąc razy na sekundę... Dlatego też taki pomocniczy układ można przypisać do stosunkowo wolnego wątku i nie powinien on za bardzo przeszkadzać głównemu sterownikowi.
IP jest ustawione na 10.10.10.99, co jest spowodowane tym, że używam sterowników Remora z adresem 10.10.10.10, więc chciałem mieć z tego samego zakresu. Jak komuś nie pasuje, to może sobie zmienić, byleby równocześnie w AuxIO.ino i AuxIO.comp, bo UDP2HAL pracuje ze sztywno przypisanym adresem.

Tak należy to cudo programować:
Obrazek

.
AuxIO.tar
(600 KiB) Pobrany 131 razy



Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 4
Posty: 9400
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: AuxIO czyli dodatkowe wejścia/wyjścia przez Ethernet

#2

Post napisał: tuxcnc » 19 maja 2025, 06:07

Po ilości pobrań załącznika widzę, że jest spore zainteresowanie, więc kilka słów uzupełnienia.
Do kompilacji kodu używałem platformio-cli-t125165.html
Zapewne da się użyć Arduino IDE. Nie próbowałem, ale kod jest kompatybilny, więc po zainstalowaniu odpowiednich bibliotek powinno się udać.
Gdyby ktoś chciał coś w kodzie przerabiać, to ostrzeżenie, żeby nie używać pinu GPIO.0. On jest wyprowadzony na złącze tylko po to, żeby możliwe było programowanie ESP32. Normalnie jest to sygnał zegara dla LAN8720 i oczywiście do niczego innego nie można go wykorzystać.
Co do innych pinów, to trzeba zapoznać się z ogólnymi informacjami na ich temat. Niektóre dziwnie się zachowują w czasie uruchamiania układu (potem działają już normalnie), a niektóre w czasie uruchamiania układu muszą znajdować się w określonym stanie. Poza tym, trzy piny mogą być tylko wejściami i nie mają wewnętrznych pullupów. To są łatwo dostępne informacje i nie będę opisywał szczegółów, tylko zasygnalizuję.

No i chyba najważniejsze...
Nigdy nie widziałem takiej maszyny, gdzie użyto by kilku różnych układów wyjściowych w jednej konfiguracji.
Nie mówię, że takie nie istnieją, ale są wyjątkową rzadkością.
A co stoi na przeszkodzie, żeby na przykład osie sterować przez LPT a dodatkowe wejścia/wyjścia mieć przez Ethernet?
No w takiej konfiguracji, to już naprawdę nie ma co się ze sobą kłócić...

No i na koniec, to nic nie stoi na przeszkodzie, żeby układ rozwinąć i na przykład zrobić wejścia analogowe, albo wyjścia PWM. Jak ktoś umie programować na poziomie podstawowym, to powinien sobie poradzić. Ja w pierwszej kolejności chcę zrobić układ obsługi wrzeciona, czyli obsługa falownika i enkodera. Wydaje się to bardzo proste, ale trzeba mieć trochę wolnego czasu i dobry dzień, więc żadnego terminu nie obiecuję...

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 4
Posty: 9400
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: AuxIO czyli dodatkowe wejścia/wyjścia przez Ethernet

#3

Post napisał: tuxcnc » 20 maja 2025, 12:50

Znalazłem w kodzie drobny i mało istotny błąd.
Jest:

Kod: Zaznacz cały

send_udp_buffer(packetBuffer, sizeof(packetBuffer));
Powinno być:

Kod: Zaznacz cały

send_udp_buffer(packetBuffer, sizeof(fb));
Różnica jest taka, że pierwsza linia wysyła pakiet wielkości bufora, natomiast druga, wielkości faktycznie używanych danych.
Różnica jest rzędu dwustu bajtów, nie jest to więc dużo, ale to jest zupełnie niepotrzebnie przesyłane dwieście bajtów.

Zła wiadomość dla właścicieli zabytków.
Z czystej ciekawości spróbowałem uruchomić AuxIO na Debianie Wheezy z LinuxCNC 2.7.
Nie da się.
Oczywiście nie jest to wina ani WT32-ETH01, ani jego firmware, a tylko niekompatybilności kodu AuxIO.comp ze starym kernelem 3.4.9-rtai-686-pae (Debian 12 ma kernel 6.1.0-32-rt-amd64, czyli jest to przepaść...)
Jakby się ktoś uparł, toby przepisał AuxIO.comp na ten stary kernel, ale ja nie mam zamiaru poświęcić na to nawet sekundy.
Zawsze powtarzam, że warto być na bieżąco, bo nowe będzie się gryzło ze starym i nie warto tracić życia na walkę z wiatrakami...

Czy AuxIO może zastąpić Linumeric?
Nie wiem.
Nie było moją intencją psucie koledze z forum biznesu, ani zbudowanie układu udającego port LPT.
W założeniu miało to być dodanie dodatkowych wejść/wyjść do istniejącego sterowania, bez nacisku na prędkość transmisji. Jak pisałem, niektóre sygnały nie muszą być czytane tysiące razy na sekundę...
Jeśli ktoś jest ciekawy jak szybko AuxIO może działać i czy da się nim sterować krokowce, to niech próbuje...

Awatar użytkownika

Autor tematu
tuxcnc
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 4
Posty: 9400
Rejestracja: 26 lut 2011, 23:24
Lokalizacja: mazowieckie

Re: AuxIO czyli dodatkowe wejścia/wyjścia przez Ethernet

#4

Post napisał: tuxcnc » 25 maja 2025, 13:17

Czy ktoś uruchomił ???

Widzę ponad 130 pobrań i ani jednej opinii, czy jakiegokolwiek pytania...
Chcę wiedzieć czy ktoś napotkał jakieś trudności czy błędy, zanim opublikuję kod na Githubie.

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „LinuxCNC (dawniej EMC2)”