Wstęp do GPIB
1. Historia.
Standard GPIB (General Purpose Interface Bus) powstał w 1974 roku. Był on
propzycją firmy Hewlett-Packard, która miała ujednolicić sposób podłączania
urządzeń pomiarowych do komputerów. W tamtym okresie bowiem nie tylko
urządzenia te miały różne interfejsy ale nie
było również standardów interfejsów we/wy dla komputerów rozpowszechnionych
w równym stopniu, jak obecnie RS-232C, Centronics, czy USB.
Rozwiązanie HP (nazywane początkowo HP-IB) zakładało standaryzację
fizycznyego medium transmisyjnego (kabel 24-żyłowy), prędkości transmisji
(1Mbps) jak również pewnych podstawowych protokołów transmisji danych. Od
samego początku była to koncepcja "szyny" - oznaczało to, że na jednym kablu
przez ten sam interfejs mogło być
podłączonych więcej urządzeń. W połączeniu ze standaryzacją pozwalało to na
znaczną redukcję kosztów przygotowania systemów pomiarowych.
W roku 1975 HP przedstawiło interfejs do oceny międzynarodowym organizacjom
standaryzacyjnym i, po pewnych problemach związanych z nazwą, standard GPIB
został zatwierdzony jako norma IEEE-488 (W Europie nowy standard nazwano
IEC-625).
Wadą pierwszej wersji standardu GPIB była standaryzacja tylko medium
transmisyjnego i protokołu na nim używanego. Nie mówił on nic o danych (a
zwłaszcza komendach), które miały być przesyłana. W dalszym ciągu zatem
programy obsługujące pomiary musiały być pisane w zasadzie od nowa dla
każdego nowego urządzenia. Problemy dotyczyły nawet tak zasadniczych rzeczy,
jak sposób zakończenia linii polecenia - producenci stosowali chyba wszelkie
możliwe kombinacje znaków CR i LF oraz sygnału EOI :)
W 1985 roku firma Tektronix przedstawiła propozycję standardowego zestawu
komend dla szyny GPIB, który to zestaw został w 1987 roku zatwierdzony przez
IEEE jako standard IEEE-488.2. Oryginalna norma GPIB została przemianowana
na IEEE-488.1 i (po drobnych zmianach) nadal określała sposób transmisji w
warstwie fizycznej
Sytuacja była już lepsza - norma IEEE-488.2 określała format przesyłanych
komend, sposób raportowania stanu urządzenia, pewne podstawowe komendy
pozwalające np. wyzerować urządzenie, pobrać jego dane identyfikacyjne,
wykonać self-test itp. Definiowała też pewne standardowe protokoły takie jak
polling wszystkich urządzeń podłączonych do kontrolera. Ciągle jednak nie
było standardu poleceń, który pozwałby pisać programy (względnie) niezależne
od tego, czy np. nasz woltomierz jest firmy HP czy NI.
Pierwszą próbę podjęły w roku 1981 laboratoria sił powietrznych armii USA.
Opracowały one moduły konwertujące (TMA - Translation Module Adapter),
które zamieniały polecenia mierników różnych typów na zunifikowane polecenia
wewnętrznego języka CIIL. Jednak standard ten nie przyjął się szerzej, może
ze względu na to, że język ten był dość skomplikowany.
W 1990 roku firma Hewlett-Packard zaproponowała język TML (Test Measurement
Language). Był on dość logiczny i prosty w użyciu i zawierał standardowo
komendy obsługujące większość typów urządzeń pomiarowych używanych w tamtym
czasie. Pozwalał również dodawać nowe polecenia, jeśli wbudowane okazałyby
się niewystarczające. HP zaproponowała licencjonowanie TML innym firmom za
symboliczną opłatą, pod warunkiem stosowania się do standardu. Jednak
pozostali producenci domagali się niezależnej kontroli nad standardem - taka
kontrola powstała i, po przemianowaniu na SCPI (Standard Commands for
Programmable Instruments), stał się on obowiązującym do dziś.
2. Struktura fizyczna.
GPIB określa sposób połączenia maksymalnie 14 urządzeń, z których jedno
pełni zawsze rolę nadrzędną (CIC - Controller-In-Charge). Każde z urządzeń
może być typu Talker (nadawca), Listener (odbiorca), lub pełnić obie te
funkcje. Po inicjalizacji szyny kontrolerem jest z reguły karta łącząca
szynę z komputerem (System Controller), jednak taka sytuacja nie musi
trwać długo - CIC można zmieniać przy użyciu komunikatów kanałowych.
Nośnikiem danych w standardzie jest kabel 24-żyłowy. 8 z nich jest połączone
na stałe z masą urządzenia (poprawia to odporność na zakłócenia - podobne
rozwiązanie stosowane jest np. w taśmach łączących twarde dyski w
standardzie UDMA/66). 8 przewodów to linie danych DIO1-DIO8
(GPIB jest interfejsem równoległym). Pozostałe 8 żył steruje transmisją. Są to:
| Sygnał |
Nadawca |
Opis |
NRFD (Request For Data) |
Listener |
Przykładowo woltomierz, do którego wysłano polecenie zmiany zakresu, w ten
sposób zawiadamia, że chciałby otrzymać jeszcze informację na jaki zakres ma
się przełączyć.
|
NDAC (Data ACknowledge) |
Listener |
Urządzenie odbierające potwierdza w ten sposób, że odczytalo dane z linii
DIOx i ewentualnie gotowe jest do przyjęcia następnych.
|
DAV (Data AVailable) |
Talker |
Urządzenie nadające zawiadamia, że dane na liniach DIOx są gotowe do
odebrania.
|
ATN (AtteNtion) |
Controller-In-Charge |
Ten sygnał jest aktywny, gdy kontroler szyny wysyła komunikaty kanałowe
(kontrolujące transmisję). W przeciwnym przypadku (np. przesyłanie danych)
jest nieaktywny.
|
EIO (End Or Identify) |
Talker |
Może być używane jako sygnał końca polecenia (coś w rodzaju )
|
IFC (InterFace Clear) |
System Controller |
Główny kontroler szyny (niekoniecznie CIC) zeruje w ten sposób informację
o adresach (czyli np. staje się ponownie CIC).
|
REN (Remote ENable) |
System Controller |
Jeżeli przy przekazywaniu komunikatów kanałowych ten sygnał jest aktywny, to
kontrolę nad transmisją sprawuje adresat, a nie nadawca.
|
SRQ (Service ReQuest) |
Talker |
Urządzenie informuje w ten sposób, że wymaga obsłużenia (np. odczytania
wartości pomiaru)
|
Uwaga: Stanem aktywnym w standardzie GPIB jest zawsze stan niski.
3. Urządzenia GPIB
Podstawowym elementem systemu zbudowanego w oparciu o standard GPIB jest
interfejs łączący szynę z komputerem. W tej chwili istnieje wiele
możliwości, z których najważniejsze to:
- Karty instalowane w komputerach PC
Jest to najpopularniejsze
rozwiązanie. Stosuje się zarówno karty w standardzie PCI, jak też wychodzące
już z użycia, ale w pewnych zastosowaniach niezbędne karty ISA/EISA.
- Przetworniki Serial-to-GPIB
Stosowane w sytuacjach, gdzie szybkość
transmisji nie jest aż tak istotna, natomiast ważna jest odporność na
zakłócenia i długośc połączenia. Zaletą tych urządzeń jest również możliwość
kontrolowania ich przy pomocy modemu.
- Przetworniki Paralell-to-GPIB
Zapewniają lepszą szybkość, niż urządzenia
szeregowe, są jednak bardziej podatne na zakłócenia i obecnie są wypierane
przez urządzenia PCMCIA.
- Przetworniki USB-to-GPIB
Łączą zalety urządzeń szeregowych (długość
kabla, odpornośc na zakłócenia) z szybkością połączeń równoległych.
- Przetworniki PCMCIA-to-GPIB
Szeroko stosowane w warunkach terenowych,
najczęściej podłączane do notebooków.
Zakres przyrządów pomiarowych w standardzie GPIB jest w tej chwili bardzo
szeroki, obejmuje on zarówno urządzenia proste (amperomierze, czujniki
temperatury) jak i złożone (np. oscyloskopy). Zastosowania nie ograniczają
się tylko do pomiarów wielkości analogowych - dostępne są również moduły
przetworników A/D, analizatory stanów logicznych, zasilacze stabilizowane
i wiele innych urządzeń.
Standard GPIB przewiduje maksymalną sumaryczną długość przewodu tworzącego
szynę równą 20 metrów, przy czym odległość między dwoma urządzeniami nie
powinna przekraczać 2 m.
4. Adresowanie i komunikaty kanałowe.
Urządzenia GPIB mają adresy fizyczne w zakresie 0..30, przy czym używanie
adresów 0 i 21 nie jest zalecane (są to najczęstsze adresy interfejsów
PC-GPIB). Adres fizyczny urządzenia jest najczęściej ustalany przy pomocy
zworek (Można tu zauważyć analogię do urządzeń SCSI - adresy 0..7, gdzie
7 zarezerwowane jest dla kontrolera). Nowsze urządzenia pozwalają na
ustalanie adresu GPIB z panelu kontrolnego, lub przy pomocy komend SCPI -
jest on wtedy przechowywany w pamięci EEPROM.
Specjalnym adresem jest 31 - jest to tzw. adress Unlisten/Untalk i dotyczy
on wszystkich urządzeń na szynie (coś na zasadzie broadcastu IP). Urządzenia
wielofunkcyjne oprócz adresu postawowego mogą mieć adresy dodatkowe,
pozwalające kontrolować różne moduły jednego urządzenia. Z tego między
innymi wynika większa ilość adresów w stosunku do fizycznych możliwości
szyny (14 urządzeń).
W zastosowaniach rzeczywistych często spotyka się sytuację, w której jeden
komputer obsługuje kilka szyn GPIB - przez niezależne karty rozszerzeń.
Pozwala to na zaadresowanie większej liczby urządzeń, oraz, co często
okazuje się ważniejsze, na zwiększenie szybkości transmisji (analogia:
interfejs IDE i różnica między dwoma dyskami na jednej taśmie i tymi samymi
dyskami na osobnych kanałach - dokładnie ta sama idea).
Kontrola nad adresami i stanem połączenia jest realizowana przez komunikaty
kanałowe. Wysyła je Controller-In-Charge ustalając sygnał ATN i numer
komunikatu na szynie danych. Komunikaty można podzielić na trzy grupy:
-
Komunikaty zarządzające adresacją
- MLA/MTA (My Listen/Talk Address)
- wysyła CIC sam do siebie, aby ustawić
się w stan Listen lub Talk.
- LAD/TAD (Device Listen/Talk Address)
- wysyła CIC do określonego urządzenia,
aby ustalić je w stanie Listen lub Talk.
- UNL/UNT (UnListen/UnTalk)
- wysyła CIC do wszystkich urządzeń, aby anulować
stan Listen/Talk.
-
Komunikaty globalne
- DCL (Device CLear)
- wyzerowanie urządzeń
- PPU (Parallel Port Unconfigure)
- odłączenie linii danych DIOx od szyny
- SPE (Serial Poll Enable)
- uaktywnienie trybu pracy, w którym odpytywane są
po kolei wszystkie urządzenia na szynie, bez pośrednictwa komunikatu GET
(patrz niżej)
- SPD (Serial Poll Disable)
- powrót do normalnego trybu pracy.
Komunikaty adresowane do urządzeń w stanie Listen
- SDC (Selected Device Clear)
- wyzerowanie wybranych urządzeń
- GET (Device Trigger)
- aktywacja urządzenia (np. wykonanie pomiaru i
pobranie wyniku)
- PPC (Parallel Port Configure)
- ponowne podłączenie linii DIOx do szyny
- TC (Take Control)
- ustanowienie urządzenia nowym CIC.
5. IEEE 488.2
Norma 488.2 precyzuje jaki ma być format komunikatów przekazywanych do
urządzeń GPIB, definiuje zbiór podstawowych komend akceptowanych przez
wszystkie urządzenia, sposób przekazywania stanu urządzenia oraz
standaryzuje protokoły wykonywania kilku najczęściej spotykanych operacji.
Komendy wysyłane są jako linie tekstu zakończone znakiem LF (ASCII 10)
i/lub przez ustawienie aktywnego sygnału EOI przy przekazywaniu ostatniego
znaku polecenia. Liczby przekazuje się zawsze w formacie stałoprzecinkowym
z kropką dziesiętną. Jeśli chcemy wykonać wiele komend za jednym razem, to
oddzielamy je średnikiem.
-
Komendy ogólnego przeznaczenia - akceptowane przez wszystkie urządzenia
- *CLS (CLear Status)
- wyzerowanie bajtu stanu urządzenia
- *ESE (Event Status Enable)
- ustawienie maski stanu urządzenia (patrz niżej)
- *ESE? - pobranie maski stanu urządzenia
- *ESR? (Event Status Register)
- pobranie bajtu stanu ESR urządzenia
- *IDN? (IDeNtification)
- pobranie typu/modelu/producenta urządzenia
- *OPC (OPeration Complete)
- zasygnalizowanie końca operacji
- *OPC?
- pobranie stanu operacji
- *RST (ReSeT)
- wyzerowanie urządzenia
- *SRE (Service Request Enable)
- ustawienie maski SRE (patrz niżej)
- *SRE?
- pobranie maski SRE
- *STB? (STatus Byte)
- pobranie bajtu stanu STB urządzenia
- *TST? (self TeST)
- wyzerowanie i sprawdzenie urządzenia
- *WAI (WAIt)
- polecenie wstrzymania pracy urządzenia
Komendy obsługiwane przez urządzenia działające w trybie 'poll'
- *IST? (Individual Status Query)
- pobranie stanu urządzenia
- *PRE (Parallel port Register Enable)
- włączenia przejścia (szyna danych)
-> (rejestr PRE).
- *PRE?
- odczytanie zawartości rejestru PRE
Pozostałe komendy
- *TRG (TRiGger)
- musi ją obsługiwać urządzenie pracujące w trybie Trigger
(uaktywniane na żądanie)
- *PCB (Pass Control Back)
- musi je obsługiwać urządzenie mające możliwość
pracy jako kontroler magistrali.
- *RCL (ReCaLl)
- odtworzenie konfiguracji z pamięci EEPROM
- *SAV (SAVe)
- zapisanie konfiguracji do pamięci EEPROM
Obsługa stanu urządzenia
Standard IEEE-488.2 przewiduje dość złożony mechanizm obsługi różnych
zdarzeń i błędów, uwzględniający m.in. wybieranie grup zdarzeń. Schemat
blokowy tego systemu wygląda następująco:

(Na rysunku tym widać rozmieszczenie rejestrów wymienionych w opisie komend w
punkcie a)
Rejestr ESR zawiera standardowe informacje o stanie urządzenia i wykonanych
komendach. Bit 6. nie jest używany i w konkretnych zastosowaniach może być
użyty do innych, specyficznych dla urządzenia, celów. Jeżeli programista
chce być informowany o tym, czy zaszło zdarzenia z pewnej, ustalonej grupy,
to może to osiągnąć ustawiając odpowiednie bity w rejestrze ESE. Jak widać
na rysunku, wybrane bity z ESR są poddawane sumie logicznej i wynik jest
dostępny w 5. bicie rejestru STB. Co ważne, po zajściu zdarzenia bit w
rejestrze ESR jest ustawiony aż do momentu, gdy programista przeczyta go
instrukcją *ESR?, lub wyzeruje cały bajt poleceniem *CLR.
Drugim bajtem stanu (nadrzędnym w stosunku do ESR) jest Status Byte Register
(dostępny za pomocą komendy *STB?) Jednym z jego bitów jest MAV, który
sygnalizuje dostępność danych w buforze urządzenia. Kolejny bit, ESB, jest
wynikiem sumy logicznej wybranych bitów z ESR (patrz wyżej). Pięć bitów STB
jest dostępnych dla użytkownika.
Funkcjonowanie szóstego bitu rejestru STB jest trochę bardziej złożone.
Jego interpretacja jest zależna od sposobu, w jaki rejestr ten jest
odczytywany. Jeżeli jest to polling (Serial Poll) to jest on zawsze równy
zero. Jeżeli natomiast wykonano komendę *STB?, to bit ten jest wynikiem sumy
logicznej pewnej kombinacji pozostałych bitów tego rejestru, wybranych przy
pomocy *SRE.
Sygnał SRQ jest generowany w sytuacji, gdy zajdzie jedno ze zdarzeń z
rejestru ESR wybranych przy pomocy ESE, lub gdy w kolejce danych urządzenia
pojawią się dane (i odpowiednie bit w SRE będą aktywne).
6. SCPI - przykłady
Lista komend standardu SCPI jest na tyle obszerna (pomijając fakt, że nie
udało mi się do niej dotrzeć :-), że postanowiłem zamiast jej przytaczania
w całości podać kilka przykładów zastosowania.
Do testowania urządzeń GPIB służą programy pomocnicze typu "GPIB keyboard"
które pozwalają na wysyłanie wszystkich możliwych typów komunikatów do
urządzenia (kanałowe/488.2/SCPI). Oto przykładowe komendy wydawane przy pracy
z takim programem:
- Ustalenie szybkości transmisji portu szeregowego:
SYST:COMM:SER:BAUD 9600
- Odczytanie tej szybkości:
SYST:COMM:SER:BAUD?
- Ustalenie wszystkich parametrów:
SYST:COMM:SER:BAUD 9600; BITS 8; PACE XON
- Pobranie kodu wykonania komendy SCPI:
SYST:ERR?
- Pomiar napięcia (bez użycia SCPI):
LISTEN 04 F1R2T1 <-- parametry urządzenia
TALK 04
1.23E-3 <-- zwrócone przez urządzenie
1.67E-3
...
UNTALK 04
- Generowanie sygnału zero-jedynkowego na wyjściu cyfrowym:

Przykładowy sygnał do wygenerowania
- Przykład najprostszy - wysyłanie bajt po bajcie
BO1 5
BO1 7
BO1 1
BO1 3
...
BO1 0
- Lepsze rozwiązanie - użycie łańcucha
CONF:OUT(@1)
CONF:OUT:POL 1
CONF:STB 0
PO 5;PO 7;PO 1;...;PO 0
- Jeszcze lepiej - wysyłanie łańcuchów w trybie DUAL
CONF:OUT(@1)
CONF:OUT:POL 1
CONF:STB 0
FORM:LIST HEX
SYST:COMM:GPIB:ADDR:MODE:DUAL
3571357130
7. Programy obsługujące GPIB
Dwa najbardziej znane pakiety oprogramowania to
- Visual Engineering Environment/HPVEE (Hewlett-Packard)
- LAB Windows/CVI (National Instruments)
Oprócz wykonywania pomiarów umożliwiają one również wiele innych operacji
takich, jak przetwarzanie danych, dostarczanie ich w czasie rzeczywistym
innym aplikacjom (przez DDE/IPC/inne mechanizmy). Programy umożliwiają
jednoczesną obsługę wielu magistral GPIB. Zawierają obszerną bibliotekę
gotowych instrumentów, zatem są w stanie "z marszu" obsłużyć wiele
istniejących urządzeń pomiarowych.
Literatura:
- "A Tutorial About the GPIB Bus" - ICS Electronics Application Bulletin
AB48-11
- "Controlling GPIB Devices Over a Serial Link" - ICS Electronics
Application Bulletin AB48-26
- "Generating Serial Waveforms and Transferring Digital Data with ICS's
Digital Interfaces" - ICS Electronics Application Bulletin AB48-20A
- "Using GPIB Instruments to Test Communication Systems" - John Porcello,
Montana College of Mineral Science and Technology
- "Rift over upgrade proposal divides GPIB camp" - Stan Runyon,
www.iecc.com
- "gpib - Generic GPIB Record" - Mark Rivers, University of Chicago
- "GPIB - General Purpose Interface Bus" - BitCtrl Systems Software Library
|