Virtual COM
TomoT Aqarel
xp.robotika na gmail.com
Neděle Březen 10 15:32:57 CET 2019
Zdravím,
stejný problém jsem řešil před několika lety. Kromě detekce nově
připojených/odpojených zařízení jsem potřeboval zobrazovat uživateli
podrobnější informace o COM portu (Výrobce, popis zařízení, typ zařízení
- HW COM port, Virtuální, ...).
Řešil jsem to použitím služby WMI (Windows Management Instrumentation) -
ta je standardní součástí systému. Knihovny pro práci s WMI jsou
součástí .NETu - namespace System.Management. Pomocí dotazů podobných
SQL můžete dostat třeba seznam všech COM portů včetně vlastností, které
vidíte v Device Manageru. Kromě toho si můžete vytvořit trigger na
určité události - připojení/odpojení COM portu - WMI vytvoří eventu, na
kterou můžete jednoduše reagovat ve vašem kódu.
Já pak pomocí WMI implementoval funkci auto připojení a otevření COM
portu - tedy pokud někdo odpojil převodník z počítače a pak byl připojen
zpět, aplikace byla schopná automaticky znovu otevřít COM port.
Fungovalo to bez ohledu zda-li se změnilo číslo COM portu (koukal jsem
na ID zařízení a ne na číslo COM portu).
Spolehlivě mi to fungovalo pro různorodé zařízení - HW COM porty,
virtuální COM porty (FTDI, ), COM0COM, ... což při při práci s registry
se říct nedalo...
Co mi vadilo na WMI tak byl dlouhý start služby a zpracování dotazů
trvalo také dost dlouho - velmi to záleží jaké a jak podrobné informace
budete potřebovat.
Na seznámení s WMI je perfektní aplikace
https://archive.codeplex.com/?p=wmie která vám přímo dokáže vytvořit
ukázkový kód s dotazem.
Každopádně doporučuji v aplikaci implementovat funkci, která zavře COM
port, jakmile detekujete že zařízení není odpojeno. Po opětovném
připojení, bude mít zařízení přidělený stejný COM port (většinou).
S pozdravem Milan
Dne 10.3.2019 v 11:47 Martin Locker napsal(a):
> Zdravím,
>
>
> lze nějak detekovat v aplikaci, resp. ošetřit násilné odpojení USB zařízení (vytažení kabelu), které funguje jako Virtual COM?
> Zjistil jsem, že v mé aplikaci (C#) to samozřejmě spadne na přístupu k portu, ale co je horší. Ani po připojení zařízení se to nevzpamatuje, v původním usb portu to již není win detekováno. V jiném usb se to ale najde. Fungovat to začne v daném portu až po restartu win7.
> Tedy:
> 1. jak to rozumně ošetřit v aplikaci, aby to nespadlo?
> 2. jak zajistit, aby to windowsy pro opětovném připojení do původního portu detekovaly?
>
>
> Díky za pomoc
>
>
> Martin L.
>
>
>
>
>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list