Moravské přístroje, a. s., zdroj: https://www.mii.cz/art?id=237&lang=405, vytištěno: 19.06.2024 23:21:58

Hlavní stránkaProduktyPrůmyslový počítačový systém DataLabJednotky vstupů a výstupů DataLab

Spolehlivost USB komunikace v náročných průmyslových podmínkách
Jak je to s vlivem rušení na přenosy dat po USB? Může být přenos zarušen a pokud ano, za jakých podmínek? Jaké jsou projevy rušení u jednotek DataLab IO/USB?

Pokud jsou USB zařízení používána v kanceláři, problémy s rušením prakticky nemohou nastat. Pokud ale přeci jen zařízení vypoví službu, není problém USB tiskárnu či scanner vypnout a opět zapnout. Vede-li ale USB kabel v rozvaděči kolem silových rozvodů s indukční zátěží, jsou podmínky elektromagnetického rušení mnohem svízelnější. Navíc u průmyslové aplikace není možné prostě odpojit USB jednotku a opět ji připojit v případě selhání komunikace.

První problém s USB komunikací byl zaznamenán u aplikace, u níž byly USB kabely vedeny kolem rozvodů silového ovládání ventilů. Důvod výpadků komunikace byl nakonec prostý i když obtížně naleznutelný — použitý USB kabel měl přerušené stínění (oba USB konektory mají mimo 4 datových a napájecích vodičů ještě kovové stínění, které musí být v kabelem propojeno). Po nahrazení vadného kabelu už k problémům nedochází.

Druhý problém se objevil u jednotky DataLab IOm/USB připojené k notebooku. I při použití dobrého kabelu se projevily problémy s rušením a výpadky komunikace při zapínání a vypínání elektrických spotřebičů v blízkosti počítače a kabelu. Tyto problémy ale byly vázány výhradně na konkrétní notebook a na jiném počítači se je nepodařilo reprodukovat.

Tyto dva případy nás vedly k rozsáhlým testům a měřením a k implementací obranných mechanismů proti rušení. Zjistili jsme že:

  • Abychom vůbec mohli problém navodit, museli jsme u jednoho USB kabelu přerušit stínění. Se správným USB kabelem nebylo možné problémy navodit (což odpovídá prvnímu popsanému případu), i když jsme spínali nejrůznější zdroje, transformátorové páječky a podobně. Velmi „pomohlo“ zapojovat tyto spotřebiče přes velmi dlouhou prodlužku navinutou na cívce.

  • Výpadky komunikace nebyly nikdy způsobeny selháním firmware přímo v jednotce DataLab IO/USB. Ten pracoval vždy bez přerušení. Ve všech případech selhala USB komunikace na straně PC (USB Host).

  • Výpadky nastávaly výhradně na určitých typech počítačů. Podařilo se je navodit pouze na počítačích s čipovými sadami Intel. U počítačů s čipovými sadami VIA se problém navodit nepodařilo.

Tyto poznatky umožnily provést nezbytné úpravy v ovladačích jednotek DataLab IO/USB a problémy s rušením USB komunikace tak prakticky eliminovat:

  • Nový ovladač (pro Control Web i ovladače Active X) nepřerušuje komunikaci a neodpojuje jednotku po výskytu chyby. Ze samotnécho kódu chyby lze jen těžko odhalit příčinu, neboť rušení může zasáhnout v různých okamžicích a může vziknout řada chyb (např. „CRC Error“ nebo „A device attached to the system is not functioning“). Kód chyby se také liší v závislosti na implementaci USB Host (na typu čipové sady).

  • Obnovení pokusů o komunikaci (opětovné zaslání požadavků) i po nahlášení chyby zpravidla vede k bezproblémovému pokračování běhu, výjimečně je ale USB Host a jeho ovladač v takovém stavu, že to již není možné. V takovém případě dojde po 2 sekundách k automatickém odpojení zařízení od USB sběrnice a jeho opětovnému připojení. Z hlediska systému je to stejné jako by bylo jednotka fyzicky odpojena a opět připojena. Přitom hodnoty výstupních logických a analogových signálů v jednotce zůstanou zachovány.

Po provedení těchto úprav se již žádným způsobem nepodařilo komunikaci natrvalo zastavit bez ohledu na poškozené kabely a velmi nevybíravé chování k napájení. Maximálně došlo k 2s přerušení komunikace. Je ale třeba mít na paměti, že při použití správného kabelu k této situaci prakticky nedochází.

Tyto funkce jsou k dispozici od verze 1.5 systémového ovladače 'dlusb.sys' a také ovladače pro Control Web a Active X 'dldrv.dll'. V každém případě je potřebné dbát na to, aby oba soubory byly alespoň této verze, nahrazení pouze 'dlusb.sys' či pouze 'dldrv.dll' poslední verzí nestačí.