4. Sběrnice GP-IB Standard GP-IB je v současnosti nejrozšířenějším způsobem propojení měřicí techniky ve světě. Sběrnice umožňuje propojit měřicí přístroje do automatizovaného měřícího systému. Tyto měřicí přístroje jsou většinou schopny jak autonomního provozu (local), tak i provozu v systému řízeném počítačem (remote). Standard se velmi osvědčil, vyznačuje se velkou spolehlivostí, snadným použitím, dobrou programovou podporou na PC a také relativně vysokou morální životností vzhledem např. k výpočetní technice. Sběrnice byla vyvinuta ve firmě Hewlett-Packard jako firemní sběrnice HP- IB. Standardizována byla v r. 1972 pod označením IEEE488. K rozšíření standardu došlo v r. 1987 pod označením IEEE488.2, přičemž původní standard je nyní označován jako IEEE488.1. V bývalém Československu byl tento standard přijat v r. 1984 pod označením IMS-2 normou ČSN356522. Odpovídá dříve v Evropě rozšířenému standardu IEC625. Od standardu IEEE488 se liší především v provedení a zapojení propojovacích konektorů. 4.1 Standard IEEE488.1 Měřicí systém na základě sběrnice GP-IB je většinou řízen přes zásuvnou desku rozhraní osobním počítačem. Řídící počítač zajišťuje kromě řízení měřícího procesu i zpracování, prezentaci a archivaci naměřených hodnot. Obr. 4. 1: Uspořádání sběrnice GPIB.
Měřicí přístroje - funkční jednotky jsou připojeny ke sběrnici GP-IB a mají vzhledem k řídící jednotce charakter jedné periferie. Kompatibility jednotlivých funkčních jednotek připojených ke sběrnici se dosahuje zařazením vhodných obvodů rozhraní mezi sběrnici GP-IB a vnitřními obvody. Splnění tohoto standardu umožňuje uživateli sestavit měřicí systém složený z přístrojů různých výrobců a použít do jisté míry libovolného počítače pro řízení. Funkčními jednotkami mohou být, jak měřicí přístroje s číslicovým výstupem, tak i jiné členy měřicích obvodů vybavené rozhraním GP-IB. Funkční jednotkou mohou být i periferie používané u počítačů (např. tiskárna) opatřené obvody rozhraní GP-IB. Uspořádání sběrnice je liniové, viz obr. 4. 1. funkční jednotky jsou ke sběrnici připojeny paralelně speciálními dvojitými konektory s 24 kontakty (IEEE488) viz obr. 4. 2. nebo s 25 kontakty (IEC625), z nichž jedna strana Obr. 4. 2: Propojovací konektor podle IEEE 488. konektoru je tvořena zásuvkou a druhá zástrčkou. Je tedy možné jednotlivé konektory vzájemně spolu libovolně propojovat. Není nutno dodržovat liniové propojení - jsou možné libovolné kombinace linie-hvězda. Jediným omezením při propojování je max. délka kabelů 20m a 16 připojených rozhraní. Propojování je možno provádět za provozu. GP-IB používá asymetrickou sběrnici se společným zemnicím vodičem, obsahující 16 aktivních žil, z nichž 8 (označených DIO1, DIO2,...DIO8) se
používá k přenosu dat. Druhých 8 vodičů je využito pro jednovodičové řídící signály, z nichž 3 zajišťují přenos zpráv po vodičích DIO1 až DIO8 (označované DAV, NRFD, NDAC) a zbylých 5 je určeno pro jednovodičové zprávy (označované ATN, IFC, SRQ, REN, EOI). Šest vodičů připojených k zemnímu potenciálu tvoří kroucené dvojice se signály (DAV, NRFD, NDAC, ATN, IFC, SRQ). Kabel je opatřen stínícím pláštěm. Datové vodiče DIO1 až DIO8 přenášejí data po jednotlivých bajtech. Bajty mohou mít pro funkční jednotku význam informační (tj. naměřené hodnoty, přístrojové zprávy), nebo to mohou být adresy, či jde o vícevodičové zprávy řídící činnost rozhraní funkčních jednotek. Rozlišení, zda se jedná o informační data nebo ostatní, se provádí jednovodičovým signálem ATN. Je-li ATN = log.0, mají signály na DIO vodičích význam informačních dat. Je-li ATN = log.1, jde o adresy nebo o vícevodičové zprávy. Směr přenosu informací mezi jednotkami je dán naadresováním jednotek. Každá funkční jednotka má dvě adresy - přijímací a vysílací. Jednotka přijímá (posluchač - L) nebo vysílá (mluvčí - T) podle toho, kterou adresou je jednotka naadresována. Současně může pracovat několik jednotek jako posluchač, ale jako mluvčí smí pracovat pouze jedna funkční jednotka. Řízení systému zajišťuje většinou osobní počítač (řidič C). V systému smí být aktivní pouze jedna řídící funkční jednotka. Informační data mohou mít význam naměřených hodnot, nebo programovacích příkazů funkčních jednotek, eventuálně stavových bajtů. Jejich rozlišení provádí funkční jednotka sama. Naměřené hodnoty i programovací znaky jsou nejčastěji kódovány kódem ASCII (ISO 7). Norma však dovoluje v odůvodněných případech, např. v blokových přenosech, použít i jiné kódy. Jsou to kódy binární, zhuštěný osmičkový, zhuštěný šestnáctkový, šestnáctkový, zhuštěný binárně desítkový a binárně desítkový. Řízení přenosu bajtů po DIO vodičích se děje korespondenčním cyklem, při němž se používá tří jednovodičových signálů - DAV, NRFD, NDAC. Význam těchto signálů je následující: DAV (Data Valid) - signál určuje platnost jednoho bajtu na výstupu vysílající funkční jednotky; během jeho trvání se signály na DIO nesmí měnit. NRFD (Not Ready For Data) - přijímající funkční jednotka vysílá informaci vysílající funkční jednotce, že není připravena přijmout další bajt. NDAC (Not Data Accepted) - přijímající funkční jednotka vysílá informaci vysílající funkční jednotce, že ještě nepřijala vysílaný bajt. Přenosový cykl je symbolicky znázorněn v časovém diagramu na obr. 4. 3. Z obrázku je vidět, že sběrnice GP-IB používá negativní logiky, tj., že úrovni log.1 odpovídá elektrické napětí 0V vůči zemi a úrovni log.0 odpovídá elektrické napětí +5V v tolerancích TTL logiky. Časový průběh signálů NRFD a NDAC odpovídá připojení více posluchačů ke sběrnici.
Obr. 4. 3: Přenosový cyklus sběrnice GP-IB. Přenosový cykl je zahájen v bodě 1 vysílající funkční jednotkou při DAV=log.0 kontrolou signálů NRFD a NDAC - bod 2. V případě splnění podmínek NRFD=log.1 a NDAC=log.1 vysílající funkční jednotka vloží data na vodiče DIO1-8 - bod 3. Přijímající funkční jednotky postupně signalizují připravenost přijmout data - bod 4. V bodě 5 (NRFD=log.0 a NDAC=log.1) jsou již všechny přijímající funkční jednotky připraveny přijmout data. Vysílající funkční jednotka po zjištění, že NRFD=log.0 nastaví vodič DAV=log.1 a tím indikuje, že na vodičích DIO jsou platná data - bod 6. Vodiče DIO v bodě 6 již musí být ustáleny, proto je stanoven minimální čas přechodu mezi body 3 a 6. Především podle typu budičů se pohybuje v rozmezí 0,35 2µs. Přijímající funkční jednotky reagují na vodič DAV=log.1 změnou stavu vodiče NRFD na log.1 - bod 7. Převzetí dat indikují přijímající funkční jednotky vodičem NDAC=log.0. Některé - bod 8. Všechny - bod 9. Na stav NDAC=log.0 reaguje vysílající funkční jednotka změnou stavu vodiče DAV na stav DAV=log.0 - bod 10. Data na vodičích DIO tedy již nejsou platná - bod 11. Přijímající funkční jednotky reagují na DAV=log.0 změnou stavu vodiče NDAC na log.1 - bod 12. Vysílají a přijímající funkční jednotky jsou nyní ve stejném stavu jako na počátku přenosového cyklu. Tento poměrně složitý přenosový cykl zajišťuje spolehlivý asynchronní přenos dat mezi funkčními jednotkami bez ohledu na jejich rychlost. Přenosová rychlost se přizpůsobí té nejpomalejší funkční jednotce. V normě [4.1] jsou kromě časových průběhů ještě uvedeny přenosové vývojové diagramy a složitější stavové diagramy. Firmou National Instruments byl vyvinut rychlejší přenosový cykl, který se nazývá HS488 a je na obr. 4. 4. Jsou-li přijímající funkční jednotky připraveny přijmout data NRFD=log.0, vysílající funkční jednotka krátkodobě změní stav vodiče NRFD na log.1 bod 1. Tímto způsobem indikuje přijímajícím funkčním jednotkám schopnost použít přenosový režim HS488. Potom probíhá normální
Obr. 4. 4: Přenosový cyklus HS488. přenosový cykl až do bodu 7 dle obr. 4. 3, kdy, pokud jsou všechny přijímající funkční jednotky přizpůsobeny pro režim HS488, nedojde ke změně vodiče NRFD na log.1. Přijímající funkční jednotky potom pouze potvrdí příjem prvního bajtu vodičem NDAC=log.0 bod 2. Přenos dalších bajtů je potom řízen pouze vodičem DAV bod 3. Přenosová rychlost v režimu HS488 může dosáhnout až 8MB/s. Režim HS488 je možno využít pouze při přenosu informačních dat a disponuje jím dosud malé množství přístrojů. K buzení sběrnice je možno použít třístavových budičů nebo budičů s otevřeným kolektorem. Toto provedení buzení jednoho vodiče sběrnice dvěma funkčními jednotkami je na obr. 4. 5. Aktivní signál (log.1) se přivede na vodič Obr. 4. 5: Princip připojení budičů sběrnice GP-IB. sběrnice otevřením tranzistoru kterékoli funkční jednotky, čímž elektrické napětí vodiče klesne na 0 vůči zemi. Otevřeným tranzistorem pak prochází proudy i z jiných funkčních jednotek. Tyto tranzistory jsou dimenzovány na připojení maximálně 16 jednotek. Další funkce rozhraní GP-IB se řídí zbylými pěti jednovodičovými signály. ATN (Attention) - určuje význam bajtů přenášených po vodičích DIO - bylo již vysvětleno výše.
IFC (Interface Clear) - uvádí všechny funkční jednotky do klidového (předem určeného) stavu. Signál vysílá pouze řídící jednotka. REN (Remote Enable) - přepojuje řízení funkčních jednotek z místního na dálkové. Signál vysílá pouze řídící jednotka. SRQ (Service Request) - přerušovací signál, který může vyslat kterákoli funkční jednotka; když řídící jednotka přijme tento signál, postupně se zeptá všech funkčních jednotek, zda žádaly o přerušení. Tuto činnost je nutno zajistit programově. EOI (End or Identify) význam je závislý na signálu ATN. Je-li ATN=log.0, potom určuje poslední bajt sériového přenosu. Konec sériového přenosu je také možno odvodit od znaku LF. Před znakem LF je možno ještě vysílat znak CR. Aby byla zajištěna správná funkce systému, je vhodné současně se znakem LF vysílat i zprávu EOI. Tímto způsobem - použitím alternativních ukončovačů - řeší situaci inovovaný standard IEEE488.2. Je-li ATN=log.1, je signál EOI chápán funkčními jednotkami jako výzva k vyslání stavového bajtu v režimu tzv. paralelního hlášení (viz níže). Rychlost přenosu údajů po kterémkoli vodiči nemá převyšovat 1Mbit/s. Aby nedošlo ke zkreslení signálů elektrickými vlastnostmi vedení sběrnice, nesmí být celková délka přenosové cesty větší než 20m a vzdálenost sousedních funkčních jednotek větší než 2m. Předepsané vlastnosti vnějšího obvodu rozhraní jsou ve standardu určeny pomocí funkcí rozhraní. Vlastnosti funkcí rozhraní jsou vyjádřeny pomocí stavových diagramů. Jde o tyto funkce: SH -zdroj korespondence AH -příjemce korespondence T/TE -mluvčí/rozšířený mluvčí L/LE -posluchač/rozšířený posluchač SR -vyžádání obsluhy PP -paralelní hlášení DC -nulování přístroje DT -spouštění přístroje RL -dálkové/místní ovládání C -řidič Konkrétní funkční jednotka může ve vnějším obvodu rozhraní obsahovat pouze potřebné funkce. Např. přístroj, který nebude v systému nikdy vystupovat ve funkci řídící funkční jednotky (C), nemusí mít ani tuto funkci realizovánu (C0), takže např. multimetr HP3478A disponuje funkcemi SH1, AH1, T5, TE0, L4, LE0, SR1, PP0, DC1, DT1, RL1, C0. Nejdůležitější funkce rozhraní jsou funkce AH a SH. Funkce AH (Acceptor Handshake) umožňuje přístroji vybavenému odpovídající schopností zajistit správný příjem všech dálkových vícevodičových zpráv. Součinnost mezi SH (Source Handshake) funkcí a jednou nebo více AH funkcemi (z nichž každá je obsažena v jednom přístroji) zajišťuje asynchronní přenos každého bajtu kterékoli zprávy. Funkce AH může zpozdit jak začátek, tak i konec přenosu vícevodičové zprávy, není-li připravena na pokračování přenosu dle obr. 4. 3.
Z dalších funkcí rozhraní je nutno se zmínit o funkcích SR (Service Request) a PP (Parallel Poll). Tyto funkce umožňují podřízeným funkčním jednotkám požádat řídící funkční jednotku o obsluhu. Zabývejme se nejdříve funkcí SR - vyžádání obsluhy. Vyvolání činnosti této funkce provede kterákoli podřízená funkční jednotka vysláním jednovodičové zprávy SRQ=log.1. V programu měřícího procesu, podle něhož pracuje řídící funkční jednotka měřícího systému, je nutno na vhodných místech testovat vodič SRQ. Jestliže je tímto způsobem zjištěna žádost o obsluhu je nutno vyhledat funkční jednotku, která žádá o obsluhu. Toto vyhledání se provádí tak, že rozhraní řídící funkční jednotky vyšle univerzální dálkovou vícevodičovou zprávu SPE (Serial Poll Enable - umožnění sériového hlášení), po jejímž přijetí připraví všechny podřízené funkční jednotky své stavové bajty k vyslání na sběrnici. Poté adresuje řídící funkční jednotka sebe na příjem a první funkční jednotku na vysílání. Po ukončení vysílání těchto adres nastaví řídící funkční jednotka ATN=log.0, na vysílání naadresovaná funkční jednotka vyšle svůj připravený stavový bajt řídící funkční jednotce. Jestliže řídící funkční jednotka shledá (podle obsahu stavového bajtu), že tato funkční jednotka nežádala o obsluhu, naadresuje další funkční jednotku na vysílání a přijímá její stavový bajt. Po ukončení tohoto procesu ukončí řídící funkční jednotka proces vyžádání obsluhy vysláním univerzální dálkové vícevodičové zprávy SPD (Serial Poll Disable - ukončení sériového hlášení). Po této zprávě přestanou být všechny funkční jednotky připraveny vysílat své stavové bajty a může pokračovat normální činnost měřícího systému. Stavový bajt má charakter osmibitového znaku, ve kterém jsou jen některé bity testovány. Podle normy je rozhodující logická úroveň vodiče DIO7. Jestliže je DIO7=log.1, žádá příslušná jednotka o obsluhu. Nevýhodou této funkce je určité zpoždění programu přenosem a analýzou stavových bajtů z funkčních jednotek. Další možnost jak zjistit, zda některá funkční jednotka žádá o obsluhu, se nazývá "paralelní hlášení" PP (Parallel Poll). Tato funkce tolik nezpožďuje měření, neboť jedním dotazem řídící funkční jednotky se zjistí, která funkční jednotka ze zvolených osmi žádá o obsluhu. Tento dotaz na funkční jednotky provede řídící funkční jednotka současným vysláním ATN=log.1 a EOI=log.1. Jakmile funkční jednotky identifikují tyto signály na sběrnici, vyšle každá na jí dříve určený DIO vodič příslušný bit (log.0 nebo log.1). Takto vytvořený bajt řídící funkční jednotka přečte a odejme signály ATN a EOI. Funkční jednotky potom stáhnou příslušné bity z DIO vodičů. Existují dva způsoby jak nastavit, na kterém DIO vodiči se funkční jednotka bude hlásit. První možnost je nastavením uživatelem přímo v přístroji - tzv. místní nastavení kódu pro paralelní hlášení. Druhá možnost je programově řídící funkční jednotkou pomocí adresované vícevodičové dálkové zprávy PPE (Parallel Poll Enable - určení kódu paralelního hlášení). Programová konfigurace je zahájena po naadresování vícevodičovou dálkovou zprávou PPC (Parallel Poll Configure - příprava na určení kódu paralelního hlášení). Potom je vyslána vícevodičová dálková zpráva PPE určující
DIO vodič a log. hodnotu. Ukončení je provedeno odadresováním funkční jednotky. Nastavené kódy je možno zrušit univerzální vícevodičovou dálkovou zprávou PPU (Parallel Poll Uncofigure - zrušení konfigurace pro paralelní hlášení). Nejrozsáhlejší funkcí je funkce řidiče (C). S touto funkcí se běžný uživatel setká minimálně. Zajímavá je možnost předávat řízení mezi jednotkami disponujícími touto vlastností (vícevodičová adresovaná zpráva TCT - převezmi řízení). Stavové diagramy všech funkcí rozhraní jsou uvedeny v normě [4.1]. Jak již bylo dříve naznačeno, řízení sběrnice GP-IB probíhá kromě jednovodičových zpráv také pomocí vícevodičových dálkových zpráv. Tyto zprávy se dělí na adresované a univerzální. Podrobný seznam těchto zpráv je v tab. 4. 1. Kromě dálkových zpráv standard také definuje místní přístrojové zprávy, které jsou uvedeny v tab. 4. 2. Tyto zprávy jsou přenášeny mezi obvody rozhraní tj. řadičem sběrnice GP-IB a řízením přístroje tj. většinou mikropočítačem. Fyzická realizace těchto zpráv není normalizována, takže je závislá na volbě konstruktéra. Standard pevně stanoví způsob komunikace mezi funkčními jednotkami, přitom však nechává prostor konstruktérovi, aby si mohl sám stanovit obvodovou realizaci rozhraní a způsob programování funkčních jednotek. Standard tedy nijak neblokuje technický pokrok a další rozvoj standardu na základě nabytých zkušeností. Pro uživatele z toho vyplývá možnost použití funkčních jednotek starších i nejnovějších v jednom systému i jejich spolupráce. Z ekonomického hlediska to má nedozírné důsledky v tom, že lze plynule a postupně doplňovat stávající měřicí systémy novějšími funkčními jednotkami aniž by bylo nutné vyměnit celý měřicí systém najednou.
Symbol Význam zprávy Třída zprávy DIO ATN EOI Desítková hodnota 8 7 6 5 4 3 2 1 Všeobecné zprávy GTL přejdi do místního ovládání ACG x 0 0 0 0 0 0 1 1 0 1 SDC výběrové nulování ACG x 0 0 0 0 1 0 0 1 0 4 GET skupinové spuštění ACG x 0 0 0 1 0 0 0 1 0 8 TCT převezmi řízení ACG x 0 0 0 1 0 0 1 1 0 9 LLO blokování místního ovládání UCG x 0 0 1 0 0 0 1 1 0 17 DCL nulování funkčních jednotek UCG x 0 0 1 0 1 0 0 1 0 20 UNL odadresování všech přijímačů x 0 1 1 1 1 1 1 1 0 63 UNT odadresování všech vysílačů x 1 0 1 1 1 1 1 1 0 95 END konec zprávy x x x x x x x x 0 1 - Vyžádání obsluhy SPE umožnění seriového hlášení UCG x 0 0 1 1 0 0 0 1 0 24 SPD ukončení seriového hlášení UCG x 0 0 1 1 0 0 1 1 0 25 Paralelní hlášení PPC připravit na určení kódu PP ACG x 0 0 0 0 1 0 1 1 0 5 PPU konec připravenosti pro PP UCG x 0 0 1 0 1 0 1 1 0 21 PPE určení kódu PP x 1 1 0 S P P P 1 0 96-111 PPD zrušení nastavení kódu pro PP x 1 1 1 0 0 0 0 1 0 112 IDY ohlaš se x x x x x x x x 1 1 - PPR1 až první paralelní hlášení až 0 0 0 0 0 0 0 1 - PPR8 osmé paralelní hlášení 1 0 0 0 0 0 0 0 - Druhy vícevodičových zpráv PCG skupina primárních příkazů x 0 0 P P P P P 1 0 0-31 ACG skupina adresovaných příkazů x 0 0 0 P P P P 1 0 0-15 UCG skupina univerzálních příkazů x 0 0 1 P P P P 1 0 16-31 LAG skupina adres posluchače x 0 1 P P P P P 1 0 32-63 TAG skupina adres mluvčího x 1 0 P P P P P 1 0 64-95 SCG skupina sekundárních příkazů x 1 1 P P P P P 1 0 96-127 Normalizované zkratky MLA vlastní adresa posluchače x 0 1 P P P P P 1 0 32-63 MTA vlastní adresa mluvčího x 1 0 P P P P P 1 0 64-95 MSA vlastní sekundární adresa x 1 1 P P P P P 1 0 96-127 Tab. 4. 1: Seznam vícevodičových zpráv standardu IEEE 488.1.
Symbol Název Použití pon zapnutí napájení přístroje SH, AH, T, L, SR, RL, C rdy připraven k příjmu AH ltn poslouchej L lon pouze poslouchej L lun místní neposlouchej L nba nový bajt připraven SH ton pouze mluv T rsv vyžádání obsluhy SR rtl přejdi do místního ovládání RL lpe místní nastavení kódu pro PP PP ist přístroj žádá o obsluhu PP rpp požadavek PP C tcs převezmi řízení synchronně C tca převezmi řízení asynchronně C rsc požadavek na systémové řízení C sre vyšli zprávu REN C sic vyšli zprávu IFC C gts přejdi do pohotovosti C irs požadavek individuální obsluhy PP Tab. 4. 2: Místní přístrojové zprávy standardu IEEE 488.1. 4.2 Standard IEEE488.2 Rozšíření standardizace sběrnice GP-IB pod označením IEEE488.2 definuje následující pravidla pro činnost systému: a) minimální sestavu funkcí rozhraní dle IEEE488.1; b) formát dat a syntaxi zpráv; c) rozšířený stavový model; d) soubor obecných příkazů; e) protokol přístrojových zpráv. a) Minimální sestava funkcí rozhraní Funkční jednotka jejíž rozhraní je realizováno dle standardu IEEE488.2 musí obsahovat z důvodů návaznosti na standard IEEE488.1 minimální sestavu funkcí rozhraní - viz tab. 4. 3.
Funkce rozhraní Požadované schopnosti SH1 úplné AH1 úplné T5, T6, nebo TE5, TE6 hlavní mluvčí, sériové hlášení, nulování při MLA L3, L4, nebo LE3, LE4 základní posluchač, nulování při MTA SR1 všechny RL0, nebo RL1 žádné nebo všechny PP0, nebo PP1 žádné nebo konfigurace s dálkovým ovládáním DC1 všechny DT0, nebo DT1 žádné nebo všechny žádné nebo reakce na SRQ s vys. styk. zpráv, C0, nebo C4 s C5, C7, C9, nebo C11 převzetí a předání řízení, synchr. převzetí hlášení Tab. 4. 3: Minimální sestava funkcí rozhraní IEEE 488.2. b) Formát dat a syntaxe zpráv Datové formáty jsou ve standardu IEEE488.2 rozděleny na formáty pro příjem a vysílání. Oba druhy se jen nepatrně liší podle zásady přijímat "libovolný" tvar a vysílat přesně definovaný tvar. V původním standardu jsou data přenášena nejčastěji po jednotlivých znacích v kódu ISO7 (ASCII). Vodič DIO8 může být použit jako paritní bit, ale většinou se nepoužívá. Jednotlivé znaky jsou přenášeny za sebou. Čísla se přenášejí v desítkové soustavě a to tak, že se nejprve přenese znaménko a pak následují jednotlivé číslice. Inovovaná verze ustanovuje pro přenos dat tři kódy: ISO7 - sedmibitový kód pro přístrojové zprávy (DIO8 se ignoruje); osmibitový celý - binární vyjádření čísel, které obsahuje tolik bajtů, kolik je třeba. Nejvýznamnější bajt se vysílá jako první. DIO8 je bit s nejvyšší váhou v bajtu; binární s pohyblivou řádovou čárkou - jde o exponenciální tvar s jednoduchou nebo dvojnásobnou přesností. Číslicové formáty Povinným formátem jsou data vyjádřená v desítkové soustavě v kódu ISO7 a číslicovém formátu NR1. Volitelné jsou desítkové číslicové formáty NR2 a NR3. Mezi volitelné číslicové formáty jsou dále zahrnuty hexadecimální numerická data (např. #H01AC), oktalová numerická data (např. #Q7034) a binární numerická data (např. #B1001), zde lze používat pouze velká písmena. Číslicový formát NR1 se skládá z číslic desítkové soustavy s implicitní desetinnou tečkou vpravo za číslem (např. -123).
Číslicový formát NR2 se skládá z číslic desítkové soustavy s jednou desetinnou tečkou umístěnou na libovolném místě mezi těmito číslicemi (např. 12.3). Číslicový formát NR3 se skládá z číslic desítkové soustavy včetně znaménka v exponenciálním tvaru. Tvar mantisy odpovídá formátu NR2. Exponent je oddělen znakem E (přijímat je nutno e a E, vysílat je možno pouze E ) a skládá se z desítkových číslic včetně znaménka tvořících exponent (např. 1.23E+5). Znakový formát Znakový formát se používá v případě, že není vhodná číslicová odpověď funkční jednotky. Skládá se ze skupiny písmen velké abecedy a číslic včetně znaku _ a začíná písmenovým znakem (např. R2_D). Řetězcový formát Řetězcový formát je charakterizován tím, že vysílaný řetězec začíná a končí uvozovkami. V porovnání se znakovým formátem může obsahovat libovolné znaky kódu ISO7. Řetězcový formát může obsahovat i vložené řetězce (např. "pristroj nema rozsah "100kV""). Blokový formát Tento formát umožňuje vysílat blok dat pomocí osmibitových datových bajtů. Na začátku bloku musí být znak # následovaný číslicí v kódu ISO7 udávající počet znaků následujícího čísla ve formátu NR1, které udává počet datových bajtů v bloku (např. #203<B><B><B>). Blokový formát umožňuje také vysílat blok dat předem neznámé délky. Na začátku bloku opět musí být znak # následovaný číslicí 0 v kódu ISO7. Poté následují datové bajty přenášeného datového bloku. Datový blok je ukončen znakem LF společně s jednovodičovou zprávou EOI (např. #0<B><B>LF^EOI). Uvnitř bloku není možno použít kódu znaku LF. Oddělovače a ukončovače Standard IEEE488.2 definuje též syntaxi vysílaných a přijímaných zpráv následujícím způsobem: ukončovací znak řetězce příjem: a) pouze znak LF b) znak LF současně s jednovodičovou zprávou EOI c) pouze jednovodičová zpráva EOI vysílání: znak LF současně s jednovodičovou zprávou EOI oddělovač jednotlivých příkazů stejné úrovně - : (např. "VOLT:DC) oddělovač příkazů vyšší úrovně ve vícenásobné zprávě - ; (např. *RST;*CLS)
oddělovač významové části příkazu od jeho parametrů - (např. VOLT:DC 100) oddělovač jednotlivých parametrů příkazu -, (např. VOLT:DC 100,1E-2) ukončovací znak dotazu -? (např. *IDN?) Obr. 4. 6: Rozšířený model stavových registrů podle IEEE 488.2. c) Rozšířený stavový model Standard IEEE488.1 obsahuje dvě funkce rozhraní pro uplatnění žádosti o obsluhu podřízených funkčních jednotek. Pro tyto účely obsahuje každá funkční jednotka tzv. stavový registr, jehož obsah je schopna vyslat na požádání řídící
funkční jednotky. Inovovaný standard IEEE488.2 pro použití sériového hlášení rozšiřuje tento jeden stavový registr minimálně na dva zdvojené stavové registry - registr stavového slova SBR (Status Byte Registr) a standardní stavový registr událostí SESR (Standard Event Status Registr). Ke každému z těchto registrů je přiřazen pomocný registr (Enable Registr) umožňující aktivaci resp. maskování jednotlivých bitů stavových registrů. Uživatel má tím možnost určit, na které bity stavových registrů bude funkční jednotka reagovat vysláním jednovodičové zprávy žádosti o obsluhu (SRQ). Základní stavový model je na obr. 4. 6. Na obrázku je vidět vzájemná souvislost hlavních stavových registrů (SBR a SESR) s jejich pomocnými registry (SRER a SESER) i vazba registru událostí na registr stavového slova. Nastavení resp. čtení těchto registrů je možné pomocí obecných příkazů *STB?, *SRE, *SRE?, *ESR?, *ESE a *ESE? a vícevodičovou dálkovou zprávou rozhraní SPE. Jestliže funkční jednotka vyšle stavový bajt, má být dle standardu IEEE488.1 celý registr stavového slova nulován. Dle standardu IEEE488.2 se nuluje pouze hlavní souhrnný stavový bit (DIO7). Pro nulování celého registru stavového slova existuje společný příkaz *CLS, který nuluje všechny stavové datové struktury. V registru stavového slova (SBR) jsou pevně definovány tři bity. Bit DIO7 má význam hlavního souhrnného stavového bitu MSS (Master Sumary Status Bit). Je-li nastaven (MSS=log.1), pak nastala alespoň jedna příčina k žádosti o obsluhu. Je-li MSS=log.0, pak funkční jednotka nemá žádnou příčinu k žádosti o obsluhu. Příčiny k žádosti o obsluhu mohou být dvě. Buď ve výstupní frontě (Output Queue) je připravena pro vyslání nějaká zpráva - což se projeví nastavením bitu DIO5 - MAV (Message Available Bit), nebo standardním stavovém registru událostí (SESR) došlo k nastavení některého bitu, což se projeví nastavením bitu DIO6 - ESB (Event Status Bit). Ostatní bity v registru stavového slova (SBR) nejsou standardem definovány. Příkazy pro nastavení resp. čtení těchto registrů jsou uvedeny na obr. 4. 6. u těchto registrů. Význam jednotlivých bitů ve standardním stavovém registru událostí je dán normou a je uveden v tab. 4. 4. Využití funkce vyžádání obsluhy lze při provozu systému programovat tak, že na vhodných místech testujeme signál SRQ a je-li pravdivý přebíráme a analyzujeme Bit Název Význam 0 Operation complete Indikuje ukončení akce 1 Request control Indikuje požadavek na převzetí řízení 2 Query error Pokus o čtení nedostupných výst. dat; ztráta výst. dat 3 Device error Přístroj nemůže dokončit operaci 4 Execution error Data v příkaze mimo povolený rozsah 5 Command error Chyba syntaxe nebo sémantická chyba 6 User request Indikuje zásah uživatele do řízení 7 Power on Indikuje vypnutí a opětovné zapnutí přístroje Tab. 4.4: Význam bitů ve standardním stavovém registru událostí.
stavový bajt. To je možné provádět nejen vícevodičovou dálkovou zprávou rozhraní SPE, ale také přímo dotazem (*STB?) na stav registru stavového slova. Registr stavového slova využívá i funkce paralelního hlášení. Datová struktura zajišťující generování a řízení odpovědního bitu je na obr. 4. 7. Registr stavového slova je rozšířený z osmibitového na šestnáctibitový. Prvních osm bitů koresponduje s registrem stavového slova. Dalších osm bitů obsahuje podmínky definované přístrojem. k celému tomuto registru je přiřazen pomocný registr PPER (Parallel Poll Enable Registr) Nastavení resp. čtení tohoto registru je možné pomocí obecných příkazů *PRE a *PRE?. Využití funkce paralelního hlášení lze Obr. 4. 7: Struktura generování a řízení odpovědního bitu funkce paralelního hlášení. při provozu systému programovat tak, že na vhodná místa programu zařazujeme generování výzvy pro paralelní hlášení (ATN=log.1 a EOI=log.1).
d) Soubor obecných příkazů V původní verzi standardu bylo ponecháno na rozhodnutí konstruktéra, jaký zvolí způsob programování jednotlivých přístrojů. Standardizovány byly pouze vícevodičové dálkové zprávy rozhraní. V inovované verzi standardu byly zavedeny další příkazy a dotazy v podobě skupiny obecných příkazů a dotazů vysílaných po datových vodičích při ATN=log.0, které začínají * a skládají se ze tří písmen velké abecedy. Jde-li o dotaz, připojí se za tři velká písmena otazník (např. *RST, *IDN?). Seznam těchto obecných příkazů a dotazů je v tab. 4. 5. Některé jsou povinné, musí na ně reagovat všechny funkční jednotky, ostatní jsou volitelné. Kód příkazu Význam Poznámka Autokonfigurační příkazy *AAD přidělení adresy volitelný *DLF zrušení funkce posluchače volitelný Systémové datové příkazy *IDN? dotaz na identifikaci přístroje povinný *DPT? dotaz na identifikaci příslušenství volitelný *PUD uložení chráněných uživatelských dat volitelný *PUD? dotaz na chráněná uživatelská data volitelný *RDT uložení popisu funkční jednotky volitelný *RDT? dotaz na popis funkční jednotky volitelný Vnitřní řídící příkazy *CAL? provedení kalibrace a dotaz na výsledek volitelný *LRN? dotaz na nastavení přístroje volitelný *RST nulování přístroje povinný *TST? autotest funkční jednotky a dotaz na výsledek povinný Příkazy synchronizace *OPC aktivace hlášení o ukončení operace povinný *OPC? dotaz na ukončení operace povinný *WAI čekání na ukončení operace povinný Makropříkazy *DMC definice makropříkazu volitelný *EMC umožnění rozvinutí makropříkazu volitelný *EMC? umožnění makrodotazu volitelný *GMC? dotaz na obsah makra volitelný *LMC? dotaz na návěští makra volitelný *PMC příkaz zrušení makra volitelný Příkazy paralelního hlášení *IST? dotaz zda funkční jednotka žádá o obsluhu povinný při PP1 *PRE nastavení PPE registru povinný při PP1 *PRE? dotaz na obsah PPE registru povinný při PP1 Příkazy stavové a událostní *CLS nulování stavových registrů povinný *ESE nastavení SESER povinný *ESE? dotaz na obsah SESER povinný *ESR? dotaz na obsah SESR povinný *PSC nulování stavových registrů po zapnutí volitelný *PSC? dotaz na aktivaci příkazu PSC volitelný
*SRE nastavení SRER povinný *SRE? dotaz na obsah SRER povinný *STB? dotaz na obsah SBR povinný Příkazy spuštění přístroje *DDT definování režimu spuštění odměru volitelný při DT1 *DDT? dotaz na definování režimu spuštění odměru volitelný při DT1 *TRG příkaz spuštění činnosti přístroje povinný při DT1 Příkazy řidiče *PCB předání řízení povinný při C Ukládací příkazy *RCL vyvolání uloženého nastavení funkční jednotky volitelný *SAV uložení nastavení funkční jednotky volitelný e) Protokol přístrojových zpráv Tab. 4. 5: Seznam příkazů a dotazů. Protokol přístrojových zpráv definuje, jak vysílat zprávy, parametry a data. Dále popisuje, jak je nutné reagovat, když funkční jednotka vysílá vícenásobnou zprávu, neúplnou zprávu nebo když dojde k přerušení během vykonávání zprávy. Definuje proto operační stavy funkční jednotky a určuje jak se má funkční jednotka ve těchto případech chovat. STAV IDLE READ QUERY SEND RESPONSE DONE DEADLOCK UNTERMINATED INTERRUPTED VÝZNAM Čeká na zprávu Čte a vykonává zprávu Ukládá do výst. paměti odpověď určenou k odeslání Vysílá odpověď Ukončuje vysílání odpovědi Vysílání odpovědi bylo ukončeno Zařízení nemůže ukládat další data Zařízení se pokouší číst neukončenou zprávu Zařízení bylo přerušeno novým příkazem, zatímco vysílá odpověď 4.3 Fyzická realizace rozhraní a) Řadiče rozhraní V minulosti byly řadiče rozhraní sběrnice GP-IB realizovány z obvodů řady TTL. Tato řešení byla obvodově velmi náročná a drahá. Programové řešení rozhraní je problematické vzhledem k nutnosti zajistit nezbytně krátké odezvy. Proto byly vyvinuty specializované obvody - řadiče rozhraní. Specializované řadiče je možné rozdělit do dvou skupin podle podpory připojení řadiče na sběrnici procesoru. První skupinu tvoří řadič 96LS488 firmy
Fairchild, řadič HEF4738 firmy Philips a řadič NAT488.2 firmy National Semicoductors. Tyto řadiče přísně dodržují standard IEEE488.1 a obsahují vývody, které mají stejné názvy a stejnou funkci jako přístrojové zprávy podle standardu IEEE488.1. Obsahují pouze vnější funkce rozhraní podle IEEE488.1 a neobsahují žádné vyrovnávací paměti na vysílaná a přijímaná data a žádné registry na stavová slova. V praxi tyto obvody nedosáhly většího rozšíření a dnes se zřejmě již nevyrábí. Druhou skupinu tvoří řadiče obsahující vnější funkce rozhraní a navíc obsahují vyrovnávací registry pro přijímaná a vysílaná data, vyrovnávací registry pro stavová slova a podporují připojení ke sběrnici procesoru. Tyto řadiče obsahují vnitřní registry, do kterých může procesor zapisovat a z kterých může číst. Zápisem do vnitřních registrů může procesor dávat řadiči příkazy a čtením vnitřních registrů může procesor zjišťovat stav řadiče. Tyto řadiče mohou žádat procesor o přerušení. Příčiny žádosti o přerušení jsou volitelné. Některé řadiče jsou také schopné spolupráce s řadičem přímého přístupu do paměti (DMA). Do této skupiny patří dnes již zastaralé řadiče I8291 a I8292 od firmy Intel a MC68488 od firmy Motorola. V současnosti se hojně používají řadiče TMS9914A od firmy Texas Instruments a µpd7210 od firmy NEC. Od těchto obvodů byly odvozeny novější řadiče NAT9914 a NAT7210 od firmy National Instruments a CB7210.2 od firmy ComputerBoards. Tyto obvody jsou pinově kompatibilní se svými vzory, ale mají rozšířenou sadu vnitřních registrů a některá další rozšíření (obvody NATxxxx umožňují jak režim TMS9914 tak i režim µpd7210). Nejvýkonnějším běžně dostupným řadičem je obvod TNT4882 od firmy National Instruments.V tomto obvodu je zaintegrováno celé rozhraní podle IEEE488.1 tj. včetně budičů sběrnice. Disponuje rychlým režimem HS488 a je vybaven vnitřními FIFO paměťmi zrychlujícími přenosy dat. Z hlediska vnitřních registrů může pracovat v režimu TMS9914 nebo µpd7210. Základní sada vnitřních registrů je doplněna dalšími rozšiřujícími registry. Z hlediska připojení k procesoru může pracovat ve dvou režimech: režim připojení k procesoru s šíří datové sběrnice 8 bitů nebo 16 bitů (Generic mode). režim připojení k ISA XT/AT sběrnici (ISA mode). Všechny typy řadičů sběrnice GP-IB kromě obvodu TNT4882 vyžadují použití speciálních budičů sběrnice. V současnosti se používají obvody řady 75160 až 75165, které se vyrábějí také ve verzi ALS od firmy Texas Instruments. K připojení sběrnice GP-IB je zapotřebí dvou různých kusů budičů (typy 75160, 75163, 75165 pro datové vodiče a typy 75161, 75162, 75164 pro jednovodičové zprávy). Dříve byly hojně používány budiče od firmy Motorola řady MC344x (byly zapotřebí 4 stejné kusy).
b) Řídící jednotky sběrnice GP-IB Při návrhu moderního měřícího systému na bázi sběrnice GP-IB je důležitá správná volba řídícího počítače a desky rozhraní. Jako řídící počítače se v současnosti používají buď počítače třídy IBM-PC nebo pracovní stanice. Jejich výběr závisí na charakteru měření a způsobu zpracování naměřených dat. Při výběru desek rozhraní jsou důležitá následující kritéria: typ řídícího počítače kompatibilita se standardem IEEE488.1 nebo IEEE488.2 požadovaná maximální přenosová rychlost programová podpora zajištěná výrobcem kompatibilita s univerzálními programy pro měření a zpracování dat (LabVIEW, LabWindows/CVI, HP VEE, TestPoint, Labtech, ap.) výrobce cena Požadavky na systémovou řídící jednotku Systémová řídící funkční jednotka podle normy IEEE488.2 musí splňovat následující požadavky: 1. Funkce rozhraní dle IEEE488.1 musí být implementovány v rozsahu dle [4.2]. 2. Obvodové řešení budičů sběrnice musí být provedeno dle IEEE488.1 takto: budiče s otevřeným kolektorem pro ovládání vodičů SRQ, NRFD, NDAC; třístavové budiče pro ovládání vodičů DAV, EOI, ATN, REN a IFC; třístavové budiče pro ovládání vodičů DIO1-8 pokud sběrnice není v aktivním stavu paralelního hlášení; pokud toto nastane musí být třístavové budiče uvedeny do stavu vysoké impedance nebo musí být použity budiče s otevřeným kolektorem. 3. Řídící jednotka dle IEEE488.2 musí mít implementovány následující prostředky: programové prostředky k řízení sběrnice na nejnižší úrovni umožňující: vyslání signálu IFC=log.1 s dobou trvání větší než 100µs nastavení signálu REN na log.1 nebo log.0 vyslání jakékoliv stykové zprávy dle IEEE488.1 vyslání libovolné kombinace těchto zpráv vyslání a detekce zprávy END vstup a výstup všech kódů, formátů, protokolů a obecných příkazů definovaných v IEEE488.2 snímání stavu signálu SRQ identifikace změny stavu signálu SRQ z log.0 na log.1 určení jednotlivých bitů stavového bajtu
detekce chybových podmínek při komunikaci identifikace překročení časového limitu při komunikaci. 4. Doporučení pro řídící jednotku IEEE488.2: možnost monitorování všech signálových vodičů sběrnice a předávání informace o jejich stavu aplikačnímu programu nastavení hodnoty časového limitu generování signálu přerušení při přechodu SRQ z log.0 na log.1. 5. Povinně musí být implementováno 15 standardem definovaných řídících sekvencí (SEND COMMAND, SEND SETUP, SEND DATA BYTES, SEND, RECEIVE SETUP, RECEIVE RESPONSE MESSAGE, RECEIVE, SEND IFC, DEVICE CLEAR, ENABLE LOCAL CONTROLS, SET RWLS, SEND LLO, READ STATUS BYTE a TRIGGER), další 4 řídicí sekvence jsou nepovinné (PASS CONTROL, PERFORM PARALLEL POLL, PARALLEL POLL CONFIGURE a PARALLEL POLL UNCONFIGURE). Řídicí sekvence slouží k vysílání dálkových zpráv dle IEEE488.1 nebo posloupností těchto zpráv v přesně určeném pořadí. Pokud jsou některé řídící sekvence tvořeny kombinací jiných řídicích sekvencí, pak tyto dílčí sekvence musí být implementovány individuálně. 6. Povinně musí být implementovány 2 standardem definované protokoly (RESET a ALLSPOLL), dalších 6 protokolů je nepovinných (FINDRQS, PASSCTL, REQUESTCTL, FINDLSTN, SETADD a TESTSYS). Některé protokoly jsou částečně realizovány prostřednictvím řídících sekvencí. c) Základní typy desek rozhraní GP-IB do osobních počítačů Desky rozhraní GP-IB vyrábí řada firem (např. National Instruments, KEITHLEY/METRABYTE, Agilent/Hewlett-Packard, IOTech, Advantech, AXIOM, aj.). Mimořádné postavení mezi světovými výrobci desek rozhraní GP- IB do počítačů zaujímá firma National-Instruments. V současné době je v nabídce firmy více než 30 modulů nejen do počítačů třídy PC (Apple, NEC) (GPIB- PCII/IIA, AT-GPIB/TNT(PNP), PCMCIA-GPIB, PCI-GPIB), ale i pracovních stanic (IBM, Sun SPARC, HP 700) a průmyslových systémů se sběrnicemi (PXI, PC/104, VME, EXM). Pro počítače standardu PC jsou k dispozici rozhraní s funkcí analyzátoru (AT-GPIB/TNT+, PCMCIA-GPIB+, PCI-GPIB+). Kromě rozhraní určených k zabudování dovnitř do počítačů jsou vyráběny i externí jednotky rozhraní propojující sběrnici GP-IB s jinou standardní sběrnicí určené k připojení k výpočetní technice (Ethernet, IEEE1284(paralelní port), IEEE1394(Fire wire), USB, RS-232, RS-485, SCSI). Standardním obvodem použitým při konstrukci převážné většiny rozhraní bývá řadič sběrnice TMS9914 (příp. funkčně podobný NEC7210), který má implementovány funkce rozhraní podle standardu IEEE488.1 (SH1, AH1, L3 nebo
LE3, T5 nebo TE5, SR1, RL1, PP1 nebo PP2, DC1, DT1, C1-5). Někteří výrobci používají zákaznické obvody jednak z důvodu zlepšení technických parametrů rozhraní (např. vyšší přenosové rychlosti nebo možnost monitoringu sběrnice), jednak jako ochranu proti zneužívání programových prostředků dodávaných s originální deskou. Na starších typech desek rozhraní určených pro sběrnici ISA se nacházela paměť EPROM, v níž byl umístěn ovladač, který zajišťoval komunikaci mezi uživatelským programem spuštěným na PC a sběrnicí. Novější typy desek rozhraní neobsahují paměť EPROM. Ovladač je v tomto případě uložen na disku, z něhož se zavádí do operační paměti PC. Nové typy desek kromě obvodu řadiče sběrnice jsou obvykle osazeny ještě hradlovým polem FPGA, které zajišťuje propojení mezi sběrnicí řadiče a vnitřní sběrnicí počítače. V případě rychlých vnitřních sběrnic (PCI) je toto hradlové pole nutností. Často bývá osazena i paměť FIFO, která přináší výrazné zvýšení přenosové rychlosti. Desky se dodávají se softwarem podporujícím i několik operačních systémů (DOS, Windows 3.1, Windows 95/98, Windows NT), skládajícím se z několika jednoduchých utilit a jazykového rozhraní pro vyšší programovací jazyky (BASIC, C, Pascal). Podpora na úrovni vyšších řídicích programových balíků je většinou omezena na program od téže nebo spřátelené firmy. d) Deska AT-GPIB/TNT(PNP) pro PC firmy National Instruments Zásuvná deska AT-GPIB/TNT(PNP) je představitelkou desek vybavených zákaznickým obvodem řadiče sběrnice označeným TNT4882C a je bez paměti EPROM. Deska se vyrábí ve dvou verzích: Verze AT-GPIB/TNT obsahuje prakticky pouze obvod řadiče a verze AT-GPIB/TNT (Plug and Play), která kromě obvodu řadiče obsahuje ještě několik obvodů zajišťujících funkce Plug and Play. Splňuje standard IEEE488.2 (včetně všech doporučení). Deska má maximální přenosovou rychlost 1,5MB/s v režimu IEEE488.1 a 1,6MB/s v režimu HS488. Rychlostní omezení režimu HS488 je způsobeno sběrnicí ISA neboť použitý řadič na desce se sběrnicí PCI dosahuje maximální přenosové rychlosti 1,5MB/s v režimu IEEE488.1 a 7,7MB/s v režimu HS488. Nastavitelné parametry desky: bázová adresa I/O portů je nastavitelná v rozsahu 100H až 3E0H, běžně se užívá adresa 2C0H. Deska přitom zabírá 32 adres. úroveň přerušení v rozsahu IRQ3 až IRQ15 kanál DMA5 až DMA7 Desky se dodávají se softwarem NI488.2, který představuje de facto světový standard respektovaný většinou předních softwarových firem. Programové vybavení podporuje tyto operační systémy: DOS, Windows 3.1, OS/2, Windows 95/98, Windows NT a Windows 2000. Programové vybavení pro MS-DOS zahrnuje ovladač desky GPIB.COM (zaváděný z disku při startu operačního systému), jazyková rozhraní pro BASICA, QuickBASIC, Microsoft C, Borland C++ a Borland Pascal (výrobce je orientován
především na produkty od firmy Microsoft), univerzální jazykové rozhraní ULI, diagnostické a testovací programy (konfigurační program IBCONF.EXE, interaktivní program IBIC.EXE pro ovládání sběrnice příkazy zadávanými z klávesnice a rezidentní program APPMON.EXE pro ladění uživatelských programů). Programové vybavení pro Windows 95/98 zahrnuje instalační program (Getting Started Wizard) zavádějící desku rozhraní do operačního systému, vlastní ovladač desky GPIBTNT.VXD s příslušnou knihovnou GPIB-32.DLL, jazyková rozhraní pro Microsoft Visual C/C++, Borland C/C++, Microsoft Visual Basic a Borland Delphi, standardní I/O rozhraní VISA (Virtual Instrument System Architecture), interaktivní diagnostický a testovací program Measurement & Automation Explorer (otestování desky rozhraní - Troubledhooting Wizard, nalezení, identifikace a ovládání připojených přístrojů), monitorovací program NI Spy pro záznam komunikace. Podporovány jsou také operační systémy Windows 2000/NT/3.1 a OS/2. Zásuvná deska AT-GPIB/TNT(PNP) je podporována také na úrovni vyšších řídicích programových balíků (LabVIEW, LabWindows/CVI, ComponentWorks++, Measurement Studio, Measure, HPVEE, aj.). e) Přístrojové rozhraní GP-IB Rozhraní GP-IB v přístroji je v současnosti většinou realizováno na základě specializovaného řadiče. Často se používá řadič TMS9914A společně s budiči sběrnice 75160/75161. Obvodová řešení bývá co nejjednodušší, nepoužívají se obvody FPGA a paměti FIFO vyskytující se na zásuvných deskách do počítačů. Zjednodušení je možné díky tomu, že do přístroje se přenáší méně dat než musí zpracovávat řídící počítač. Přístroje většinou nedisponují funkcí řidič (C0). Konstrukce rozhraní bez specializovaného řadiče se vyskytuje pouze u laciných přístrojů s malými požadavky přístroje na jeho rozhraní. Obsluha řadiče v přístroji bývá řešena odlišně než v řídícím počítači. Procesor v přístroji se musí současně věnovat několika úlohám: komunikaci s rozhraním, procesu měření a komunikace s místní obsluhou. Všechny úlohy jsou přitom poměrně nezávislé a je nutno je řešit prakticky v reálném čase. Používají se různé způsoby řešení. Nejjednodušší metoda spočívá ve využití přerušovacího systému procesoru, kdy komunikace s rozhraním a obsluhou je řešena v přerušovacích funkcích. V hlavním programu potom běží vlastní měřicí proces, který podle priority provádí potřebné akce. Jinou možností je použít operační systém reálného času, které je schopen přidělovat čas podle priority jednotlivým zpracovávaným úlohám. V moderních přístrojích je osazeno několik procesorů. Každý z nich je specializován na některou z výše uvedených úloh (procesor rozhraní, procesor řídící klávesnici...). Tyto procesory předzpracovávají informace pro hlavní řídící procesor a tím snižují jeho zatížení a i nároky na jeho programové vybavení.
4.4 Programování systémů se sběrnicí GP-IB Programování lze řešit buď na úrovni řídících programových balíků (HP VEE, LabVIEW) nebo vyšších programovacích jazyků. V případě řešení pomocí řídícího programového balíku je nutné zvolit programový balík především podle účelu měření a požadavků na řízení měřicího systému. K tomuto balíku je potom nutno vybrat podporovanou GP-IB kartu a měřicí přístroje (podpora přístrojů bývá řešitelná). Určité alespoň elementární znalosti programování a základní znalost standardů IEEE488.1 a IEEE488.2 jsou nezbytnou podmínkou pro úspěšný návrh takovéhoto řešení měřicího systému. Řešení pomocí vyšších programovacích jazyků vyžaduje poněkud větší znalosti programování sběrnice GP-IB. V každém případě je nezbytná základní znalost standardů IEEE488.1 a IEEE488.2. Kromě ní je třeba znát vlastnosti konkrétních desek rozhraní, příkazy pro jejich ovládání, funkce měřicích přístrojů a příkazy jimiž tyto funkce programujeme. Nezbytnou podmínkou je také dobrá znalost některého podporovaného programovacího jazyka nejlépe však jazyka C, který je v současnosti v oblasti řízení asi nejrozšířenější. Všechny příklady v dalším textu proto budou v jazyce C. Programování desky AT-GPIB/TNT(PNP) Jak již bylo naznačeno při použití desky AT-GPIB/TNT(PNP) je nutno pod operačním systémem MS-DOS je nutno do paměti zavést ovladač GPIB.COM. V ovladači GPIB.COM jsou obsaženy tři typy funkcí: - funkce označované jako board function resp. low level function provádějí elementární GP-IB operace náročné na znalosti standardu (seznam funkcí je v tab. 4. 6 a příklad je na obr. 4. 8) - funkce označované jako device function resp. high level function - provádějí sekvence low level funkcí, jednodušší pro uživatele (seznam funkcí je v tab. 4. 6 a příklad je na obr. 4. 9.) - funkce dle IEEE488.2 (seznam funkcí je v tab. 4. 7 a příklad je na obr. 4. 10). /* * Turbo C/Turbo C++/Borland C++ * Příklad programu užívajícího NI-488 board level functions */ #include <stdlib.h> #include <stdio.h> #include "decl.h" // obsahuje konstanty a deklarace char rd[24]; // přečtený řetězec int bd; // identifikátor desky double m; // změřeno void main() {
// Přiřazení identifikátoru desce (bd), 'GPIB0' je jméno desky 0 bd = ibfind ("GPIB0"); // Vyslání IFC ibsic (bd); // Vyslání REN ibsre (bd, 1); // Vyslání DCL ibcmd (bd, "\x14", 1L); // Vyslání zprávy UNL UNT MTA0 LAG4 ibcmd (bd, "\x3f\x5f\x40\x24", 4L); // Vyslání dat pro nastavení multimetru - změří ss napětí ibwrt (bd, "*RST;:MEAS:VOLT:DC?", 19L); // Vyslání zprávy UNL UNT MLA0 TAG4 ibcmd (bd, "\x3f\x5f\x20\x44", 4L); // Čtení a zpracování naměřené hodnoty ibrd (bd, rd, 24L); printf("prijaty retezec: %s\n", rd); m = atof(rd); printf("zmereno = %f [V]\n", m); // Vyslání zprávy UNL UNT MTA0 LAG4 ibcmd (bd, "\x3f\x5f\x40\x24", 4L); // Vyslání zprávy GTL ibcmd (bd,"\x01", 1L); // Odpojení desky ibonl (bd, 0); } Obr. 4. 8: Program pro ovládání multimetru HP34401A pomocí board funkcí /* * Turbo C/Turbo C++/Borland C++ * Příklad programu užívajícího NI-488 device level functions */ #include <stdlib.h> #include <stdio.h> #include "decl.h" // obsahuje konstanty a deklarace char rd[24]; // přečtený řetězec int dvm; // identifikátor multimetru double m; // změřeno void main() { // Inicializace systému // 0 - index desky; 4 - primární adresa; 0 - sekundární adresa // 13 - timeout 10s; 1 - vysílána zpráva EOI; 0x040A - ukončí příjem je-li LF
dvm = ibdev (0, 4, 0, 13, 1, 0x040A); // Vyslání zprávy SDC ibclr (dvm); // Vyslání dat pro nastavení multimetru - změří ss napětí ibwrt (dvm, "*RST;:MEAS:VOLT:DC?", 19L); // Čtení a zpracování naměřené hodnoty ibrd (dvm, rd, 24L); printf("prijaty retezec: %s\n", rd); m = atof(rd); printf("zmereno = %f [V]\n", m); // Vyslání zprávy GTL ibloc (dvm); // Odpojení přístroje ibonl (dvm, 0); } Obr. 4. 9: Program pro ovládání multimetru HP34401A pomocí device funkcí /* * Turbo C/Turbo C++/Borland C++ * Příklad programu užívajícího NI-488.2 funkce */ #include <stdio.h> #include <stdlib.h> #include "decl.h" // obsahuje konstanty a deklarace char rd[24]; // přečtený řetězec double m; // změřeno unsigned int dvm[2]; // identifikátor multimetru void main() { // Vyslání zprávy IFC SendIFC(0); // Naplnění pole adres přístrojů dvm[0] = 4; dvm[1] = NOADDR; // Vyslání zprávy SDC DevClear(0, dvm[0]); // Vyslání zprávy REN EnableRemote(0, dvm); // Vyslání dat pro nastavení multimetru - změří se ss napetí Send(0, dvm[0], "*RST;:MEAS:VOLT:DC?", 19L, NLend); // Čtení a zpracování naměřené hodnoty Receive(0, dvm[0], rd, 24L, STOPend); rd[ibcnt] = '\0'; printf("prijaty retezec: %s\n", rd);
m = atof(rd); printf("zmereno = %f [V]\n", m); // Vyslání zprávy GTL EnableLocal(0, dvm); // Odpojení desky ibonl (0,0); } Obr. 4. 10: Program pro ovládání multimetru HP34401A pomocí funkcí dle Skupina Volání Pozn. B, D ibask(int ud, int option, int *value) Vrátí konfigurační parametry D ibbna(int ud, char *bname) Změní identifikátor desky nebo přístroje B ibcac(int ud, int v) Přepne desku do stavu aktivní řidič D ibclr( int ud) Nulování jednoho přístroje (SDC) B ibcmd(int ud, void *buffer, long cnt) Vyšle vícevodičovou zprávu rozhraní B ibcmda(int ud, void *buffer, long cnt) Vyšle vícevodičovou zprávu asynchronně B, D ibconfig(int ud, int option, int value) Změní konfigurační parametry D ibdev(int BdIndx, int pad, int sad, int Nastaví stykové parametry tmo, int eot, int eos přístroje B ibdma(int ud, int v) Nastaví DMA přenos B, D ibeos(int ud, int v) Nastaví režim ukončení přenosu B, D ibeot(int ud, int v) Nastaví vysílání EOI B ibevent( int ud, short *event) Vrátí nejstarší zaznamenanou událost B, D ibfind(char *udname) Inicializuje desku nebo přístroj B ibgts(int ud, int v) Přepne desku do stavu neaktivní řidič B ibist(int ud, int v) Nastaví stavový bit paralelního hlášení B iblines(int ud, short *clines) Vrátí stav řídících vodičů sběrnice B, D Zjistí přítomnost přístroje na ibln(int ud, int pad, int sad, short *listen) sběrnici B, D ibloc(int ud) Přepne desku nebo přístroj do lokálního režimu B, D ibonl(int ud, int v) Přepíná desku nebo přístroj on/offline B, D ibpad(int ud, int v) Změní primární adresu D ibpct(int ud) Předá řízení jiné jednotce B, D ibppc(int ud, int v) Nastaví paralelní hlášení B, D ibrd(int ud, void *buffer, long cnt) Přečte data B, D ibrda(int ud, void *buffer, long cnt) Přečte data asynchronně B, D ibrdf(int ud, char *flname) Přečte data do souboru B, D ibrdi - nepodporuje C Přečte data do integer bufferu B, D ibrdia - nepodporuje C Přečte data do integer bufferu asynchronně