Rigol na smyczy sterowanie oscyloskopem DS1054Z przez SCPI/LXI |
||||||||||||||||||||||||||||||||||||||
➮ Rigol na smyczy vol.2 - część druga, o SCPI na diagramach LabVIEW ➮ Rigol na smyczy vol.3 - część trzecia, o dekodowaniu DTMF w LabVIEW ...warto znać kilka nowoczesnych, fajnie brzmiących branżowych skrótów, można nimi ewentualnie zaskoczyć przy kawie współrozmówców osiągając tak zwany efekt łoooł. W przypadku maszyny Rigol 1054z dwa aktualnie dla mnie najważniejsze pojęcia to: LXI - 'LAN eXtensions for Instrumentation' czyli tak ogólnie możliwość pracy urządzenia laboratoryjnego (oscyloskop/generator/zasilacz) w otoczeniu sieciowym, póki co to najczęściej jest miedziany Ethernet z TCP/IP v.4 SCPI - 'Standard Commands for Programmable Instruments' to zestaw ogólnych poleceń, czy raczej specyfikacja takiego zestawu, mających strukturę hierarchiczną (ogół-szczegół) i umożliwiających wpływanie na różne, różniste aspekty funkcjonowania urządzenia, a także na pozyskiwanie informacji o aktualnym jego stanie. Medium komunikacyjnym jest w tym przypadku to, co urządzonko tam sobie posiada: sieć (LXI), a może USB, a może zwykły RS232 czy RS485. Rigol ma dwa pierwsze, z czego sieć jest dla mnie wygodniejsza, bo nie jestem przywiązana kabelkiem USB do kompa, oscyloskop może stać w drugim końcu pokoju, aby skrętka sięgnęła. Dodatkowo kablwy Ethernet zapewnia mi izolację galwaniczną masy przyrządu od masy komputera i reszty sprzętu. O SCPI w sieci jest masę opracowań, nie silę się zatem na pisanie kolejnego kondensatu streszczenia, ale zapraszam do lektury kilku wartych (moim zadniem) uwagi opracowań: ➮ Standard Commands for Programmable Instruments (Wiki) ➮ Standardowe polecenia programowanych urządzeń (PWR, B.Kasprzak, L.Stańczyk) ➮ ACPI-99 (IVI Foundation) ➮ specyfikacje IVI Foundation Rigol Programming Guide Wskazuję megaważny dokument: ➮ DS1000Z_ProgrammingGuide_EN.pdf i szczerze polecam do przeglądnięcia, wszelkie dalsze rozważania opierają się na informacjach z tego własnie podręcznika. Aby nowa zabawka nam zadziałała musimy skonfigurować sobie sieć, wyszło mi na to, że w domowym routerze najlepiej ustawić stałą dzierżawę IP na podstawie przypisania do adresu MAC, a w /etc/hosts Linuksa nazwać oscyloskop jakoś po swojemu - u mnie jest więc 'rigol' wymiennie z 'cukierek', ponieważ swoją dżenderuśną stylistyką oscyloskop przypomina paczkę kolorowych żelków. Tak ogólnie to Rigol komunikuje się po porcie 5555 krótkimi pakietami tekstowymi, większe ilości danych mogą ewentualnie do nas przylecieć na okazję robienia zrzutek ekranu. Tak z poziomu konsoli, jak to się mawia - z palca najprościej wykorzystać polecenia echo lub nc (netcat), załatwiają całość zagadnienia całkiem sprawnie. Można oczywiście nabazgrać coś z okienkiem, ja na przykład zrzucarkę ekraników zrobiłam w formie skryptu powłoki dostępnego na PATH, ale jak komu wygodniej. Polecenia można pisać z dużych liter, można z małych, tak czy inaczej lepiej konsekwentnie, a jak czegoś Rigol nie ogarnie - na chwilkę wyświetli okienko z napisem 'Invalid Input'. Dalej poćwiczymy sobie cukierkowego koleżkę, przecież sport to zdrowie. ☙ Przydatne polecenia SCPI Oczywiście dla wprawy i zapoznania sie z komendami SCPI - identyfikacja urządzenia, czyli:
Aby dalej nie robic wioski tym echo/netcat wywołanie ubrałam w maleńki skrypcik, ktorym można wydawać elementarne polecenia:
Jako że DSO Rigola dopiero rozpoznaję, ważne dla mnie jest czy da się zresetować na miękko maszynkę w przypadku zaklikanie się w kącie z ustawieniami, ale tak aby nie robić jej on-off. No to da się: przestawienie oscyloskopu w stan domyślny, choć nie zawsze dobry realizuje polecenie:
Chwilkę to trwa, ale urządzenie budzi się w stanie mniej więcej takim jak po włączeniu zasilania. Zatrzymanie akwizycji danych - odpowiednik guzika RUN / STOP
Uruchomienie skanowania w trybie ciągłym - RUN / STOP
Złapanie jednego przebiegu przez trigger
Wyczyszczenie 'starych przebiegów' z ekranu
Wyświetlenie dostępnych parametrów widocznego przebiegu, cała fura tego, na pół ekranu
schowanie owej uroczej winietki
Zmiana dzielnika dla sond na x1 lub na x10
Deko wkurzające to jest, ale mój egzemplarz oscyloskopu uparcie startuje z sondą na ustawioną na x10 i ciągle mu to poprawiam... Tryby pracy AC,DC i ziemia jak trzeba przebiegi poukładać na ekranie
zmiana podstawy czasu
i tak dalej i tak dalej, zgodnie ze spisem poleceń, całe mnóstwo tego dali, super! Tak ogólnie to jak chemy dowiedzieć się jaka jest aktualna wartość danego parametru czy ustawienia to dokładamy na końcu polecenia pytajnik, o tak:
Dostaniemy w zamian literał np. `EDGE` będący obowiązująca wartością parametru ☙ Kopia zawartości ekranu W sumie to pierwsza sprawa, od której zaczęłam rozpoznawać SCPI w Rigolu - jak zrobić obrazek z tego co jest aktualnie na ekranie. Fotografowanie aparatem oscyloskopu może i jest jakimś rozwiązaniem ale nie zawsze pasuje, na Fejsik może tak, no ale w poważniejszą pisaninę? Magazynowanie obrazków na pendrive - to przekładać trzeba w kółko gwizdek, szkoda złącza. Zostało się na koniec zdalne sterowanie, sporo o tym napisano w sieci, to przykład na którym bazowałam: rigol-ds1054z-screen-capture-linux I tak ogólnie to byłoby fajnie, gdyby nie to, że tam robią się pliki *.bmp o wadze 1.1MB, a ja tak nie chce. Ale wystarczy doczytać dokładnie co potrafi polecenie `display:data` i wyjdzie nam, że możemy zamienić format obrazka ( i dla *.png czy *.jpg mamy parędziesiąt kB danych), możemy od razu nakazać w skali szarości a nie w kolorze no i możemy zrobić inwersję grafiki. podstawowy zrzut ekraniku, kolorowy (czarne tło), ładny do www
zrzutka kolorowa, ale w rewersie, niezła do www i może do wydruków
zrzutka monochromatyczna w rewersie, dobra do druku
☙ Fatalna kombinacja ustawień To jeden z popularniejszych żartów - 'przygotowanie oscyloskopu do pracy inaczej', czyli takie, że ni cholery nie wiadomo jak plamkę wydobyć na ekran, już o całej linii nie wspominając. Niestety eksperymentując z ustawieniami urządzenia łatwo sobie zrobić takie kuku, i chyba dobrze mieć możliwość automatycznego doprowadzenia oscyloskopu do znanego sobie i jakoś uniwersalnego stanu. I na tę okazję naszkicowałam skrypcik takowy:
Jak nazwa wskazuje w miarę ogarnia Rigola z pierwszym kanałem gotowym do pracy i dalszych zmian ustawień, oczywiście polecenia jakie tam wpiszemy to sprawa naszego stylu pracy, potrzeb etc/itd. Ekraniki zgrywane z Rigola-Cukierka przez SCPI choć wyglądają estetycznie i naukowo to jednak posiadają kilka wad. Nie da się ich wstawić w rubryczki Excela, nie da się na ich podstawie wygenerować przebiegu w Analog Discovery 2, no i kolorowy obrazek cokolwiek trudno przeliczyć w Scilab czy Matlab. Zatem zrzutki ekranu to jedno, ale myślę, że warto umieć podebrać z urządzenia surowe, numeryczne dane. Gdy mamy je dostępne w formie płaskiego pliku na dysku lub choćby w buforze w pamięci komputera - otwierają się zupełnie nowe, ciekawe możliwości, a przykłady takich przedstawiam poniżej. Wszelkie szczegóły komend opisano bardzo przystępnie w sekcji `:WAVeformCommands` dokumentu Programming Guide, od strony 2-216, polecam lekturę w wolnej chwili, a tu garść zupełnie podstawowych detali. Do odczytu danych z urządzenia służy polecenie :waveform:data?. Oczywiście przed jego wydaniem należy wskazać kanał źródłowy (np. :waveform:source chan1), wybrać tryb pobierania danych (np. :waveform:mode normal) oraz ich format (:waveform:form ascii). Dwa słowa o trybie pobierania - teraz skupiamy się na NORMAL, co oznacza, że urządzenie odda nam zawartość bufora pamięci, z którego rysowany jest aktualny przebieg na wyświetlaczu. Czyli dostaniemy to co aktualnie widać, tylko w numerycznej postaci. Próbek będzie 1200 co wynika z faktu, że podziałka osi czasu ma sumarycznie 12 celek (centymetrów?), po sześć w prawo i lewo względem zera, a oscyloskop zbiera 100 próbek na jednostkę skali czasu. Format ustawimy sobie na ASCII aby było łatwiej obrabiać strumień danych pakietem matematycznym, przyjdą do nas tekstowo liczby w notacji naukowej (xE±y), taki zapis bez problemów przetłumaczymy sobie na float/double. W osi Y dane też są przeliczone na podstawowe jednostki z zapisie naukowym, w sumie to nie musimy nic tu robić. Aby mieć pewność jaki jest kontekst nadesłanych przez Rigola danych dobrze jest pobrać sobie komplet aktualnych ustawień i współczynników - służy do tego jedna komenda: :waveform:preamble?, zwraca dane w postaci serii liczb, czyli dość wygodnie.Spróbujmy teraz wykorzystać te informacje i wydobyć dane z oscyloskopu. Na początek napiszemy sobie skrypcik, który zwróci nam rzeczone współczynniki przebiegu:
Efekt działania taki: Naniosłam legendę-obrazek skubnięty z dokumentacji - widać wspomniane 1200 próbek/punktów oraz xincrement o wartości 2E-7. Zatem ile wynosi podstawa czasu? Ano 100*2E-7=20 us, co zaraz się okaże. Teraz napiszmy skrypt wyciągający serię tych tysiąc dwustu liczb z Cukierka:
W międzyczasie z Analog Discovery 2 robimy sobie generator: Dygresja niewielka - generator produkuje ładnego sinusa ale ze śmiećkiem, to zakłócenie będzie zaniedługo potrzebne do innych obserwacji, śmieciek powstaje skryptem dla AD2:
Tak prezentują się przebiegi z AD2 na ekranie oscyloskopu: A tak fragment strumienia liczb (przycięty dla prezentacji tail-em) zwracany przez Rigola: Mamy zatem w garści informacje o ustawieniach przebiegu oraz sam przebieg, więc czas na Scilab, o którym już swego czasu wspominałam, taki darmowy jakby Matlab. Pośród dosłownie pierdyliarda różnych-różnistych funkcji są też takie, które potrafią wykonać zewnętrzne polecenie systemu operacyjnego i zebrać jego standardowe wyjście (stdout) do dalszego przetwarzania, w formie wektora. W wersji linuksowej to funkcja o nazwie unix_g(). Mając wektor napisów jednym ruchem konwertujemy je na wartości zmiennoprzecinkowe - strtod(), ta funkcja operuje i na skalarach i na wektorach. A mając tabelę tysiąca dwustu liczb oraz mniejszą, ze współczynnikami - nic tylko rysować sobie wykresiki przebiegów, o proszę: Powyżej wystawka z kompletu okienek, pokazałam też zawartość zmiennej wave1, możliwy jest jak widać nie tylko podgląd ale i edycja (korekcja) wartości. Oba przebiegi na jednym wykresie: Okienko do rysowania przebiegów ma zoom, zatem można wnikać w czasem kłopotliwe detale tego co ekranik LCD Rigola już pokazać nie(umie|chce) Oczywiście przebiegi można mieć i osobno, każdy dostanie swoją skale Y, przy zachowanej wspólnej skali czasu Kompletny skrypcik dla Scilab wybierający świeże dane z Rigola i generujący owe wykresiki jest taki:
Na koniec odrobina relaksu, czyli - kółko! Na AD2 ustawiamy dwa sinusy pod kątem prostym: Na oscyloskopie nie wygląda to jakoś specjalnie atrakcyjnie, ot - kolorowe przebiegi. Ale jak sobie pobierzemy te dane z urządzenia i namalujemy skrypcikiem jako wykres X-Y:
to dostaniemy mechate kółko, które w powiększeniu przypomina ślad mrówki wracającej nad ranem do domu z udanej imprezy: W forumowym temacie ➮ Chiński Moduł LED & Key pozwoliłam sobie na stwierdzenie, że ręczna konfiguracja ustawień analizatora SPI jest w tym oscyloskopie cokolwiek upierdliwa. Opinię ową podtrzymuje, ale aby nie poprzestać na pustej krytyce - poniżej mały przydaś, który wstępnie konfiguruje nam Rigola do tego zadania. Główne parametry to: Powyższe zostało ubrane w niewielki skrypt (na motywach wcześniejszego ogarnijsie.sh), który to po pierwsze konfiguruje do pracy trzy kanały oscyloskopu (DC, 5V/div, 1x, T:200us), a następnie woła sekwencje ustawiającą parametry parsera SPI, oto i on:
Oczywiście przed uruchomieniem tego skryptu warto Rigola zresetować komendą SCPI '*RST'. Dalsza prezentacja na układzie jak we wzmiankowanym wyżej temacie z forum, to real-life chińskiej kostki TM1638 a nie akademickie dywagacje, dodatkowo pokażę jak to samo zagadnienie obsługuje Analog Discovery 2. Do obserwacji mamy w sumie trzy przypadki: ☙ prosty transfer ośmiobitowy na przykład sterowanie jasnością wyświetlacza
AD2 - WaveForms: Rigol, gdy wszystko mu odpowiada w bitowych ramkach: Tu się koleżka deko pogubił w interpretacji, więc te pakiety stosowie oznacza: ☙ transfer szesnastobitowy np. zapis danej pod wskazany adres
AD2 ma wizję następującą: Rigol, dla rozmiaru pakietu 8 bitów Tu widzimy, a raczej nie widzimy wprost, gdzie jest starszy, a gdzie młodszy bajt, trzeba zerkać na przebiegi aby złapać kontekst Rigol, dla rozmiaru pakietu 16 bitów Tu całe słowo jest sensownie poskładane. ☙ transfer mieszany 8/16 bit np. komenda sterująca, potem zapis do pamięci
AD2 ma na wzmiankowany temat zdanie następujące: Rigol w trybie 16 bit: Wnioski moje, będące oczywiście subiektywną dość opinią są takie: Pozostała na koniec sprawa triggera wzorcem, czyli rozpoczęcia analizy gdy wpadnie nam określony bajt rozpoczynający jakąś większą sekwencję. Tego nie udało mi się póki co przećwiczyć. |