Komunikační protokol

Důvody k použití komunikačního protokolu

Pro komunikaci jednoho zařízení s počítačem PC by bylo možno použít obvyklého řešení s rozhraním RS 232 nebo pro zvýšení odolnosti proti rušení jeho modifikace s diferenciálním příjmem signálu RS 422. Komplikovanější způsob komunikace přes sběrnici a komunikačního protokolu byl použit proto, že již byl implementován pro řadu jiných zařízení, má zabezpečení proti chybám přenosu a byly pro něj vytvořeny nástroje pro ladění a nahrávání programů do aplikací.

Komunikace však nebyla řešena pro jednotku zapalování ale již dříve pro přístroje firmy PiKRON s.r.o.. Výsledky tohoto vývoje byly také použity pro jednotku zapalování. Komunikace byla vyvíjena pro propojení přístrojů tvořících kapalinový chromatograf LC4000. Byla též nasazena v prostředí nemocnic pro monitorování činnosti infuzních pump IP2050 a je projektována i do volumetrické pumpy VP1000 a analyzátoru aminokyselin AAA 400. Jedná se o přístroje vybavené rozdílným množstvím paměti a s rozdílným stupněm autonomie. Při nasazení přístrojů v nemocnicích a laboratořích se počítá až s propojením 50 přístrojů.

Výběr protokolu

Požadavky na vlastnosti protokolu

Protokol musí umožnit připojení minimálně 50 přístrojů na komunikační sběrnici. Protokol by neměl vyžadovat nepřetržitý provoz všech přístrojů. Protože se jedná o přístroje s rozdílným množstvím vlastní inteligence, neměl by od nich vyžadovat znalost všech ostatních přístrojů připojených ke sběrnici. Měla by být alespoň částečně řešena situace, kdy dojde k přetížení sběrnice, tak, že se přístroje budou při obsazování sběrnice střídat. Protokol by neměl vyžadovat rekonfiguraci při výpadku nebo vypnutí některého přístroje. Protokol by měl umožňovat potvrzení doručení zprávy příjemcem pro odesílatele. Pro řízení jednoduchých slave přístrojů je nutné, aby bylo možné pro iniciátora spojení zpětně vyčíst informace ze slave. Komunikace s jedním přístrojem by neměla příliš zatěžovat ostatní přístroje, pro které není zpráva určena. Komunikace nemusí být extrémně rychlá. Sběrnici by mělo jít snadno realizovat s bezpečným galvanickým oddělením (pro medicínu minimálně 4kV) a s minimální délkou 20 m. V neposlední řadě je nutné, aby řešení bylo levné, nevyžadovalo speciální obvody a bylo použitelné i pro standardní počítač PC.

Standardní protokoly

V této části budou vyjmenovány známé protokoly, jejich výhody a nevýhody pro splnění uvažovaných požadavků.

Komunikační sběrnice I2C má dokonale deterministicky vyřešen problém arbitrace přístupu sběrnicovým součinem výstupů s otevřenými kolektory. Vyžaduje pouze dva vodiče (hodiny SCL a data SDA). Je relativně velmi rychlá (více než 100 kBd). Výhodou je možnost zpomalit přenos ze strany přijímače libovolně dlouhým prodloužením stavu s vodičem SCL v nízké úrovni. Umožňuje kombinaci několika přenosů za sebou při opakované podmínce start. Umožňuje vyčtení informací z naadresovaného zařízení a kontrolu doručení zprávy. Nemá řešen problém rovnoměrného přidělení času mezi konkurující si iniciátory spojení (nejvyšší prioritu má minimální cílová adresa). Vyžaduje speciální hardware na straně připojení k PC a na straně přístrojů vyžaduje omezené množství procesorů vybavených tímto rozhraním nebo další obvody. Lze ji sice realizovat pouze softwarově, ale s velkými nároky na zatížení procesoru (při kombinaci s velmi jednoduchým hardwarem minimálně jedno přerušení na přenesený bit).

Komunikační protokol PROFIBUS má výhodu ve značném rozšíření v průmyslových aplikacích. Lze ho snadno realizovat při použití diferenciální obousměrné dvojdrátové sběrnice RS 485. Přidělení oprávnění vysílat je vyřešeno předáváním tokenu. Je nutné znát adresu následujícího přístroje v logickém kruhu, zapojovat nové master přístroje do logického kruhu. V případě výpadku nebo vypnutí přístroje musí dojít k rekonfiguraci kruhu a při ztrátě tokenu k vygenerování právě jednoho nového tokenu. Protokol umožňuje potvrzení a vyčtení informací z naadresovaného přístroje. Standardně se používá komunikace se start a stop bitem a osmi datovými bity. Řídící kódy jsou odlišeny od binárních dat pouze pozicí svého výskytu. K synchronizaci počátku zprávy se využívá časové prodlevy. Komunikace vyžaduje kontrolu všech znaků všemi přístroji a měření času mezi znaky. Přístroje schopné iniciování komunikace musejí znát své sousedy, minimálně svého následníka v logickém kruhu.

Protokoly HDLC, CAN a BITBUS jsou sice dobře propracované synchronní protokoly pro předávání zpráv, ale vyžadují pouze určitý hardware.

Volba vlastního protokolu

Protože žádný z mě známých protokolů se nejevil jako vhodný pro požadovanou komunikaci, byl vytvořen protokol nový.

Protokol využívá možnosti některých procesorů generovat přerušení pouze při příjmu znaku s nastaveným 8 bitem. Jedná se o rodiny procesorů I8051, I8096, I80196, MC68332 a další. Devítibitové komunikace se softwarově řízeným osmým bitem lze docílit i u standardního sériového rozhraní počítačů PC módem softwarové parity nebo je možno postavit rozšiřující kartu s obvodem I80510, který je pro devítibitovou komunikaci navržený. Díky tomuto rozlišení řídících znaků a adres od dat není nutná kontrola všech znaků všemi přístroji a dochází k menšímu výkonovému zatížení jednotek, pro které není zpráva určena. Pro protokol bylo nutné vymyslet způsob arbitrace přístupu ke sběrnici, zabezpečení dat proti chybám a formát zpráv. Jako fyzické vrstvy sběrnice byla využita RS 485.

Popis protokolu mLan

Datový rámec

Frame1Datový rámec je základní jednotkou komunikace mLan. Skládá se z posloupnosti devítibitových znaků. Protože se jedná o asynchronní komu­nikaci, je každý znak opatřen startbitem a stopbitem. Celková doba přenosu jednoho znaku je jedenáctkrát delší než doba přenosu bitu. Průběh pře­nosu jed­noho znaku je na obrázku. Pro zvý­raz­nění bude nejvýznamější bit přenášeného devítibitového znaku D8 vykreslen tučně. Znaky s bitem D8=1 jsou speciální řídící znaky, které se mohou v datovém rámci vyskytovat jen na určitých pozicích a ohraničují přenášená data.

Frame2Datový rámec začíná cílovou adresou (DAdr - destination address) nebo znakem neadresného počátku rámce (uL_Beg) s nastaveným bitem D8. Tento znak zachytí všechny přístroje a podle něj se rozhodnou jestli jsou pro ně určeny další znaky. Další znaky jsou již bez nastaveného bitu D8. Jedná se o adresu odesílatele rámce (SAdr - source address) a číslo služby, pro kterou je rámec určen (Com - command). Dále jsou vysílána data rámce bez nastaveného bitu D8. S daty není vyslána délka. Ta se může pohybovat v rozsahu nula až maximální povolená délka dat MaxBlock. Maximální délku dat je nutné zvolit podle nejdelší přípustné doby odezvy mezi přístroji, rychlosti komunikace a počtu aktivních přístrojů pro konkrétní aplikaci. Předpokládaná hodnota je v rozsahu 256 B až 10 kB. Přenos až dvou byte délky dat by prodlužoval délku rámce a vyžadoval by od všech přístrojů počítání přijímaných byte, proto jsou data ukončena pouze znakem s nastaveným D8. Podle použitého ukončovacího znaku ze čtyř možných ukončovacích znaků (uL_End, uL_Arq, uL_Prq, uL_Aap) se rozhoduje dalším průběhu komunikace po skončení rámce. Jako poslední znak rámce je vyslán kontrolní znak (XorSum - vypočítaný ze všech přenesených znaků včetně DAdr a ukončovacího znaku) bez nastaveného bitu D8.

Pro zajištění zotavení při výpadku přístroje a pro umožnění bezkolizního přepínání výstupních budičů sběrnice jsou definovány následující časové relace. Mezi vysíláním jednotlivých znaků rámce nesmí být větší prodleva než doba vyslání jednoho znaku. Pokud k ní dojde a je cílovým přístrojem rozpoznána, je zpráva prohlášena za poškozenou. Protože při vysílání rámců a odpovědí dochází k změně směru přenosu dat přes transceivery sběrnice jsou definovány minimální a maximální časy jednotlivých úkonů. Tyto časy jsou definovány poměrem k době přenosu jednoho znaku. Při ukončení vysílání signálu na sběrnici musí být vypnut výstupní budič po skončení vysílání posledního znaku zprávy v době kratší než doba vysílání jednoho znaku. Při přechodu z příjmu na vysílání znaku je nutné po příjmu posledního znaku počkat před zapnutím výstupního budiče minimálně po dobu vysílání jednoho znaku. Tato doba by však neměla být delší než doba vysílání dvou znaků. Čekání na znak po dobu delší než trojnásobek vysílání znaku je předchozí vysílaný rámec považován za nepotvrzený a spojení je ukončeno s chybou.

Následující odstavce popisují jednotlivá možná zakončení rámce.

uL_End (end) nejjednodušší ukončení rámce. Příjemce nesmí vyslat žádný znak na sběrnici do uvolnění sběrnice. Vysílající přístroj prohlásí okamžitě rámec za odvysílaný a nekontroluje, že byl přijat. Tyto rámce se využívají k přenosu informačních zpráv, u nichž nedoručení nevede ke kritické chybě. Dále je nutné je použít, pokud je naadresováno více cílů zprávy. V tomto případě by při snaze potvrdit zprávu více přístroji vedl ke kolizi na sběrnici a i k chybě komunikace. Pro kontrolu přenosu těchto rámců je možné použít vhodného průběhu komunikace mezi aplikacemi, kdy jedna po doručení zprávy reaguje vložením zprávy s odpovědí do výstupní fronty zpráv s adresou DAdr rovnou SAdr původní zprávy.

uL_Arq (acknowledge request) umožňuje okamžitou kontrolu doručení rámce. Příjemce rámce musí reagovat na toto ukončení jednoznakovou odpovědí bez nastaveného D8. Odpověď uL_ACK potvrzuje příjem rámce. Odpověď uL_NAK nebo odmlka po dobu delší než doba vysílání tří znaků je považována za chybu příjmu. Ta může být způsobena zaneprázdněností zařízení, přeplněním vstupní fronty nebo chybou přenosu rámce. Přístroj, který je schopen zjistit, že k chybě došlo v důsledku jeho dočasného zaneprázdnění nebo dočasného přeplnění vstupní fronty, může odpovědět uL_WAK. Tato odpověď může být chápána vysílajícím přístrojem pro zjednodušení stejně jako uL_NAK nebo, je-li to možné, výhodněji. Když dojde k nepotvrzení rámce, snaží se většinou vysílající přístroj při příštím přidělení sběrnice o opakování vyslání rámce. Počet pokusů o opakování je předdefinován. Tento postup může zbytečně zatěžovat sběrnici v případě, že přijímač má přeplněnu vstupní frontu a nebo je celkově přetížen. Výhodnější je, aby při příštím přidělení sběrnice vysílači tento přístroj vyřizoval zprávy pro ostatní přístroje a k zprávě pro přetížený přístroj se vrátil až po vyřízení ostatních zpráv nebo po určité době.

uL_Prq (proceed request) označuje rámec za určený k okamžitému zpracování. Tento rámec by měl být příjemcem okamžitě zpracován. Způsob zpracování závisí na čísle služby Com a je závislý na aplikaci. Obecně platí, že služby vyžadující okamžité zpracování zprávy mají číslo služby Com ³ 80h na rozdíl od služeb pro příjem do vstupní fronty s Com < 80h. Pro některé služby se požaduje okamžitá odpověď příjemce vysílači rámcem s odpovědí. Jiné služby předpokládají vyslání dalšího rámce původním vysílačem. Tyto zprávy musí být zpracovány okamžitě pod přerušením a proto musí být zpracovány rychle a zcela asynchronně s ostatními aplikacemi. To je výhodné pro trasování a inspekci běžících programů v cílovém přístroji, pro vyčítání krátké stavové informace z přístroje a pro čtení typu přístroje. Příkladem jsou zprávy přechod do krokovacího režimu, provedení jednoho kroku a pokračování v normálním běhu aplikace, které se skládají pouze z jednoho rámce. Další příklady jsou čtení typu přístroje, stavové informace a paměti přístroje. V těchto případech se po odvysílání rámce vyžadujícího danou informaci očekává přijetí rámce s odpovědí. Zápis paměti naopak po vyslání rámce s informacemi kam se bude zapisovat vyžaduje odvysílání rámce se zapisovanými daty. Nemůže-li příjemce požadovanou činnost provést, rámec ignoruje. Předpokládá-li vysílač odpověď, pak po neúspěšném čekání prohlásí rámec za nepotvrzený.

uL_Aap (acknowledge and proceed request) vyžaduje shodnou činnost jako uL_Prq. Před vlastní zpracováním rámce příjemcem vyžaduje potvrzení přijetí rámce a potvrzení schopnosti okamžitě předat rámec službě Com vysláním uL_ACK. Pokud rámec nemůže být zpracován okamžitě, například požadovanou činnost nelze provést pod přerušením, je vysláno uL_NAK.

Řídící znaky

Tyto znaky mají nastaven bit D8 a jsou přijímány všemi přístroji, ohraničují rámce a rozhodují o stavu obsazení sběrnice. Sběrnice je obsazena po fázi arbitrace přístupu vysláním cílové adresy s nastavenými bitem D8 a nulovým D7. Sběrnice se uvolňuje vysláním vlastní adresy s nastavenými bity D8 a D7 nebo při chybě vysláním uL_Err.

DAdr 100h všeobecná adresa

DAdr 101h až 164h adresa cílového přístroje

uL_Beg 175h neadresný počátek rámce, většinou odpovědi

uL_END 17Ch konec rámce

uL_ARQ 17Ah konec rámce a žádost o potvrzení

uL_PRQ 179h konec s žádostí o okamžité zpracování

uL_AAP 176h konec s žádostí o potvrzení a okamžité zpracování

uL_ERR 17Fh chyba bez uvolnění sběrnice

uL_ERR 1FFh chyba s uvolněním sběrnice

Kódy těchto znaků kromě cílové adresy jsou voleny tak, aby jejich minimální Hammingova vzdálenost byla rovna 2. V případě chyby při přenosu znaku pouze v jednom bitu je tato chyba rozpoznána a přenos je považován za chybný.

Při přenosu potvrzení rámce se využívá definovaných kódů s Hammingovou vzdáleností rovnou 4, proto jsou uvedeny také v tomto odstavci přesto, že mají nulový D8.

uL_ACK 019h potvrzení rámce

uL_NAK 07Fh negativní potvrzení rámce

uL_WAK 025h nepotvrzeno a bude potřeba čekat

Přenos zprávy

Přenos zprávy v síti mLan může vyžadovat i více než přenos pouze jednoho datového rámce. Může vyžadovat potvrzení a nebo okamžité provedení služby, které může vyžadovat přenos dalších rámců. Specifikace dovoluje i velmi složitý průběh zpracování zpráv přesto, že většinou nejsou tyto vlastnosti používány ani implementovány. Například je možná konstrukce, kdy přístroj A upozorní přístroj B na přijetí příštího datového rámce speciálním způsobem k tomuto účelu vytvořenou službou. Potom jinou službou předá přístroji C příkaz k vyslání určitých dat přístroji B. Přístroj C předá data přístroji B. B potvrdí příjem dat poté převezme sběrnici přístroj A, který uvolní sběrnici. Tento postup umožní přístroji A přenést data z C do přístroje B aniž by musel celý datový blok načíst a poté znovu vyslat. V stávajících aplikacích však nebylo nutné takto složitá schémata komunikace implementovat. Jestliže se nejedná o přenosy kritické na čas a není nutno z důvodů synchronizace dopravit zprávu více přístrojům naráz je možné docílit podobných výsledků přenosem několika samostatných zpráv.

Aplikace nebo zpracování předcházejících zpráv vyžaduje přenos zprávy. Tuto informaci uloží do výstupní fronty.

Přístroj, který potřebuje vyslat zprávu, čeká na uvolnění sběrnice. Pak provede připojení na sběrnici. Pokud je tato fáze úspěšná vyšle rámec. Pokud je to vyžadováno provede se kontrola potvrzení rámce a přenos dalších datových rámců, pokud to služba vyžaduje. Pak je uvolněna sběrnice. Není-li detekována chyba je zpráva označena jako provedená. V opačném případu je zvýšeno počitadlo nezdařených pokusů. Při dosažení předdefinované hodnoty je zpráva označena za nedoručenou a pokus o vyslání se neopakuje.

Aplikace může být upozorněna o provedení zprávy, pokud to požaduje. Aplikace je vždy informována o zjištěné chybě v přenosu.

Každý přístroj, který má být schopen přijímat zprávy, musí mít přidělenu vlastní adresu a musí kontrolovat všechny znaky s nastaveným D8. Přijme-li znak s nastaveným D8 a nulovým D7 rovný svojí adrese nebo znak rovný všeobecné adrese, přejde se do stavu naadresovaný a přijme datový rámec. Není-li rámec úspěšně přijmut (shodný XorSum a dostatek paměti), je ignorován a v případě uL_ARQ nebo uL_AAP je vysláno uL_NAK. V opačném případě je rámec uložen do paměti. Je-li přijato uL_ARQ, je rámec potvrzen uL_NAK. Není-li požadováno provedení služby, přejde se do stavu čekání na rámec s nastaveným příznakem naadresovaný. V případě uL_AAP je rámec potvrzen až po rozpoznání služby. Po přijetí uL_ARQ nebo uL_AAP je rámec okamžitě předán příslušné službě. Ta provede požadovanou akci a může čekat na další jí určený datový rámec nebo vyslat rámec. Pro přijetí dalšího rámce ve stavu naadresovaný jsou rozšířeny rozpoznávané adresy o adresu uL_Beg. Do počátečního stavu čekání na rámec bez příznaku naadresovaný se přístroj vrátí po příjmu znaku s nastavenými bity D8 a D7. Pro některé služby může být počátek rámce s adresou uL_Beg povinný.

Arbitrace přístupu k médiu

Toto je jedna z nejsložitějších částí každého komunikačního protokolu, který připouští připojení více rovnocenný přístrojů a nemá pevně určeného mastera.

Nejjednodušší na počet přenesených znaků je náhodný přístup s příposlechem nosné a detekcí kolizí. Tato metoda vyžaduje schopnost rozpoznat kolizi. Zároveň při vysokém zatížení sítě vede k snížení kapacity.

Proto jsou výhodnější postupy, kdy je dopředu rozhodnuto, který přístroj má právo vysílat. Toho lze docílit předáváním oprávnění vysílat mezi přístroji. K tomu je nutné vysílat speciální rámce s předáním řízení. Při ztrátě tohoto rámce v důsledku chyby přenosu nebo výpadku zařízení, je nutné vygenerovat nový. Zároveň je pro každý přístroj nutné znát svého následníka v logickém kruhu předávání řízení.

Další možností je definování přípravné fáze před získáním oprávnění vysílat (arbitrace), která zaručí, že toto oprávnění získá pouze jeden přístroj. Tato fáze spotřebuje sice určitou část kapacity sběrnice, ale nevyžaduje rozpoznávání kolizí ani předávání oprávnění vysílat. Tato možnost byla vybrána pro protokol mLan. Zároveň byla doplněna o částečné rotování priority mezi přístroji. Toho je docíleno určením minimálního času, po který se nesmí přístroj začít připojovat, v závislosti na adrese posledního předcházejícího přístroje s oprávněním vysílat.

Každý přístroj, který má být schopen samostatného vysílání zprávy, musí trvale sledovat stav obsazenosti sběrnice. Přístroj musí přijímat všechny znaky s nastaveným D8. Je-li nastaven bit D7 je sběrnice považována za uvolněnou, v opačném případě za obsazenou. Podle toho je nastaven příznak neobsazenosti sběrnice uLF_NB. Protože arbitrační fáze je založena na vysílání znaků 000h bez nastaveného bitu D8, je nutné, aby přístroje schopné vysílání zprávy, měli po dobu nastavení příznaku uLF_NB povolen i příjem znaků s nulovým D8. Po příjmu jakéhokoliv znaku se příznak uLF_NB znuluje a není již nutné přijímat znaky s nulovým D8. Protože může dojít k výpadku přístroje v době, kdy obsadil sběrnici, je nutné definovat způsob jak obnovit práci sběrnice. Všechny přístroje mohou periodicky testovat aktivitu sběrnice funkcí uL_STROKE. Tato funkce nesmí být znovu volána dříve než po době odpovídající vyslání 40 znaků. Maximální doba mezi voláními není definovaná a pouze ovlivňuje maximální dobu, po kterou nemusí být daný přístroj schopen obsadit sběrnici. Funkce uL_STROKE sleduje jestli byl mezi jejími voláními přijat alespoň jeden znak. V případě neaktivity sběrnice nastaví příznak uLF_NB a při dalším volání zaktivuje vysílací systém přístroje. Protože fáze arbitrace obsahuje čekání po dobu přenosu minimálně 4 znaků s povoleným příjmem všech znaků, nedojde ani v případě nastavení uLF_NB v důsledku nepřijímání znaků s nulovým D8 během komunikace mezi jinými přístroji, ke kolizi. Během komunikace není dovolena prodleva delší než přenos 3 znaků (viz popis datového rámce) a tím je zaručeno opětné vynulování uLF_NB. Tento postup má výhodu, že komunikace nevyžaduje alokaci čítače prodlevy. uL_STROKE může být volána z libovolného časového přerušení nebo z libovolné periodicky volané funkce.

Vlastní proces připojení začíná v okamžiku detekce uvolnění sběrnice (změna uLF_NB z 0 do 1) nebo po vložení zprávy do výstupní fronty v době, kdy je nastaven uLF_NB. Nejdříve je z adresy posledního sběrnici uvolňujícího přístroje LAdr a vlastní adresy Adr vypočítá dobu, po kterou testuje klid na sběrnici, podle vzorce :

(LAdr - Adr - 1) mod 16 + 4

Doba se měří v době přenosu jednoho znaku. Není-li známa LAdr nebo při chybě na sběrnici musí tato doba odpovídat minimálně přenosu 20 znaků. Je-li přijat libovolný znak nebo detekována nízká úroveň na sběrnici, je sběrnice prohlášena za obsazenou a přístroj musí čekat na uvolnění sběrnice.

Frame3Tento postup zajišťuje rotaci priority mezi maximálně 16 přístroji. K následné kolizi by mohlo dojít mezi přístroji s rozdílem adresy dělitelným 16 nebo při současném zapnutí dvou přístrojů. Konečné jednoznačné rozhodnutí o právu vysílat je provedeno vysíláním kombinace znaků 000h a prázdných intervalů. Tato kombinace je pro každý přístroj dána jeho vlastní adresou. Prázdný znak odpovídá odpojení výstupního budiče. V této době je udržováno napětí sběrnice ve stavu odpovídajícímu logické jedničce zakončovacími odpory, které mohou být v každém přístroji. Pokud je v době vysílání prázdného znaku přístrojem detekována nízká úroveň, znamená to, že došlo ke kolizi snahy více přístrojů o připojení a přístroj, který vysílal prázdný znak nesmí v připojování pokračovat a musí sběrnici považovat za obsazenou. Na začátku vysílaní kombinace znaků je vyslán nulový znak. Pak je vyslán 1 až 4 prázdné znaky podle nejnižších dvou bitů vlastní adresy. Poté je vyslán nulový znak. Vysílání prodlevy a nulového znaku se opakuje ještě dvakrát pro další bity vlastní adresy. Tento postup zaručuje jednoznačné přidělení sběrnice jednomu ze 64 přístrojů. Vysílání nulového znaku odděleného prodlevami umožňuje vzájemnou synchronizací mezi přístroji, které mají delší počáteční část arbitrační kombinace shodnou i při nenulové době odezvy na přerušení.

Systém rozpoznávání jednotek a dynamického přidělení adres

Aby bylo možné zjistit, které přístroje jsou připojeny k síti mLan, je zavedena služba zjištění typu přístroje uLCo_SID (send identification). Po přijetí rámce s hodnotou Com rovnou uLCo_SID a zakončením uL_PRQ nebo uL_AAP přístroj vyšle rámec s textovým řetězcem zakončeným znakem nula.

".mt ZAP1 v 0.71 .uP 51x .dy\0"

Například systém zapalování popisuje výše uvedený řetězec. V řetězci jsou jednotlivé části uvozeny znakem "." a písmenným kódem. Poté může následovat slovní popis. Funkci přístroje popisuje ".mt" (sekce module type), v tomto případě "ZAP1". Typ procesoru ".uP" je v tomto případě "51x" (rodina I8051 s vnější pamětí RAM). Příznak ".dy" možnost dynamického přidělení adresy.

Systém dynamického přidělení adresy umožňuje jednoznačnou identifikaci každého připojeného přístroje podle jeho 32 bitového výrobního čísla. Přístroj může být kdykoliv připojen do sítě a nemusí mít nastavenu vlastní adresu. O přidělení adres se stará server dynamických adres, který zároveň monitoruje činnost přístrojů. S využitím servisních protokolů je možné do jedné sítě zapojit i více těchto serverů. Pouze jeden z nich je však zvolen za hlavní a pouze ten smí publikovat do sítě svoji adresu a přidělovat adresy přístrojům. Pouze při výpadku může začít s přidělováním adres jeho náhradník.

Činnost sítě s jedním serverem je založena na cyklickém zjišťování stavu všech přístrojů. V první fázi je vyslána zpráva s jedním rámcem s Com rovným uLCo_GST (get status) se všeobecnou adresou a podslužbou 0 zakončeným uL_PRQ. Poté jsou vysílány zprávy jednotlivým přístrojům. První rámec zprávy s Com rovným uLCo_GST obsahující určení podslužby 10h až 1Fh (pro rozlišení typu zjišťovaných údajů - základní údaje jsou 10h) a může obsahovat předpokládané výrobní číslo přístroje. Rámec je zakončen uL_PRQ nebo uL_AAP Přístroj po přijetí této zprávy zkontroluje, jestli odpovídá jeho výrobní číslo číslu ve zprávě. V případě rozdílu předpokládá, že se jeho adresa kryje s adresou jiného přístroje, a proto vynuluje svoji adresu a přejde do stavu hledání nové volné adresy. Je-li výrobní číslo v pořádku vyšle rámec s požadovanými údaji. Tím je server informován o funkčnosti přístroje a i o jeho základním stavu. Přístroj přejde do stavu hledání nové adresy také tehdy, nepřijme-li po dobu více než tří cyklů dotazů rámec s dotazem na jeho stav. To že není dotazován a na síti je aktivní server dynamického přidělování adres pozná podle toho, že přijme třikrát rámec uLCo_GST s podslužbou 0 a ani jednou za tuto dobu není dotazován na svůj stav.

Přístroj ve stavu hledání nové adresy periodicky po určité době vysílá na server, od kterého přijmu zprávu uLCo_GST s podslužbou 0, požadavek na zařazení do jeho tabulky adres. Tento požadavek je uložen v rámci s Com = uLCo_NCS (network controll services), s podslužbou uLNCS_ARQ (address request), svým výrobním číslem a zakončením uL_END. Server zjistí, jestli již daný přístroj nemá v tabulce připojených přístrojů. Je-li to potřeba nalezne pro přístroj novou volnou adresu a zařadí ho do tabulky připojených přístrojů. Nakonec oznámí přístroji zprávou s rámcem s Com = uLCo_NCS, podslužbou uLNCS_ASE (address set) a výrobním číslem přístroje jeho novou adresu.

Pokud bylo nutno vytvořit novou položku v tabulce připojených přístrojů, je standardním serverem vygenerován požadavek uLCo_SID pro zjištění typu přístroje. Po zjištění typu přístroje jsou informace o nově připojeném přístroji dodány systému modelů přístrojů. Tento systém se snaží spojit položku z tabulky připojených přístrojů s již existujícím modelem přístroje. Není-li model nalezen je podle typu přístroje ".mt" vytvořen model nový.

Periodicky zjišťovaný stav je též standardně předáván do systému modelů přístrojů. Dojde-li víckrát po sobě k chybě při čtení stavu, považuje se přístroj za vypnutý a je z tabulky připojených přístrojů vyřazen. O této skutečnosti je informován i model přístroje. Ten vyhlásí chybu komunikace s přístrojem.

Existují-li záložní servery dynamického přidělení adres mohou využívat pro tvorbu tabulky připojených přístrojů zpráv uLCo_NCS s podslužbou uLNCS_ASE, které jsou vysílány s všeobecnou adresou.

Implementace komunikace mLan

Implementace komunikace mLan pro procesory 8051

Existují dvě verze knihovny. Jedna zjednodušená pro přístroje bez vnější paměti označovaná jako pLan a plnohodnotná verze knihovny označená uLan. Zde bude popsána verze využívající vnější paměť.

Požadavky knihovny :

2 byte bitově adresovatelné vnitřní paměti DATA

5 byte vnitřní paměti DATA pro přepínání stacku v segmentu SER_STACK

3 kB paměti CODE

56 byte paměti XDATA pro proměnné a minimálně 1 kB paměti pro frontu

pro některé služby je nutné sloučení vnější paměti CODE a XDATA

banka registrů RB1

sériové rozhraní procesorů řady I8051 a časovač pro generování přenosové rychlosti CT1

Jestliže jsou do systému přidány další služby pro rámce s uL_PRQ nebo uL_AAP, které potřebují prostor na stacku větší než 4 byte je potřeba zvětšit segment SER_STACK.

Vlastní předávání zpráv probíhá přes vstupní a výstupní cyklickou frontu. Funkce pro práci s frontami umožňují otevření pouze jedné vstupní a výstupní zprávy naráz. Počet zpráv ve frontách je omezen pouze jejich celkovou délkou. Pro vysílání krátkých zpráv generovaných asynchronními událostmi (v přerušení) jsou k dispozici vysokorychlostní buffery. Každý asynchronní subsystém musí před voláním služeb uložit ukazatel uL_SBP do pomocné paměti a po skončení činnosti jeho hodnotu obnovit.

Vlastní část knihovny, která se stará o příjem a vysílání zpráv a rámců běží jako samostatný paralelní proces. Při příhodu přerušení od sériového interface je uložen na stack obsah registrů PSW a ACC. Poté je zaměněn obsah ukazatele zásobníku s proměnnou v paměti DATA na adrese SER_STACK+0. Je-li tato hodnota nulová (po inicializaci) nebo bylo-li přerušení způsobeno příjmem znaku uL_ERR o hodnotě 1FFh, je provedena inicializace SP na hodnotu SER_STACK+1, aktivace banky registrů RB1 a inicializace rutin pro příjem a vysílání rámců. Není-li chyba dojde pouze k aktivaci banky registrů RB1. V případě úspěšného příjmu znaku je do ACC uložen přijatý znak, do CY bit D8 znaku a nastaven příznak AC. V případě, že je přerušení vyvoláno ukončením vysílání znaku, je příznak AC znulován. Poté je provedena instrukce RET. Tím je předáno řízení do místa, které předtím způsobilo návrat z rutiny přerušení voláním funkce S_RET. Po vyvolání funkce S_RET je opět vyměněna hodnota SP a proveden návrat z přerušení do původního programu. Tento postup umožňuje programovat funkce zajišťující komunikaci jako podprogramy, které mohou volat funkci příjmu znaku REC_CHR, funkci příjmu pouze řídících znaků REC_CTR, funkci vyslání normálního znaku SND_CHR, funkci vysílání kontrolního znaku SND_CTR, funkce vyslání prázdného znaku SND_SPC a funkce WFT_CHR. Posledně jmenovaná funkce provádí vysílání znaku s vypnutým výstupním budičem. Není-li po dobu vysílání jednoho prázdného znaku přijat znak, dojde k přerušení od vysílače. Při každém volání WTF_CHR je snížena hodnota R0. Je-li nulová dojde ke skoku na rutinu chyby S_ERR, která přeruší zpracování rámce.

Základní funkce knihovny lze volat přímo přes jejich publikované symbolické jméno nebo přes vektor uL_FNC na adrese 26h s číslem funkce v registru R0. Všechny funkce, které mohou skončit s chybou, nastavují příznak F0. Tyto funkce v případě volání s nastaveným F0 nejsou provedeny. To umožňuje provést sekvenci volání více služeb a poté pouze jednou zkontrolovat chybový příznak F0. Pro zjednodušení označení vstupu vícebytové hodnoty v několika registrech jsou zavedeny pseudoregistry R45 a R23. Méně významný byte je vždy v registru s nižším číselným označením. Totéž pro vícebytové hodnoty v paměti, kde je nejméně významný byte na nejnižší adrese.. Pro vstupní frontu bude používána zkratka IB, pro výstupní OB. Před spuštěním je potřeba provést následující funkce voláním uL_FNC s číslem služby v registru R0 :

1 Nastaví rychlost 57.6 kBd/ACC

2 Nastaví vlastní adresu na hodnotu ACC

3 Nastaví počátek IB na R2´256 délku IB na R3 a délku OB na R4, R2=0 Þ auto

4 Nastaví uL_SBLE=R2 uL_SBCO=R3 uL_SBP=R45, R245=0 Þ auto

5 Nastaví skupinu podle ACC

uL_INIT 0 Spustí u_Lan podle dříve nastavených parametrů

Pro vysílání přes výstupní frontu OB jsou definovány následující funkce:

uL_O_OP 10h Otevře výstupní zprávu pro přístroj s Adr R4 s Com R5

uL_WR 11h Zapíše R45 bytů z paměti XDATA @DP, není-li dostatek místa, je nastaven příznak F0, DP ukazuje za poslední zapsaný byte a R45 obsahuje počet bytů, které nemohly být zapsány - Ruší R012345

uL_O_CL 12h Uzavře výstupní zprávu a připraví ji pro odeslání

uL_WRB 13h Zapíše byte z @DP - Ruší R0123

uL_O_LN 14h Zkontroluje místo ve frontě OB pro R45 bytů a vrátí maximální možnou délku dalšího zápisu v R45, při nedostatku místa nastaví F0 - Ruší R012345

Pro zpracování přijatých zpráv ze vstupní fronty OB jsou definovány následující funkce:

uL_I_OP 20h Otevře vstupní zprávu vrací R4 SAdr a R5 Com, pokud není zpráva v IB k dispozici nastaví příznak F0

uL_RD 21h Načte R45 bytů do paměti XDATA @DP, není-li dostatek bytů v IB je nastaven příznak F0, DP ukazuje za poslední přijatý znak a R45 obsahuje počet bytů, které nebyly přečteny - Ruší R012345

uL_I_CL 22h Uzavře vstupní zprávu, uvolní místo, které zabírala ve frontě

uL_RDB 23h Načte byte na @DP - Ruší R0123

uL_I_LN 24h Zkontroluje jestli je v právě otevřené vstupní zprávě ještě alespoň R45 bytů ke čtení, není-li nastaví F0, vrací R45 počet nepřečtených byte - Ruší R012345

Pro asynchronní vysílání zpráv s vysokou prioritou jsou definovány následující funkce:

uL_S_OP 30h Otevře rychlý výstup zprávy pro Adr R4 s Com R5, hledá volný buffer, nalezne-li ho zapíše jeho adresu do uL_SBP a označí ho za obsazený, v opačném případě nastaví F0

uL_S_WR 31h Zapíše R45 bytů z XDATA @DP - Ruší R012345

uL_S_CL 32h Uzavře rychlou výstupní zprávu a připraví ji k odeslání

uL_O_DO 33h Registrace vlastního bufferu rychlého výstupu zprávy na adrese XDATA @R45, buffer musí obsahovat i prázdný ukazatel na další buffer, hlavičku zprávy a ostatní náležitosti

Pro správnou funkci obnovení sběrnice při chybě je nutné volat funkci uL_STR z časového přerušení s frekvencí 2 až 25 Hz.

Popis některých pro čtení přístupných proměnných v paměti XDATA :

uL_ADR Vlastní adresa přístroje

uL_GRP Skupina přístroje pro některé služby

uL_SPD Dělitel přenosové rychlosti

uL_HBIB Vyšší byte počáteční adresy fronty IB, nižší byte je vždy roven 0

uL_IB_L Délka fronty IB v násobcích 256

uL_OB_L Délka fronty OB v násobcích 256

uL_FORM Pro použití aplikačním programem, druh komunikace

uL_SBP Ukazatel na právě používaný rychlý buffer pro funkce uL_S_OP, uL_S_WRuL_S_CL

uL_SA Zdrojová adresa právě přijímaného rámce, pro vysílání z výstupní fronty naopak cílová adresa rámce

uL_CMD Právě přijímaný nebo vysílaný příkaz

Následuje popis uživateli přístupných příznaků

uLF_INE (IB not empty) Nastaven po příjmu zprávy do IB, upozorňuje na příchod zprávy, měl by být nulován uživatelem před čtením zpráv ze vstupní fronty

uLF_ERR Nastaven při opakované chybě ve vysílání zprávy, nuluje uživatel

Pokud nejsou použity vektory v paměti RAM může vnější program nabídnout knihovně funkci uL_R_BU, která je volaná přímo z přerušení po přijetí zprávy do IB. Nabídnutá funkce uL_R_CO bude volaná po přijetí zprávy s uL_PRQ nebo uL_AAP.

Pokud jsou použity vektory pro přerušení a služby v paměti RAM je možné přesměrovat vektor základních funkcí mLan V_uL_FNC = 26h. Přesměrováním vektoru V_uL_ADD = 1EH je možné rozšířit okamžité zpracování rámců v interruptu mLan pro další služby. Stav registrů v okamžiku skoku na vektor V_uL_ADD :

ACC přijaté číslo služby uL_CMD = Com

R0.0 = 1 nutné vyslat potvrzení

R0.1 = 1 požadavek na provedení služby v přerušením

R0.3 = 1 data přijata do IB

XDATA [R23] až [R67-1] přijmutá data

Reakce na rozpoznané služby může obsahovat volání NAK_CMD nebo ACK_CMD a poté čtení dat z datové části rámce po byte voláním S_R0FB a různá volání funkcí příjmu a vysílání rámců a znaků (SND_BEB .. SND_END | REC_BEG .. REC_CME). Končit musí instrukcí JMP S_WAITD.

Pokud není služba rozpoznána musí se skočit na adresu, na kterou skákal původně vektor V_uL_ADD, nebo na standardní služby přes V_uL_EADD.

S_R0FBV načte jeden byte z přijatého rámce do R0, pro správnou funkci je třeba zachovat R234567, při přečtení posledního znaku je ACC = 0 jinak ACC ¹ 0

S_EQP porovná R23 a R45, jsou-li rovné, je vráceno ACC = 0, což znamená, že již nejsou další byte v zpracovávaném rámci

Při zpracování rámce s uL_PRQ nebo uL_AAP mohou být volány následující funkce :

ACK_CMD potvrzení příjmu rámce s uL_AAP

NAK_CMD nepotvrzení příjmu rámce s uL_AAP

Vyžaduje-li to služba, může být přijat další rámec voláním:

REC_BEG přijme počátek rámce, nastaví uL_SA, uL_CMD, vrací ACC = SAdr, R0 = Com, R1 = XorSum počátku rámce

REC_CHR přijme jeden znak, vrací v ACC přijatý znak a v CY bit D8, ve volající funkci je nutné počítat v registru R1 XorSum podle vzorce R1= (R1 xor ACC) + 1

REC_END tato funkce musí být volána po návratu funkce REC_CHR s nastavenými bity AC a CY, provede příjem kontrolního znaku, došlo-li k chybě a konec rámce požaduje potvrzení (uL_ARQ nebo uL_AAP) je vysláno uL_NAK a proveden skok na S_ERR, potvrzeny jsou pouze rámce uL_ARQ, protože uL_AAP jsou potvrzeny až rutinou, která je zpracuje, dojde-li k návratu z funkce REC_CMD jsou v ACC i R0 vráceny příznaky popsané výše při skoku na vektor V_uL_ADD

REC_CME skok na tuto adresu způsobí přijímání znaků a jejich ignorování až do zakončení rámce, je-li požadavek na potvrzení vyšle uL_NAK, poté dojde k aktivaci systému pro příjem rámců, tento vektor by měl být použit vždy, když jsou během příjmu rámce přijata data, která nelze zpracovat, nebo dojde-li k přeplnění paměti pro příjem dat

Je-li potřeba přijmout více znaků přímo do paměti, lze místo několikanásobného volání funkce REC_CHR volat následující funkce :

REC_Bx přijímá znaky do paměti XDATA od adresy R23 dokud nepřijme znak s D8 = 1 nebo nedosáhne konce bufferu předaného v R67, v registru R1 počítá XorSum, skončí-li příjmem řídícího znaku (D8 = 1) nastaví příznak CY a ACC obsahuje kód znaku, R23 ukazuje za poslední přijatý znak, mění pouze R1 a R23, registry R4 a R5 jsou využity pro příjem do cyklických front, když R23 = R5×100h je do registrů R23 uložena hodnota R4×100h, pro příjem do lineárního necyklického prostoru je nutno nastavit R4 = R5

REC_Bi přijímá znaky do paměti IDATA, platí totéž co pro funkci REC_Bx, využívá pouze registrů R1, R2 a R6

Pro vysílání rámce jsou k dispozici shodné funkce, které místo příjmu vysílají :

SND_BEB vyšle počátek rámce, za Com dosadí hodnotu z uL_CMD (Com posledního přijatého rámce) s vynulovaným osmým bitem, adresu DAdr nastaví na uL_BEG.

SND_CHC vyšle jeden znak, na rozdíl od REC_CHR vypočítává XorSum v R1

SND_END vyšle zakončení rámce

SND_Bx vysílá data z paměti XDATA, platí totéž co pro REC_Bx

SND_Bi vysílá data z paměti IDATA, platí totéž co pro REC_Bi

Systém přesměrování vektorů přerušení a služeb obsahuje skoky v paměti EPROM na odpovídající adresy v paměti RAM. V paměti RAM jsou potom skoky na vlastní rutiny přerušení a služeb. Tento postup umožňuje využít pro inicializaci přístroje aplikaci v paměti EPROM. Poté je možné komunikací mLan nahrát novou verzi aplikace nebo i aplikaci zcela jinou. Ta je poté spuštěna a přesměruje na sebe vektory přerušení a služeb. Je-li to výhodné, lze využít některé rutiny z původní aplikace, například komunikaci. Aby byl tento systém jednotný byla vytvořena knihovna PB_VEC. Pro její funkci je nutné sloučení prostoru pamětí XDATA a DATA. Knihovna převezme řízení po resetování přístroje, nastaví všechny vektory přerušení na instrukci IRET a vektory služeb na RET. Poté předá řízení na adresu RES_STAR. Vektory se mění funkcemi :

VEC_CLR provede nastavení všech vektorů na adresy instrukcí RET a IRET

VEC_SET nastaví vektor s adresou v R4 na hodnotu DPTR, vrátí v R45 původní hodnotu vektoru

VEC_GET vrátí v registrech R45 hodnotu vektoru s adresou předanou v R4

VEC_USR tato funkce umožňuje vytvořit v paměti RAM instrukci skoku s předdefinovanou adresou, slouží především pro skok na původní adresu změněného vektoru, v DPTR je jí předána adresa tří byte v paměti XDATA a v R45 je předána požadovaná cílová adresa instrukce JMP, adresa těchto tří byte je poté použita jako cílová adresa skoku

Implementace komunikace mLan pro počítače PC

V současné době je komunikace implementována jako knihovna pro C nebo Pascal. Protože pracuje přímo s hardwarem a přerušeními, je zatím implementována pouze pro aplikace pod systémem MS-DOS. Existuje verze schopná práce v chráněném režimu pro programy napsané v prostředí Turbo Pascal s využitím DPMI. Tyto programy mohou využít i paměť nad magickou hranici 640kB. Požadovaný hardware je buď základní rozhraní RS 232 přítomné na všech počítačích nebo speciální karta s obvodem I80510 a rozhraním RS 485. Rozhraní RS 232 je nutné doplnit o adaptér úrovní a obousměrný budič sběrnice RS 485. Adaptér byl realizován v krytu konektoru DB9 nebo DB25. Driver sítě automaticky zjistí přítomnost adaptéru nebo I80510 a zvolí správné rutiny pro základní operace vysílání a příjmu.

Software je rozvrstven do více úrovní. Pouze první dvě úrovně jsou nutné ke komunikaci a byly napsány jako samostatný driver v assembleru. V dosavadních aplikacích je driver přilinkován k vlastnímu programu, ale jeho koncepce umožňuje samostatnou činnost a spolupráci i s více programy i v preemptivním prostředí. Tyto možnosti budou využity v budoucích implementacích. Ostatní úrovně jsou nadstavby pro snadnou stavbu aplikací v prostředí Turbo Vision.

Řízení fyzického rozhraní. Jedná se o rutiny noint (test nulovosti požadavku na přerušení), rec (příjem 9bit znaku), send (vyslání 9bit znaku), wait_cx (čekání na příjem znaku po dobu přenosu cx znaků), Connect (připojení s arbitrací), wait (čekání po dobu jednoho znaku) a rutina pro uvolnění rozhraní. Tyto rutiny jsou součástí komunikačního driveru a jsou definovány pro každé fyzické rozhraní. Při inicializaci jsou po detekci rozhraní vybrány příslušné rutiny. Pokud rutiny čekají na přerušení, volají S_reti, tato rutina přepne kontext zpět do programu, který byl předtím přerušen, obnoví jeho registry a provede návrat z přerušení. Po příchodu přerušení uloží registry přepne kontext pro komunikaci a vrátí se do rutiny, která S_reti volala. Neobnovuje však registry, to musí udělat až jednotlivé rutiny příjmu a vysílání znaků a čekání.

Další část komunikačního driveru mLan obsluhuje vysílání a příjem rámců, zpracování zpráv, obsluhu komunikačního bufferu a vyřizuje požadavky aplikací a informuje je o zpracování jejich zpráv. Protože v prostředí DOS a i Windows není vůbec řešen problém atomické (asynchronní) alokace paměti v přerušení je pro komunikaci zaalokována paměť při inicializaci. Paměť je rozdělena na 66 bytové bloky. 64 byte slouží k uložení dat a 2 byte slouží jako ukazatel na následující blok nebo při hodnotě 0 jako konec řetězce bloků. Na začátek jsou veškeré bloky zřetězeny a adresa prvního je přiřazena ukazateli na volné bloky. Dále jsou inicializovány dva obousměrně zřetězené seznamy zpráv. Do jednoho jsou zařazovány zprávy určené k vysílání, do druhého jsou přidávány přijaté zprávy a je-li to požadováno, přesouvány zpracované zprávy z prvního seznamu. Zpráva se objeví v seznamu jako jeden blok paměti, jehož prvních 32 obsahuje dopředný a zpětný ukazatel na další zprávy a informace o příznacích zpracování Flg, DAdr, SAdr, Com, číslo připojené aplikace, informační číslo pro aplikaci (číslo jejího objektu), délku a inicializační řetězec, jedná-li se o vícerámcovou zprávu. Zbylých 32 byte obsahuje data zprávy. Je-li zpráva delší než 32 byte jsou přidány další 64 bytové bloky pomocí ukazatelů na následující bloky. Toto paměťové řešení umožňuje atomickou alokaci bloků, není nutno hledat volné bloky, změnu délky zprávy během příjmu nebo při vyřizování zprávy vyžadující příjem datového rámce. Libovolný objekt libovolné aplikace může kdykoliv i asynchronně požádat o otevření vstupní nebo výstupní zprávy, vložení nové výstupní zprávy o zápis, čtení, prohledávání zpráv atd..

Unita uL_Com je již součástí komunikační knihovny aplikace, umožňuje registraci aplikace v driveru jako uživatele sítě objektem uL_User. Vytváří komunikační objekty uL_ObjDe. Každý objekt uL_ObjDe může prohledávat seznamy zpráv nebo mít otevřenu jednu zprávu. Objekt uL_User předává informaci o provedení nebo chybě objektu uL_ObjDe, který zprávu vložil do seznamu. Tyto informace dostává přímo od komunikačního driveru. Přijaté zprávy od přístrojů jsou rozesílány uživatelům a komunikačním objektům podle masek.

Unita uL_Modul se stará o seznam připojených přístrojů. Samostatně je schopna na příkaz vložit informaci o přístroji do seznamu, zjistit jeho popis, vymazat přístroj ze seznamu, otestovat všechny přístroje na sběrnici. O změně stavu přístrojů informuje ostatní části systému. Zároveň v součinnosti s unitou uL_Hex umožňuje inspekci paměti a registrů přístrojů, krokování a další pro vývoj vhodné funkce.

Unita uL_DyAdr definuje jeden komunikační objekt, který se chová jako server dynamického přiřazování adresy. Informace ukládá do seznamu připojených přístrojů. Získanou krátkou stavovou informaci z každého přístroje periodicky předává objektům, které jsou uvedeny v seznamu přístrojů.

Unita uL_Instr vytváří model každého přístroje ke každému výrobnímu číslu. Je-li typ přístroje ".mt" nalezen v databázi známých modelů, je zavolána unita, která popisuje tento typ. Model je informován o stavu přístroje a o jeho odpojení. Unita se zároveň stará o oprávnění zásahů do přístrojů a editace modelů. Unita zároveň obsahuje základní služby pro nastavování a čtení hodnot parametrů a řízení přístroje. Tato činnost je realizována další standardní nadstavbou protokolu. Jedná se o objektovou streamovou komunikaci, umožnující přenést v podstatě jakákoliv data. Několik příkazů a parametrů lze vyslat v jednom rámci. Do budoucna je počítáno s jazykem popisujícím jednotlivé přístrojem rozpoznávané objekty a umožňujícím automatickou tvorbu modelu i neznámého přístroje zpřístupňujícího všechny jeho funkce.

Další úrovní jsou již modely jednotlivých přístrojů a ostatní části aplikace.

Vzhledem k tomu, že se jedná o asi 250 kB zdrojových textů, nebude zde systém podrobně popisován. Software byl vytvořen pro firmu PiKRON a je jejím majetkem.