HW serial port to virtual ?

Medo77

  • ****
  • 288
    • Zobrazit profil
    • E-mail
HW serial port to virtual ?
« kdy: 12. 06. 2019, 23:38:37 »
Ahoj.

Riesim trochu specificky problem, kedy hw ma sice origo driver pre W7 a vyssi, ale napriek tomu to cez RDP nekomunikuje. (w10 s tym problem nema, bohuzial zase ho kvoli specifickemu hw nie je mozne vsade nasadit).
Kolegu napadlo to "otocit", kedy sa lokalne "fyzicky" COM port presmeruje na virtualny. (tento virtualny uz cez RDP komunikuje).
Z toho, co sa podarilo funkcne otestovat pripadaju do uvahy akurat  Serial Port Driver Pro od Eltimy, a Serial Port Splitter od Fabuly. Bohuzial, su to celkom palky (120-200 USD).

Spoliehat sa nato, kedy (a ci vobec) vyrobca drivre opravi nechceme.

Nejaky odskusany tip, ktory by sa dal pouzit ako alternativa ? (free, resp. za rozumnejsie prachy).

Diky


Re:HW serial port to virtual ?
« Odpověď #1 kdy: 14. 06. 2019, 11:02:06 »
Dobrý den,

zkuste tohle: http://com0com.sourceforge.net/ trochu jsem s tím experimentoval, ale nakonec jsem použil Serial Port Splitter od Fabuly, potřeboval jsem spojit dva HW vstupy na jeden virtuální.

Tom

Re:HW serial port to virtual ?
« Odpověď #2 kdy: 14. 06. 2019, 11:34:49 »
"fyzický vs. virtuální", fyzický nejde protáhnout skrz RDP, virtuální (neupřesněný výrobce/model) ano.

Máte ověřeno, že je problém skutečně v kompatibilitě proti RDP v rovině softwaru? (Nemohu vyloučit, ale stojí to za prověření.)

Ten fyzický port máte jinak lokálně na PC normálně přístupný? Třeba v nějakém terminálu se s připojeným zařízením normálně bavíte? Není problém v tom, že při přístupu skrz RDP máte na tom fyzickém portu blbě fyzickou konfiguraci? (Baud, formát slova, flow control). Možná by stálo za to, zkusit zafidlat se system-wide defaulty v device manageru ve vlastnostech fyzického portu. (On si to normální software stejně nastaví po svém na otevřeném zařízení, ale kdyby třeba tohle nefungovalo skrz RDP transport...)

Co vlastně přesně znamená "cez RDP nekomunikuje" ?
Pokud správně rozumím, RDP na straně serveru vyrobí nový virtuální COM port?
Tento port jde na serveru otevřít např. v nějakém terminálu?
Hodí chybu hned při otevření zařízení?
Nebo se při otevření tváří spokojeně, ale data následně "jaksi netečou" ?

Medo77

  • ****
  • 288
    • Zobrazit profil
    • E-mail
Re:HW serial port to virtual ?
« Odpověď #3 kdy: 14. 06. 2019, 15:20:42 »
Pozdravim chlapcov zo Silikon Labs - kaslu na vyriesenie problemu :-)
Ovladac je urceny od W7 vyssie.
Po pripojeni HW vznikne v spravcovi zariadeni dalsi COm port (USB to UART).
Lokalne po spusteni manezovacej utility je mozne s HW komunikovat.

Vtip je v tom, ze je nutne s tymto hw komunikovat z aplikacie, ktora bezi niekde na serveri via RDP.

W10 funguje, W7 nie.
Ak si vytvorim ""bridge" pomocou z niektorej vyssie uvedenej utility (cize fyzicky com2 -> virtualny port com4), a odvolam  sa zo servera na ten com4, aplikacia zareaguje a komunikuje. Na com2 ani tuk.

Chlapi nam odpisali nieco v zmysle, ze treba si vypnut v ovladacoch enumeraciu, a bude to fungovat ...
Lenze ovladace su ich :-)

Riesenim by bolo si napisat/vygenerovat vlastne pomocou ich development kitu, ale to uz je na nas "vyssi divci" :-)

Vyskusal som mrte softov (vratane com0com), vedia vyhradne virtual-to-virtual, fyzicky-to-virtual vedia len tieto dva.

Vtip je v tom, ze cierneho petra mame v rukach my, a kupovat za 120 USD soft zakaznikom (lebo ma w7, a uprade kvoli hw nie je mozny) nie je lacna vec. (upgrade mozny je, ale chybaju ovladace, tym padom je pc polomrtve).

Re:HW serial port to virtual ?
« Odpověď #4 kdy: 14. 06. 2019, 21:23:37 »
Já bych Silicon Labs úplně nezatracoval. Jestli to není spíš věc kompatibility RDP mezi různými verzemi Windows navzájem.

"Aplikace zareaguje a komunikuje" je dost high-level popis problému.

Zopakuji některé své otázky:
  • Když ten port otevřete lokálně na Win7 v nějakém terminálu, třeba RealTerm nebo Putty, tak data protlačíte?
  • Zkoušel jste nastavit baud / formát slova / flow control v device manageru pod Win7 ?
  • Když v tom placeném softu propojíte virtuální na fyzický, kde nastavujete rychlost a další parametry fyzického portu? V tom "port forwarding" udělátoru, nebo si to konfiguruje remote aplikace sama skrz ten RDP tunel?
  • Osobně bych na to vyrukoval ještě s osciloskopem, abych viděl, jestli z toho fyzického portu leze *aspoň něco* - ale tuhle možnost každý nemá :-(

Navázat z fyzického na virtuální port by šlo kombinací com0com (virtual to virtual) + hub4com. Hub4com je user-space prográmek, který umí forwardovat data mezi dvěma porty. Takže Vám umožní spřáhnout jeden fyzický a jeden virtuální (který com0com dále otočí opět na volný virtuální). Bohužel mám obavu, že hub4com nepůjde provozovat "as a service". Kdyžtak zkuste nssm jako obálku, možná by to nakonec i šlo.

BTW zkompilovat driver ze zdrojáků má smysl tuším jenom v případě, že máte koupený taky platný certifikát na podepisování driverů :-( Kromě toho si nejsem jistý, jestli by "vypnutí enumerace" neudělalo víc škody než užitku.

Ještě mě napadá, nezkoušel jste hledat starší verze toho driveru? Silicon Image fungují už nějaký pátek...


Re:HW serial port to virtual ?
« Odpověď #5 kdy: 14. 06. 2019, 21:44:29 »
Ohledně těch ovladačů, na webu výrobce Silicon Labs vidím dvě různě staré verze, které jsou s Win7 kompatibilní, a pak mám ještě odkaz k jednomu dalšímu výrobci, který tyhle čipy taky používá - a vidím tam snad dvě nebo tři další verze.

Jo a s/Silicon Motion/Silicon Labs/g :-)

BTW co je to za protokol na tom sériáku, který se takhle tunelem skrz RDP snažíte přenášet?

Medo77

  • ****
  • 288
    • Zobrazit profil
    • E-mail
Re:HW serial port to virtual ?
« Odpověď #6 kdy: 15. 06. 2019, 08:31:57 »
Dakujem za odpovede.

Tie drivre z advatench vyskusam.)

Aky je to protokol ? Sice otazke chapem, ale neviem ci odpoviem spravne - komunikujeme standardne, ako hocijakym inym COM zariadenim (v tomo pripade je za tym este bezna tlaciaren v Epson mode). (prevodnik sa rozhone podla prikazu, ci je to prenho, alebo preposle dalej).

Kolega dostal z USa odpoved, ze enumeracia je to, co by sme malo vypnut. Chalan ale jednym dychom (slusne) dodal, ze oni sa s End usermi nebavia, a mame kontaktovat tvorcu-dodavatela. (stalo sa, netusi, co od neho chceme :-), ze to je pre neho spanielska dedina).

Kratke intro k programom - mame menezovaciu utilitu (nieco asi nad framework 4.7, ktora vie s HW citat/zapisovat).
Inac je mozne s HW komunikovat napriamo ako s tlaciarnou (cize hyperminal, atd..)
Utilitu skusame primarne, aby sme nehladali chybu v nasom programe, preco to nefunguje :-)

1. Neskusal som, predpokladam, ze ano, skusim.
2. Ano. (identicke s nastavenim v ovladacom programe).
3. Fyzicky ostal nastaveny ako aj menezovacia utilita, a virtualny som zreme nechal default ako mi program ponukol. Skusim sa s tym ese pohrat, ci sa nieco nezmeni. Aplikacia sa ocividne prisposobi druhej strane, aj ked virtualnom porte je nejaka blbost, ale v konecnom dosledku asi dostava povodny stav z fyzickeho portu (napr. fyzicky 19200, virtualny 9600, aplikacia 19200).

Ten HUB je zaujmavy, vyskusam. Ako sluzba nemusi bezat, staci ak sa spusti po nastartovani stanice (na strane servera to nepotrebujem).

Zreferujem. Este raz diky.

Re:HW serial port to virtual ?
« Odpověď #7 kdy: 15. 06. 2019, 13:58:11 »
I já děkuji za odpovědi...

Virtuální COM port je jenom potěmkinova vesnice, která předává jednotlivé bajty nebo řekněme dávky znaků o nějaké délce tam a zpátky. Samotný ten virtuální device nemá nějaký svůj nativní baud rate. Prostě pošlete write() nebo něco na ten způsob, virtuální COM port jenom zkopíruje data kam má (rychlostí jakou RAMka a sytémové sběrnice dovolí) a okamžitě se vrátí. Nějaký baud rate a třeba taky FIFO (které může přetéct) jsou vlastností fyzického UARTu, což je vlastně posuvný registr s konkrétními bitwise hodinami. Pokud virtuální COM dostane ioctl() k nastavení baudu apod., tak ho zcela jistě odkejve, ale otázka je, co s tím pokynem dál udělá - možná jenom pokrčí rameny. Mám pocit, že se takhle chovají třeba některé USB modemy, kde na hostiteli vidíte virtuální COM port, a v koncovém zařízení to končí zas jenom nějakým bufferem v RAM pro přebírání dat z USB endpointu. Windowsy nejsou schopny dostatečně jemného časování, aby zvládly softwarově časovat emulaci jednotlivých bitů nebo byť třeba i znaků (a pokud by ta možnost byla, tzn. hnát tu emulaci interruptem od nějakého časovače, bylo by to dost neefektivní.) Některé "transportní vrstvy", které končí z jedné strany fyzickým UARTem a z druhé strany virtuálním sériákem, umí "prosignalizovat" i ioctl() od virtuálního COMu pro nastavení baudu a formátu znaku - viz např. RFC2217 Telnet options, a většina proprietárních transportů "serial over TCP". Ono to možná nějak jde protáhnout i skrz com0com + hub4com, ale už si nepamatuju jistě.

Tlačiareň je v pohode, bere znaky jednotlivě tak jak přijdou, blok dat uzavírá newline případně form feed (nebo nějaký jiný způsob, jak říct "tato stránka je kompletní"). Tiskové jazyky nemívají timeout na "ticho na lince". V "průmyslu" se vyskytují na sériových linkách protokoly, které spoléhají na fyzický UART a mohou být citlivé na transportní latence, pauzy mezi znaky apod. (klasicky frame break timeout v Modbus/RTU) - ale to by nejspíš nevysvětlovalo Vámi pozorované chování.

Pod Windowsama trochu znám COM porty na úrovni Win32 API. Jednou jsem koukal někomu přes rameno, jak se pracuje s COM portama v C#.NET (pomocí objektů co Microsoft standardně přibaluje) a dost jsem žasl, jak to relativně čisté API známé z úrovně Win32 dokázali nalámat na menší kousky a zašmodrchat.

Možná ještě jako jeden další test bych navrhoval, sáhnout si nějakým terminálem na serveru na protunelovaný COM port :-)

Historicky si pamatuji situaci, kdy staré drivery pro sériový hardware pro Win2k nechodily pod XP, nebo se to rozbilo někde mezi dvěma service packy... zhruba v tom smyslu, že u víceportových RS232 karet chodil jenom první port, vyšší už ne, zařízení se tuším dalo otevřít ale při prvním pokusu o zápis nebo čtení zatuhlo navždycky apod. Taky to tehdy nějak souviselo s "enumerací" portů - ono to že se v device manageru objeví seznam ikonek pro jednotlivé porty, to je zřejmě třešnička na dortu, je to možná jenom "grafická nadstavba" či "další patro" nad interním seznamem zařízení v NT kernelu - prostě seznamy zařízení na několika úrovních abstrakce, musí na sebe nějak navazovat, a API pro jejich vzájemnou synchronizaci se mezi verzemi maličko změnilo, takže za určitých okolností se ty hračky rozsypaly...

Pokud je aktuální driver z webu Silicon Motion už reálně testovaný jenom v desítkách, tak je možné, že kompatibilita s Win7 už uplavala (klidně v nějakém obskurním detailu). A je šance, že starý ovladač z dob, kdy o desítkách nebylo vidu ani slechu, možná problém vyřeší. Podobné problémy s nesprávnými informacemi o kompatibilitě ovladačů vs. verze Windows (tehdy snad XP/7) jsem zažil před pár lety u FTDI... a taky tehdy mi pomohlo, schrastit starší driver.

(BTW upozorňuji na soukromou zprávu - doufám, že došla.)

Medo77

  • ****
  • 288
    • Zobrazit profil
    • E-mail
Re:HW serial port to virtual ?
« Odpověď #8 kdy: 10. 07. 2019, 14:32:52 »
Caf

Progres. Kolega na nich zadupal, poslali nejaky evaluation kit - ktory chodi ako vino.
Takze nieco zmrsil lokalny developer. Posielaju iny cip (v obehu su dve verzie), uvidime, ci je problem tam.
Mile je, ze sa aj takto velka firma rozhybala. Pr.del je, ze chlapci o takomto sposobe pouzitia (via RDP) nechyruju ..
(nepouziva sa to v ich koncinach takymto sposobom). (ale zaujalo ich to, a prilozili ruku k dielu).
Tak uvidime. Priebezne zreferujem.