Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

zgierzman 29 Lis 2019 18:30 1827 7
  • COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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 ;-) Zostawiam nazwę pliku, może ktoś gdzieś znajdzie tego pdf-a.
    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:
    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN
    https://www.aliexpress.com/item/32631504500.html?spm=a2g0s.9042311.0.0.27424c4dMCwfgm

    Ale mam też chęć przetestować taki:
    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN
    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:

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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:

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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 ;-)

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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 (niepotrzebnie) 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:

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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...

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    Połączenia TCP albo nie chciały działać wogó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.
    Pokoresponduję sobie z producentem, jeśli coś ustalę - uzupełnię w temacie.
    Pierwsze moje domysły są takie, że serwer TCP obsługuje do 16 jednoczesnych połączeń przez LAN, a tylko jeden port szeregowy. Tak więc odpowiedź z portu szeregowego może być jakoś zaadresowana...
    Instrukcja o tym wspomina:

    "Identity
    packet is used for identify the device when module works as TCP client/UDP client. There are two sending
    methods for identity packet .
     Identity data will be sent when connection is established.
     Identity data will be add on the front of every data packet
    Identity packet can be MAC address or user editable data (User editable data at most 40 bytes)."

    Ale ja miałem tą opcję wyłączoną.
    Instrukcja, jak pisałem, jest niejasna, bo część screenów pochodzi z programu USR-M0, a cześć z aplikacji webowej.

    Tu właśnie okazało się, że "przezroczyste" jest ustawienie UDP. Co wysłałem z jednego terminala pokazywało się na drugim. Widać to na screenie:

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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" ;-)

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    Zapytanie przez sieć LAN pokazało właściwą wartość, więc jest OK.

    COM serwer - sposób na połączenie z portem szeregowym poprzez sieć LAN

    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
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    zgierzman
    Poziom 22  
    Offline 
  • #2
    Rafal_Pisz
    Poziom 12  
    Cytat:
    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 ;-)


    Nawet bardzo długi :) ja mam zestawione dwa moduły tej firmy, jeden gsm i drugi lan. Śmiga jak należy. Prezentowałem je też na elektrodzie.
  • #3
    figa_miga
    Poziom 19  
    Jak tam się odbywa przełączenie kierunków RS485, procek robi to automatycznie gdy chce wysłać bajta?
  • #4
    zgierzman
    Poziom 22  
    figa_miga napisał:
    Jak tam się odbywa przełączenie kierunków RS485, procek robi to automatycznie gdy chce wysłać bajta?


    Tak, o kierunek nie ma się co martwić. Ale nie wiem, czy to zasługa procesora, czy MAX13487 - bo jest to "Half-Duplex RS-485-/RS-422-Compatible Transceiver with AutoDirection Control".
  • #5
    Linoge
    Poziom 27  
    Próbowałeś na czymś unix'owym jak wygląda transmisja ? Widzę remote IP:remote port więc konfiguracja wydaje się być banalna. Pytanie tylko o izolacyjność eth.
  • #6
    zgierzman
    Poziom 22  
    Linoge napisał:
    Próbowałeś na czymś unix'owym jak wygląda transmisja ? Widzę remote IP:remote port więc konfiguracja wydaje się być banalna. Pytanie tylko o izolacyjność eth.


    Wybacz, ja działam tylko na windows, bo cały soft jakiego potrzebuję (przemysłowe historie) mam na tym systemie.
    Od strony LAN (komputer z wirtualnym portem szeregowym) może być kłopot, bo nie wiem, czy są sterowniki do innych platform. Trzeba by poszukać na https://www.eltima.com/, bo to od nich pochodzą drivery.
    I tak, masz rację: konfiguracja dla ustawienia urządzenia w trybie klienta jest prosta. Tyle, że pod IP:port musi czekać jakiś serwer, a czy znajdziesz taki dla UNIX/LINUX? Nie mam pojęcia...
    Od strony portu szeregowego system UNIX nie powinien zauważyć różnicy, skoro inne urządzenia (jak mój licznik) nie zauważają.

    Co masz na myśli pisząc "izolacyjność ETH"? Czy w gnieździe jest transformator izolacyjny? Pewnie jest - są diody, więc i pewnie trafo jest wbudowane w gniazdo. Nie ma go na PCB w każdym razie. Są w ogóle jakieś urządzenia sieciowe, które nie mają trafa na porcie LAN/WAN?
  • #7
    noel200
    Poziom 25  
    Witam,
    Też niedawno zastanawiałem się nad tą skrzynką. Ale kupiłem sobie LPT100WiFi
    https://botland.com.pl/pl/moduly-wifi/7185-pl...ifi-lpt100-antena-i-konwerterem-usb-uart.html
    I mam połączenie po RS232 ze sterownikiem plc na drugim końcu miasta, bo tam moduł łączy się przez wifi do routera, a ten do internetu.
  • #8
    Bojleros
    Poziom 16  
    zgierzman napisał:
    Tu właśnie okazało się, że "przezroczyste" jest ustawienie UDP. Co wysłałem z jednego terminala pokazywało się na drugim. Widać to na screenie:


    zgierzman napisał:
    I tak, masz rację: konfiguracja dla ustawienia urządzenia w trybie klienta jest prosta. Tyle, że pod IP:port musi czekać jakiś serwer, a czy znajdziesz taki dla UNIX/LINUX? Nie mam pojęcia...


    @Linoge Prosty test to postawienie serwera na UDP przy użyciu netcata. Tutaj masz dość dziki przykład tunelowania portu na zdalną maszynę po sieci za pomocą ssh:

    https://cervisial.wordpress.com/2016/02/02/ssh-tunnel-serial-ports-over-the-internet/

    PS. Warto pamiętać że:
    - to urządzenie nie ma szyfrowania
    - udp jest protokołem stratnym
    - w modbusie występują zależności czasowe a przy prostym konwerterze RS opóźnienie wnoszone przez sieć może być problematyczne

    Pozdrawiam,