Téma 4 Programování GPIB Komunikace v systému IEEE 488 je založena na přenosu zpráv mezi řídící jednotkou a měřicími přístroji. Jedné se o zařízení založenými na zprávách - Message Based Device. Programování bude demonstrováno na deskách a software firmy National Instrument, který je de facto průmyslovým standardem a naše laboratoř je jimi vybavena. Co je třeba aby bylo možno programovat sběrnici GPIB - v PC deska GPIB - nainstalován software ( driver NI 488.2) - konfigurován software Součásti driveru jsou při detekci hardware dynamicky zavedeny do paměti a při odpojení hardware dynamicky uvolněny (unloaded) vymazány. Uživatel vybere z NI 488.2 vhodné funkce ( pro většinu aplikací vyhovují funkce na úrovni zařízení device level functions) vhodné příkazy z SCPI a nebo obecných přístrojových příkazů, které použije jako řetězce do funkcí. Pozn.:Nejprve budou probrány povely SCPI a obecné přístrojové příkazy tj. vysílané řetězce a následně vlastní programování pomocí vhodných funkcí driveru NI 488.2. SCPI ( Standard Commands for Programmable Instruments) Standard SCPI je souhrn příkazů a pravidel pro komunikaci mezi řídící jednotkou a přístrojem v automatizovaném měřicím systému, nezávislý na technickém řešení ani na technickém protokolu přenosu dat. Přehled příkazů SCPI je uveden vždy v dokumentaci k přístroji včetně ukázek programování. SCPI definuje: hierarchicky uspořádanou množinu SCPI příkazů pro ovládání měřicích přístrojů množinu obecných povinných příkazů commond commands - určených k identifikaci stavu a nastavení vnitřních registrů formáty dat Vývoj programování GPIB Téma 4 GPIB SW str. 1
Přístrojový model SCPI Př.: : MEAS : VOLT : DC? 10, 0.003 ( měření ss nap. na rozsahu 10 V, s rozlišením 0.003 V) nový příkaz vrátit měřenou hodnotu 10 rozsah 10V 0.003 rozlišení 0.003V Př.2.: : CONF : VOLT : DC 10, 0.003 : TRIG: SOUR EXT (konfigurace pro měření ss napětí a čekání na trigger a čtení : READ? Př.3: SAMP : COUN10; : TRIG : SOUR EXT (při každém externím triggeru přečte multimetr 10 vzorků) READ? oddělovací znaky : postup ve stromu ; v té samé větvi Téma 4 GPIB SW str. 2
Obecné přístrojové příkazy: (common commands) jsou přístrojové! (ATN = FALSE) zprávy vysílané řídicí jednotkou, určené k ovládání přístrojů a identifikaci stavu. syntaxe: * XXX, * XXX? dotaz (query) (příkaz vždy začíná hvězdičkou, má 3 znaky a pokud následuje otazník, přístroj je povinen vrátit odpověď! Pokračování na další straně Téma 4 GPIB SW str. 3
Tab. 1 Obecné přístrojové příkazy Příklady povinných obecných příkazů *RST (Reset Command) příkaz pro nulování přístroje (ukončení probíhajících operací a nastavení přístroje do klidového stavu), obsahy stavových registrů zůstanou nezměněny *CLS (Clear Status Command) příkaz pro nulování stavových registrů *IDN? (Identification Query) dotaz na specifikaci přístroje *STB? (Status Byte Query) dotaz na obsah Status Byte registru *SRE (Service Request Enable) příkaz pro nastavení Service Request Enable registru *SRE? (Service Request Enable Query) dotaz na obsah Service Request Enable registru *ESE (Standard Event Status Enable Command) příkaz pro nastavení Standard Event Status Enable registru *ESE? (Standard Event Status Enable Query) dotaz na obsah Standard Event Status Enable registru *ESR? (Standard Event Status Register Query) dotaz na obsah Standard Event Status registru *OPC (Operation Complete) aktivace hlášení o ukončení operace *OPC? (Operation Complete Query) dotaz na ukončení operace *WAI (Wait to Continue) čekání na dokončení předchozích operací *TST (Self Test Query) příkaz pro spuštění vnitřního testu přístroje Téma 4 GPIB SW str. 4
NI 488.2M software Je software firmy National Instruments, představující průmyslový standard NI 488.2M Driver a Utility: - NI 488.2M, 32-bitový driver (gpib_x.vxd) instalovaný do Windows System - gpib-32.dll dynamicky linkovatelná knihovna - Win32 Interaktivní řízení (Interactive Control), interaktivní komunikace s GPIB zařízeními s použitím NI 488.2 funkcí - GPIB Spy monitorovací program - GPIB konfigurační utility - diagnostika - od NI 488.2 verze 1.6 je instalován i Measurement & Automation Explorer Podpora DOS: Virtuální ovladač zařízení (VxD) gpibdosk.vxd, slouží jako ovladač zařízení DOS Podpora Microsoft C/C++ - dokumentace readme.txt - vkládaný (header) soubor decl-32.h obsahuje prototypy NI 488 funkcí a NI 488.2 rutýn a předdefinované konstanty - 32-bitový interfaceový soubor pro C gpib-32.obj, linkuje aplikace pro přístup k 32 bitové dynamické knihovně DLL. Vývoj vlastní aplikace - výběr metody programování o výběr metody přístupu k NI-488.2 Driveru gpib-32.dll interface jazyka o Microsoft Visual C/C++ decl32.h, gpib-32.obj o Borland C/C++ 4.0 decl32.h, borland_gpib-32.obj o Lab Windows/CVI gpib.h o DOS Borland C/C++ 3.1 decl.h, mcib.obj (nutno povolit DOS v konfiguraci) o přímo - prostudování SCPI pro programové zařízení (přístroj) Driver NI-488.2 se skládá: - NI-488 funkce board level device level - NI-488.2 rutýny (routines) Téma 4 GPIB SW str. 5
Použití NI-488 funkcí V knihovně pro jazyk C jsou obsaženy tři typy funkcí: Board level: - řešení nestandardních situací - komunikace s nekompatibilními zařízeními k IEEE 488 - změna LOW konfigurace desky GPIB - možnost použití uvnitř NI 488.2 rutýn Device level: - high level - vyhovuje většině aplikací s jedním zařízením i více zařízeními NI-488.2 rutýny: - obsahuje-li systém více zařízení (nebo více desek) - umožňuje vyhledání posluchačů na sběrnici GPIB - umožňuje nalezení zařízení vyžadujícího obsluhu - určí stav SRQ linky - adresuje více zařízení pro poslech Téma 4 GPIB SW str. 6
Funkce na úrovni zařízení NI-488 (Device Level Functions) Ve většině aplikací se užívají nejčastěji funkce ibdev, ibrd, ibwrt, ibwait. Funkce Device Level budou probrány na cvičení. Téma 4 GPIB SW str. 7
Ukázka jednoduché aplikace programové struktury s použitím NI 488 funkcí Jednoduchý příklad použití Device level funkcí a SCPI pro čtení 1 hodnoty z digitálního voltmetru. Téma 4 GPIB SW str. 8
Kontrola stavu zařízení nebo desky GPIB Každá NI-488 funkce nebo rutýna měření má po svém volání hodnotu stavových proměnných ibsta, iberr, ibcnt(l) definováno v header file ibsta stavové slovo, 16-bit, bit = 1 podmínka splněna, viz. dále tabulka iberr chybová proměnná (pouze, je-li v ibsta nastaven ERR bit), viz. tabulka ibcnt(l) 16, 32 bit integer počet čtených bajtů Význam jednotlivých bitů proměnných ibsta a iberr Vybrané postupy kontroly: - GPIB error if (ibsta & ERR) printf ( Nastala chyba GPIB ); - podrobněji iberr if (ibsta & ERR) printf ( Nastala chyba GPIB: %d, iberr); - vlastní funkce int report_error (int fd, char *errmes); { printf ( Chyba GPIB: %d, %s \n, iberr, errmes); return (0); } volání funkce : if (ibsta & ERR) report_error (ud, Co se stalo ); - ibcntl možnost zakončení řetězce 0 char rdbuf [512]; ibrd (ud, rdbuf, 20); Téma 4 GPIB SW str. 9
if (!(ibsta & ERR)) { rdbuf [ibcntl] = \0 ; printf ( Čteno: %s \n, rdbuf); } /* znak. konstanta, znak NULL s hodnotou 0 */ Pomocné utility debugging Slouží k rychlému oživení GPIB zařízení a k vyhledání možných chyb. Jsou součástí driveru NI 488.2 1. Win 32 Interactive Control IBIC (interaktivní řízení přístroje přímo z klávesnice a programu IBIC). Zařízení je identifikováno pomocí funkce obsev, program vypisuje, co je třeba zadat za parametry a vrací hodnotu ud unit deskriptor, s kterou je možno dále komunikovat) : ibdev board index: primary address: secondary address: timeout: EOI on last byte: end-of-string: po provedení vrací hodnotu ibsta [0100] (cmpl) HEX mnemonics a count: ud0: ud0: ibwrt *RST; *CLS ibwrt CONF:VOLT:AC 1, 0.001 ibwrt MEAS? ibrd 20 (byte count) ibwrt MEAS:RES? ibrd 2. GPIB Spy výkonný prostředek pro hledání chyb, oživování. Monitoruje, zapisuje a zobrazuje NI 488, NI 488.2 funkční volání zobrazuje: ibsta iberr ibcntl time hodnoty bufferu Téma 4 GPIB SW str. 10
Sériové hlášení (Serial Poll) Umožňuje. zjištění stavu přístroje, příčiny požadavku interruptu aj. při SRQ - umožnění hlášení ibconfig (by default) - nastavení masky v Standard Even Registru ibwrt (ud, *ESE 1, 6); - umožnění OPC bitu - nastavení masky v Service Request Enable Registru ibwrt (ud, *SRE 32, 7); - umožnění STANDARD EVEN BIT - nastavení bitu OPC v Standard Event Status Registru vyslání příkazu: - čekání na RQS ibwrt (ud, cmd, 4); - je-li operace ukončena, je nastaven OPC bit v ESR ibwait (ud, RQS TIMO); if (ibsta & RQS) printf ( Zařízení uplatnilo SRQ ); ibrsp (ud, &spr); if (spr!= 0x4) printf ( Problém ); Pozn.: Programovací pomůcka využívající Fmt funkce v LW/CVI char buffer [100]; /* počet bajtů */ char cmd [] = *ESR? Fmt (buffer, %s<, cmd); ibwrt (osc, buffer, NumFmtdBytes()); nebo přímo: Fmt (buffer, %s< *ESR? ); - - - - - - - - - - - - - - Fmt (buffer, %s< *ESE 0x01; SRE 32; SOUR: FUNC %s; *OPC;, waves[type]); Automatické sériové hlášení umožnění: 1. konfigurační panel 2. ibconfig, option ibc AUTOPOLL - je-li zapnuta linka SRQ, driver provede automaticky sériové hlášení pro otevřená zařízení - bit RQS stavového slova (ibsta) je nastaven, bit 6 stavového registru je uložen ve frontě patřící zařízení, které ho poslalo - hlášení (polling) pokračuje, dokud SRQ není uvolněna (nebo nenastane chyba) - pro vyprázdnění fronty použijte ibrsp funkci - je-li RQS bit stavového slova ibsta stále zapnut při volání ibrsp, fronta odezev (response byte) není prázdná a obsahuje výjimečně jeden byte. Je nutno pokračovat ve volání ibrsp až je bit RQS vynulován. Téma 4 GPIB SW str. 11
Zařízení zapne bit 6 RQS když požaduje obsluhu! Další 2 (3) bity specifikují stav: MAV (bit 4) je zapnut, je-li zařízení připraveno poslat dříve dotazovaná (querid) data. ESB (bit 5) je zapnut, nastane-li jedna nebo více umožněných událostí (events). Požadavek servisu v LW/CVI GPIB Mimo klasických prostředků zjištění událostí GPIB (ibwait()) Zejména požadavek obsluhy (ibwait(rqs TIMO), Test SRQ, Wait SRQ) má LW/CVI dvě funkce, které oznámí, že nastal výskyt SRQ (požadavek obsluhy). Jsou to: ibinstallcallback - synchronní, při zpracování událostí (RunUserInterface je aktivní) ibnotify - asynchronní (volání asynchronně, v jakékoli době bez ohledu na zbytek programu) prototypy: int ibinstallcallback (int Board/Device, int Event_Mask, GPIB CallbackPtr Callback_Function, void *Callback_Data); - pracuje bez omezení, delší doba vyvolání. Pozn.: int Event_Mask board level viz ibsta dev level RQS, END, CMPL, TIMO int ibnotify (int Board/Device, int Event_Mask, GPIB Notify Callback_t Callback_Function, void *Callback_Data); - má omezení Téma 4 GPIB SW str. 12
Prototyp volání funkce: void WaveCallback (int Board/Device, int Event_Mask, void *Callback_Data); Př.: int main (int argc, char *argv[]) {... ib InstallCallback (ud, 0x4800, WaveCallback, 0); (TIMO RQS) žádná vrácená data... } ------------------------------------------------------- void CVI CALLBACK WaveCallback (...) { ibrsp (ud, &spr);... další činnost } Paralelní hlášení (parallel poll) 1. Konfigurace zařízení přístroje pomocí ibppc 0 1 1 E S D2 D1 D0 E = 1 disable PP E = 0 enable PP S = 1 jestliže zařízení má uplatnit přiřaz. linku je-li ist = 1 S = 0 jestliže zařízení má uplatnit přiřaz. linku je-li ist = 0 D2 D0 číslo přiřaz linky, linka = <číslo> + 1 #include decl-32.h /* pro LV/CVI #include gpib.h */ char ppr; ud = ibdev (0, 10, 0, 10, 1, 0); ibppc (ud, 0x6c); 2. volání paralelního hlášení */ ibrpp (ud, &ppr); 0 1 1 0 1 1 0 0 linka 5 = 4 + 1 ist = 1 if (ppr & 0x10) printf ( ist = 1\n ); 3. znemožnění paralelního hlášení ibppc (ud, 0x70); uplatní 5. linku! Téma 4 GPIB SW str. 13
Další studijní materiály: 1. Haasz a kol.: Číslicové měřicí systémy, ČVUT 2000 2. GPIB tutorial: NI Instrumentation Catalog, 1996-2000 Téma 4 GPIB SW str. 14