ĆWICZENIE NR 3
Obsługa przyrządów pomiarowych z wykorzystaniem standardu SCPI
Cel ćwiczenia
Ćwiczenie zapoznaje ze zdalną obsługą instrumentów pomiarowych za pomocą języka SCPI. Wykorzystane są cztery przyrządy: zasilacz E3640A, multimetr HP34401A, generator HP33120A firmy Agilent oraz oscyloskop TDS 340A firmy Tektronix. Omówiona jest struktura i składnia języka SCPI, zaprezentowana jest możliwość sterowania tymi przyrządami przy użyciu komputera z portem szeregowym RS232C.
Wprowadzenie
Złożony charakter współczesnych procesów technologicznych wymaga odpowiednio rozbudowanych systemów pomiarowo-diagnostycznych. Omawiane w kolejnych ćwiczeniach interfejsy zapewniają standaryzację elektryczno-mechanicznych aspektów łączenia pojedynczych urządzeń pomiarowych w systemy realizujące złożone zadania. Oczywiste jest jednak, że standaryzacja powinna także dotyczyć komunikatów przesyłanych za pomocą interfejsów. Urządzenia realizujące te same funkcje pomiarowe - multimetry, generatory, analizatory stanów logicznych, są produkowane przez wielu producentów. Sytuacja, w której każdy producent stosuje własne, dedykowane rozwiązania dotyczące sterowania urządzeniami znacznie utrudniałaby utrzymywanie i modyfikowanie systemów pomiarowych. Prawdę mówiąc sytuacja taka przez długi czas utrzymywała się w technice pomiarowej. Zbiory komend sterujących urządzeniami pomiarowymi były odmienne nie tylko u różnych producentów ale nawet w różnych modelach tej samej serii jednej firmy. Dziś języki te określa się zbiorczym mianem „R2D2”, ponieważ większość z nich, dla oszczędności zasobów cyfrowych urządzenia, kodowała komendy za pomocą krótkich nazw, składających się często z litery i cyfry. Standard IEEE 488.2 (p. ćw. 5) przyniósł pewne ujednolicenie w tej kwestii, poprzez wprowadzenie szeregu komend, które muszą być rozpoznawane przez wszystkie urządzenia wykorzystujące ten interfejs. Jednak komendy te miały dość ogólny charakter, podczas gdy w pożądanym języku sterowania urządzeniami pomiarowymi ważna jest nie tylko uniwersalność, ale także odpowiednio silna ekspresja, zdolna do wykorzystania specyficznych cech procesu pomiarowego realizowanego przez dane urządzenie. Pierwszą propozycję takiego języka wysunęła firma Hewlett Packard w 1989 r pod nazwą TMSL (Test and Measurement Systems Language). Standard ten stał się podwaliną do sformułowania nowego języka o nazwie SCPI (Standard Commands for Programmable Instrumentation). Jego opracowaniem zajęło się konsorcjum firm, do którego weszły m.in.: HP, Tektronix, Fluke, Phillips, Keithley, Bruel & Kjaer, i National Instruments. Konsorcjum to działa do dziś [7], wypracowując kolejne redakcje standardu i czuwając nad zmianami, wynikającymi z pojawiania się nowych typów urządzeń pomiarowych.
Podstawowym zyskiem ze sformułowania języka SCPI jest oczywiście kompatybilność z punktu widzenia sterującego programu urządzeń pochodzących od różnych producentów. Język ten stał się prawdziwą lingua franca dla przyrządów pomiarowych.
Język SCPI
Ogólny opis języka SCPI
Język SCPI definiuje strukturę rozkazów oraz reguły syntaktyczne ich budowy, a także określa ogólny model programowalnego urządzenia pomiarowego i związany z nim model rozkazów do komunikacji pomiędzy kontrolerem (komputerem), a urządzeniami w automatycznym systemie pomiarowym [1].
W dziedzinie programowania przyrządów pomiarowych, standard SCPI (ostatnie pełne sformułowanie z 1999 roku [2]), zwany czasem językiem SCPI, jest obecnie standardem niezależnym od rodzaju zastosowanego interfejsu w systemie. Pomimo, że oparto go na ustaleniach standardu IEEE 488.2, polecenia SCPI mogą być przesyłane przez inne interfejsy, np. RS232 (w tym ćwiczeniu), VXIBus, itp.
SCPI służy do porozumiewania się z przyrządem pomiarowym i nie należy go mylić z takimi językami używanymi do tworzenia aplikacji, jak C, Basic czy Pascal. Jego polecenia są tekstami wysyłanymi do przyrządów pomiarowych i nie mają możliwości realizowania podstawowych konstrukcji zapewniających ekspresję języka programowania, takich jak pętla, instrukcja warunkowa, typy danych i zmienne. Język SCPI jest raczej językiem makropoleceń.
Zasadniczy problem w konstrukcji takiego języka jak SCPI związany z budową wystarczającego zbioru poleceń, pokrywających bardzo zróżnicowane możliwości funkcjonalne różnych urządzeń. Głównym założeniem przy konstrukcji zbioru poleceń w SCPI jest unikanie nazywania na wiele sposobów podobnych funkcji. Zbiór poleceń stara się zachować spójność. Standard SCPI-1999 wymienia wertykalną i horyzontalną spójność. Spójność wertykalna, to utrzymywanie tej samej nazwy dla tej samej funkcji w obrębie jednej klasy instrumentów. Funkcja pomiaru napięcia stałego powinna się nazywać tak samo we wszystkich multimetrach. Spójność horyzontalna to zapewnienie tej samej nazwy funkcji w instrumentach należących do różnych klas. Pomiar amplitudy przebiegu powinien się nazywać tak samo, niezależnie, czy jest realizowany przez multimetr czy przez oscyloskop (a więc niezależnie nawet od metody pomiaru). Utrzymywanie obu rodzajów spójności zapewnia przejrzystą strukturę zbioru poleceń.
Oczywiście, standard SCPI przewiduje rozszerzenia zbioru poleceń i wskazuje szereg rekomendacji co do tego, jak konstruować propozycje uzupełnień funkcjonalnych. Producenci sprzętu pomiarowego mogą ustalać swój własny zbiór poleceń, skonstruowany w duchu zaleceń standardu, mogą się także zwracać do konsorcjum o włączenie nowego obszaru funkcjonalnego wprost do standardu.
Model programowalnego instrumentu
Przy ustalaniu zestawu poleceń języka SCPI został założony ogólny model funkcjonalny programowalnego przyrządu pomiarowego, zdefiniowany w standardzie SCPI-1999 ([2]), pokazany na rys. 3.1. Jest to dość ogólny model, pokrywający zakres funkcjonalny szerokiej klasy przyrządów pomiarowych. Urządzenie nie musi realizować wszystkich uwidocznionych funkcji. Nie oczekuje się np. od zasilacza funkcji pomiarowych, a tylko generacji sygnału. Wprowadzenie modelu umożliwia kategoryzację poleceń języka SCPI a co za tym idzie stworzenie czytelnej struktury poleceń, do której łatwo mogą się dopasować nowe przyrządy pomiarowe.
Rys. 3. 1. Uogólniony model przyrządu w standardzie SCPI
Model nie określa szczegółów w rodzaju określenia wewnętrznych formatów danych, wewnętrznej organizacji pamięci, nie są też zawarte w nim tzw. funkcje administracyjne, np. kalibracja urządzenia, specyficzne tryby dostępu do pamięci, itp.
Standard SCPI-99 uszczegóławia model z rys. 3.1, podając strukturę wewnętrzną bloków funkcji pomiarowych oraz generacji sygnału. Pokazane jest to na rys. 3.2, przy czym poszczególne bloki funkcjonalne zostały opatrzone angielskimi mnemonikami (INPut, SENSe, itp.), tak, jak to zostało zaproponowane w standardzie. Mnemoniki te są zarazem nazwami głównych kategorii poleceń języka SCPI (kategorie te są też zwane podsystemami). Mnemonikami pokazanych na rys. 3.1 bloków podłączenia sygnału oraz formatowania danych są, odpowiednio: ROUTe i FORMat. Małe litery w nazwach oznaczają część opcjonalną, której nie trzeba koniecznie podawać przy wydawaniu polecenia w języku SCPI (p. p. 3.2.3).
Rys. 3. 2. Struktura wewnętrzna bloku funkcji pomiarowych (a) oraz bloku generacji sygnału (b)
Poniżej podane jest znaczenie poszczególnych bloków funkcjonalnych w modelu programowalnego urządzenia pomiarowego:
ROUTe. Realizuje połączenie sygnału między zaciskami urządzenia a wewnętrznymi blokami We/Wy toru przetwarzania sygnału. Np. zasilacz E3640A ma zaciski wyjściowe zarówno na przednim panelu jak i na tylnej ściance. Jedno z poleceń podsystemu ROUTe określa, na które zaciski podawane jest napięcie wyjściowe.
INPut. Blok realizuje kondycjonowanie sygnału pomiarowego przed poddaniem go konwersji na wewnętrzny format danych. Typowe operacje dokonywane w tym bloku to wzmacnianie/tłumienie sygnału, filtracja, konwersja częstotliwości, dopasowanie impedancji, itp Do tej kategorii należą np. polecenia ustalające podziałkę amplitudową w oscyloskopie.
SENSe. Realizuje przetwarzanie sygnału na dane wewnętrzne w formacie cyfrowym (wymaga tego choćby przesyłanie danych do systemu komputerowego). Procesy realizowane w tym bloku sprowadzają się więc bardzo często do przetwarzania analogowo-cyfrowego. Do podsystemu SENSe należą np. polecenia ustalające rozdzielczość pomiaru, czas bramkowania, itp. Mnogość mierzonych wielkości i metod pomiarów sprawiają, że kategoria ta jest bardzo rozbudowana.
CALCULate. Podsystem, który odpowiada za wykonywanie operacji obliczeniowych na zebranych przez podsystem SENSe danych lub, w ścieżce generacji sygnału (p. rys. 3.2b), operacji obliczeniowych na danych przekazywanych do bloku SOURCe (opisanego poniżej). Operacje tego podsystemu mogą być użyty np. do zmiany jednostek, zamiany dziedziny sygnału (z czasu na częstotliwość - transformata Fouriera), wyznaczenia elementarnych parametrów sygnału, jak np. czasu narastania przebiegu, określenia szczegółowych parametrów generacji fali na podstawie wskaźników modulacji, itp.
OUTput. Blok należący do ścieżki generacji sygnału (p. rys. 3.2b), którego celem jest, podobnie jak w bloku INPut, kondycjonowanie sygnału pochodzącego z bloku generacji SOURce a podawanego za pośrednictwem bloku przełączania sygnału ROUTe na zaciski wyjściowe urządzenia. Dość typowym przykładem operacji z tego bloku jest ustalanie impedancji wyjściowej generatora.
SOURce. Blok generuje sygnał o charakterze i parametrach określonych na wcześniejszym etapie ścieżki generacji sygnału (p. rys. 3.2b). Podobnie, jak w przypadku SENSe, może to być bardzo rozbudowany podsystem, ze względu na wielką różnorodność sygnałów generowanych przez urządzenia pomiarowe. Np. Generator Agilent 33120, umożliwiający generację przebiegów o różnych kształtach, przy zastosowaniu różnych rodzajów modulacji, oferuje ponad 30 różnych poleceń z podsystemu SOURce.
TRIGger. Podsystem zajmuje się synchronizacją wszystkich rodzajów akcji przyrządu z wewnętrznymi lub zewnętrznymi zdarzeniami. Podsystem ten implementuje wielowarstwowy model systemu wyzwalania o bardzo elastycznych możliwościach. Polecenia programujące pozwalają go odpowiednio konfigurować w zależności od potrzeb.
MEMory. Blok realizuje wewnętrzną pamięć urządzenia, w której przechowywane są dane w postaci cyfrowej. Do bloku odwołują się m. in. podsystemy CALCULate, FORMat, SENSe, SOURce. Pamięć jest praktycznie obecna w każdym urządzeniu programowalnym, ale nie musi być dostępna dla użytkownika. Jeśli jest udostępniona, to podsystem MEMory udostępnia polecenia pozwalające np. na odczytywanie, zapisywanie, kasowanie pamięci, itp. Przykładem może być generator Agilent 33120, zdolny do generowania arbitralnego przebiegu. Ciąg kolejnych próbek określający kształt przebiegu jest przesyłany do wewnętrznego bufora pamięci urządzenia (o pojemności 16000 próbek) z systemu komputerowego.
FORMat. Podsystem format umożliwia nadawanie danym przesyłanym przez interfejs do kontrolera systemu określonego formatu. Możliwe jest np. wysyłanie danych w postaci znakowej ASCII, w postaci binarnej, z nagłówkiem lub bez.
Nakreślony powyżej model urządzenia opisuje ogólną ścieżkę propagacji informacji: od wejścia do kontrolera systemu w przypadku funkcji pomiarowych oraz od kontrolera systemu do wyjścia w przypadku funkcji generacyjnych. Standard SCPI-1999 przewiduje wiele wariantów tego podstawowego modelu. M.in. określone są zasady opisywania urządzeń o zwielokrotnionych wejściach, torach przetwarzania, o kaskadowych blokach kalkulacyjnych, itp.
Oprócz wymienionych powyżej, w standardzie SCPI przewidzianych jest wiele innych podsystemów, realizujących funkcje związane z obsługą urządzenia pomiarowego. Do ważniejszych należą:
DISPlay. Blok odpowiedzialny za prezentację wizualną informacji kontrolno-pomiarowej. W modelu z rys 3-1 zasadniczy tok przetwarzania informacji prowadzi przez magistralę danych z i do kontrolera systemu. Oczywiście większość urządzeń jest wyposażona w lokalny wyświetlacz umożliwiający wizualizację stosownych informacji.
STATus. Blok odpowiedzialny za określanie stanu urządzenia. Jest to ważna część funkcjonalności systemu, zwłaszcza w wypadku synchronizacji pracy kilku instrumentów.
SYSTem. Blok operacji odpowiedzialnych za różne, nie związane bezpośrednio z pomiarem aspekty konfiguracji urządzenia pomiarowego. Zawarte tu są np. operacje odpowiedzialne za ustalanie parametrów transmisji, języka interfejsu instrumentu, zarządzania kolejką zarejestrowanych komunikatów o błędach, ustawiania daty i czasu, zarządzania lokalnymi urządzeniami peryferyjnymi, itp.
Inne, specyficzne, takie jak: CALibration - blok realizujące procedury kalibracyjne urządzenia, DIAGnostic - procedury diagnostyczne, INSTrument - zarządzanie wieloma logicznymi urządzeniami pomiarowymi, jeśli przyrząd pomiarowy jest złożony, TRACe/DATA - zarządzanie przebiegami zapisanymi w pamięci wewnętrznej przyrządu, HCOPy - wydruki danych pomiarowych na lokalnych drukarkach, dołączonych bezpośrednio do przyrządu, itd.
Składnia języka
W tym punkcie podane są najważniejsze zasady zapisywania poleceń SCPI oraz sposobu opisywania zestawów poleceń SCPI, umieszczanych w instrukcjach obsługi konkretnych urządzeń pomiarowych. Zrozumienie tych zasad jest niezbędne dla sprawnego wykonania ćwiczenia.
Każdy z wymienionych w poprzednim punkcie podsystemów może obejmować wiele poleceń realizujących określoną grupę operacji dla danego urządzenia. Konkretne polecenia również mogą tworzyć mieć wiele wariantów, co sprawia, że zestaw poleceń najłatwiej prezentować w postaci drzewiastej,
hierarchicznej struktury.
Rys. 3. 3. Fragment drzewa poleceń
Drzewo zaczyna się od abstrakcyjnego „korzenia”, reprezentującego całe urządzenie, węzłamipierwszego poziomu są opisane powyżej główne podsystemy, kolejne poziomy drzewa tworzą konkretne polecenia i ich warianty. Fragment takiej struktury dla hipotetycznego urządzenia pomiarowego pokazany jest na rys. 3.3.
Polecenie SCPI to zapis całej ścieżki, prowadzącej od korzenia aż do „liścia” drzewa, tj. do najniższego poziomu, w stosownej funkcjonalnej gałęzi. Poszczególne węzły ścieżki rozdzielone są dwukropkami. Np. w przypadku drzewa z rys. 3.3, polecenie ustawiające czas trwania sygnału dźwiękowego na 1 sekundę miałoby postać: SYSTEM:BEEPER:TIME 1. Jak widać, segmenty określające ścieżkę polecenia są oddzielone dwukropkami, natomiast parametr, ustalający czas trwania sygnału oddzielony jest od polecenia spacją.
Rysunek 3.3 pokazuje zapis drzewa poleceń w postaci podobnej do stosowanej w instrukcjach obsługi przyrządów pomiarowych. Stosuje się w takich zapisach następujące konwencje notacyjne:
Jeśli część wyrazu jest pisana wielkimi literami, a część małymi, to część z wielkimi literami wskazuje na akceptowalny skrót polecenia. Powyższy przykład można by więc zapisać również: SYST:BEEP:TIME 1. Jednak, część podana małymi literami, jeśli jest wpisywana, musi być wpisana w całości. Nie są więc akceptowane skróty w rodzaju: SYST:BEEPE:TIME 1.
nawiasy kwadratowe [ ] wskazują, że dane słowo kluczowe lub parametr jest opcjonalny. W przypadku drzewa z rys. 3.3 opcjonalny jest nagłówek podsystemu SOURce i dlatego legalne jest polecenie: FM:INT:FREQ 1000
nawiasy klamrowe { } obejmują listę alternatywnych postaci argumentu danego polecenia, przy czym pionowa kreska | separuje różne dostępne formy zapisu argumentu lub słowa kluczowego polecenia. W przypadku drzewa z rys. 3.3 taki zapis został np. zastosowany do polecenia ustalającego kształt funkcji modulującej przebiegu zmodulowanego FM. Wybór {SINusoid | SQUare | TRIangle} oznacza, że można wydać zarówno polecenie: FM:INT:FUNC SIN, jak i: FM:INT:FUNC TRI.
Identyfikator w nawiasach ostrych < > wskazuje, że w tym miejscu polecenia należy podać wartość, będącą parametrem polecenia. Dla drzewa z rys. 3.3 w trzech miejscach pojawia się zapis <wartość_liczb>, co oznacza, że np. określenie głębokości dewiacji modulacji FM, którego składnia jest zapisana na rys. 3.3 w postaci: FM:DEV <wartość_liczb>, powinno mieć w konkretnym przypadku ustawiania dewiacji 1000 Hz postać: FM:DEV 1000
Opisaną notacja może być mieszana, dopuszczalne są m.in. opisy składni takie, jak np.: CONF:RES {<zakres>| MIN | MAX | DEF} [,{<roz> | MIN | MAX | DEF}].
W przykładzie tym, po zasadniczym poleceniu CONF:RES występuje najpierw nawias klamrowy, później nawias kwadratowy. Pierwszy nawias klamrowy reprezentuje obligatoryjny argument, który jednak może być podany alternatywnie w jednej z czterech postaci: albo jako wartość liczbowa (wariant <zakres>) albo jako jeden z trzech literałów: MAX, MIN lub DEF. Nawiasem mówiąc, literały te należą do standardu SCPI i oznaczają odpowiednio: maksymalną dopuszczalną, minimalną dopuszczalną i domyślną wartość w danym kontekście. Nawias kwadratowy reprezentuje drugi, opcjonalny argument. Jego zawartość zaczyna się od przecinka, co oznacza, że drugi argument, gdyby był podawany musiałby być wpisany po przecinku. Dalej następuje znowu nawias klamrowy, oznaczający, że drugi argument może mieć jedną z czterech alternatywnych postaci: wartość, MAX, MIN lub DEF. Pozwala to np. na następujące zapisy polecenia:
CONF:RES 100,
CONF:RES MIN
CONF:RES MAX
CONF:RES DEF
CONF:RES 100,MIN
CONF:RES 100,DEF.
Do zapisu słów kluczowych w poleceniu programującym można używać zarówno wielkich jak i małych liter. Tekst programujący może mieć także postać polecenia złożonego (wiele komend w jednej linii). Znak średnika (;) separuje wtedy poszczególne pojedyncze polecenia. Generalna zasada, o której należy przy tym pamiętać jest taka, że średnik nie zmienia pozycji w hierarchii. Jeśli polecenie złożone składa się z oddzielonych średnikami poleceń z tego samego poziomu hierarchii, to w wyspecyfikowanie pełnej ścieżki jest konieczne tylko w pierwszym poleceniu. Dalsze polecenia będą zakładały osiągnięty poziom. Np. poprawny byłby zapis: FM:INT:FUNC SIN;FREQ 1000. I na odwrót, jeśli średnikiem rozdzielone są polecenia dotyczące różnych podsystemów (np. SOURce i TRIGger), wówczas każde z nich musi być wyspecyfikowane jako pełna ścieżka od korzenia aż do liścia. Dodatkowo, w takim przypadku każde polecenie z wyjątkiem rozpoczynającego linię musi zaczynać się od dwukropka.
Niemal każde polecenie SCPI, a już zwłaszcza takie, które wymaga argumentu ma odpowiadającą mu kwerendę (zapytanie). Kwerendę konstruuje się kończąc polecenie znakiem zapytania. I tak np. kwerenda sprawdzająca, jaki jest aktualnie ustawiony czas trwania sygnału dźwiękowego miałaby postać: SYST:BEEP:TIME? W reakcji na kwerendę urządzenie transmituje do kontrolera systemu stosowną odpowiedź. Zapytanie bez argumentu dotyczy zawsze pytania o ustawioną wartość danego parametru. Zapytanie z argumentem oznacza pytanie o możliwości ustawienia danej wartości. Dlatego argumentem polecenia pytającego może być tylko słowo kluczowe, zastępujące wartość liczbową, czyli MAX, MIN, DEF. Można spotkać polecenia pytające nie mające formy odwrotnej, nastawczej. Są to zwykle zapytania o wyniki pomiarów (FETCH?) lub o błędy powstałe w trakcie działania urządzenia (SYSTem:ERRor?).
Wartość liczbowa argumentu polecenia SCPI jest podawana zawsze w systemie dziesiątkowym. W razie potrzeby zapis może obejmować znak liczby i punkt dziesiętny - kropkę. Możliwe jest zastosowanie notacji naukowej, a więc zapisu typu 1e4 (oznaczającego 1000). Można też stosować jednostki (np. mA, kHz). Wiele poleceń wylicza możliwe warianty wartości argumentu, jako literału (tak jak SIN, SQU, TRI w jednym z powyższych przykładów). Jak już zaznaczono, MIN, MAX, DEF są szczególnymi literałami, których znaczenie jest zdefiniowane w standardzie, tak samo jak wartości ON, OFF, traktowane jako wartości logiczne. Jeśli polecenie oczekuje tekstowej wartości argumentu, tekst należy umieścić w cudzysłowach.
MEASure:, APPLy:
Związki ze standardem IEEE-488.2
Ponieważ język SCPI wyrósł ze standardu IEEE-488.2, wszystkie urządzenia oferujące interpreter języka SCPI muszą rozpoznawać i wykonywać podzbiór obligatoryjnych poleceń zdefiniowanych w standardzie IEEE-488.2. Polecenia te, mają specyficzną postać, niezgodną z hierarchiczną strukturą rozkazu SCPI i oznaczane są wiodącym znakiem gwiazdki (*). Do grupy tej należą: *CLS, *ESE?, *ESR?, *IDN?, *OPC?, *RST , *SRE?, *STB?, *TST?, *WAI. Większość z tych poleceń jest dokładniej omówiona w ćwiczeniu omawiającym interfejs GPIB (ćw. 5). Tutaj używane będą w praktyce tylko trzy z nich: identyfikacja urządzenia *IDN?, wyzerowanie urządzenia *RST oraz skasowanie statusu *CLS.
Drugim ważnym wspólnym aspektem jest podsystem raportowania statusu urządzenia. Jest on w języku SCPI skonstruowany wg zasad standardu IEEE-488.2. Dokładnie podsystem ten jest omówiony w p. 5.1.8 ćwiczenia 5. Centralną rolę odgrywa rejestr statusu, którego poszczególne bity są sumami logicznymi bitów ze specjalizowanych rejestrów niższego poziomu, np. rejestru zdarzeń zdefiniowanego w standardzie IEEE 488.2. Język SCPI definiuje dwa dodatkowe rejestry dosumowywane do rejestru statusu: OPERation Status - rejestr statusu operacji, zawierający informacje o szczególnych stanach urządzenia (np. że jest w trakcie pomiaru, przeprowadza kalibrację, zmienia zakres, itp.) oraz QUEStionable Status - rejestr wskazujący na niepewną jakość przeprowadzonego pomiaru. Standard SCPI przewiduje również utrzymywanie przez urządzenie kolejki komunikatów o błędach (np. niepoprawności składniowej polecenia, które zostało przyjęte z kontrolera systemu). Jeden z bitów rejestru statusu sygnalizuje, że ta kolejka nie jest pusta. Zgodnie z ogólną zasadą konstrukcji zbioru poleceń SCPI, przewidziane jest także zwiększanie ilości rejestrów stanu.
W tym ćwiczeniu, poza wyczytywaniem kolejki komunikatów o błędach, nie będą używane polecenia monitorowania statusu.
Zestawy rozkazów wybranych przyrządów pomiarowych
Poniżej przedstawiony zostanie szereg prostych ćwiczeń, zaznamiająch ze składnią poleceń SCPI oraz podstawowymi poleceniami dla używanych w laboratorium urządzeń pomiarowych: zasilacza E3640A, multimetru HP34401A, generatora HP33120 oraz oscyloskopu TDS220. Do połączenia z instrumentami wykorzystywany jest interfejs RS-232. Przygotowanie przyrządów do współpracy opisane jest w Dodatku A. Polecenia są wysyłane z komputera do urządzeń za pomocą programu Hyperterminal. Obsługa tego standardowego narzędzia systemu Windows opisana jest w dodatku B.
Rozkazy SCPI dla zasilacza E3640A
Rozkazy standardu IEEE-488.2
Każde urządzenie z interpreterem SCPI poprawnie rozpoznaje i wykonuje obligatoryjne komendy standardu IEEE-488.2 (p. ćw. 5). Jedną z najbardziej podstawowych jest *RST, ustawiająca urządzenie w stan domyślny. Następna ważna komenda, to identyfikacja urządzenia *IDN? Wpisanie jej powoduje wyświetlenie w oknie terminala tekstu identyfikacyjnego zasilacza: „Agilent Technologies, E3640A,0,1.6-5.0-1.0”. Komenda identyfikacji jest kwerendą, dlatego kończy się znakiem zapytania. Próba zastosowania komendy bez znaku zapytania: *IDN kończy się sygnałem dźwiękowym i pojawieniem się na wyświetlaczu zasilacza wskaźnika ERR, sygnalizującego powstanie błędu. Jak wspomniano, stan urządzenia jest ciągle odwzorowywany w rejestrach wewnętrznych. Błędy składni SCPI są notowane w kolejce błędów oraz sygnalizowane ustawieniem bitu o masce 32 (bitu nr 5 - `Command error' [3]) w rejestrze zdarzeń (Event Status Register). Zastosowanie komendy *ESR? powinno wyświetlić w oknie terminala liczbę, która w zapisie binarnym ma ustawiony bit nr 5 (jednak w ogólności liczba ta może być większa od 32 - mogą być ustawione bity innych zdarzeń). Odczyt rejestru zdarzeń kasuje go, więc następne zastosowanie komendy *ESR? zwróci wartość zero. Skasowanie sygnalizacji błędu (skasowanie wszystkich rejestrów stanu) możliwe jest za pomocą komendy *CLS. Wreszcie komenda *TST? powoduje przeprowadzenie kompletnego autotestu urządzenia, w odpowiedzi zostaje wysłany komunikat, czy test zakończył się pomyślnie: „0”, jeśli się powiódł i „1” w przeciwnym wypadku.
Komendy podsystemu SYSTem
Komendy zgrupowane w podsystemie SYSTem służą do ogólnego zarządzania instrumentem pomiarowym. Jedną z najważniejszych jest SYSTem:REMote, wprowadzająca urządzenie w tryb zdalnego sterowania. W trybie tym panel przycisków i pokręteł jest odłączony, poza jednym - LOCAL (ten sam klawisz, co STORE), umożliwiającym powrót do lokalnego trybu sterowania urządzeniem (tzn. sterowania za pomocą przycisków). W niektórych urządzeniach część komend przychodzących do urządzenia z kontrolera jest ignorowanych w trybie lokalnym, tak więc dla pewności warto włączyć tryb zdalny, sygnalizowany na wyświetlaczu urządzenia wskaźnikiem REM. Powrót do trybu lokalnego jest możliwy również poprzez polecenie SYST:LOCal.
Ważną instrukcją tej grupy jest kwerenda SYST:ERR?, która umożliwia odczytanie kolejnych błędów z kolejki utrzymywanej w instrumencie. W przypadku E3640A, kolejka może pomieścić 20 komunikatów. Łatwo zasymulować kolejne błędy, np. wpisując kolejno błędne polecenia: %RST, SYSST:LOC, *IDN? 10, itp. Kolejne polecenia SYST:ERR? będą odczytywały i usuwały z kolejki kolejne komunikaty o błędach (w tym wypadku będą to odpowiednio komunikaty „Invalid character”, „Undefined header”, „Parameter not allowed”), aż do opróżnienia kolejki. Próba wyczytu z pustej kolejki da odpowiedź: „No error”.
W grupie SYSTem umieszczane są wszelkie polecenia nie związane bezpośrednio z pomiarem. Np. zasilacz E3640 oferuje komendę SYST:BEEPer, powodującą wygenerowanie sygnału dźwiękowego albo komendę SYST:VERSion?, zwracającą informację o wersji języka SCPI, interpretowanej przez urządzenie. Opis innych komend z tej grupy można znaleźć w instrukcji obsługi urządzenia [3].
Rozkazy ustawiania wyjść i komendy pomiarowe
Interpreter SCPI zasilacza rozpoznaje oczywiście polecenia realizujące zasadnicze funkcje urządzenia. Dwa podstawowe, służące do ustawiania wartości prądu i napięcia mają składnię:
[SOURce]:CURRent[:LEVel][:IMMediate][:AMPLitude] {<prąd>|MIN|MAX|UP|DOWN}
oraz
[SOURce]:VOLTage[:LEVel][:IMMediate][:AMPLitude] {<napięcie>|MIN|MAX|UP|DOWN}
Zgodnie z uwagami podanymi w punkcie 3.2.3, powyższy opis składniowy obejmuje wiele możliwych postaci polecenia. Najprostsze z nich to polecenia typu: VOLT 1 albo CURR 0.01, oznaczające ustawienie odpowiednio napięcia na wartość 1V oraz prądu na wartość 0.01A. Należy dobrze zrozumień, że dla zasilacza E3640A ustawione wartości prądu i napięcia to dopuszczalne limity. Jeżeli ustawione napięcie skutkowałoby prądem większym niż wartość ustawiona poleceniem CURR ..., instrument przełączy się automatycznie w tryb stabilizacji prądu, utrzymując zadaną wartość prądu. I przeciwnie - jeśli zadany prąd wymagałby większego napięcia, niż ustawione za pomocą VOLT ..., włączy się tryb stabilizacji, utrzymujący zadaną wartość napięcia. Oba tryby stabilizacyjne mają swoją sygnalizację na wyświetlaczu, za pomocą wskaźników CC (Constant Current) i CV (Constant Voltage). Aby sprawdzić to w praktyce należy do zasilacza podłączyć obciążenie (np. opornik dekadowy ustawiony na 1kΩ). Potrzebne jest wydanie jeszcze jednego polecenia: OUTput ON, dołączające wewnętrzne wyjście zasilacza do zacisków zewnętrznych (polecenie OUT OFF odłącza wyjście od zacisków).
Inne warianty polecenia to np. VOLT MAX, CURR MIN, ustawiające, odpowiednio, maksymalną wartość napięcia i minimalną wartość prądu, VOLT UP, powodujące zwiększenie aktualnie ustawionej wartości napięcia o krok ustalony poleceniem VOLT:STEP <krok> czy też CURR DOWN, powodujący zmniejszenie wartości prądu o krok ustawiony poleceniem CURR:STEP <krok>.
Przy manipulacjach napięciem i prądem zasilacza może zadziałać układ ochrony przed zbyt wysokim napięciem. Włączenie/wyłączenie układu dokonywane jest komendą VOLT:PROTection:STATe {0|1|ON|OFF} (zapala się lub gaśnie wskaźnik OVP na wyświetlaczu.). Przekonanie się czy układ jest włączony, czy nie, to oczywiście VOLT:PROT:STAT?. Poziom ochrony (napięcie, które wywoła zadziałanie układu) ustawia się poleceniem VOLT:PROT:LEVEL <napięcie>. Jeśli układ zadziała, odcina zasilacz od zacisków zewnętrznych a na wyświetlaczu pojawia się napis „OVP TRIPPED”. Skasowanie takiej sytuacji, to: VOLT:PROT:CLEar.
W podanym na początku tego podpunktu zapisie składniowym komend SOURCE:CURRent, SOURCE:VOLTage zawarte zostały trzy domyślne (a więc opcjonalne) węzły: :LEVel, :IMMediate i :AMPLitude, które były pomijane w przykładach poleceń. Ścieżka :LEV:IMM:AMP jest po prostu najczęściej wykorzystywana, dlatego jest opcjonalna. Jednak są też inne węzły, które mogą wystąpić w miejscu wymienionych. Np. zamiast :IMMediate można użyć węzła :TRIGgered, co powoduje ustawienie wartości nie natychmiast, ale przy najbliższym wyzwoleniu instrumentu. Przykład takiego polecenia: VOLT:TRIG 2 (zostanie omówione dokładniej trochę dalej). Podobnie, w miejsce domyślnego :AMPLitude, może się pojawić :STEP, np.: CURR:STEP 0.01.
Inne polecenia z tej grupy, to np.:
VOLTage:RANGe {P8V|P20V| LOW|HIGH},
powodujące ustawienie wyższego lub niższego zakresu napięciowego, czy też zapytania VOLT? albo CURR? MAX, żądające odpowiednio: aktualnie ustawionej wartości napięcia i maksymalnej możliwej do ustawienia wartości prądu.
Polecenia VOLT ..., CURR ... są poleceniami niskiego poziomu. W zestawie poleceń zasilacza jest także komenda wysokiego poziomy APPLY ..., która wprawdzie nie należy do standardu SCPI, ale przestrzega jego reguł składniowych. Ogólna postać tego polecenia, to:
APPLy {<voltage>|DEF|MIN|MAX} [,{<current>|DEF|MIN|MAX}]
Jako argument należy więc podać co najmniej wartość napięcia, po przecinku można też dodać wartość prądu. Zamiast konkretnej wartości napięcia lub prądu, można wprowadzić specyfikator DEF, MIN, MAX, oznaczający domyślną wartość fabryczną, wartość minimalną lub wartość maksymalną na danym zakresie. Dostępna jest też kwerenda APPLy?, pobierająca aktualnie ustawioną wartość napięcia i prądu. Przykłady użycia:
APPL 3.0, 5mA - ustawienie 3V, 5mA,
APPL DEF, DEF - ustawienie domyślnej wartości napięcia i domyślnej wartości prądu,
APPL 2 - ustawienie napięcia 2V, ustawienie prądu nie jest zmieniane.
W trybie stabilizacji napięcia może zmieniać się prąd, w trybie stabilizacji prądu - napięcie. Tak więc sens mają komendy umożliwiające stwierdzenie jaka jest aktualna wartość każdej z tych wielkości. Zapytania VOLT? i CURR? Zwracają ustawione wartości graniczne (takie, jak zostały podane), natomiast to, jakie są rzeczywiste aktualne wartości prądu zależy od tego, który tryb stabilizacji doszedł do głosu. Te rzeczywiste wartości można zmierzyć za pomocą polecenia wysokiego poziomu o postaci:
MEASure[:SCALar]:CURRent[:DC]?
MEASure[:SCALar][:VOLTage][:DC]?.
Z opisu składniowego widać, że MEAS? lub MEAS:VOLT? mierzy napięcie a MEAS:CURR? mierzy prąd. Domyślne węzły :SCALAR i :DC zostały wprowadzone ze względu na spójność horyzontalną zestawu poleceń - komenda MEASure jest zdefiniowana na wielu urządzeniach różnych klas, oferujących bogate możliwości pomiarowe.
Rozkazy kontroli wyzwalania
Podsystem wyzwalania (TRIGger:) jest bardzo ważny jeśli w grę wchodzi synchronizacja pracy wielu urządzeń pomiarowych lub synchronizacja akcji pomiarowo-kontrolnych z pewnymi asynchronicznymi zdarzeniami zewnętrznymi. Prawdziwa konieczność stosowania tego podsystemu zachodzi w przypadku złożonego systemu pomiarowego.
W zasilaczu E3640 akcją podlegającą wyzwoleniu jest podanie napięcia na zaciski zewnętrzne (lub ustalenie prądu w dołączonym do zacisków obwodzie). W poprzednim punkcie wspomniano o poleceniu VOLT:TRIG <napięcie>, które ustala wartość napięcia do ustawienia po pojawieniu się sygnału wyzwolenia. Sygnał ten może mieć dwa źródła: BUS oraz IMM. Wyzwalanie BUS to sygnały z magistrali, a więc pochodzące od kontrolera systemu. Sygnał taki można wzbudzić za pomocą komendy *TRG wysłanej do urządzenia. Zasilacz musi być w stanie oczekiwania na wyzwolenie. Wprowadza się go w ten stan komendą INITiate. Tak więc ciąg komend:
TRIG:SOUR BUS;:VOLT:TRIG 5;:INIT
a później:
*TRG
spowoduje ustawienie napięcia 5V w chwilę po wyzwoleniu (*TRG). Przy okazji, należy zwrócić uwagę na dwukropki przed poleceniami VOLT oraz INIT. Pierwsze polecenie w linii ustawia pozycję w ścieżce poleceń na węźle TRIG, natomiast polecenie VOLT należy do węzła SOURce:, stąd konieczny jest dwukropek, mimo, że nazwa domyślnego węzła SOURce: została pominięta. Analogicznie z poleceniem INIT.
Wydanie polecenia *TRG, jeśli instrument nie jest przygotowany do wyzwolenia (tj. wcześniej nie jest wykonane polecenie INIT) zakończy się błędem „Trigger ignored”.
Dodatkową cechą wyzwalania zasilacza jest możliwość opóźnienia reakcji urządzenia na akcję wyzwolenia za pomocą polecenia TRIG:DELay {<opóźnienie>|MIN|MAX}. Parametr jest podawany w sekundach. Np. polecenie:
TRIG:SOUR BUS;DEL 3;:VOLT:TRIG 3;:INIT;*TRG
spowoduje ustawienie na zaciskach napięcia 3V po 3 sekundach.
Drugim źródłem wyzwalania jest IMM - źródło wewnętrzne, generujące sygnał wyzwolenia natychmiast po komendzie INIT. W tym wypadku opóźnienia wyzwalania ustawione za pomocą TRIG:DEL są ignorowane. Tak więc polecenie:
TRIG:SOUR IMM;:VOLT:TRIG 1;:INIT
spowoduje natychmiastowe ustawienie napięcia 1V na zaciskach.
W każdej chwili można stwierdzić, w jakim trybie wyzwalania jest urządzenie, dzięki zapytaniu TRIG:SOUR?.
Inne polecenia zasilacza
Zestaw poleceń zasilacza obejmuje jeszcze wiele komend. Kompletny opis zawarty jest w instrukcji obsługi (odesłanie). Dostępne są między innymi komendy do sterowania wyświetlaczem lokalnym zasilacza - jego włączeniem i wyłączaniem czy wręcz wyświetlaniem na podanego tekstu. Zdefiniowany jest cały podsystem kalibracji urządzenia: CALibration, w ramach podsystemu MEMory możliwe jest zapamiętywanie i późniejsze odtwarzanie nastaw urządzenia. W ramach ćwiczenia można zlokalizować w instrukcji opis poleceń sterujących wyświetlaczem (podsystem DISPlay) i spróbować ich użyć.
Rozkazy SCPI multimetru HP - 34401A
Opis poleceń języka SCPI dla multimetru HP-34401A może już czerpać korzyści z filozofii standardu SCPI. Większość opisanych w poprzednim punkcie poleceń stosuje się do multimetru w identyczny sposób. Dotyczy to zarówno komend standardu IEEE-488.2 (*RST, *IDN?, *CLS, *ESR?, *TST?), komend z grupy SYSTem (raportowania błędów SYST:ERR?, przełączania między trybem lokalnym a zdalnym SYST:REM, SYST:LOC, sprawdzania wersji SYST:VERS, itp.) jak i podsystemu wyzwalania (ustawianie źródła wyzwalania TRIG:SOUR, ustawiania opóźnienia TRIG:DEL, itp.). Multimetr trochę rozszerza zestaw poleceń z tych podsystemów - zostanie to przedstawione. Jednak głównie dalszy opis skoncentruje się na tych grupach poleceń, których z oczywistych powodów brakowało w zasilaczu, mianowicie na podsystemach umożliwiających przeprowadzanie pomiarów: MEASure:, INPut:, CONFIGure:, SENSe:, CALCulate:.
Ogólna organizacja pomiaru za pomocą multimetru
Żeby lepiej uchwycić logikę struktury poleceń multimetru, warto zdać sobie sprawę, co się składa na akcję pomiarową. Multimetr oferuje całą gamę pomiarów, trzeba więc wskazać, jakiego pomiaru się dokonuje. Mierzona wielkość może się wahać w szerokim zakresie, potrzebne jest więc ustawienie zakresu pomiaru. Zawsze istnieją pewne wymagania co do dokładności, a więc i rozdzielczości pomiaru. Często pomiar wymaga pewnego prekondycjonowania (np. wstępnej filtracji). Czasem zachodzi potrzeba, żeby wynik pomiaru poddać prostemu przeliczeniu (np. wyrazić w mierze względnej przy ustalonym poziomie odniesienia). Potrzebny jest do tego dodatkowy podsystem przetwarzania wyniku pomiaru. Bardzo często zachodzi potrzeba przeprowadzenia serii pomiarów, a co za tym idzie - zmagazynowania wyników w wewnętrznej pamięci. Ta dodatkowa cecha umożliwia zresztą dodatkową funkcjonalność przyrządu - przetwarzanie całej serii pomiarów (np. w celu wychwycenia wartości ekstremalnych). Każdy z wymienionych aspektów procesu pomiarowego znajduje swoje odzwierciedlenie w zbiorze poleceń i na najniższym poziomie, trzeba określić wszystkie szczegóły akcji pomiarowej. Istnieją jednak także wyższe poziomy, pozwalające na proste przeprowadzenie podstawowych pomiarów.
Najwyższy poziom - podsystem MEASure:
Polecenia podsystemu MEASure: pozwalają przeprowadzić typowe pomiary oferując jedynie swobodę co do wyboru funkcji pomiarowej, zakresu i rozdzielczości. Podsystem MEAS: jest wprowadzony zgodnie z tą samą filozofią, co podsystem APPLy w zasilaczu - aby wymuszać horyzontalną spójność zbioru poleceń języka. Na poziomie ogólności oferowanym przez MEAS: nie ma praktycznie różnic między multimetrami różnych producentów, a nawet między przyrządami różnych klas, w granicach wspólnej funkcjonalności (w zasilaczu również była zrealizowana prosta grupa MEAS:). Wywołanie funkcji pomiarowej za pomocą MEAS:... powoduje automatyczne ustawienie najlepiej pasującego do określonego pomiaru tzw. presetu, tzn. zbioru szczegółowych ustawień przyrządu. Za prostotę płaci się więc elastycznością. Wszystkie polecenia grupy MEAS: zakładają m.in. ustawienie 20Hz pasma filtru wejściowego, możliwość zarejestrowania tylko jednego pomiaru, brak jakiegokolwiek przeliczenia wyniku pomiaru, itd.
Przykładem funkcji z grupy MEAS: jest pomiar napięcia stałego, określony składnią:
MEASure:VOLTage:DC? [{<zakres>|MIN|MAX|DEF}[,{<rozdzielcz>|MIN|MAX|DEF}]]
Polecenie może mieć więc 0, 1 lub dwa argumenty. Pierwszy argument to zakres pomiarowy, drugi - rozdzielczość. Żeby określić rozdzielczość, trzeba określić zakres. Zamiast wartości liczbowej można zawsze zastosować wartości wbudowane MIN, MAX, DEF. Przykładami poprawnych poleceń pomiaru napięcia stałego są więc:
MEAS:VOLT:DC?
MEAS:VOLT:DC? MAX,MIN
MEAS:VOLT:DC? 100mV
Należy zwrócić uwagę, że forma polecenia: MEAS:VOLT:DC? jest poprawna również w odniesieniu do zasilacza E3640, jak to zostało opisane w poprzednim podrozdziale.
Pozostałe funkcje pomiarowe z grupy MEAS: mają tę samą strukturę. Oto ich drzewo (dla przejrzystości pominięto specyfikację argumentów, która jest taka sama dla wszystkich funkcji poza CONTinuity i DIODe, które nie mają argumentów):
MEASure:
VOLTage:
DC?
DC:RATio?
AC?
CURRent:
DC?
AC?
RESistance?
FRESistance?
FREQuency?
PERiod?
CONTinuity?
DIODe?
Znaczenie poszczególnych gałęzi jest dość oczywiste: VOLT - pomiar napięcia, CURR - pomiar prądu, RES, FRES - odpowiedni dwu- i czteroprzewodowy pomiar rezystancji, FREQ - częstotliwość, PER - okres, CONT, DIOD - badanie ciągłości (przejścia), w drugim przypadku prąd i napięcie badania dostosowane dla diody półprzewodnikowej. Funkcja MEAS:VOLT:DC:RATIO? mierzy stosunek napięć, przy czym napięcie odniesienia jest podłączone do zacisków SENSE multimetru, a napięcie mierzone - do zacisków INPUT. Przykładami poprawnych poleceń pomiarowych są więc:
MEAS:CURR:AC? 100mA, MIN
MEAS:FREQ? 100kHz
MEAS:DIODE?
Średni poziom - podsystem CONFigure:
Polecenia grupy CONFigure: pozwalają na automatyczne ustawienie najlepszego presetu, tak jak dla MEASure:, ale nie przeprowadzają pomiaru. Polecenia z tej grupy różnią się od poleceń grupy MEASure: tylko pierwszym węzłem: zamiast MEAS: jest CONF:, no i polecenia te nie są kwerendami, brak więc znaku zapytania. Możliwe są więc np.:
CONF:CURR:AC 100mA, MIN
CONF:FREQ 100kHz
Sens tych poleceń polega na tym, że przed przeprowadzeniem pomiaru, można dostroić stosownie do potrzeb ustawienia, które “masowo” zostały ustawione przez polecenie CONF:. Można np. ustawić dodatkowe przeliczenie. Przeprowadzenie pomiaru po wstępnej konfiguracji możliwe jest na dwa sposoby. Polecenie wyższego poziomu - READ? - „uzbraja” system wyzwalania, czeka na wyzwolenie, dokonuje pomiaru i wysyła wynik na magistralę. Tę samą akcję można zrealizować używając dwóch poleceń niższego poziomu: INIT oraz FETCh?. Pierwsze z nich „uzbraja” system wyzwalania, oczekuje na wyzwolenie, dokonuje pomiaru i zapisuje wynik w wewnętrznej pamięci instrumentu, drugie - przenosi wynik z pamięci wewnętrznej do bufora wyjściowego (czyli efektywnie na magistralę urządzenia). Ta wersja może mieć zalety przy serii pomiarów. Odłożenie odczytu na koniec, po zrealizowaniu serii pozwala na mniejsze odstępy czasowe między pomiarami. Tak więc trzy przykładowe, ekwiwalentne sposoby przeprowadzenia pomiaru częstotliwości, to:
MEAS:FREQ? 300kHz, 0.1kHz
lub:
CONF:FREQ 300kHz, 0.1kHz
TRIG:SOUR IMM
READ?
lub:
CONF:FREQ 300kHz, 0.1kHz
TRIG:SOUR IMM
INIT
FETC?
Najniższy poziom - podsystem SENSe:
Polecenia grupy SENSe: umożliwiają najbardziej szczegółowy stopień kontroli nad funkcjami multimetru. Działanie na tym poziomie polega na szczegółowej konfiguracji pomiaru oraz zastosowaniu polecenia READ? albo pary INIT, FETCh?. Węzeł SENSe: jest węzłem domyślnym, nie ma więc konieczności umieszczania go na początku polecenia. Nie wydaje się celowe szczegółowe omawianie poleceń tej grupy. Drzewo rozkazów zawarte jest w instrukcji urządzenia [5]. Można w nim znaleźć m.in. polecenia ustawiania funkcji pomiarowej (np. FUNCtion „CURRent:DC”), ustawiania zakresu i rozdzielczości dla każdej z funkcji pomiarowych (np. VOLT:DC:RANGe MAX, FRES:RESolution MIN), ustawianie czasu całkowania przy przetwarzaniu A/C (np. CURR:DC:NPLCycles 10), ustawiania czasu bramkowania przy pomiarze częstotliwości i okresu (np. FREQ:APERture MAX) i inne.
Przetwarzanie wyników pomiarów - podsystem CALCulate:
Multimetr oferuje pięć różnych funkcji działających na wyniku każdego pomiaru. Jednak zastosowanie przeliczenia jest możliwe tylko przy odczycie wyniku za pomocą instrukcji READ? lub pary: INIT, FETC? Przy instrukcjach z grupy MEAS: przeliczenia matematyczne są wyłączone.
Wybór funkcji następuje poprzez polecenie:
CALCulate:FUNCtion {NULL|DB|DBM|AVERage|LIMit}.
Odpowiednia kwerenda (ustalająca, jaka funkcja jest ustawiona), to CALC:FUNC?. Dodatkowo, przeliczenie można włączyć i wyłączyć za pomocą: CALC:STATe {OFF|ON} (odpowiednia kwerenda, to CALC:STAT?).
Znaczenie poszczególnych funkcji:
NULL - odejmuje od wyniku każdego pomiaru pewną ustawianą przez użytkownika wartość - „poziom zera”.
DBM - odnosi się tylko do pomiarów napięcia i podaje moc, jaka wydziela się przy zmierzonym napięciu na ustawionej przez użytkownika referencyjnej rezystancji, odniesioną do poziomu 1mW, wg wzoru:
.
DB - odnosi się tylko do pomiarów napięcia i podaje różnicę poziomu dBm aktualnego odczytu (liczonej wg powyżej podanego wzoru) i referencyjnej, ustawionej przez użytkownika wartości poziomu .
AVER - wyznacza średnią, minimalną i maksymalną wartość pomiarów przeprowadzonych od momentu uaktywnienia funkcji.
LIM - testuje czy wynik pomiaru leży w obszarze, wyznaczonym przez dwie ustawione przez użytkownika granice (dolną i górną).
Stosowanie funkcji podlega nieznacznym ograniczeniom. Żadna funkcja matematyczna nie stosuje się przy funkcji pomiarowej CONTinuity i DIODe. Funkcje DB oraz DBM stosują się tylko do pomiarów napięcia (obojętnie DC czy AC). Funkcja NULL nie stosuje się do pomiaru VOLT:DC:RATIO.
Aby zastosować funkcję NULL należy ustawić poziom zera. Realizuje się to poleceniem:
CALC:NULL:OFFSet {<wartość>|MIN|MAX}
(kwerenda: CALC:NULL:OFFSet? [{MIN|MAX}]).
Tak więc kompletny ciąg poleceń uaktywniający odejmowanie poziomu zera równego 1V, to:
CALC:FUNC NULL;STATE ON;NULL:OFFS 1;:INIT;:FETCH?
Zgodnie z uwagami podanymi w p. 3.2.3, w poleceniach po średnikach można było pominąć osiągnięty pierwszym poleceniem węzeł CALC:.
Funkcja DBM wymaga wyboru rezystancji referencyjnej. Dokonuje się tego za pomocą:
CALC:DBM:REFerence {<wartość>|MIN|MAX}
(kwerenda: CALC:DBM:REFerence? [{MIN|MAX}]).
Argument <wartość> może przyjmować wartości: 50, 75, 93, 110, 124, 125, 135, 150, 250, 300, 500, 600, 800, 900, 1000, 1200 i 8000 Ω. Przykład:
CALC:FUNC DBM;STATE ON;DBM:REF 75;:INIT;:FETCH?
Funkcja DB wymaga wyboru referencyjnego poziomu w dBm. Uzyskuje się to poprzez:
CALC:DB:REFerence {<wartość>|MIN|MAX}
Funkcja AVER, od momentu uaktywnienia, na bieżąco uaktualnia wartość średnią, minimalną i maksymalną zebranych wyników pomiarów. Dostęp do tych wartości następuje za pomocą kwerend:
CALC:AVERage:AVERage?
CALC:AVERage:MINimum?
CALC:AVERage:MAXimum?
Dodatkowo, dostępny jest licznik zanalizowanych pomiarów: CALCulate:AVERage:COUNt?
Wreszcie funkcja LIM wymaga podania granic testowania:
CALC:LIMit:LOWer {<wartość>|MIN|MAX}
CALC:LIMit:UPPer {<wartość>|MIN|MAX}
Wynik testowania jest sprzętowy: wskaźnik na wyświetlaczu, przerwanie SRQ w przypadku pracy z interfejsem GPIB czy też wystawienie impulsów na nóżki 1 i 9 złącza interfejsu RS232.
Wyzwalanie pomiarów - podsystem TRIG:
Jak wspomniano, podsystem wyzwalania w multimetrze jest zgodny z opisanym już podsystemem wyzwalania zasilacza. W multimetrze występuję jednak pewne funkcjonalne rozszerzenia.
Przede wszystkim multimetr w odpowiedzi na pojedynczy sygnał wyzwolenia może przeprowadzić całą serię pomiarów (do 50000). Ustala to polecenie:
SAMPle:COUNt {<ilość_pomiarów>|MIN|MAX}.
Pomiary są wykonywane w odstępie ustawionym za pomocą omówionego już TRIG:DEL.
Tak więc np. ciąg poleceń:
TRIG:SOUR BUS; DEL 1;:SAMP:COUNT 10;:INIT;*TRG
spowoduje przeprowadzenie 10 pomiarów w odstępie co 1 sekundę. Dalsze polecenie FETCH? zwróci dziesięć wartości wyników pomiarów. Pożyteczne jest przy tym polecenie:
TRIG:DEL:AUTO {OFF|ON},
umożliwiające automatyczny dobór zwłoki na podstawie aktualnych ustawień pomiarowych instrumentu.
Multimetr może też zostać wprowadzony w stan oczekiwania na wielokrotne wyzwolenie. Polecenie:
TRIGger:COUNt {<ilość_wyzwoleń>|MIN|MAX|INF}
Ustawia, ile wyzwoleń musi nastąpić zanim urządzenie będzie gotowe do przyjęcia następnego polecenia z magistrali.
Rozkazy raportowania stanu urządzenia
Podobnie, jak zasilacza E3640A, multimetr HP34401A zgłasza swój stan zgodnie z ogólną koncepcją stosowaną dla urządzeń obsługiwanych standardem SCPI. W multimetrze zrealizowany jest dodatkowy rejestr stanu: QUEStionable. Jest to 16-bitowy rejestr, z czego wykorzystano tylko 5 bitów. Bity 0,1 i 9 sygnalizują przekroczenie zakresu pomiarowego, odpowiednio: napięcia, prądu i rezystancji. Bity 11 i 12 oznaczają przekroczenie granic (odpowiednio, dolnej i górnej) zakresu testowania funkcją LIM Z rejestrem QUES jest skojarzony rejestr maski. Przy odczycie rejestr QUES jest poddawany bitowemu iloczynowi logicznemu z wartością maski. Ustawienie maski jest dokonywane za pomocą: STATus:QUES:ENABle <maska>, a odczyt aktualnej zawartości rejestru, za pomocą: STAT:QUES:EVENt?
Pierwsze polecenie służy do zaprogramowania rejestru maski rejestru jakości. Polecenie pytające ze słowem kluczowym ENABle zwraca aktualną zawartość rejestru maski natomiast polecenie ze słowem kluczowym EVENt zwraca aktualną zawartość rejestru jakości danych pomiarowych. Odczyt rejestru zeruje jego dotychczasową zawartość (nie dotyczy rejestru maski). Tak więc np. testowanie wyjścia poza zakres 1-3V wymaga więc następujących poleceń:
CALC:FUNC LIM;STATE ON;LIM:LOW 1;UPP 3
STAT:QUES:ENAB 6144
(... i sam test po pewnym czasie:)
STAT:QUES:EVEN?
(jeśli reprezentacja bitowa ma ustawiony bit nr 11 to znaczy, że została przekroczona dolna granica, jeśli ustawiony jest bit 12 - oznacza to przekroczenie górnej granicy).
Rozkazy SCPI generatora HP33120A
W zbiorze poleceń SCPI generatora HP33120A [4] polecenia standardu IEEE 488.2, system raportowania statusu, polecenia pobierania komunikatów błędów i podsystem wyzwalania są niemal takie same, jak dla zasilacza i multimetru. Jeśli chodzi o pozostałe podsystemy, to z oczywistych powodów nie jest realizowany podsystem SENSe:, natomiast bardzo rozbudowany jest zbiór poleceń podsystemu SOURce:. Urządzenie ma wiele trybów generacji. Nie będą one tu szczegółowo omawiane. Przedstawione zostaną tylko charakterystyczne polecenia związane z generacją fali sinusoidalnej i prostokątnej. Natomiast więcej uwagi zostanie poświęcone definiowaniu przebiegu użytkownika, jako, że jest to przykład realizacji kolejnego charakterystycznego podsystemu funkcjonalnego - obsługa pamięci wewnętrznej.
Najwyższy poziom - podsystem APPLy:
Podsystem APPLy:, podobnie jak w przypadku zasilacza, pozwala na najprostsze wykorzystanie podstawowych funkcji generatora. Wszystkie polecenia z tej grupy mają tę samą składnię. Przykładem jest polecenie generacji przebiegu sinusoidalnego o określonej częstotliwości, amplitudzie i składowej stałej:
APPLy:SINusoid [<częstotliwość>[,<amplituda>[,<skł_stała>]]]
Polecenie może mieć 0,1,2 lub 3 argumenty, określające kolejne parametry przebiegu. Inne polecenia tej grupy różnią się tylko drugim węzłem - nazwą przebiegu. Zamiast SINusoid może być użyte: SQUare, TRIangle, RAMP, NOISe, DC, USER, oznaczające generację, odpowiednio: fali prostokątnej, trójkątnej, piłokształtnej, szumu, przebiegu stałego, oraz przebiegu zdefiniowanego przez użytkownika (ta ostatnia opcja zostanie omówiona dalej). W przypadku przebiegu NOISe nie ma sensu parametr <częstotliwość>, ale i tak, dla utrzymania spójności, musi być podana jakaś wartość częstotliwości (można też użyć wartości wbudowanej DEF). Podobnie, dla przebiegu DC, mimo, że nie ma sensu, trzeba podać wartości i częstotliwości i amplitudy (lub wartość DEF).
Przykłady poprawnych poleceń tej grupy:
APPL:SIN 1kHz,1
APPL:SQU 10kHz
APPL:TRI 500,1,1
APPL:DC DEF,DEF,100mV
APPL:NOIS DEF,1
Podsystem SOURce:
Możliwości generacyjne urządzenia są oczywiście znacznie szersze, niż wynikałoby to z poprzedniego punktu. Dostęp do wszystkich ustawień umożliwia rozbudowany podsystem SOURce:. Zakres funkcjonalny poleceń APPLy: pokrywają polecenia:
[SOURce:]FUNCtion:SHAPe {SINusoid|SQUare|TRIangle| RAMP|NOISe|DC|USER}
[SOURce:]FREQuency {<wartość>|MIN|MAX}
[SOURce:]VOLTage {<wartość>|MIN|MAX}
[SOURce:]VOLTage:OFFSet {<wartość>|MIN|MAX}
Jak widać, węzeł SOURce: jest domyślny, można go więc pomiajać w poleceniach. Odpowiednikiem komendy APPL:SIN 1kHz,1,0.5, zapisanym za pomocą poleceń grupy SOURce jest:
FUNC:SHAP SIN;:FREQ 1kHz;VOLT 1;VOLT:OFFS 0.5
Przy okazji proszę zwrócić uwagę na zapis. Pierwsze polecenie w linii ustawia pozycję w ścieżce poleceń na węźle [SOURce:]FUNC:. Z tego powodu drugie polecenie (po średniku) musi zaczynać się od dwukropka, po to żeby wrócić z pozycją do węzła [SOURce:]. Pozostałe polecenia w linii wychodzą również z tego węzła, inne dwukropki nie są więc już potrzebne.
Oto niektóre inne polecenia, przekraczające funkcjonalnie grupę APPLy: (domyślny węzeł [SOURce:] będzie pomijany).
Ustawianie wypełnienia przebiegu prostokątnego:
PULSe:DCYCle {<wyp_procent>|MIN|MAX}.
Ustawianie sposobu podawania amplitudy przebiegu:
VOLTage:UNIT {VPP|VRMS|DBM|DEFault}.
Poszczególne warianty argumentu oznaczają: VPP - wartość międzyszczytowa, VRMS - wartość skuteczna, dla sinusoidy o zerowej składowej stałej: VRMS≈0.707*VPP/2, DBM - wartość w decybelach (mocy), DEF - ustawienie domyślne, tożsame z VPP.
Tak więc np. ekwiwalentne są polecenia:
FUNC:SHAP SIN;:FREQ 1kHz;VOLT:UNIT VPP;VOLT 1
oraz
FUNC:SHAP SIN;:FREQ 1kHz;VOLT:UNIT VRMS;VOLT 0.707
Przy ustawianiu amplitudy trzeba jednak zwrócić uwagę na ustawienie impedancji wyjściowej generatora. Polecenie
OUTPut:LOAD {50|INFinity|MIN|MAX}
może ustawić zakładaną impedancję wyjściową na 50Ω lub nieskończoność (INF). Przy ustawieniu 50Ω dla maksymalnego dopasowania mocy, stopień wyjściowy generatora jest realizowany, jak na rys. 3.4. Przy ustawianiu amplitudy przyrząd bierze poprawkę na wewnętrzną rezystancję 50Ω i doregulowuje amplitudę tak, aby zadana wartość została osiągnięta na obciążeniu 50Ω, czyli w istocie ustawia wartość amplitudy dwa razy większą niż zadana. Z tego powodu np., przy ustawieniu impedancji obciążenia 50Ω na oscyloskopie podłączonym bezpośrednio do generatora, obserwuje się amplitudę dwa razy większą do zadanej.
Rys. 3. 4. Uproszczony schemat stopnia wyjściowego generatora
Podsystem SOURce: oferuje cztery węzły poleceń służących do generacji przebiegów zmodulowanych (AM, FM, BM - Burst Mod. i FSKey - Freq. Shift Keying) oraz węzeł kontrolujący process płynnej zmiany częstotliwości (SWEep). Każdy węzeł umożliwia ustawienie wszystkich parametrów modulacji (czy zmiany częstotliwości). Ta jednak grupa poleceń będzie pozostawiona samodzielnym ćwiczeniom, jako że konceptualnie nie wnosi nic nowego.
Podsystem wyzwalania
Dla generatora, podsystem ten udostępnia jedynie polecenie ustawiania źródła wyzwalania, identyczne jak w poprzednich urządzeniach (TRIG:SOUR ...). Wyzwoleniu podlegają tylko procesy generacji paczek (w trybie BURST) oraz proces płynnej zmiany częstotliwości (SWEEP). Przykład wykorzystania tego ostatniego:
TRIG:SOUR BUS
FREQ:START 1kHz; STOP 10kHz
SWEEP:SPACING LIN;TIME 1;STATE ON
*TRG
Wyzwolenie z magistrali za pomocą polecenia *TRG spowoduje jednokrotny proces liniowej zmiany częstotliwości w granicach od 1kHz do 10kHz w czasie jednej sekundy. Przełączenie na wyzwalanie wewnętrzne: TRIG:SOUR IMM spowoduje, że proces zmiany częstotliwości będzie samoczynnie powtarzany.
Definiowanie przebiegu użytkownika
Instrument ma możliwość generowania arbitralnego przebiegu zdefiniowanego przez użytkownika. Definicję stanowi ciąg próbek tworzących jeden okres przebiegu. Urządzenie wyposażone jest w wewnętrzną pamięć przeznaczoną do przechowywania definicji. Pamięć jest dwojakiego rodzaju: ulotna i nieulotna. Pamięć nieulotna utrzymuje swoją zawartość po odłączeniu zasilania. W pamięci tej zapisanych jest pięć predefiniowanych rodzajów przebiegów, jest też miejsce na cztery definicje użytkownika. W pamięci ulotnej (VOLATILE), tracącej zawartość po zaniku zasilania, może być przechowywana tylko jedna definicja. Zazwyczaj pamięć ulotna jest tylko tymczasowym buforem umożliwiającym przyjęcie danych definicyjnych od kontrolera systemu, przy czym lokalizacją docelową jest pamięć nieulotna.
Włączenie generacji przebiegu arbitralnego odbywa się w dwóch krokach. Najpierw należy użyć polecenia:
FUNC:SHAPE USER
Oznacza to oczywiście generację przebiegu na podstawie definicji. Następnie należy wskazać, który z zapisanych przebiegów ma być generowany. Polecenie ma postać:
FUNCtion:USER {<nazwa>|VOLATILE}
Jak wspomniano, pięć przebiegów jest predefiniowanych. Ich nazwy, to: SINC, NEG_RAMP, EXP_RISE, EXP_FALL i CARDIAC. Tak więc np. do generacji przebiegu eksponencjalnie opadającego prowadzi ciąg komend:
FUNC:SHAPE USER;USER EXP_FALL
Wskazany może być też przebieg, którego definicja jest aktualnie w pamięci ulotnej (argument VOLATILE), może być też podana nazwa jednego z czterech przebiegów użytkownika wpisanych do pamięci nieulotnej. Jednak zawsze, zanim przebieg trafi do pamięci nieulotnej (i zanim zostanie mu nadana nazwa), jego definicja musi zostać wprowadzona do pamięci nieulotnej. Służy do tego polecenie
DATA VOLATILE, <wartość>,<wartość>, . . .
Polecenie to podaje kolejne próbki przebiegu, wyrażone, jako liczby rzeczywiste z zakresu od -1 do 1. Trzy kropki na końcu zapisu składniowego oznaczają, że ilość próbek nie jest ustalona. Minimalna ilość punktów definicji to 8, a maksymalna to 16000. Tak więc polecenie definiujące narastający przebieg schodkowy ma postać:
DATA VOLATILE, -1,-0.8,-0.6,-0.2,0,0.2,0.4,0.6,0.8,1
Potwierdzeniem, że w pamięci ulotnej jest zdefiniowany przebieg jest kwerenda DATA:CATalog?, która poza nazwami pięciu predefiniowanych przebiegów powinna wyliczyć także identyfikator VOLATILE.
Uaktywnienie generacji tego przebiegu dokonuje się za pomocą poleceń:
FUNC:SHAPE USER;USER VOLATILE
Polecenie DATA VOLATILE,... jest jednym z poleceń z podsystemu DATA:, służącego do zarządzania pamięcią wewnętrzną urządzenia.
Następnym krokiem jest przeniesienie przebiegu z pamięci ulotnej do nieulotnej - służy do tego polecenie:
DATA:COPY <nazwa> [,VOLATILE]
W poleceniu, jako argument podaje się nazwę, pod jaką przebieg będzie zapisany w postaci nieulotnej. Nazwa może mieć najwyżej 8 liter, musi się zaczynać od litery i może mieć wewnątrz tylko litery, cyfry i znak podkreślenia. Drugi argument, jak widać jest opcjonalny, bo nawet jeśli jest podany, musi mieć wartość VOLATILE. Tak więc zapisanie zdefiniowanego przebiegu pod nazwą „SCHODKI” odbywa się za pomocą polecenia:
DATA:COPY SCHODKI, VOLATILE
(lub: DATA:COPY SCHODKI)
Od tej pory kwerenda: DATA:CAT?, powinna zwracać także nazwę SCHODKI. Od tej pory też generację przebiegu można uaktywnić za pomocą:
USER SCHODKI
Podsystem DATA: udostępnia jeszcze kilka poleceń ułatwiających zarządzanie przebiegami. Aby się przekonać, ile jest wolnych lokalizacji w pamięci nieulotnej, należy użyć zapytania: DATA:NVOLatile:FREE?. W razie potrzeby można skasować z pamięci nieulotnej przebieg za pomocą polecenia: DATA:DELete {<nazwa>|VOLATILE}. Można wręcz skasować wszystkie przebiegi użytkownika poleceniem: DATA:DEL:ALL. Cztery polecenia umożliwiają pobranie informacji o zdefiniowanym przebiegu. Są to:
DATA:ATTRibute:AVERage? [<arb name>]
DATA:ATTRibute:CFACtor? [<arb name>]
DATA:ATTRibute:POINts? [<arb name>]
DATA:ATTRibute:PTPeak? [<arb name>]
Każde z tych poleceń albo jawnie podaje nazwę przebiegu (w tym także VOLATILE), albo odnosi się do aktywnego przebiegu. Zwracana wartość to, odpowiednio: wartość średnia przebiegu, stosunek wartości skutecznej do szczytowej, ilość punktów w definicji oraz rozpiętość wartości w definicji (wartość międzyszczytowa).
Należy dodać, że są jeszcze dwa warianty podawania definicji przebiegu, realizowane poleceniem:
DATA:DAC VOLATILE, {<wart>, <wart>, . . . |<blok_binarny>}
W wariancie podobnym do poprzedniego podawany jest ciąg wartości, ale jako liczby całkowite zakresu -2047 do 2047 (a więc w „jednostkach technicznych” 12-bitowego przetwornika C/A generatora). Jednak jako argument może być wysłany także nie ciąg liczb zapisanych jako tekst, ale tzw. <blok_binarny>, tj. ciąg wartości ośmiobitowych, w którym każde kolejne dwie wartości kodują jedną próbkę przebiegu. Prosty przykład pozwoli uchwycić różnicę. Jeśli kolejną próbką sygnału jest wartość -2047, to jej przesłanie wymaga przesłania sześciu znaków: „-2047,”. Każdy znak to kod ASCII, a więc jedna ośmiobitowa (ściśle rzecz biorąc - siedmiobitowa) wartość. Przesłanie próbki wymaga więc wysłania sześciu bajtów informacji (w kodzie szesnastkowym: 2D 32 30 34 37 2C). W bloku binarnym ta sama informacja zajmie dwa bajty - zakodowaną wartość -2047 (dokładnie: 00 F8). Blok binarny zaczyna się kilkuznakową sygnaturą, mówiącą o długości bloku. Pierwszy znak tej sygnatury to znak #, następny znak jest cyfrą podającą ile jeszcze znaków, reprezentujących ilość bajtów w bloku binarnym jest w sygnaturze. I tak np. sygnatura #41024 oznacza, że w bloku binarnym jest 1024 bajty, a więc 512 próbek sygnału (po znaku # jest cyfra 4 dlatego, że ciąg 1024, oznaczający długość ma cztery cyfry). Ponieważ każda próbka ma dwa bajty, należy jeszcze ustalić, czy najpierw następuje tzw. młodszy bajt (najmłodsze 8 bitów liczby), czy starszy bajt (bity od 8 do 15). Dokonuje się tego za pomocą polecenia FORMat:BORDer {NORMal|SWAPped}. Argument NORMal oznacza, że najpierw zostanie wysłany starszy bajt. W systemach komputerowych opartych o procesory INTEL'a obowiązuje wariant SWAPped - pierwszy jest młodszy bajt.
Rozkazy oscyloskopu TDS210
Zbiór poleceń oscyloskopu TDS210 jest tak rozbudowany, jak złożony jest sam oscyloskop (instrukcja programowania przyrządu [6] liczy prawie 300 stron). W tym wypadku poza grupą komend standardu IEEE 488.2 trudno jest znaleźć analogie do zestawów poleceń do tej pory omówionych instrumentów. Właściwie główną cechą wspólną jest zachowanie zasad składniowych standardu SCPI. Poniżej zostaną omówione pobieżnie najważniejsze aspekty zbioru poleceń.
Uwagi składniowe
Przy opisie poleceń potrzebna jest dodatkowa, nie stosowana dotąd konwencja notacyjna. Oscyloskop TDS210 jest przyrządem dwukanałowym. W zbiorze poleceń występuje cały podsystem poświęcony ustawieniom dzielnika amplitudy, który jest określony zarówno dla pierwszego kanału jak i drugiego. Aby uniknąć dublowania, w ścieżce poleceń tego systemu jest umieszczany węzeł CH<x>. Przy wykorzystywaniu polecenia w miejsce <x> należy wstawić odpowiedni identyfikator, a więc użyć zapisu CH1 lub CH2. To samo dotyczy identyfikacji automatycznego pomiaru (jednego z czterech). W zapisie składni poleceń pojawia się zapis: MEAS<x>, gdzie <x> to 1, 2, 3 lub 4. Czasem identyfikator rozróżniający to litera (A, B, ...). Tak jest np. przy przebiegach referencyjnych REF<x> (REFA lub REFB).
Niestety, interpreter SCPI oscyloskopu nie ma zaimplementowanego rozpoznawania jednostek, więc zapis argumentu w rodzaju 1mV nie zostanie zaakceptowany. Można jednak używać notacji naukowej (np. 1E-3).
Różne polecenia organizacyjne
Oscyloskop implementuje komendy IEEE 488.2, np. identyfikację przyrządu za pomocą *IDN?, reset (*RST), raportowanie statusu (np. *ESR?), itp.
Dodatkową komendą z tej grupy jest *LRN?, zwracająca prawie wszystkie aktualne ustawienia oscyloskopu. W zestawie poleceń jest jeszcze kilka poleceń zwracających część ustawień, np.: CH<x>? (ustawienia dzielnika amplitudy kanału x, np. CH1?), HORizontal? (ustawienia podstawy czasu), MEASUrement? (ustawienia pomiarów automatycznych), CURSor? (ustawienia kursorów pomiarowych), itp. Format odpowiedzi tych ustawień zależy od ustawień określanych poleceniami HEADER {ON|OFF} (uwzględnianie nagłówków parametrów) oraz VERBOSE {ON|OFF} (skracanie słów kluczowych). Najbardziej szczegółowy raport uzyskuje się przy HEADER ON;VERBOSE ON.
Interpreter poleceń SCPI po prostu ignoruje błędy składniowe, dlatego nie ma zaimplementowanego polecenia SYST:ERR? W zestawie poleceń w ogóle nie ma grupy SYSTem:. Co do trybu zdalnego i lokalnego - oscyloskop zawsze przyjmuje polecenia z magistrali. Są jednak dwa dodatkowe rozkazy do blokowanie i odblokowywania panelu: LOCk i UNLock.
Polecenia dotyczące kanałów
Aktualne ustawienia kanałowe: zapytanie CH<x>?.
Ustawianie podziałki amplitudowej kanału:
CH<x>:SCAle <v_na_działkę>, a więc np.: CH1:SCA 0.1.
Ustawienie pozycji pionowej przebiegu:
CH<x>:POSition <ilość_działek> (odstęp w pionie od centralnej poziomej linii skali). Przykład: CH2:POS 1.5.
Sprzężenie kanału: CH<x>:COUPling {AC|DC|GND}, np.: CH1:COUP GND.
Ustawienia podstawy czasu
Aktualne ustawienia podstawy czasu: HORizontal?.
Oscyloskop oprócz klasycznej podstawy czasu z regulowanym podziałem i opóźnieniem (tryb MAIn) realizuje też tzw. okno (tryb DELay), tj. zobrazowanie fragmentu przebiegu z niezależnie ustawionym podziałem podstawy czasu (szerokość okna) i opóźnieniem (położenie okna). Grupa HORizontal ma dwa węzły - MAIn i DELay, dla każdego z nich określone polecenie SCAle i POSition, ustalające podział podstawy czasu i opóźnienie. Tak więc np. ustawienie podstawy czasu i opóźnienia okna głównego na 0.1ms i 0.5ms:
HOR:MAIN:SCA 1E-4;POS 5E-4.
Polecenie:
HORizontal:VIEw {MAIN|WINDow|ZONE}
załącza zobrazowanie główne (MAIN), okna (WIND) oraz główne z zaznaczonym obszarem okna (ZONE).
Przebiegi referencyjne, zobrazowanie przebiegów
Zapamiętanie przebiegu referencyjnego:
SAVe:WAVEform {CH<x>|MATH}, REF<y>.
Przykłady użycia:
SAV:WAVE CH1,REFA
SAV:WAVE MATH, REFB
Pokazanie lub schowanie przebiegów:
SELect:CH<x> {ON|OFF}
SELect:REF<y> {ON|OFF}
SELect:MATH {ON|OFF}
A więc np.:
SEL:MATH ON
albo:
SEL:CH1 ON;CH2 OFF;REFA ON;REFB OFF.
Operacje matematyczne
Ustawienie operacji matematycznej której wynik jest wyświetlany: MATH:DEFINE <nazwa_operacji>.
Argument <nazwa_operacji> może mieć następujące wartości:
„CH1+CH2”
„CH1-CH2”
„CH2-CH1”
„FFT (CH<x> [, <okno>])”, gdzie <okno> to: HANning, FLATtop, albo RECTangular.
Przykłady użycia:
MATH:DEFINE ”CH1-CH2”
MATH:DEFINE ”FFT(CH1)”
MATH:DEFINE “FFT(CH1,HAN)”
Automatyczne pomiary
Grupa MEASUrement: definiuje polecenia obsługi automatycznych pomiarów, przeprowadzanych przez oscyloskop na przebiegach. Instrument oferuje pięć niezależnych pomiarów. Cztery z nich, o nazwach MEAS<x> (<x> od 1 do 4) mogą być wyświetlane na ekranie i są uaktualniane z częstotliwością odświeżania ekrany. Piąty, o nazwie IMMed jest wykonywany tylko w momencie jego zażądania przez kontroler systemu. Jego wynik nie jest wyświetlany na ekranie, a tylko przesyłany do komputera. Każdemu z pomiarów można ustawić przebieg, na którym działa i rodzaj pomiaru. Oczywiście można też od każdego zażądać wyniku. Polecenia grupy MEASU: mają więc jednakową strukturę, zilustrowaną poniżej dla pomiaru IMMed.
Polecenie:
MEASU:IMM:SOUrce CH<x>
ustawia jako przebieg, na którym dokonywany jest pomiar (np. MEASU:IMM:SOU CH1).
Polecenie:
MEASU:IMM:TYPe {FREQuency|MEAN|PERIod|PK2pk| CRMs|RISe|FALL|PWIdth|NWIdth}
ustawia rodzaj pomiaru, odpowiednio: częstotliwość, wartość średnią przebiegu, okres, wartość międzyszczytową, wartość skuteczną za jeden okres, czas narastania, czas opadania, szerokość impulsu pozytywnego, szerokość impulsu negatywnego. Np. MEASU:IMM:TYP FREQ.
Pobranie wyniku pomiaru:
MEASU:IMM:VALue?
Dla pozostałych pomiarów polecenia są analogiczne, tylko zamiast węzła IMM: używa się węzła MEAS<x>:. Na przykład:
MEASU:MEAS1:SOU CH2
MEASU:MEAS1:TYP PERIOD
MEASU:MEAS1:VAL?
Żeby pomiar działał, jego przebieg źródłowy musi być włączony (polecenie SEL:).
Akwizycja przebiegu z oscyloskopu
Pobieranie z oscyloskopu ciągu próbek, reprezentujących mierzony przebieg jest procesem o podobnym charakterze, co definiowanie generowanego przebiegu w HP33120A (p.p. 4.3.3). Zasadniczą operacją jest transfer próbek w ustalonym formacie pomiędzy instrumentem a kontrolerem systemu. Potrzebne jest jednak kilka operacji wstępnych. Najbardziej oczywistą jest określenie, który z wielu obrazowanych przebiegów ma być przesłany. Służy do tego polecenie:
DATa:SOUrce {CH<x>|MATH|REF<y>}.
Następny, istotny krok, to określenie, jaka część przebiegu będzie przesłana. Dwa polecenia:
DATa:STARt <próbka>
oraz
DATa:STOP <próbka>
określają numer pierwszej i ostatniej próbki przesyłanego przebiegu. W obu przypadkach argument powinien zawierać się w granicach od 1 do 2500.
Kolejnym krokiem jest określenie formatu przesyłanych danych. Służą do tego dwa polecenia:
DATa:ENCdg {ASCIi|RIBinary|RPBinary|SRIBinary|
SRPBinary}
oraz
DATa:WIDth {1|2}
Podobnie, jak w przypadku generatora, generalnie możliwe są dwa sposoby reprezentacji próbek ciąg liczb, zapisanych jawnym tekstem (format ASCIi) lub ciąg liczb w reprezentacji binarnej (wszystkie pozostałe formaty - RIBinary, itd.). W reprezentacji binarnej znaczenie ma, iloma bajtami jest zakodowana wartość jednej próbki. Określa to polecenie DATA:WIDth (1 lub 2 bajty). Dla dwubajtowej reprezentacji formaty binarne RIBinary, RPBinary transmitują najpierw starszy bajt, później młodszy, zaś formaty SRIbinary, SRPbinary - odwrotnie. Formaty RIBinary, SRIbinary kodują wartości próbek jako liczbę ze znakiem (-128..127 lub -32768..32767), formaty RPBinary, SRPBinary - bez znaku (0..255, 0..65535). Format ASCIi zawsze przedstawia próbki, jako liczby ze znakiem.
Oto przykładowe przygotowanie transmisji, przy użyciu opisanych do tej pory poleceń:
DAT:SOU CH1
DAT:STAR 1;STOP 1000
DAT:WID 1
DAT:ENC ASCI
Dalej następuje już właściwa transmisja uruchamiana za pomocą polecenia CURVe?.
Dodatkowo, możliwe jest też użycie polecenia WFMPRe?, które transmituje do komputera nagłówek przebiegu - porcję informacji o formacie transmisji oraz skali (podstawa czasu, podziałka amplitudy) i opisie przebiegu (nazwa, jednostki). Poszczególne komponenty tej informacji można też uzyskać wykorzystując dedykowane polecenia, takie jak np.: WFMPre:XINcr? (podziałka czasu - okres próbkowania), WFMPre:YMUlt? (podziałka amplitudy), WFMPre:XZEro? (czas pierwszej próbki), WFMPre:YOFf?(przesunięcie przebiegu w pionie), WFMPre:XUNit? (jednostka skali X), itd... Informacja zawarta w tych kwerendach jest niezbędna do poprawnego zinterpretowania informacji zawartej w „surowym” ciągu próbek.
Należy dodać, że polecenie CURVe działa także w drugą stronę - pozwala przesłać przebieg do oscyloskopu. Ciąg postępowania jest wtedy analogiczny - trzeba wcześniej ustalić format transmisji, informację skalującą (za pomocą poleceń z grupy WFMPre:) i docelową lokalizację (za pomocą DATa:DESTination, przebieg może zostać wpisany tylko do REF<y>).
Przebieg ćwiczenia
Zasilacz E3640A
Podłączyć do portu COM1 komputera zasilacz E3640A, skonfigurować urządzenie do komunikacji za pomocą interfejsu RS232 (p. Dodatek A, p. A.3.3), uruchomić program Hyperterminal, ustawić odpowiednio parametry transmisji (p. Dodatek B) i zainicjować połączenie z zasilaczem. Uaktywnić w Hiperterminalu logowanie do pliku tekstowego wpisywanych komend, tak, aby dołączyć do sprawozdania zapis przeprowadzonych eksperymentów.
Sprawdzić działanie komend *RST, *IDN?
Zasymulować błąd za pomocą błędnej komendy *IDN, odczytać za pomocą *ESR? rejestr statusu, sprawdzić, czy ustawiony jest bit 5, ponownie użyć komendy *ESR?, sprawdzić, czy rejestr zdarzeń został skasowany, skasować rejestry urządzenia, w tym sygnalizację błędu za pomocą *CLS
Sprawdzić komendę autotestu *TST?
Sprawdzić przełączanie między trybem lokalnym i zdalnym za pomocą SYST:REM, SYST:LOCK oraz klawiatury zasilacza
Sprawdzić komendę SYST:ERR?, symulując błędy zgodnie z przykładami, sprawdzić zwracane komunikaty błędów
Sprawdzić działanie komend SYST:BEEP i SYST:VERS?. Jaka jest wersja języka SCPI interpretowana przez urządzenie?
Podłączyć do zasilacza opornik dekadowy ustawiony na wartość 100Ω, wydać polecenie OUT ON (podłączające wyjście zasilacza do zacisków zewnętrznych), sprawdzić działanie komend VOLT, CURR we wszystkich podanych wariantach, sprawdzić działanie układu ochrony przed nadmiernym napięciem, przetestować działanie poleceń z gałęzi VOLT:PROT:.
Sprawdzić działanie komend APPLy i MEASure.
Przetestować działanie komend wyzwalania: ustawić źródło wyzwalania na magistralę (BUS), ustawić napięcie do wytworzenia po wyzwoleniu, zainicjować system wyzwalania komendą INIT, wyzwolić urządzenie komendą *TRG. Sprawdzić wyzwalanie przy ustawionym opóźnieniu (TRIG:DEL ...), sprawdzić zachowanie się urządzenia przy wewnętrznym źródle wyzwalania (IMM), sprawdzić, czy zapytanie o źródło wyzwalania udziela poprawnej odpowiedzi.
Odnaleźć w instrukcji zasilacza opis podsystemu DISPlay i przetestować działanie poleceń z tej grupy
Multimetr 34401A
Podłączyć do portu COM1 multimetr, podłączyć do zacisków INPUT multimetru wyjście generatora 33120A, ustawić na generatorze generację przebiegu sinusoidalnego (np. o częstotliwości 1kHz, amplitudzie 1V (wartość międzyszczytowa), i składowej stałej 1V. Należy się upewnić, że generator ma ustawioną nieskończoną impedancję zakładanego obciążenia Jednocześnie, dla kontroli, podłączyć równolegle do zacisków wyjściowych generatora oscyloskop.
Wydać rozkaz identyfikacji multimetru, sprawdzić czy inne rozkazy standardu IEEE-488.2 działają, sprawdzić raportowanie błędów i wersję oprogramowania, sprawdzić przełączanie w tryb lokalny i zdalny
Sprawdzić pomiary za pomocą podsystemu MEASure: - przeprowadzić pomiar składowej stałej, dla różnych zakresów i rozdzielczości, w tym dla zakresu mniejszego niż 1V (powodując przekroczenie zakresu pomiaru), dokonać pomiaru częstotliwości i okresu oraz amplitudy (AC). Należy zwrócić uwagę na to, że polecenia MEASure: (i w ogóle wszystkie polecenia pomiarowe) działają tylko w trybie zdalnym.
Przeprowadzić podobne pomiary, co w poprzednim punkcie, ale przy użyciu prekonfiguracji CONFigure: oraz odczytu za pomocą polecenia READ? lub pary: INIT - FETCh? Należy przy tym używać wewnętrznego źródła wyzwalania (TRIG:SOUR IMM)
Przeprowadzić pomiar częstotliwości, składowej stałej i amplitudy za pomocą poleceń najniższego poziomu (podsystem SENSe:).
Sprawdzić działanie podsystemu CALCulate: (należy pamiętać, że działa on tylko przy odczytach za pomocą READ? lub FETCh?). Ustawić funkcję odejmowania poziomu zera, ustawić poziom zera na 0.5V i dokonać odczytu. W analogiczny sposób sprawdzić przeliczenie na dB mocy przy rezystancji odniesienia ustawionej na 75 Ω. Uaktywnić funkcję uśredniania, wymusić kilka pomiarów amplitudy przy różnych ustawieniach generatora, sprawdzić za pomocą zapytań z grupy CALC:AVER: zarejestrowaną wartość minimalną, maksymalną średnią oraz ilość pomiarów. Uaktywnić i sprawdzić działanie funkcji testowania granic (CALC:LIMIT:).
Sprawdzić rozszerzenia podsystemu wyzwalania właściwe dla multimetru. Ustawić wyzwalanie z magistrali i wydać polecenie rejestracji 10 pomiarów co 1 sekundę w odpowiedzi na wyzwolenie. Wymusić wyzwolenie (po uprzednim „uzbrojeniu” systemu poleceniem INIT) i wydać polecenie odczytu wyników. Sprawdzić działanie automatycznego opóźnienia reakcji na sygnał wyzwalania (TRIG:DEL:AUTO) dla tych samych ustawień. Powrócić do jednokrotnego pomiaru przy jednokrotnym wyzwoleniu (SAMPLE:COUNT 1) i sprawdzić opcję wielokrotnego wyzwolenia: przy źródle wyzwalania z magistrali ustawić TRIG:COUNT 3 i spróbować polecenia: INIT;*TRG, a później: INIT. Drugie polecenie INIT spowoduje błąd, którego komunikat (należy sprawdzić) brzmi: „Init Ignored”, ponieważ multimetr czeka jeszcze na dwa sygnały wyzwolenia (dwukrotne *TRG przywróci stan normalny). Podobnie, polecenie *TRG bez uprzedniego uzbrojenia poleceniem INIT powoduje komunikat ”Trigger ignored” (sprawdzić). Na koniec przywrócić stan TRIG:COUNT 1.
Sprawdzić działanie podsystemu raportowania stanu. Wyczytać rejestr STATUS:QUEStionable, tak aby go wyzerować, uaktywnić funkcję sprawdzania granic (CALC:LIM), przeprowadzić dwa pomiaru amplitudy, ustawiając generator tak, aby pierwszy był normalny, a drugi przekraczał dolną granicę. Po każdym pomiarze należy sprawdzić rejestr QUES (przekroczenie dolnej granicy powinno ustawić w nim wartość 2048). Następnie wymusić pomiar przekraczający górną granicę i ponownie sprawdzić rejestr QUES (powinien zwracać wartość 4096). Ustawić maskę rejestru QUEST na wartość 6144 (oba zdarzenia przekroczenia granic przepuszczane do głównego rejestru stanu), skasować wszystkie rejestry urządzenia poleceniem *CLS, dokonać odczytu rejestru stanu *STB?, a następnie ponownie wyczytać rejestr stanu, po uprzednim wymuszeniu przekroczenia którejś granicy. Fakt przekroczenia granicy powinien się objawić ustawieniem bitu o masce 8 w rejestrze stanu. Sprawdzić, że kolejne odczyty *STB? nie kasują tego bitu, zniknie on dopiero po wyzerowaniu rejestru QUEST (np. po wyczytaniu tego rejestru). Ustawić maskę rejestru QUEST na zero (żadne zdarzenie nie przepuszczane do głównego rejestru stanu) i sprawdzić, że bit o masce 8 nie pojawi się przy odczycie *STB?, mimo wystąpienia zdarzeń przekroczenia granic.
Generator 33120A
Podłączyć generator do portu COM1, wydać rozkaz identyfikacji.
Sprawdzić działanie poleceń podsystemu APPLy: - ustawić generację kolejnych rodzajów przebiegów (sinusoidalny, prostokątny, trójkątny, piłokształtny, szum, napięcie stałe. Spróbować zmiany częstotliwości, amplitudy, składowej stałej.
Dokonać podobnych ustawień, co w poprzednim punkcie, ale za pomocą poleceń podsystemu SOURce:. Wypróbować zmianę wypełnienia przebiegu prostokątnego, oraz zmianę sposobu napięcia (wartość międzyszczytowa, wartość skuteczna, wartość w dB mocy). Obserwując przebieg na oscyloskopie sprawdzić skutki polecenia OUTput:LOAD. Ustawić jako sposób podawania napięcia wartość międzyszczytową (VPP), ustawić generację sinusoidy o amplitudzie 1V oraz składowej stałej 0V. Ustawić zakładaną impedancję obciążenia na INF (OUT:LOAD INF). Zmierzyć wartość międzyszczytową na oscyloskopie. Następnie przestawić impedancję na 50Ω, ponownie ustawić amplitudę na 1V i zmierzyć wartość międzyszczytową na oscyloskopie. To samo powtórzyć z ustawioną wartością skuteczną, jako sposobem podawania napięcia.
Sprawdzić tryb płynnej zmiany częstotliwości (SWEEP). Ustawić zmianę częstotliwości od 1kHz do 10kHz, liniowo, w ciągu 1s, ustawić najpierw wewnętrzne źródło wyzwalania, a później - wyzwalanie z magistrali. Wzniecić jednokrotne wyzwolenie instrumentu.
Odnaleźć w instrukcji opis poleceń sterujących wybranym trybem modulacji i przeprowadzić kilka prób ich działania.
Ustawić tryb generacji użytkownika, sprawdzić generację pięciu predefiniowanych przebiegów. Przynajmniej w jednym przypadku sprawdzić regulację częstotliwości, amplitudy i składowej stałej.
Przeprowadzić proces definiowania przebiegu schodkowego wg opisanego przykładu. Najpierw zdefiniować przebieg w pamięci ulotnej, później przenieść go do pamięci ulotnej, nadając dowolną nazwę. Sprawdzić generację przebiegu i regulację wszystkich parametrów. Przy okazji definiowania sprawdzić dodatkowe polecenia zarządzające pamięcią: listę zdefiniowanych przebiegów, ilość wolnych lokacji na zdefiniowane przebiegi, parametry zdefiniowanego przebiegu: wartość średnią, wartość międzyszczytową, współczynnik kształtu, ilość punktów. Na koniec, usunąć zdefiniowany przebieg z pamięci nieulotnej.
Oscyloskop TDS210
Podłączyć oscyloskop do portu COM2 i otworzyć drugie okno programu Hyperterminal, konfigurując odpowiednio połączenie. Ustawić na generatorze (podłączonym do pierwszego kanału oscyloskopu) przebieg sinusoidalny o częstotliwości 1kHz, wartości międzyszczytowej 1V oraz składowej stałej 0V.
Sprawdzić ogólne polecenia obsługi: identyfikację, raport aktualnych ustawień (*LRN?), cząstkowe raporty ustawień (kanału, podstawy czasu, pomiarów, itd...). Sprawdzić przy tym efekt poleceń HEADER i VERBOSE.
Sprawdzić polecenia sterujące ustawieniami kanałowymi: podziałką amplitudową, przesunięciem w pionie, trybem sprzęgania - ustawić te parametry tak, aby sinusoida była rozciągnięta na cały ekran a jej poziom zerowy był na środku.
Sprawdzić działanie poleceń sterujących podsystemem podstawy czasu. Ustawić sekcję MAIN tak, aby na ekranie widoczne było sześć okresów sinusoidy, ustawić okno tak, aby zawarty w nim był jeden okres. Włączyć każdy z trzech widoków: główny, okna oraz główny z zaznaczonym oknem.
Przećwiczyć polecenia zapamiętywania przebiegów oraz włączania/wyłączania wizualizacji przebiegu. Na generatorze ustawić modulację AM z falą nośną 50 kHz i częstotliwością sygnału modulującego 5kHz. Użyć polecenia ustawiającego funkcję matematyczną wyznaczania transformaty Fouriera sygnału. Uaktywnić pokazywanie wyniku operacji matematycznej. Powinno być widoczne spektrum z trzema wyraźnymi prążkami (może być pomocne ustawienie uśredniania przebiegu - menu ACQUIRE, opcja Average). Użyć polecenia zapamiętującego wyświetlane widmo w przebiegu REFA. Uaktywnić pokazywanie REFA. Zmienić częstotliwość modulującą na 10kHz. Włączyć pokazywanie przebiegu w kanale 1, a później włączyć pokazywanie wyniku operacji matematycznej.
Sprawdzić polecenia związane z automatycznymi pomiarami. Ustawić na generatorze przebieg prostokątny. Ustawić czterem pomiarom z grupy MEAS<x> funkcję, odpowiednio: pomiaru częstotliwości, okresu, składowej stałej i wartości międzyszczytowej. Dokonać odczytu wszystkich czterech pomiarów. Zmienić składową stałą przebiegu. Dokonać odczytu wartości pomiaru mierzącego średnią. Zmienić częstotliwość i amplitudę. Odczytać pomiary częstotliwości, okresu i wartości międzyszczytowej. Przekonfigurować dwa pomiary na pomiar czasu narastania i opadania, a dwa na pomiar szerokości dodatniego i ujemnego impulsu. Zmienić wypełnienie przebiegu na 80%. Dokonać odczytów pomiarów. Użyć pomiaru IMM do zmierzenia jeszcze raz okresu przebiegu.
Sprawdzić mechanizm akwizycji przebiegu z oscyloskopu. Powrócić do generacji przebiegu AM. Uaktywnić pokazywanie transformaty Fouriera. Ustawić podziałkę czasu tak, aby prążki sygnału zmodulowanego były położone w miarę blisko lewej krawędzi. Przygotować transfer 250 próbek z kanału MATH, w trybie ASCII. W programie Hyperterminal ustawić przechwytywanie tekstu do osobnego pliku tekstowego. W ustawieniach ASCII programu odznaczyć opcję automatycznego zawijania wierszy - dzięki temu w pliku wszystkie próbki będą w jednej linii. Wydać polecenie CURVE? i wyłączyć przechwytywanie tekstu do pliku. Powinna w nim być linia próbek widma Fouriera, rozdzielonych przecinkami. Plik zaimportować np. do programu Excel i tam wykreślić na jego podstawie wykres. Wykres dołączyć do sprawozdania. Dokonać także transferu nagłówka przebiegu w trybie HEADER ON.
Sprawozdanie
W sprawozdaniu ma się znaleźć wydruk pliku, w którym zostały zarejestrowane wszystkie wydane w trakcie ćwiczenia polecenia. Proszę skomentować znaczenie poszczególnych grup rozkazów oraz odpowiedzi instrumentów na zapytania. Proszę załączyć wydruk pliku, do którego zostały przechwycone próbki sygnału pobranego z oscyloskopu oraz wykres przebiegu powstały na podstawie tych próbek.
Pytania kontrolne
Właściwości języka SCPI i jego zastosowania.
Omówić model instrumentu programowalnego zaproponowany w standardzie SCPI.
Omówić bloki funkcjonalne, znajdujące się w ścieżce przetwarzania sygnału dla multimetru wg modelu instrumentu programowalnego.
Omówić bloki funkcjonalne, znajdujące się w ścieżce przetwarzania sygnału dla generatora wg modelu instrumentu programowalnego.
Omówić system rejestrów stanu w standardzie SCPI. Podać przykłady rozszerzeń standardowej definicji, stosowane w podanych urządzeniach.
Na czym polega spójność horyzontalna i wertykalna SCPI?
Podać ważniejsze zasady składniowe rządzące zapisem poleceń SCPI.
Podać przykłady komend węzła SOURCE dla generatora HP33120.
Podać przykłady komend węzła SENSE dla multimetru HP34401.
Podać kroki potrzebne do zdefiniowania generowanego sygnału użytkownika w generatorze HP33120A.
Podać kroki potrzebne do przeprowadzenia akwizycji przebiegu z oscyloskopu TDS210.
Porównać system wyzwalania w omówionych przyrządach pomiarowych.
Odnaleźć w Internecie instrukcję programowania przyrządu pomiarowego innej klasy niż omówione (np. analizatora stanów logicznych), wyposażonego w interpreter języka SCPI, zanalizować i scharakteryzować jego zestaw rozkazów SCPI.
Scharakteryzować historię i strukturę działań SCPI Consortium, na podstawie materiałów ze strony internetowej [7].
Scharakteryzować komercyjny interpreter języka SCPI JPA-SCPI Parser [8].
Wykaz Literatury
[1] Mielczarek W.: Urządzenia pomiarowe i systemy kompatybilne ze standardem SCPI, Helion, Gliwice 1999.
[2] „Standard Commands for Programmable Instruments (SCPI).Version 1999.0”, dokument dostępny pod adresem: http://www.scpiconsortium.org/scpistandard.htm
[3] „Agilent E364xA Single Output DC Power Supplies User's Guide”. Dokument firmy Agilent nr E3640-90001, January 2000.
[4] „Agilent 33120A 15 MHz Function /Arbitrary Waveform Generator. User's Guide”. Dokument firmy Agilent nr 33120-90006, March 2002
[5] „HP 34401A Multimeter. User's Guide”. Dokument firmy Hewlett-Packard nr 34401-90004, February 1996
[6] „TDS 200-Series Digital Real-Time Oscilloscope. Programmer Manual”. Dokument firmy Tektronix, nr 071-0493-01.
[7] SCPI Consortium: http://www.scpiconsortium.org/, strona internetowa.
[8] JPA-SCPI Parser: http://www.jpacsoft.com/, strona internetowa.
1
…
[SOURce:]
FM:
DEViation <wartość_liczb>
INTernal:
FUNCtion {SINusoid|SQUare|TRIangle}
FREQuency <wartość_liczb>
STATe {OFF|ON}
…
SYSTem:
BEEPer:
FREQuency <wartość_liczb>
TIME <wartość_liczb>
...
b)
a)