Wstęp do GPIB

Daniel Rychcik
muflon@mat.uni.torun.pl
23-10-2000

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:

  1. 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.

  2. 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.

  3. 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.

  1. 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

  2. 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

  3. 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

  4. 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:

  1. "A Tutorial About the GPIB Bus" - ICS Electronics Application Bulletin AB48-11
  2. "Controlling GPIB Devices Over a Serial Link" - ICS Electronics Application Bulletin AB48-26
  3. "Generating Serial Waveforms and Transferring Digital Data with ICS's Digital Interfaces" - ICS Electronics Application Bulletin AB48-20A
  4. "Using GPIB Instruments to Test Communication Systems" - John Porcello, Montana College of Mineral Science and Technology
  5. "Rift over upgrade proposal divides GPIB camp" - Stan Runyon, www.iecc.com
  6. "gpib - Generic GPIB Record" - Mark Rivers, University of Chicago
  7. "GPIB - General Purpose Interface Bus" - BitCtrl Systems Software Library