Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy
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
Číslicové měřicí systémy 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 a ud0: ud0:
mnemonics
count:
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
Číslicové měřicí systémy
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: ibwrt (ud, cmd, 4); - je-li operace ukončena, je nastaven OPC bit v ESR - čekání na RQS 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
Číslicové měřicí systémy
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.: board level – viz ibsta int Event_Mask dev level – RQ S, EN D , C M PL, TIM O
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
Číslicové měřicí systémy
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
E=1 E=0 S=1 S=0 D2 … D0
D2
S
D1
D0
disable PP enable PP jestliže zařízení má uplatnit přiřaz. linku je-li ist = 1 jestliže zařízení má uplatnit přiřaz. linku je-li ist = 0 čí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); 0
1
1
0
1
1
0
0
linka 5 = 4 + 1 ist = 1
2. volání paralelního hlášení */ ibrpp (ud, &ppr); if (ppr & 0x10) printf (“ist = 1\n”);
uplatní 5. linku!
3. znemožnění paralelního hlášení ibppc (ud, 0x70);
Téma 4 GPIB SW – str. 13
Číslicové měřicí systémy
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