DBNET - popis protokolu

Tento dokument popisuje protokol DB-Net® firmy AMiT® s.r.o.

Copyright © 2000, AMiT ® s.r.o. Chlumova 17, 130 00 PRAHA 3, Česká republika
tel.: +420 2 2278 1516, +420 2 2278 2074, +420 2 2278 0100
fax: +420 2 2278 2297
E-mail: amit@amit.cz

Kollárova 6a, 612 00 BRNO, Česká republika
tel.: +420 5 4121 7220, +420 5 4921 0403
fax.: +420 5 4921 0403
E-mail: amitbo@amit.cz

Starobělská 13, 700 30 OSTRAVA, Česká republika
tel.: +420 69 6708 300
fax.: +420 69 6708 300
E-mail: amitova@amit.cz

WWW: http://www.amit.cz

Veškerá práva vyhrazena. Tento dokument může být kopírován a rozšiřován za následujících podmínek:

  1. Celý text musí být kopírován bez úprav a se zahrnutím všech stránek.
  2. Všechny kopie musí obsahovat označení autorského práva společnosti AMiT s.r.o. a veškerá další upozornění v dokumentu uvedená.
  3. Tento dokument nesmí být distribuován za účelem dosažení zisku.
  4. AMiT spol. s r.o. nepřejímá žádné záruky, pokud se týče obsahu této publikace. AMiT spol. s r.o. si dále vyhrazuje právo měnit obsah dokumentace bez závazku tyto změny oznámit jakékoliv osobě či organizaci.

AMiT je registrovaná ochranná známka. V publikaci použité názvy produktů, firem apod. mohou být ochrannými známkami nebo registrovanými ochrannými známkami příslušných vlastníků

Obsah

Fyzická linka

Db-Net je asynchronní síťový komunikační protokol implementovaný na lince RS485 (spojení více stanic do sítě) nebo na lince RS232 (spojení typu bod-bod) resp. RS422.

Topologie

Protokol je obecně síťový, tj. umožňuje spojit více stanic navzájem do sítě. Použitá topologie vychází z definice linky RS485, tedy jde topologii typu sběrnice (BUS).
Linka RS232 (RS422) je v tomto uspořádání považována jenom za speciální případ sítě tvořené dvěma stanicemi.

Řízení sběrnice a přenos dat

Přenos dat probíhá metodou žádost-odpověď (REQUEST-ANSWER).
Tedy stanice s oprávněním vysílat vyšle rámec s požadavkem a očekává odpověď od protistanice. Kterákoliv stanice jež právě nemá token (viz dále) může kdykoliv obdržet žádost, kterou musí zpracovat a vyslat neprodleně odpověď.

Přístup stanic na sběrnici je řízen metodou předávání tokenu v logickém kruhu (TOKEN-RING), protokol je tzv. multimaster-multislave.
Tedy jednotlivé stanice si mezi sebou předávají token. Stanice která má token může začít vysílat žádost na přenos dat - stává se master (řídí celou síť). Po zpracování svých komunikačních požadavků předá token dál - stane se slave (pouze odpovídá na žádosti).

Zjednodušený schematický příklad řízení TOKEN-RING a přenosu datREQUEST-ANSWER

Rámec Token Žádost Odpověď Žádost Odpověď Token Token Žádost Odpověď Token
pro st. 1 pro st. 0 od st. 0 pro st. 2 od st. 2 pro st. 2 pro st. 0 pro st. 2 od st. 2 pro st. 1

Master je

stanice 0

stanice 1

stanice 2

stanice 0

Znak

Formát jednoho znaku je : 8 bitů, sudá parita, 1 stop bit.

Komunikační rychlost

Komunikační rychlost je volitelná ze čtyř rychlostí : 9 600, 19 200, 38 400 a 57 600 Bd.

Čísla stanic

Každá stanice má číslo (je jednoznačně určena číslem) v rozsahu 0÷31. Na jedné síti stanic musí být zabezpečeno jednoznačné očíslování připojených stanic.

Časování

Jsou definovány tři druhy časů:

  1. T syn
    Používá se k oddělování rámců (viz dále). Je roven době odpovídající 3 znakům:
    Rychlost (Bd) T syn  (ms)
    9 600 3,438
    19 200 1,719
    38 400 0,859
    57 600 0,573
  2. T sl
    Slouží jako maximální doba čekání (timeout) na reakci protistanice (viz dále). Není závislá na nastavené rychlosti a je pevně určena jako34,375ms.
  3. T to
    Slouží jako maximální doba čekání (timeout) před převzetím řízení sítě(viz dále). Je různá pro různé stanice a závisí na jejich čísle
    T to = (20+ČísloStanice) x T sl
    Minimální hodnota T to je (pro stanici 0) 687,5ms, maximální hodnota T to je (pro stanici 31) 1753,125ms.

Rámec

Každý rámec začíná klidem na lince po dobu T syn , tzn, že rámce jsou od sebe odděleny zmíněným klidem v trvání T syn . Jakákoliv mezera mezi znaky delší jak T syn způsobí, že stanice tuto mezeru chápe jako začátek nového rámce a předchozí přijímaný obsah zpracuje.
Protokol definuje tři typy rámců:

Jednotlivé části znamenají:

Výměna dat

Délka dlouhého rámce je přenášena jedním znakem, maximální hodnota tedy může být 255. DA, SA a FCB z toho zabírají 3 znaky. V nejhorším případě (viz dále) je potřeba dalších 12 znaků pro další specifikaci dat, takže na vlastní přenášené hodnoty zbývá 255-3-12=240 znaků. Pro zjednodušení implementace protokolu Db-Net definuje maximální délku přenášených dat na jeden rámec na 240 znaků.

Po odeslání žádosti čeká master na odpověď od slave maximálně dobu T sl . Pokud odpověď nepřijde, považuje se adresovaný slave za nepřipojený. V některých případech se však žádost ještě jednou opakuje (viz dále).

Pozn:
Pole DA a SA se týkají vždy konkrétního rámce. V rámci žádosti je DA dotazovaný slave a SA master,v rámci odpovědi je to naopak: DA je master a SA je dotazovaný slave.

Následuje popis možných výměn dat typu výzva-odpověď:

Výměna dat - zjištění stavu stanice

Tento druh výměny dat probíhá pouze a jenom na úrovni síťové vrstvy a slouží aktivní stanici pro udržování Lifelistu (viz dále).

Výměna dat - čtení systémové identifikace

Tento druh výměny dat je výjimečný v tom, že žádost je tvořena krátkým rámce a odpověď rámcem dlouhým. Kromě toho žádost o čtení systémové identifikace zpracovává přímo síťová vrstva bez jakékoliv interakce s aplikací.

Výměna dat - čtení aplikační identifikace - funkce 0

Typ žádosti v FCB je 13. První znak v DATA žádosti je číslo funkce.
Typ odpovědi v FCB je 8. První znak v DATA odpovědi je číslo funkce zvětšené o 128.

Výměna dat - čtení proměnné - funkce 1

Typ žádosti v FCB je 13. První znak v DATA žádosti je číslo funkce. Následující znak určuje typ čtených dat - rozlišuje se datový typ (integer, long, float) a logický typ (jednoduchá proměnná, jeden prvek matice, výřez matice).
Typ odpovědi v FCB je 8. První znak v DATA odpovědi je číslo funkce zvětšené o 128.

Každá proměnná je určená svojím 16-ti bitovým číslem - WID em. U maticových proměnných se dále udává číslo řádku Row a číslo sloupce Col a oba se indexují od 0. Výřezem matice se rozumí čtvercová souvislá oblast matice začínající na určeném řádku Row a sloupci Col obsahující určený počet řádků nRw a sloupců nCl . Při přenosu výřezu se hodnoty přenáší od nižších řádků (sloupců) k vyšším řádkům (sloupcům) a přenáší se po řádcích.

Datový typ integer je celočíselná 16-ti bitová hodnota a přenáší se na 2 znacích. Datový typ long je celočíselná 32-bitová hodnota a přenáší se na 4 znacích. Datový typ float je desetinná hodnota ve formátu IEEE na 32-bitech a přenáší se na 4 znacích.

Výměna dat - zápis proměnné - funkce 2

Typ žádosti v FCB je 5. První znak v DATA žádosti je číslo funkce. Následující znak určuje typ čtených dat - rozlišuje se datový typ (integer, long, float) a logický typ (jednoduchá proměnná, jeden prvek matice, výřez matice). Dále následují případné další údaje a nakonec DATA obsahují zapisovanou hodnotu.
Odpověď je vždy krátký rámec, typ odpovědi v FCB je 0.

Každá proměnná je určená svojím 16-ti bitovým číslem - WID em. U maticových proměnných se dále udává číslo řádku Row a číslo sloupce Col a oba se indexují od 0. Výřezem matice se rozumí čtvercová souvislá oblast matice začínající na určeném řádku Row a sloupci Col obsahující určený počet řádků nRw a sloupců nCl . Při přenosu výřezu se hodnoty přenáší od nižších řádků (sloupců) k vyšším řádkům (sloupcům) a přenáší se po řádcích.

Datový typ integer je celočíselná 16-ti bitová hodnota a přenáší se na 2 znacích. Datový typ long je celočíselná 32-bitová hodnota a přenáší se na 4 znacích. Datový typ float je desetinná hodnota ve formátu IEEE na 32-bitech a přenáší se na 4 znacích.

Výměna dat - čtení paměti - funkce 3

Typ žádosti v FCB je 13. První znak v DATA žádosti je číslo funkce. Následuje určení segmentu Segment a ofsetu Offset adresy, ze které se má číst a požadovaný počet čtených bajtů Count .
Typ odpovědi v FCB je 8. První znak v DATA odpovědi je číslo funkce zvětšené o 128.

Hodnoty se přenáší od nižších adres k vyšším adresám.

Výměna dat - zápis paměti - funkce 4

Typ žádosti v FCB je 5. První znak v DATA žádosti je číslo funkce. Následuje určení segmentu Segment a ofsetu Offset , kam se má zapsat a požadovaný počet zapisovaných bajtů Count . Nakonec DATA obsahují zapisovaný blok paměti.
Odpověď je vždy krátký rámec, typ odpovědi v FCB je 0.

Hodnoty se přenáší od nižších adres k vyšším adresám.

Výměna dat - čtení io portů - funkce 5

Typ žádosti v FCB je 13. První znak v DATA žádosti je číslo funkce. Následuje určení adresy portu Port , ze které se má číst a požadovaný počet čtených bajtů Count .
Typ odpovědi v FCB je 8. První znak v DATA odpovědi je číslo funkce zvětšené o 128.

Hodnoty se přenáší od nižších adres k vyšším adresám.

Výměna dat - zápis io portů - funkce 6

Typ žádosti v FCB je 5. První znak v DATA žádosti je číslo funkce. Následuje určení adresy portu Port , kam se má zapsat a požadovaný počet zapisovaných bajtů Count . Nakonec DATA obsahují zapisovaný blok paměti.
Odpověď je vždy krátký rámec, typ odpovědi v FCB je 0.

Hodnoty se přenáší od nižších adres k vyšším adresám.

Výměna dat - zápis data a času - funkce 7

Typ žádosti v FCB je 5. První znak v DATA žádosti je číslo funkce. Následuje zapisované datum a čas v Db-Net formátu.
Odpověď je vždy krátký rámec, typ odpovědi v FCB je 0.

Datum a čas v Db-Net formátu se udržuje jako jedna hodnota a sice jako počet sekund od 1.1.1980 0:00:00 (půlnoci). Ukládá se jako 32-bitová beznaménková hodnota, tzn. maximální datum a čas, jež jde vyjádřit, je 7.2.2116 6:28:15.

Výměna dat - čtení data a času - funkce 8

Typ žádosti v FCB je 13. První znak v DATA žádosti je číslo funkce.
Typ odpovědi v FCB je 8. První znak v DATA odpovědi je číslo funkce zvětšené o 128.

Datum a čas v Db-Net formátu se udržuje jako jedna hodnota a sice jako počet sekund od 1.1.1980 0:00:00 (půlnoci). Ukládá se jako 32-bitová beznaménková hodnota, tzn. že maximální datum a čas, jež jde vyjádřit, je 7.2.2116 6:28:15.

Chybové odpovědi

Speciální případy výměny dat

Pomocí rámců pro čtení paměti jsou implementovány některé další funkce.

Čtení informace o db. proměnné

Funkce je implementováno od verze NOS 3.18 včetně.
Žádost je standardní žádost na čtení paměti.
Proměnnou jejíž informace se čtou lze zadat buď WIDem (pole Segment je 0xFFFE, pole Offset obsahuje WID) nebo pořadovým číslem (pole Segment je 0xFFFD, pole Offset obsahuje pořadové číslo proměnné v databázi, indexováno od 0). Čte se 26 bajtů.
Odpověď je standardní odpověď na čtení paměti, kdy přečtená data obsahují informace o proměnné ve formátu:

Pokud je v žádosti zadán neexistující WID nebo příliš vysoké pořadové číslo proměnné, stanice odpoví krátkým rámcem s FCB s chybou 2 - špatné parametry.
Pokud je služba použita s verzi NOS nižší než 3.18, je vráceno 26 bajtů s náhodným obsahem.

Pasivní stanice

Pasivní stanice je taková stanice na síti Db-Net, která nikdy nemůže být masterem, tj. nikdy nepřijme token a nikdy neřídí provoz na síti.

Pasivní stanice pouze poslouchá provoz na síti a jestliže rozpozná rámec žádosti pro sebe, neprodleně odpoví.

Minimální požadavky na pasivní stanici jsou:

Pokud stanice nepotřebuje sama od sebe číst nebo zapisovat data z/do jiné stanice, je nanejvýš vhodné aby byla pasivní. Aktivní stanice i když nepřenáší žádná data, obecně snižuje šířku použitelného pásma pro přenos dat.

Aktivní stanice

Aktivní stanice je taková stanice na síti Db-Net, která může být master, tj. přijímá a odevzdává token a účastní se řízení provozu sítě (jak bude popsáno dále).

Pro další popis budeme pod pojmem "cizí" stanice rozumět jakoukoliv jinou stanici připojenou na síť DB-Net.

Aktivní stanice - Lifelist

Lifelist je tabulka, ve které se aktivní stanice udržuje přehled o aktuálních stavech všech možných stanic na síti (tedy o stanicích 0÷31), včetně sebe sama. Kromě stavů posílaných v FCB (pasivní, aktivní nepřipravená, aktivní připravená, aktivní zapojená) se do Lifelistu ukládá i stav "odpojená", který znamená, že stanice daného čísla není k síti připojena (neodpovídá).

Při práci se s Lifelistem pracuje cyklicky, tj. při dosažení jeho konce (čísla 31) se přechází zpět na začátek (číslo 0).

Aktivní stanice - normální provoz

Průběh komunikace za normálního provozu (stanice je aktivní zapojená) probíhá následovně:

  1. Stanice je ve stavu slave.
    Žádosti na sebe zpracovává a odpovídá.
    Z rámců odpovědí cizích stanic aktualizuje jejich stav (z pole FCB) ve svém Lifelistu.
    Čeká na token pro sebe, po jeho přijetí si nastaví stav "aktivní, má token" a stává se masterem.
  2. Má-li stanice nějaký požadavek na výměnu dat, vyšle žádost.
    Čeká maximálně dobu T sl na odpověď.
    Přijde-li odpověď (i negativní), zpracuje ji, aktualizuje stav cizí stanice v LifeListu.
    Přijde-li chybný rámec (s chybným FCS), opakuje ještě jednou požadavek.
    Nepřijde-li odpověď a je-li stav cizí stanice v Lifelistu jiný než "odpojená", opakuje ještě jednou požadavek.
    Nepřijde-li odpověď a stav cizí stanice v Lifelistu je "odpojená" nebo jde o druhé opakování, vrátí aplikační vrstvě odpověď "stanice neodpověděla" a do Lifelistu si poznačí stav cizí stanice "odpojená".
  3. Dle předchozího bodu stanice vyřídí svoje požadavky na výměnu dat.
    Protokol přesně nepředepisuje, kolik žádostí smí aktivní stanice vyřídit na jeden oběh tokenu. Je ovšem doporučeno nějakým mechanizmem tento počet omezit, aby si jedna aktivní stanice nepřivlastňovala token na dlouhé doby a tak zpomalovala či blokovala ostatním cizím stanicím komunikovat svoje požadavky.
    Po dokončení bloku výměny dat, přejde stanice k dalšímu bodu.
  4. Dotáže se na stav jedné stanice.
    Při každém tokenu si stanice zjistí stav jedné cizí stanice - obvolá si ji. Pro tuto činnost si stanice udržuje v proměnné číslo naposledy obvolané cizí stanice, které postupně (cyklicky) zvyšuje.Svoje číslo vynechává.
    Podle odpovědi resp. proběhnutí timeoutu T sl se aktualizuje stav obvolávané cizí stanice v Lifelistu, případné opakování se řídí stejnými pravidly jako v bodu 2.
  5. Najde v Lifelistu nejbližší další cizí stanici se stavem "aktivní připravena" nebo "aktivní zapojena"a té pošle token.
  6. Po odeslání tokenu poslouchá síť, zda do doby T sl začala cizí stanice, jíž byl token předán, vysílat (minimálně musí cizí stanice udržovat svůj Lifelist obvoláváním).
    Pokud stanice uslyší správný rámec, nastaví svůj stav na "aktivní, připravená" a přejde do bodu 1.
    Pokud stanice do stanovené doby neuslyší správný rámec, zopakuje předání tokenu.
    Pokud ani napodruhé se předání tokenu nepovede, označí se v Lifelistu cizí stanice jako"odpojená" a pokračuje se předchozím bodem (najde se v Lifelistu další cizí stanice, jíž by se předal token...)

Aktivní stanice - jediná aktivní na síti

Je-li na síti jediná aktivní stanice, probíhá normální provoz stejně jako v předchozím bodě. Pouze při předávání tokenu, pokud stanice zjistí, že existuje sama aktivní na síti, reaguje odlišně:

  1. Pošle token sama sobě.
    Stanice fyzicky vyšle rámec pro předání tokenu, v němž v poli SA i DA je číslo sebe sama.
  2. Po odeslání tokenu sama sobě stanice na nic nečeká, svůj stav ponechá na "aktivní, má token"a přejde hned do stavu 2 v předchozím popisu normálního provozu.

Aktivní stanice - převzetí řízení sítě, zapojení první aktivní stanice

Aktivní stanice při své inicializaci a připojování na síť nejprve "poslouchá" provoz na síti. Podle následujícího popisu se chová jestliže:

Podle stejného popisu se taktéž chová stanice jestliže:

V takovém případě stanice převezme řízení sítě sama.

  1. Nastaví svůj stav na "aktivní, má token" a pošle token sama sobě.
    Stanice fyzicky vyšle rámec pro předání tokenu, v němž v poli SA i DA je číslo sebe sama.
  2. Postupně se dotáže na stav všech možných cizích stanic na síti - obvolá všechny stanice.
    Podle odpovědi resp. proběhnutí timeoutu T sl se aktualizuje stav cizích stanic v Lifelistu. I v tomto případě se případné opakování řídí pravidly popsanými v bodu 2 normálního provozu.
    Pozn.: V případě převzetí řízení za běhu je v Lifelistu rozpracovaný stav, takže případné opakování má smysl - dá se předpokládat že cizí stanice svůj stav nezměnily. V případě převzetí řízení po startu je Lifelist prázdný (všechny cizí stanice jsou odpojené)takže k opakování dotazu na stav jakékoliv cizí stanice nikdy nedojde.
  3. Přejde do stavu 2 normálního provozu (začne vyřizovat svoje žádosti na výměnu dat).

Aktivní stanice - zapojení aktivní stanice

Aktivní stanice při své inicializaci a připojování na síť nejprve "poslouchá" provoz na síti.

  1. Nastaví svůj stav na "aktivní nepřipravená".
    Odpovídá na žádosti na sebe, ale token pro sebe nepřijme tj. přijde-li token pro sebe, ignoruje jej.
    Z rámců odpovědí cizích stanic aktualizuje svůj Lifelist
  2. Stanice čeká na první token jdoucí po síti.
    Z něj si poznamená číslo odesilatele (pole SA) a oba (odesílatele SA i adresáta DA) si v Lifelistu označí jako "aktivní zapojené".
  3. Stanice dále detekuje další tokeny jdoucí po síti.
    Podle polí SA a DA si v Lifelistu označuje odesílatele i adresáta tokenu jako "aktivní zapojené".
  4. Jakmile stanice detekuje, že adresát DA tokenu je shodný s prvním odesílatelem poznamenaným v bodu 2 (tj. slyšela oběh tokenu přes celý logický kruh), změní svůj stav na "aktivní připravená" a přejde do stavu slave dle bodu 1 normálního provozu.
    Stejně tak učiní jakmile zjistí, že token má pole SA a DA shodné tj. jiná cizí stanice posílala token sama sobě - v tom případě také již slyšela oběh tokenu přes celý logický kruh.
  5. Při detekci jakéhokoliv chybného rámce začne stanice znovu od začátku.
    Stanice stále také sleduje timeout T to . Pokud by tento proběhl (sleduje se vždy od posledního rámce - dobrého či špatného), stanice převezme řízení sama jak je popsáno v předchozím odstavci.

Aktivní stanice - chyby v normálním provozu

Chybami v normálním provozu rozumíme okamžik, kdy aktivní stanice je ve fázi vyřizování svých požadavků a místo očekávané odpovědi přijde jiný rámec bez chyby - tedy přijde rámec s platným FCS, DA, SA i ostatními poli, ale není to očekávaná odpověď. Může jít o:

V těchto případech stanice označí svoji probíhající žádost za ukončenou s chybou a okamžitě přejde do stavu 1 normálního přenosu - tedy bude čekat, až ji přijde další regulární token.

Pokud přijde:

pak stanice označí svoji probíhající žádost za ukončenou s chybou, sestaví odpověď a odešle ji, a okamžitě přejde do stavu 1 normálního provozu - tedy bude čekat, až ji přijde další regulární token.

Konečně pokud přijde:

tak stanice označí svoji probíhající žádost za ukončenou s chybou a přejde ihned do bodu 2 normálního provozu - tedy začne dále zpracovávat svoje požadavky na výměnu dat.

Aktivní stanice - stanice stejného čísla na síti

Pokud kdykoliv stanice zjistí, že v platném rámci výzvy nebo odpovědi je odesílatel (pole SA) shodné s jejím číslem (tedy na síti jsou připojeny dvě stanice stejného čísla) přejde neprodleně do stavu "poslechu sítě" podle odstavce "zapojení aktivní stanice".

Ve většině případů to bude mít za následek, že druhá ze stanic stejného čísla se k síti nikdy nepřipojí, což je jediné správné řešení.


Dokument : DBNet101.htm        - validita html
Verze dokumentu : 1.01             - 1.02
Autor : D.Křivský                     -  Jaroslav Valter
Datum vytvoření : 12.6.2000       - 16.12.2007
Datum revize : Revize 1.9.2000