Konvertor z RJ11 (RS232/C) na Ethernet

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #15 kdy: 23. 05. 2025, 06:32:23 »
RPI na toto moc nedoporučuju, umře brzo SD karta (zkušenost s HA na rpi a z 3d tiskárny, webové kamery na monitorování a počítání včel:-), vydrží cca 1.5 roku, v místě

A swap sis vypnul?
používal jsem ramdisk


Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #16 kdy: 23. 05. 2025, 07:18:50 »
Nenašlo by se něco u Lantronics ? Jejich xPort je převodník Uart na RJ45. A ma to i web rozhraní. Možná by něco měli i na RS232.

RS232 je dokonce na tom UARTu jako defaultní režim :-) Masově se to používá např k dálkovému řízení radiostanic.

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #17 kdy: 23. 05. 2025, 11:06:03 »
To zařízení se historicky původně jmenovalo "terminal server", přestože je to v dnešní době většinou malá až miniaturní krabička. Má to nějaký firmware způsobilý k TCP/IP, Ethernet (nebo wifi) a sériový port. V základní variantě je to TCP server = otevřete TCP spojení na konkrétní TCP port, a krabka spustí obousměrný relay TCP relace na svůj sériový port.

Sériový port má nějaké konfigurovatelné vlastnosti navíc, které TCP spojení postrádá.
Konfiguraci sériového portu je obvykle možno zařídit nějak "out of band", anebo taky in-band.
Jednak existuje RFC-2217, které káže několik dodatečných Telnet Options = v kontextu mechanismu escape sekvencí protokolu Telnet přidává pár kódů speciálně pro konfiguraci sériového portu (baud rate, formát znaku).
Kromě toho se někteří výrobci "terminálových miniserverů" uchylují k proprietární enkapsulaci transportu sériové komunikace nad TCP/IP - kde mají toto ovládání také pořešeno. Klientem je v tom případě obvykle proprietary "virtual COM port driver" do Windows (a k němu doprovodná konfigurační utilita).

Transport sériových dat nad TCP/IP není úplně transparentní v rovině časování. Pokud používáte virtuální sériák pod Windows a snažíte se, aby aplikace nepoznala, že nemá fyzický lokální COM port, může Vaše partyzánská činnost narazit na principielní vlastnost, že paketizace způsobuje nerovnoměrné rozestupy mezi znaky přijímanými v čase a prodloužení transportních latencí. Ovladač virtuálního COMu se obvykle nesnaží ve směru "příjem" reprodukovat rovnoměrné časování okamžiku příchodu jednotlivých znaků. Prostě přijme TCP paket a payload obsahující kdoví kolik znaků předá  jedním vrzem čekající funkci recv() nebo read() nebo jak se to v klientském OS jmenuje. Pravidla pro paketizaci ze sériové linky do TCP mívají terminálové servery do jisté míry konfigurovatelná: po jak dlouhé pauze od posledního znaku ukrojit a odeslat paket, resp. po kolika znacích/bajtech (maximem je zřejmě MTU nebo MSS nebo jak se tomu).

Skrz generickou paketizaci nemusí projít nastojato některé protokoly, které nad fyzickou sériovou linkou dbají na striktní časování. Třeba Modbus/RTU má prohlásit "konec rámce" po ekvivalentu 3.5 znaku od posledního přijatého znaku. Takovéhle protokoly mívají bratříčka, který s TCP enkapsulací nativně počítá - a potřebujete "o něco chytřejší" gateway, která mezi oběma enkapsulacemi bude provádět relay v souladu s normou pro daný protokol. Třeba Modbus/RTU vs. Modbus/TCP, IEC-101 vs. IEC-104 apod.
Inteligentní relay konkrétních fieldbusů tradiční terminálové servery neuměly - ale už dávno existují varianty firmwaru, které takové věci umí buď jako svou pevnou náplň práce, nebo jako konfiguračně volitelnou vlastnost...

Pokud potřebujete od "terminálového serveru" obecně "něco svého", řešíte spíš možnost, dopsat si do takové krabičky svůj vlastní software. Tzn. ke krabičce přistupujete spíš jako k obecnému počítači, ve kterém uvítáte otevřený Linux (nebo tak něco) do kterého si dopíšete co je potřeba. Někteří výrobci tomuto využití jdou naproti (tradičně Lantronix, zřejmě taky ATOP a u některých modelů Advantech), u ostatních nevím.

Případně, pokud Vaše koncové zařízení na sériové lince má nějaký opravdu primitivní protokol, možná byste sehnal "průmyslovou krabičku se sériovým portem", která by to dokázala nějak pozřít a podat dál skrz jednoduché HTTP GUI nebo třeba MQTT apod. Třeba váha pošle řetězec zakončený konkrétním znakem, buď v pravidelném časovém intervalu, nebo v reakci na událost, nebo v opravdu krajním případě na nějakou výzvu po sériové lince... Jako že by to šlo naklikat bez programátorské práce.

Terminálové servery velké jako krabičku sirek či cigaret dělá v dnešní době spousta výrobců. Lantronix je zřejmě pradědeček, tuzemského Papoucha už tu taky někdo zmínil, osobně znám pár dalších značek (Advantech, ATOP, Moxa, Korenix, Westermo) ... prakticky kdokoli v Číně kdo má nos mezi očima to vyrábí v garáži (a jeho babička). Samozřejmě je možné to postavit zcela po svém na dnešních otevřených platformách typu RPi nebo ESP32.

Není pravda, že "většina sériových donglů na USB má RS232 výstup na elektrických úrovních TTL". Pokud Vám to tak připadá, doporučuji Vám udělat si podrobnější průzkum trhu a pořádek ve zbožíznalství :-)

Sériový port se skládá obecně ze dvou čipů: UART (= posuvný registr) a "level shifter" = analogový opakovač, budič linky. Ideové blokové schéma s polaritami signálů najdete třeba tady (disclaimer: samožer).

UART je součástka společná pro RS232/422/485. UART s level shifterem se baví na elektrických úrovních TTL. Teprve level shifter vyrábí kýžené napěťové úrovně pro RS232 nebo 422/485 (nebo třeba M-bus, ten má taky zcela svoji fyzickou vrstvu). Kolmá poznámka: budu dále abstrahovat od detailu, že pro half-duplexní varianty sériové linky (RS485 a snad i M-bus) je vhodné mít z UARTu vyvedený signál TSRE aka TEMT, což třeba klasický TI 16C550A UART nemá.

Konkrétně RS232 má platné logické úrovně 3 až 15 Voltů od společné referenční země, bipolárně plus a mínus. Samotná zem (nula voltů) je zakázaný stav, zavřený ve Schmittově hysterzi. Existuje mnoho level shifterů, které si "divné" napěťové hladiny pro RS232 vyrábí z jediné vstupní napájecí větve (3.3V nebo 5V) on-chip RC nábojovou pumpou, a na výstupech pak vidíte třeba něco jako +/-6 nebo +/- 10 V. Nebo třeba jenom +/- 5V u některých USB donglů. Ale nenechte se zmást, těch "asi 5 Voltů" bývá bipolárně kolem nuly. Taky si všimněte, že polarita logických úrovní je na RS232 lince opačná (invertovaná), oproti interní TTL komunikaci mezi UARTem a level shifterem. Pokud tedy narazíte na dongle, který produkuje TTL (cca 5V / 0V), tzn. nedává zápornou úroveň, a přitom používá "polaritu jako RS232", tak se jedná o paskvil / zmetek / čínskou inovaci - osobně takových mnoho nevídám.

Ano, jsou k nalezení levné USB/serial dongly s výstupními úrovněmi TTL - protože postrádají level shifter. Třeba známá firma FTDI takové varianty nabízí, vedle bratříčků s level shifterem pro RS232 nebo RS485. Dongle bez level shifteru je v tomto případě řádně označen. Bavíte se v tomto případě navenek přímo s UARTem.

K čemu to?
Mnoho malých krabiček (levné routery) mají vyvedenu sériovou konzolu právě na úrovních TTL rovnou z UARTu. Proč: protože použitý SoC/CPU/MCU obsahuje UART nebo dva on chip, a servisní konzola je typickým účelem takové sériové linky. Ovšem ta linka zůstává za normálních okolností schovaná pod kapotou, a použije ji jenom znalý servisák, pokud za vzácných okolností není zbytí - možná ji použije fabrika pro upload firmwaru (pokud toto nemají ošetřeno jinak, třeba přes JTAG nebo SPI). Jedná se o využití na kratičkou vzdálenost, v kontrolovaných laboratorních podmínkách. Poškození "divočejším počasím" nebo nešikovností uživatele až tolik nehrozí. Pro tyto potřeby je škoda utratit dolar nebo dva navíc za level shifter.

USB/serial dongly jsou založeny na čipech několika populárních výrobců: FTDI, Prolific, Silicon Labs, WinChipHead, Moschip, teoreticky taky Exar něco má, možná někdo další by se našel...

USB/serial nemá svou vlastní třídu USB zařízení. Asi nejblíž je CDC-ACM, což je ale třída specificky pro USB modemy. Možná proto výrobci USB/UART čipů CDC-ACM obecně ignorují a používají každý své rozhraní na USB. Proto taky do Windows potřebujete pro USB/serial dongly vždy specifický driver od výrobce UART čipu - protože Windows neobsahují class-based driver, protože neexistuje jednotná třída rozhraní.

Kupodivu Linux obsahuje ovladač usbserial.ko. Tento ovladač sdružuje HW-specifické open-source drivery pro větší počet výrobců čipů :-) Je možné, že tam je nějaká synergie (sdílení kódu) v transportu dat mezi TTY subsystémem a USB endpointem... navenek se to chová úplně jako class-based ovladač :-) Prostě v Linuxu drivery pro USB/serial dongly naprosto neřešíte. Píchnete do počítače anonymní dongle co jste našli válet zaprášený v racku, a ejhle, kernel našel /dev/ttyUSB0, minicom funguje...

No a pokud se týče Androidu: ten má přece uvnitř linuxový kernel, žeano. Takže by snad měl automaticky obsahovat ovladače pro USB UARTy výše zmíněných "obvyklých podezřelých" výrobců...

Omyl vážení! Pardon - tahle zkušenost je už třeba 5 let stará, doufám že nekecám. Osobně do mobilních OS nefušuju - ale bavil jsem se chvíli s hobbíkem, který si pro Android programoval nějakou odposlechovou appku se sériovou komunikací. Android rozhodně vanilkový usbserial driver v kernelu neobsahoval. Naopak existovala/existuje na githubu open-source knihovna pro Javu, která s využitím tuším libusb obsluhuje USB UARTy několika značek. Původně třeba dvou, ale na Githubu projekt dosáhl už v té době několika forků, z nichž ty poslední podporovaly už asi 5 výrobců. Momentálně mi Google ukázal zřejmě "mateční rostlinu", které se evidentně dobře daří a má na okraji repa zmíněno 1600 forků...

= potřebujete v Javě na LinuxuAndroidu sáhnout na USB port? Zkompilujte si ze zdrojáků knihovničku, která ty čipy bude obsluhovat z user space... Sodoma a Gomorra. Naštěstí tyhle USB UARTy mívají docela dlouhé FIFO.
« Poslední změna: 23. 05. 2025, 11:11:54 od František Ryšánek »

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #18 kdy: 23. 05. 2025, 12:13:28 »
No a pokud se týče Androidu: ten má přece uvnitř linuxový kernel, žeano. Takže by snad měl automaticky obsahovat ovladače pro USB UARTy výše zmíněných "obvyklých podezřelých" výrobců...

Androidí kernel si zkonfiguruje ->zbuilduje výrobce mobilu/tabletu, aby tam měl moduly potřebné pro svůj HW (+ sem tam i nějaký off-tree) + něco navíc, co uzná za vhodné. Asi tento konkrétní (a tipuji si většina ostatních) neměl důvod zabírat místo moduly pro USB UART.

IIUC zakladní defconfig pro android je GKI , ke kterému si výrobci doplňují další moduly.

Zatímco https://android.googlesource.com/kernel/common/+/refs/heads/android-mainline/arch/arm64/configs/gki_defconfig má z množiny USB_SERIAL jen:

Kód: [Vybrat]
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_FTDI_SIO=m
můj distribuční /boot/config-5.15.0-92-generic v ubuntu/mintu má

Kód: [Vybrat]
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_SIMPLE=m
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CP210X=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_F81232=m
CONFIG_USB_SERIAL_F8153X=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_IUU=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_METRO=m
CONFIG_USB_SERIAL_MOS7720=m
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=m
CONFIG_USB_SERIAL_MXUPORT=m
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_QUALCOMM=m
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_SAFE=m
# CONFIG_USB_SERIAL_SAFE_PADDED is not set
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
CONFIG_USB_SERIAL_SYMBOL=m
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_WISHBONE=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
CONFIG_USB_SERIAL_UPD78F0730=m
CONFIG_USB_SERIAL_XR=m


K původnímu dotazu - i když tazatel dostane sériový port nějak po síti/wifině do androidu, stále nezná použitý (velmi pravděpodobně) proprietární protokol.
« Poslední změna: 23. 05. 2025, 12:17:59 od redustin »

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #19 kdy: 23. 05. 2025, 13:12:44 »
A nebylo by teda nejlepší na ten sériák váhy pověsit třeba RPi Pico / Arduino se síťovým rozhraním (ať RJčkem nebo wifi nebo klidně BT), které to bude číst a servírovat v nějaké dále snadno použitelné podobě?
Ad životnost SD karty... mělo by stačit malině zajistit kvalitní napájení (třeba v kombinaci s UPS HATem, malým aku, a obvodem který při odpojení vnějšího napájení zajistí korektní vypnutí.


Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #20 kdy: 23. 05. 2025, 13:55:55 »
K původnímu dotazu - i když tazatel dostane sériový port nějak po síti/wifině do androidu, stále nezná použitý (velmi pravděpodobně) proprietární protokol.

Některé váhy jdou "vnitřně přepnout" (kombinací tlačítek na zařízení nebo nakonfigurovat přes propojení s PC) aby na sériovém portu vraceli decimální číslo (např. XY v Kg). To pak lze jednoduše číst v rámci komunikace přes RS232 (pro test jsme používali obyčejnou Putty, zvážils a ono to poslalo (a v putty ukázalo) číslo odpovídající váze v Kg).
Nevím jak Dini Argeo... tam bude něco proprietárního, to ale lze jednoduše zjistit když se tazatel obrátí na dodavatele (nebo alespoň resellera pro ČR, např. https://www.zeman-vahy.cz).

Jinak i ten kabel s tím konektorem RJ11-RS232 je jen kabel pro komunikaci po sériové lince, imho tam budou zapojeny jen 3 drátky a ten RJ11 konektor je jen prostě použitej konektor.
Jak už tu zaznělo, řešením je propojit váhu se zařízením co umí číst na RS232 a tam si v rámci možností převést hodnoty a vystrčit je na síťové rozhraní.

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #21 kdy: 23. 05. 2025, 13:58:38 »
A nebylo by teda nejlepší na ten sériák váhy pověsit třeba RPi Pico / Arduino se síťovým rozhraním (ať RJčkem nebo wifi nebo klidně BT), které to bude číst a servírovat v nějaké dále snadno použitelné podobě?

Od začátku vlákna to bylo navrženo již minimálně třikrát :-)

Libor

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #22 kdy: 23. 05. 2025, 16:50:41 »
Něco velmi podobného jsem dnes řešil s kolegou.
Pokud se zakladateli vlákna nechce bastlit, tak doporučuji tento postup, který spočívá v nakoupení hotových věcí a tvorbě pouze SW aplikace.
Výhoda je ta, že pokud jakékoliv zařízení chcípne, jednoduše se koupí nové.

  • Z průmyslových vah většinou leze tupý ASCII řetězec, tj. číslo na displeji + nějaké pomocné znaky (znaménko, stabilita, CRLF na konci zprávy, atd.)
  • koupit nejmenší Unipi Patron, to má jak RS232, tak Ethernet
  • v tom naprogramovat zpracování ASCII zprávy z váhy (k dispozici je jejich SW Mervis, nebo Node-Red - Mervis neznám, takže bych použil Node-Red
  • Výstupní data by Node-Red pomocí nodu Dashboard 2 lifroval na web server Patronu
  • webová stránka se dá zobrazit kdekoliv na čemkoliv, stačí připojit pouze WiFi AP
  • dá se udělat Host WiFi i pro řidiče těch aut, stačily by na to 2 vhodně umístěné QR kódy (jeden pro přístupové parametry k Host WiFi a druhý s URL té webové stránky)

V případě potřeby je možnost systém jednoduše rozšířit o:
  • export záznamů o měření do SQL
  • připojení velkoplošného LED displeje po komunikaci
  • ... atd.

Neřeším žádné potíže s SD kartou jako u RPi, a mám (lehce) průmyslové řešení, pravda o něco dražší než RPi, ale lehce rozšířitelné a lehce znovupoužitelné.

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #23 kdy: 23. 05. 2025, 21:32:17 »
Nestačilo by vám něco takovéhleho, než zápasit s RPi, Arduinem, ESP a podobně?
https://obchod.hw.cz/eshop/cse-h25-zabezpeceny-ethernetovy-rs232-prevodnik/
Kablík RJ11-DSub je zbastlený razdva. A frontend řešte mimo převodník (jedná věc má mít přece jen jeden účel).
Lepší by byl možná tenhle ale je teď vyprodaný https://papouch.com/xport-p4721/?vid=2069 (Bacha , hledáte XPortSE, ten XE je na RS485ku)

_Jenda

  • *****
  • 1 624
    • Zobrazit profil
    • https://jenda.hrach.eu/
    • E-mail
Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #24 kdy: 24. 05. 2025, 03:45:42 »
Tohle v módu TCP server?
https://papouch.com/gnome232-prevodnik-ethernet-rs232-p4615/?vid=1709
No jo, ale jak se na to připojí "z mobilu" s co nejmenšími problémy, tj. bez vývoje vlastní aplikace na Android a iOS. Tj. nechce "hloupý TCP server", ale něco, na čem si může spustit minimalistický "webík" nebo případně "sériák na websockets" - což takováto krabička umět nebude, zatímco na normálním Linuxu je to 20 řádků Pythonu či jiného oblíbeného jazyka.

Osobně bych takovou věc dělal tak, že bych koupil Mikrotik hAP, na něj dal OpenWRT, připojil k tomu USB-sériák, a spustil na tom skript v Python + Bottle, který by vyčítal data a publikoval jako webovou stránku. Tento "odolnější router" mi přijde lepší než RPi s peklem SD karet.

https://www.alza.cz/mikrotik-rb951ui-2nd-d7774787.htm?gQT=2
https://www.alza.cz/ugreen-usb-2-0-to-rs-232-com-port-db9-f-adapter-cable-gray-1-5m-d6159307.htm

Přesně tento odkazovaný hardware mám k tomuto účelu vyzkoušený - používáme to jako vzdálenou nouzovou konzoli pro připojení na management průmyslového počítače.

Alternativa je mít ten "hloupý TCP převodník" a v síti nějaký jiný server, který s tím bude komunikovat.

CFM

  • ***
  • 130
    • Zobrazit profil
Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #25 kdy: 24. 05. 2025, 06:46:06 »
...
Souhlas. Nicméně vlastní android apku zmiňoval sám tazatel a trošku jsem předpokládal, že IT znalý člověk na řešení "linuxová krabička" přijde sám. Takže ať si vybere, nápadů je zde spousta.

Re:Konvertor z RJ11 (RS232/C) na Ethernet
« Odpověď #26 kdy: 24. 05. 2025, 09:50:07 »
Něco velmi podobného jsem dnes řešil s kolegou.
Pokud se zakladateli vlákna nechce bastlit, tak doporučuji tento postup, který spočívá v nakoupení hotových věcí a tvorbě pouze SW aplikace.
Výhoda je ta, že pokud jakékoliv zařízení chcípne, jednoduše se koupí nové.

  • Z průmyslových vah většinou leze tupý ASCII řetězec, tj. číslo na displeji + nějaké pomocné znaky (znaménko, stabilita, CRLF na konci zprávy, atd.)
  • koupit nejmenší Unipi Patron, to má jak RS232, tak Ethernet
  • v tom naprogramovat zpracování ASCII zprávy z váhy (k dispozici je jejich SW Mervis, nebo Node-Red - Mervis neznám, takže bych použil Node-Red
  • Výstupní data by Node-Red pomocí nodu Dashboard 2 lifroval na web server Patronu
  • webová stránka se dá zobrazit kdekoliv na čemkoliv, stačí připojit pouze WiFi AP
  • dá se udělat Host WiFi i pro řidiče těch aut, stačily by na to 2 vhodně umístěné QR kódy (jeden pro přístupové parametry k Host WiFi a druhý s URL té webové stránky)

V případě potřeby je možnost systém jednoduše rozšířit o:
  • export záznamů o měření do SQL
  • připojení velkoplošného LED displeje po komunikaci
  • ... atd.

Neřeším žádné potíže s SD kartou jako u RPi, a mám (lehce) průmyslové řešení, pravda o něco dražší než RPi, ale lehce rozšířitelné a lehce znovupoužitelné.
Tohle přesně jde s tim ESP, a troufnu si říct, že to bude stejně spolehlivý...Dělal jsem přes to monitorování včelí líhně a záznam dat do MariaDB, doma přes ESP hlídám teploměry přes Bluetooth a běží to 3roky v kuse...