Co je NVT ?
Protokol NVT, celým názvem Network Virtual Terminal (česky virtuální síťový terminál), je jednoduchý prostředek, jak definovanými příkazy v podobě hexa příkazů (kódů) nejen číst a řídit binární / dvoustavový vstupy a výstupy, ale i nastavovat RS-232 (rychlost RS-232, 9. bit, vyčítání sériového čísla modulu apod.). NVT je tedy způsob, jak do binárního datového toku doplnit řídící příkazy. K tomu pro přenos používá také protokol Telnet. Telnet tímto způsobem přenáší řídící sekvence, jako je CTRL-Pause, nastavování pozice kurzoru na obrazovce, přepínání typu terminálu atd. Jedná se o řídící sekvence v datovém toku po TCP/IP, kdy znak „FF“ v datovém toku uvozuje následnou řídící sekvenci, která má protokolem předepsaný formát. Kompletní popis a znění normy NVT, tedy protokol RFC 2217 najdete na http://www.hw-group.com/support/nvt/rfc2217.txt.
Pro vzdálené ovládání sériových portů definovala firma Cisco protokol RFC2217, který definuje příkazy pro změnu rychlosti sériového portu, dotaz na stav binárních signálů atd. Většinu těchto příkazů implementovala společnost HW server, resp. HW group, i do svých zařízení (například již zmíněný Butler nebo IO Controller). Standardní příkazy z RFC2217 pak ještě rozšířili o několik GPIO (General Pin Inputs Outputs) funkcí, které jsou dále uvedeny. Těmito funkcemi je možné ovládat vstupní a výstupní digitální piny zařízení typu Butler nebo I/O Controller. Toto rozšíření není žádný standard, ale v roce 2001, kdy společnost HW group tato rozšíření implementovalo při vývoji zařízení I/O Controller, nebyl žádný podobný vhodný standard znám. Přesto se výrobce snaží zůstávat kompatibilní s již existujícími normami, ale mnohdy je třeba kombinovat norem několik, protože některá rozšíření jsou pro tyto aplikace zbytečná, zatímco jiné funkce potřebujeme, a proto je daná funkce jediná, co z nějaké normy podporujeme. Většinou se však jedná o rozšíření z RFC2217 (již zmíněné ovládání vlastností sériového asynchronního přenosu) o ovládáni GPIO (I/O piny procesoru, nebo dalších zařízení), případně některé další.
OSI model NVT komunikace, která využívá TCP/IP protokol
Jak to funguje ?
Jedná se o řídící sekvence v datovém toku po TCP/IP, kdy znak „FF“ v datovém toku uvozuje následnou řídící sekvenci, která má předepsaný formát. Je-li v datech obsažen znak „FF“ (255 decimálně), musí jej vysílací strana zdvojit, přijímací strana naopak zdvojený znak „FF“ automaticky převede na jeden znak „FF“. Pokud je na obou stranách podpora NVT, přijatý samostatný znak „FF“ vždy uvozuje řídící příkaz.
Pro potřeby ovládání komunikačních portů a rozhraní je v NVT k dispozici příkaz COM-PORT-OPTION (hodnota Dec 44, resp. Hex 2C) následovaný dále popsanou sekvencí řídících příkazů (viz tabulka níže).
Příklady některých NVT podpříkazů definovaných v příkazu COM-PORT-OPTION.
Popis podpříkazů pro ovládání GPIO - 50, 51, 52 (32 .. 34 hex)
Pro přímé ovládání I/O pinů používáme pevně dvoubajtový podpříkaz GPIO – 50 nebo 51 řazený za příkaz COM-PORT-OPTION (hodnoty Dec 44, resp. Hex 2C).
Čtení vstupů a nastavení výstupů - řídící příkaz s hodnotou 50 (32 hex)
- Přečtení vstupů - žádost o vrácení hodnoty XX přítomné na vstupech
GPIO.
Příklad:
Odchozí sekvence FF FA 2C 32 00 FF F0
I/O Controller či Butler vrátí : FF FA 2C 96 YY FF F0 - Přečtení výstupu - žádost o vrácení okamžité hodnoty XX výstupního
registru, podle něhož se nastavují výstupní piny
Příklad:
O dchozí sekvence FF FA 2C 32 30 FF F0
I/O Controller či Butler vrátí : FF FA 2C 97 YY FF F0 - Změna nastavení výstupu - žádost o změnu hodnoty výstupního registru,
podle něhož se nastavují výstupní piny
Příklad:
O dchozí sekvence FF FA 2C 32 XX FF F0
Zařízení (IO Controller) vrátí : FF FA 2C 97 YY FF F0
Na pozici označené jako XX se pak může nacházet některých
z následujících čísel:
• 16 .. 23 (10 .. 17 hex) – nastav výstupní bit 0..7 na log. 1
• 32 .. 39 (20 .. 27 hex) – nastav výstupní bit 0..7 na log. 0
Na pozici YY je skutečná hexa hodnota na celém 8-bitovém výstupním portu, tedy hodnota typu 00 až FF.
Praktická ukázka NVT ovládání GPIO (vstupů / výstupů) prostřednictvím zasílání příkazů z TCP Client terminálu (program Hercules).
Automatické nastavení hodnoty - řídící příkaz s hodnotou 51 (33 hex)
Tento řídící příkaz nastaví 8bitovou hodnotu na 8vývodový výstupní port (v registru výstupního portu). V odpovědi vrátí tutéž hodnotu, přečtenou z vnitřního registru.
Příklad:
Odchozí sekvence FF FA 2C 33 YY FF F0
Zařízení (IO Controller) vrátí : FF FA 2C 97 YY FF F0
Na pozici YY je celá 8-bitová hexa hodnota na celém 8-bitovém výstupním portu, tedy hodnota typu 00 až FF.
Automatická indikace změny stavů vstupů - řídící příkaz s hodnotou 52 (34 hex)
NVT ovládané zařízení (např. I/O Controller nebo Butler od HW serveru) může samočinně posílat hodnotu na vstupech, pokud došlo ke změně stavu, nebo po zapnutí napájení. Tento příkaz s hodnotou 52 (34 hex) neočekává odpověď, protože samotné hlášení je vlastně nevyžádanou odpovědí, které nepředcházela žádná výzva.
Příklad:
I/O Controller pošle : FF FA 2C 34 YY FF F0,
kde hodnota YY je aktuálně platná 8-bitová hodnota na celé vstupním portu.
Před příkazem s hodnotou 52 (34 hex), často předchází sekvence „FF FA 2C 32 00 FF F0“, která je žádostí o hodnotu pro výstupy I/O Controlleru. Jakmile se na tento příkaz odpoví nastavením výstupu I/O Controlleru či Butleru (např. „FF FA 2C 33 FF FF F0“), již se posílá pouze sekvence „FF FA 2C 34 ZZ FF F0“, kde ZZ je nová hodnota vstupů protistrany.
Poznámka: Funkce samozřejmě funguje stejně jako vstupní data ze sériového portu,
to znamená, že pokud je nastaven režim TCP Client/Server (uvedena IP adresa
protistrany) a zapnuté NVT, při přijetí 1 bajtu z sériového portu, stejně tak
jako při
změně na bin. vstupech, se zařízení pokusí sestavit TCP spojení s odeslat informaci
o změně stavu vstupu. Po otevření TCP spojení, ale pošle POUZE v té chvíli aktuální
stav vstupů, nikoliv celý záznam změn během neotevřeného TCP spojení!
Změna rychlosti sériového portu RS-232 / RS-485 přes NVT
Pomocí NVT příkazů také lze u zařízení s RS-232 nebo RS-485 zaslat žádost o změnu nastavení jeho baudové rychlosti. Aktuální rychlost sériového portu zjistíte odesláním hodnoty 00 00 00 00, kdy v odpovědi přijde aktuální nastavená rychlost. Pokud se přímo odešle jakákoliv jiná hodnota, server na ní nastaví rychlost sériového portu. Ta odpovídá zaslané hexa hodnotě převedené do desítkové soustavy.
Příklad:
Odchozí sekvence: FF FA 2C 01 00 00 00 00 FF F0
I/O Controller vrátí : FF FA 2C 65 00 00 25 80 FF F0
Po převodu 00 00 25 80 na desítkovou soustavy => aktuální rychlost je 9600
Bd.
Jak trvale udržet TCP spojení s NVT zařízením - funkce Keep Connection
Pro udržení aktivního spojení, aniž by vypršel timeout 50 sekund (pokud neběží datový tok), lze použít volbu “K: Keep connection” v setupu zařízení. Volba funguje pouze, je-li zapnuta podpora NVT. Spojení je udržováno posíláním příkazu NOP (sekvence FF F1) ze strany I/O Controlleru každých cca 5s.
Závěr
NVT představuje efektivní a hlavně na operačním systému a zařízení nezávislý způsob vzdáleného řízení, čtení a ovládání vstupů, výstupů a nastavení sériových portů. Proto ho najdete implementovaný u většiny přes ethernet vzdáleně ovládaných zařízení (krabiček).
V některém v následujícím článku si pak ukážeme použití NVT u nových krabiček Butler z dílny společnosti HW server, kde dokonce nemusíte se samotnými NVT příkazy přijít do styku a přesto jej můžete využívat.
Antonín Vojáček
DOWNLOAD & Odkazy
- Stránky HW serveru - www.hw.cz
- Stránky serveru HW group - www.hwgroup.cz
- Kompletní popis a znění normy NVT, tedy protokol RFC 2217 - http://www.hw-group.com/support/nvt/rfc2217.txt
- Další články a testy najdete na stránkách serveru automatizace.HW.cz