Przedstawiam mały poradnik, jak połączyć się z urządzeniami wyposażonymi w port szeregowy przy wykorzystaniu sieci LAN.
Można w ten sposób podłączyć dowolne urządzenia z portem szeregowym, jak różnego rodzaju sterowniki, liczniki itp., komunikujące się w dowolnym protokole - zaczynając od ModBUS RTU, ModBUS ASCII, tryby tekstowe, aż do własnych protokołów producenta sprzętu.
Działa to dość prosto, bo w systemie instaluje się wirtualny port COM (np. COM7) wzorem różnych adapterów na USB. Potem wystarczy żądany program skonfigurować do komunikacji przez ten port, i gotowe.
W przykładzie wykorzystałem tanie urządzenie z portem RS485, ale to tylko warstwa sprzętowa. RS422, RS232 też są dostępne i żadnych różnic od strony programowej być nie powinno.
Wszystkie opisane poniżej kroki powinny wyglądać podobnie również dla innych typów/modeli.
Kilka tygodni temu na Elektrodzie pojawił się podobny poradnik, ale autor nie podjął dyskusji, tylko się obraził i skasował temat. Dlatego przedstawiam swoją wersję
COM serwerów tego rodzaju jest w sprzedaży mnóstwo. Ethernet albo WiFi albo i to i to. Po drugiej stronie RS232, RS485, RS422, albo kilka z nich...
W EP było jak sobie zrobić takie coś samemu z modułu Tibbo
https://ep.com.pl/files/3535.pdf [EDIT] Ten link już nie działa. Chyba po latach admin w EP wziął się do pracy, bo jeszcze parę dni temu można było ściągać z tego archiwum do woli
Nie brakuje tego na alle:
https://allegro.pl/listing?string=rs232%20ethernet&bmatch=baseline-dict42-com-1-4-1024
W TME wśród modułów można wybierać
https://www.tme.eu/pl/katalog/moduly-ethernet...?s_field=1000012&s_order=asc&limit=20¤cy=PLN&page=2
Chyba każdy szanujący się sklep z elektroniką ma coś w ofercie. Albo moduły do samodzielnego zabudowania, albo gotowe produkty.
Wystarczy w przeglądarkę wklepać "COM server" albo "ethernet rs232" albo coś takiego - i do wyboru do koloru.
Ja wybrałem tani konwerter na Aliexpress:
https://www.aliexpress.com/item/32631504500.html?spm=a2g0s.9042311.0.0.27424c4dMCwfgm
Ale mam też chęć przetestować taki:
https://www.aliexpress.com/item/32918495128.html?spm=a2g0s.9042311.0.0.27424c4dMCwfgm
Występują także rozwiązania dedykowane do ModBUS, będące bramką ModBUS TCP <-> ModBUS RTU. O ile nie obsługują wirtualnych portów COM, to są mniej uniwersalne, ale wygodniejsze w użyciu, o czym będzie za chwilę.
Po otwarciu pudełka:
USR-TCP232-304 robi dobre pierwsze wrażenie. Solidna metalowa obudowa, niewielkie rozmiary, zasilacz w komplecie, wszystko jak trzeba.
Pokaż kotku, co masz w środku:
Wnętrze nie zaskakuje - są tylko trzy scalaki:
1: interfejs LAN DAVICOM DM9051NP
2: procesor Atmel ATSAMD20E18A-U
3: interfejs RS485 MAX13487
Są też miejsca do wlutowania goldpinów, co umożliwia nam:
a) włączenie układu fail-safe
b) uzyskanie "w gratisie" konwertera UART 3,3V, są bowiem wyprowadzone sygnały RX i TX
Więc jeśli ktoś zapragnie dorobić sobie RS232 to nie ma przeszkód, wystarczy dołożyć MAX232. Tyle, że będzie to interfejs okrojony, bo nie ma żadnych sygnałów sterujących, niestety.
Do rzeczy:
Po pierwszym włączeniu należy serwer skonfigurować. Można to zrobić na kilka sposobów:
1. Poprzez interfejs webowy - adres IP, adres MAC, oraz dane logowania są na obudowie urządzenia.
2. Programem USR-M0 dostępnym na stronie producenta
3. Komendami AT - nawet nie próbowałem
Konfiguracja jest średnio trudna, bo niektóre ustawienia, jak się okazało póżniej, nie dawały zadowalających rezultatów. Ja w konsekwencji wybrałem połączenie UDP, oraz sztywną konfigurację prędkości portu szeregowego, rezygnując z automatyzacji w tym względzie.
Oczywiście należy ustawić połączenie sieciowe. Zakładka "Local IP Config": do dyspozycji jest klient DHCP albo wpisanie IP z palca.
Zakładka "Serial Port" to ustawienia portu szeregowego - obejmują prędkość, ilość bitów danych, parzystość, bity stopu, oraz ustawienia protokołu transmisji przez LAN.
Można ustawić TCP client lub server, UDP client lub server, numery portów oraz, oczywiście, wymagany dla opcji "client" adres IP serwera. Tym IP jest albo adres naszego komputera, albo adres drugiego modułu USR.
W teorii można zestawić przezroczyste połączenie przy użyciu dwóch takich modułów i uzyskać dłuuugi kabel szeregowy np. dla dwóch komputerów 8bit, czy innego egzotycznego zastosowania. Ja tego nie testowałem, bo nie mam dwóch USR
Konfigurację portu szeregowego dopełnia możliwość zaznaczenia pocji "Similar RFC2217", co skutkuje automatyczną zmianą prędkości portu - jeśli w terminalu, czy innym programie, zmienimy prędkość transmisji, to nie trzeba się logować do USR, żeby także ją zmienić.
Są jeszcze opcje "Reset", "Link" i "Index". Index odpowiada za "adresowanie" pakietów, ale instrukcja jest niejasna, ja nie potrzebuję takiej opcji, a i większość potencjalnych czytelników prawdopodobnie szuka "przezroczystego" interfejsu. Dlatego nie drążyłem zastosowań tych opcji.
Z tego samego powodu nie dotykałem zakładki "Expand function".
"Misc Config" to ustawienia samego urządzenia - nazwa, edycja MAC adresu, hasło admina itp.
Działającą konfigurację przedstawiam na screenie:
Mając działające urządzenie w sieci LAN należy dodać w systemie wirtualny port COM. Najlepiej zrobić to widocznym wyżej programem USR-VCOM.
W moim przypadku jest to COM4 - widoczny w Menedżerze Urządzeń.
Tutaj ujawnia się różnica w stosunku do mostka ModBUS RTU <-> ModBUS TCP. W takim przypadku nie trzeba niczego instalować w systemie, wystarczy program do komunikacji skonfigurować do trybu TCP i podać adres IP, port oraz timeout.
Aby sprawdzić, czy wszystko bangla podłączyłem przejściówkę USB<->RS485, co zaowocowało kolejnym portem w systemie - tym razem COM14...
Połączenia TCP albo nie chciały działać w ogóle (nie wiem dlaczego), albo zamiast jednego bajtu dostawałem 5 - transmisja od PC do COM była OK, ale z COM do PC następowało cudowne rozmnożenie. Wydawało się, że prawidłowo działa tylko UDP, ale to był przypadek - wtedy akurat odznaczyłem też jeszcze jeden checkbox.
Po kilku próbach, przywracaniu ustawień fabrycznych, itp., okazało się, że najpewniej winne są sterowniki portu wirtualnego, albo mój system operacyjny, zaśmiecony do granic przyzwoitości.
Po przywróceniu ustawień fabrycznych i skonfigurowaniu wszystkiego na nowo transmisja działała jak należy i w trybie UDP i TCP server i TCP client, ale tylko do restartu PC. Potem pojawiały się śmieci.
Odznaczenie opcji "RFC2217" w konfiguracji modułu przyniosło pożądany skutek i oprócz konfiguracji LAN i COM jest to jedyna zmiana w stosunku do ustawień fabrycznych.
Co wysłałem z jednego terminala pokazywało się na drugim. Widać to na screenie:
Pora na coś bardziej realistycznego. Wygrzebałem licznik energii wyposażony w port RS485 i wykorzystujący ModBUS RTU. Na zdjęciu widać pomiar napięcia w sieci (jedna faza tylko, bo nie mam w domu "siły"
Zapytanie przez sieć LAN pokazało właściwą wartość, więc jest OK.
W prawej kolumnie z nagłówkiem "float32" widać przeliczoną zawartość rejestrów zawierających wartość napięcia w fazie L1.
Widoczny na ekranie RealTerm wciąż połączony jest z adapterem USB<->RS485 i podgląda co się dzieje na magistrali RS485.
Tak więc niewielkim nakładem sił i środków można zorganizować sobie zdalny dostęp do starszych urządzeń (albo nowych, bo w przemyśle porty szeregowe oparte na UART mają się dobrze), albo połączyć ze sobą dwa urządzenia, kiedy z jakichś powodów (np odległość) nie można wykorzystać kabla szeregowego. Oczywiście COM serwery dedykowane do przemysłu są wielokrotnie droższe niż ten tu pokazany, ale w mnogości ofert każdy znajdzie coś dla siebie.
Fajne? Ranking DIY
