Aktualizováno v srpnu 2019

      
 

   Základy při používání sériového portu
 
Úvod

Ani letos (2019), ani v letech minulých nedošlo k tomu, že by byl hromadně nahrazen sériový přenos dat v průmyslových, měřicích a radioamatérských systémech. Sériový přenos dat lze dnes realizovat pomocí rozhraní USB, pomocí sériového kanálu Bluetooth, pomocí bezdrátových zařízení, která nám umožňují přenos sériových kanálů pomocí LAN sítí (např. v režimu AP, STA, kombinaci obojí). Na předchozích stránkách jsem též uvedl popis jednoduchého povelovacího routeru, který využívá komunikace typu client-server a směruje povely na konkrétní sériové porty.

Rovněž v úvodu zmíním historické kořeny sériového přenosu dat mezi různým zařízením. Přenos byl různým způsobem standardizován (např. CCITT), varianta RS-232C byla definována už v roce 1969. Zatímco v oblasti osobních počítačů již toto rozhraní ustoupilo různým typům USB, tak v oblasti průmyslových aplikací se kvůli některým specifickým vlastnostem toto rozhraní drží. Včetně modifikací RS-232, RS-422, RS-485. Na posledních modelech PC byla sériová linka vyvedena na konektorech D-SUB typu DE-9M (samec). Na noteboocích potom používáme nejrůznější převodníky USB na RS-232. Po zapojení převodníku se nám objeví sériový port ve Windows ve "Správci zařízení" jako konkrétní COMxx, např. COM3. V Linuxu se nám objeví první převodník jako /dev/ttyUSB0, druhý jako /dev/ttyUSB1, a tak dále. Pokud spouštíme Windows programy v Linuxu pod runtime Wine, objevoval se mi první převodník jako COM33, druhý jako COM34, a tak dále.

Předmět článku

Komunikaci skrz sériové porty používám mnoho let. Vždy mě překvapí, v čem si lidé vyrobí zbytečné problémy. Pokud tento přenos používáme, je dobré znát alespoň tři nebo čtyři základní principy.
Jak jsem už napsal, firma IBM používala tento přenos pro propojení terminálu a modemu. Terminálu se říkalo DTE (Data Terminal Equipment) a modemu se říkalo DCE (Data Communication Equipment). A platilo, že u konektoru D-SUB typu DE-9 zařízení DTE vysílá na kolíku 3 a přijímá na kolíku 2. Zařízení DCE vysílá na kolíku 2 a přijímá na kolíku 3. Nevěřili byste, jaký zmatek právě toto vneslo do sériové komunikace. Naprosto zbytečně. Ale aby bylo ve věci alespoň trochu jasno, budu se věnovat teď a tady sériovému přenosu, který probíhá po 3 vodičích. Vodiče označíme jako RX, TX a signálová zem. Takový přenos má několik omezení. Neprobíhá po tzv. symetrickém páru. Přenos bude proto náchylný na rušení a vzdálenost mezi komunikujícími body bude omezena. Konkrétní převodníky budou používat různé napěťové úrovně na signálních vodičích. Tak to prostě je. V tomto článku se budeme věnovat přenosům, které využívají převodníků, které mají vyvedené signály na konektory DE-9M (samec). Zařízení na přenos dat vypadají například takto:
 
Zařízení
  
Relace pro přenos dat, kterou jsme si vymezili v předchozím odstavci, kdy data posíláme mezi 2 zařízeními DTE (tedy např. notebooky s převodníky) vypadá takto:
  Relace
Překřížení vodičů RX a TX - pozorně se dívejte, špička 2 vede do špičky 3 druhého zařízení, je dáno tím, že se normálně prodávají převodníky jen s jedním způsobem zapojení.
Pokud druhé zařízení není PC se sériovým portem nebo převodníkem, je to jinak - viz dále. Např. můj Kenwood, typ TS-2000 je zakončen samcem, ale špičky RX a TX má zapojené tak, aby se připojoval přímým kabelem, který má špičky zapojené tak, že č. 2 jde do č. 2 a č. 3 jde do č. 3. Je tedy zapojen jako tzv. modem (zařízení DCE).

Některá zařízení, která jsem vyzkoušel, např. Bluetooth zařízení se tvářila taky jako modem (DCE) zařízení. Prakticky se to poznalo snadno. Přenos dat s tzv. null modemem (kříženým kabelem) nefungoval. Bylo třeba použít přímý propojovací kabel pro propojení DCE-DTE zařízení:
DCE-DTE kabel
 
 Ale to už vám na stole budou ležet dva typy kabelů. Když si je nepopíšete, možná budete tápat, protože u sériového přenosu se též nastavuje několik základních parametrů (rychlost, počet stop bitů, parita, řízení datového toku). No, to už je docela dost kombinací, že? A teď si přidejte k přenosu bezdrátová zařízení místo kabelů. Abych si otestoval, zda mi spolupracují různé převodníky, napsal jsem si jednoduchý program. Jde o tzv. portable verzi. Stačí odzipovat, nakonfigurovat a spustit ve Windows nebo v Linuxu s Wine.
 
  Test Win
  
  Test Linux
Program funguje tak, že sliderem nastavím hodnotu jednoho bajtu a tu pošlu do jednoho sériového převodníku. Pokud propojím kříženým kabelem s druhým převodníkem, uvidím, zda byl bajt přenesen. Mimo slideru jsou v programu vidět displeje pro nastavenou (vysílanou) hodnotu a pro přijatou hodnotu. Pokud zkoušíme program mezi dvěma PC, spustíme a nakonfigurujeme ho na každém. Potom posíláme bajt z jednoho PC do druhého.

Konfigurace programu se dělá v tzv. konfiguračním souboru. Jeho název a umístění je vidět z obrázku dole. Program lze stáhnout zde (portable verze). Konfigurace spočívá v nastavení portů převodníků tak, jak je najdeme např. ve správci zařízení.
Konfigurační soubor
 
Program jsem namaloval a zkompiloval v ProfiLabu. Asi tak za čtvrt hodiny. Kdysi jsem měl podobný, napsaný ve Visual Basicu. Ušetřil mi hodně bádání nad různými kabely i bezdrátovými modemy. Jednoduše musíte něčemu věřit. V tomto případě, že skutečně správně vysíláte do jednoho portu a na stejném nebo jiném portu přijímáte. Schéma je zde:
   
Schéma
  
Popsaným způsobem si vždy ověřuji, zda mi relace pro přenos dat opravdu data přenáší. Popsaná zařízení, kabely a metodu používám v případech, kdy jde o pouhé propojení dvou převodníků, v případě použití transparentní bezdrátové linky s bluetooth, v případě použití vestavěného bluetooth, které komunikuje proti modemu bluetooth, v případě sériových přenosů mezi virtuálními porty přes AP a protokol TCP. Funguje i pro ověření převodníků s TTL úrovněmi, které mají obvykle obrácené logické úrovně mezera/značka.

Poznámky:
1. Jednoduchý program vysílá vždy jen jeden bajt. Vysílání opakuje asi 3 x za sekundu. To je dané frekvencí generátoru G1.
2. Program přijímá bajt asi 100 x za sekundu. To je dané nastavenou frekvencí G2.
3. Nemusíme vystačit s testem, kdy přenášíme jeden bajt. Zde však lze stáhnout namalovaný zdrojový soubor a nastavit si u prvků CBS1 a CRB2 např. preambuli protokolu (znaky před a za datovým bajtem). Budete však k této úpravě potřebovat prostředí ProfiLab Expert 4.
4. Oblíbenost (nenahraditelnost) sériového přenosu je v jeho jednoduchosti. Pokud nepotřebujeme řídit datový tok, potom jde o pouhé propojení RX a TX.
5. Sériový přenos je v moderních programovacích prostředích (Gambas 3, Visual Studio, ProfiLab Expert, Xojo) implementován formou zapouzdřených komponent. Již jsem v úvodu do programování popsal, jak se s nimi tím nejjednodušším způsobem dělá.
6. Sériový přenos je implementován i do prostředků pro programování jednočipových mikropočítačů. Např. PICAXE, Bascom, apod.
7. Sériový přenos z Raspberry (nebo Asus Tinker Board, obecně SBC) jsem upřednostnil před programováním tzv. IO pinů. Jak si udělat expandér na desítky nebo stovky IO pinů s využitím sériové linky jsem už také popsal dříve.

Co při zkouškách tímto jednoduchým prográmkem zjistíme?

1. Zkouška je založena na základním principu, tj. na přenosu jednoho bajtu. Pokud program nakonfigurujeme tak, aby port vysílače a port přijímače byl stejný a propojíme RX a TX (např. propojkou RX-TX, která je vidět na fotografii), vyzkoušíme funkci převodníku USB - RS232.
 
  Jeden převodník
2. Pokud program nakonfigurujeme tak, aby port vysílače a přijímače byl rozdílný (a odpovídal 2 zasunutým převodníkům), vyzkoušíme, zda jsou oba převodníky propojitelné křížovým kabelem (nulovým modemem), zda si jejich použité napěťové úrovně vyhovují a jsou schopné přenést bajt.
 
Dva převodníky
3. Pokud při sériovém přenosu musíme použít dlouhý kabel, ať již je zapojen jako nulový modem nebo přímý kabel, vyzkoušíme snadno takový kabel se dvěma převodníky USB - RS232. Nulový modem zapojíme přímo, přímý kabel zapojíme tak, že ho propojíme propojkou samec-samec (ta zrovna není na fotografii, všechny byly v době focení na dílně) s nulovým modemem a zkoušíme přenos v této kombinaci.

4. Pokud ladíme sériový přenos např. s mikropočítačem PICAXE, máme opět více možností, jaký bude pro přenos použitý převodník. Můžeme použít zapojení doporučené výrobcem PICAXE. To využívá rozšířeného převodníku USB na RS232 a dvou rezistorů u čipu PICAXE. Tímto řešením lze čip PICAXE též programovat. Nebo můžeme použít malý a levný převodník (asi se používá také pro Arduinu - nevím, Arduino nepoužívám), který má vyvedené jen TTL úrovně (mám převodníky 5V i 3.3V). Ten je pro přenos dat do PICAXE také použitelný, ale musíme sériový port naprogramovat pro obrácené úrovně mezera/značka. Viz obrázek dole, řádek programu č. 6 a poznámky na řádcích 7 a 8. Např. N2400 je nereverzní přenos, tedy takový, jako u normálního převodníku USB na RS232 a T2400 je použit pro převodník USB na TTL serial. O sériové komunikaci do PICAXE jsem psal zde.
 
PICAXE
  
USB RS232 TTL
 
Pro mnoho účelů je potřebné mít zvládnutý transparentní přenos dat po sériovém rozhraní. Přesto se doba změnila a pro komunikaci mezi počítači je velmi účelné použít komunikaci po počítačové síti (WiFi). Při psaní vlastních aplikací rovněž použijeme tzv. TCP klienta, který se bude připojovat k vhodnému serveru. Konverzi dat z TCP do RS232 můžeme dělat různě. Ale o tom je další článek.

Pokud se zajímáme o realizaci přenosu RS232 skrz Bluetooth zařízení, pak úvod do problematiky je zde.
 
TU 73, Mira, ok1ufc