Ú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:
|
|
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: |
|
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í: |
|
|
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. |
|
|
|
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í. |
|
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:
|
|
|
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. |
|
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. |
|
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. |
|
|
|
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. |
|
|
|