Rigol na smyczy

współpraca oscyloskopu DS1054Z z pakietem LabVIEW

Rigol na smyczy vol.1 - część pierwsza, o SCPI w linuksowej konsoli
Rigol na smyczy vol.3 - część trzecia, o dekodowaniu DTMF w LabVIEW

Na dobry początek

Obsługa urządzeń wyposażonych w interfejs SCPI/LXI i dostępnych w sieci LAN nie jest dla pakietu LabVIEW jakimś wielkim wyzwaniem, zobaczymy to dalej. Istnieje jednak kilka czynników, które mogą mam utrudnić zdalny dostęp do danych z urządzenia i zamiast cieszyć się nową zabaweczką, to będziemy gonić własny ogon i złorzeczyć jakie to LabVIEW jest o kant. Dlatego też, na dobry początek, warto posiadanego klamota wytresować przy pomocy firmowego oprogramowania, ja proponuję do tego zastosować dostępny wraz z pakietem LabVIEW program 'Measurement & Automation Explorer'. Funkcjami wprawdzie nie poraża on jakoś specjalnie, ale pozwala połączyć się z urządzeniem w sieci i wykonać elementarne komendy SCPI czyli - efektywnie przetestować dostęp do maszyny. Co do zasady możemy przyjąć, że gdy NI-MAX zagada z urządzeniem, to także i LabVIEW wykona tę operację bez większego kwękania, zarówno NI-MAX jak i LabVIEW wykorzystują pod spodem te same niskopoziomowe komponenty VISA. No to robimy co następuje: uruchamiamy programik i dodajemy nowe urządzenie:

 

Z dokumentacji dżenderowego Rigola wiemy, że komunikacja LXI (nasłuch poleceń) odbywa się na porcie 5555, numer IP w naszej sieci domowej także znamy, możemy zatem pójść w opcję 'Manual entry a raw socket':



Wciśnięcie 'Validate' powinno skutkować komunikatem jak poniżej, jeżeli nie podłączyliśmy się z oscyloskopem - zaczyna się sieciowa jazda, próby z ipconfig/ifconfig/ping, telnet na port 5555 i wszelkie inne dostępne egzorcyzmy. Gdy test połączenia w końcu się uda, zapamiętujemy sobie na boku definicję połączenia: TCPIP0::numer_ip_rigola::5555::SOCKET, możemy też ewentualnie naszej maszynie nadać alias - u mnie tradycyjnie 'cukierek'. Jako ciekawostkę powiem - to drobne ułatwienie w dalszych pracach, ponieważ urządzenie pojawi się pod tą nazwą w klocku 'VISA Resource Name', to taki gadżet. Ja osobiście preferuję jednak wpisaną definicję połączenia i taką dalej spotkamy.

  

Polecenie 'Open VISA Test Panel' otwiera okno, z poziomu którego możemy porozmawiać ze świeżo skonfigurowanym urządzeniem, oczywiście za pomocą komend SCPI, pierwsza próba z podstawowym zapytaniem o nazwę '*idn?' i pierwsza porażka, komunikacja wyłożyła się na timeout odczytu danych. No i słusznie, trzeba warstwie VISA powiedzieć, że Rigol napisy kończy znakiem '\n', bez tego w życiu nie doczekamy się końca strumienia danych. Specjalnie teraz o tym wspominam, ponieważ podczas dalszej pracy z LabVIEW będziemy konfigurować znak zakończenia transmisji, bez tego nic nam nie zadziała.

  

Gdy już skonfigurujemy EOL możemy porozmawiać z oscyloskopem przy pomocy dowolnych, wybranych z dokumentacji komend. Dla takich, które zwracają większe porcje danych np. ':waveform:data?' proszę ustawić stosownie duży bufor odbiorczy, bo będą problemy.

 

I w sumie na tym możemy zakończyć znajomość z Explorerem. Poza weryfikacją, że warstwa VISA jest w stanie skomunikować się z Rigolem to oprogramowanie nie będzie nam już potrzebne.

☘☘
Odczyt nastaw oscyloskopu

Na pierwszy ogień idzie oczywiście wyspowiadanie maszyny z aktualnych nastaw podstawy czasu i zakresu pomiarowego. Komend SCPI ku temu jest sporo, zatem i danych do przemyślenia dostaniemy wiele. Tak mi jednak wyszło, że do pomiarów zupełnie podstawowych i prostych wizualizacji wystarczą następujące:
  • :channelN:scale? - skala w osy Y, w V na działkę
  • :channelN:probe? - skala przyjęta dla sondy pomiarowej, najprościej mieć x1
  • :timebase:main:scale? - dziedzina czasu w sekundach na działkę
  • :waveform:preamble? - komplet parametrów opisujących paczkę w trybie NORMAL, z tego tak naprawdę najpotrzebniejsze są XIncrement (ile sekund ma jeden punkt pomiarowy) oraz Points (ile punktów dostaniemy w pakiecie, dla NORMAL to typowo 1200)

    Cały diagram widzimy poniżej, podobnie jak dość siermiężny ekranik aplikacji, ale on ma pokazywać póki co tylko podstawowe wartości.





    Większość klocków LV już znamy, ale korzystając z okazji kilka uwag natury implementacyjnej, najpierw malunek-dygresja:



    Property node
    Komentarza wymaga pojawiający się na diagramie aplikacji oraz w części (C) obiekt 'Instr' typu 'Property Node' zmieniający parametry sesji VISA przed wejściem do pętli głównej. W nim właśnie, jak nazwy modyfikowanych wartości wskazują ustawiamy timeout oraz znaczek końca linii, to samo co robiliśmy w zakładce NI-MAX. Bez tego dodatku każdy odczyt klockiem 'VISA Read' będzie kończył się błędem, co ciekawe - w buforze odbiorczym mogą (ale nie muszą!) znaleźć się odebrane dane.
    Property Node możemy także wykorzystać do modyfikacji ustawień kontrolek ekranowych, w sekcji (C) widzimy programową zmianę minimalnej i maksymalnej wartości pionowej skali Waveform Chart.

    Spreadsheet String To Array Function
    Fract/Exp String To Number Function
    Kolejny niewielki trik, to kompaktowa zamiana napisu zawierającego liczby na tabelę wartości numerycznych. Napis zawierający serię liczb możemy wykonać konwersję na piechotę (wariant A) lub jednorazowo jak w sekcji B. Polecenie ':waveform:preamble?' zwraca wyłącznie 11 liczb, bez napisów, możemy sobie na takie uproszczenie zatem pozwolić.

    Format Into String Function
    No i kolejny megaprzydatny klocek widzimy w D - odpowiednik pisanego w języku C/C++ printf-a, w sumie rządzący się podobnymi do niego prawami, jest idealny gdy chcemy dokonać parametryzacji napisu wejściowego danymi innego typu bez upierdliwej dedykowanej konwersji na napis i konkatenacji stringów.

    Wracając do aplikacji, cały proces odpytywania Rigola o bieżące ustawienia odbywa się w nieskończonej pętli, kilka razy na sekundę. Na żywo wygląda to mniej więcej następująco:



    Gotowy program w LabVIEW do pobrania: rigol-scpi-settings.vi

    ☘☘☘
    Prosty odczyt przebiegu

    Tu na uwagę zasługują dwa nowe bloczki:

    Pulse measurements pozwalający dokonać pomiaru podstawowych parametrów czasowych serii próbek: okresu, wypełnienia oraz czasu trwania stanu H lub L, zależnie jaki kontekst wybraliśmy na wejściu. Obliczone wartości są w dziedzinie indeksów próbek, aby sprowadzić je do dziedziny czasu wartości należy pomnożyć przez czas trwania elementarnej próbki (okres samplowania).

    Transition measurements - kostka pozwala pozyskać czas narastania/opadania przebiegu, a także obliczyć szybkość zmian (slope)

    Sprowadzenie wartości do dziedziny czasu wymaga jak widać pozyskania z oscyloskopu dodatkowych informacji o czasowych parametrach przetwarzania oraz o zakresie pomiarowym, to uzasadnia tak długaśny diagram, który widzimy poniżej.





     



    Gotowiec do zabawy: rigol-1.vi

    ☘☘☘☘
    Kompleksowy odczyt nastaw i przebiegu

    Takie oto dwa przebiegi pracowicie wyprodukowane przez generator KZ1404 podajemy zamiennie na wejście oscyloskopu.

     

    A takie to dwa arcysprytne bloczki pomogą nam w określeniu ich parametrów:

    Amplitude and levels - klocek zwracający amplitudę sygnału, oczywiście sprowadzenie tego do wartości fizycznych (tu: napięcia) wymaga pobrania z oscyloskopu informacji o skali/zakresie.

    Amplitude and Level Measurements Express VI - bloczek dla leniwych, bo wszystko robi za nas: RMS i Vpp i nawet potrafi wydłubać z serii próbek składową stałą, no czad normalnie. Inną sprawą jest jego efektywność obliczeniowa, ale dla takich demek jak to, jest idealny i bardzo łatwy w użyciu.



     

    Na panelu frontowym widzimy 'peak to peak' i 'amplitude', to odpowiedniki Vpp i Vamp z ekraników Rigola. A ładnie opisane co znaczą te wartości i jak je interpretować to znajdziemy dla odmiany w dokumentacji zaprzyjaźnionej firmy Keysight 1000B Series Oscilloscopes strona 98.



    Do pobrania: rigol-scpi-waveform-1.vi

    ☘☘☘☘☘
    Prezentacja danych w trybie X-Y

    Najpierw taka refleksja drobna nad sieciowym SCPI jako takim, bo proszę: Cukierek i Analog Discovery 2 w jednym rogu biurka, laptop z LabVIEW na stoliku w środku pokoju, cała pisanina i zdalny desktop przez VNC - na głównej stacji roboczej. Oto właśnie zalety sterowania oscyloskopem przy pomocy sieci, system totalnie rozproszony.



    Wspominałam kiedyś, że podstawowym zastosowaniem trybu X-Y w oscyloskopach wszelakich jest zabawa w bazgroły krzywymi Lissajous, zatem proszę - figury rysowane przez LabVIEW na kontrolce 'XY Graph'. Zbudowanie aplikacji wymagało pewnej modularyzacji, diagram pozyskujący dane z oscyloskopu dla wskazanego numerkiem kanału pomiarowego oddzieliłam od reszty, można go swobodnie używać dla kolejnych kanałów.

     

    Główny diagram aplikacji to pobranie serii próbek dla osi X, potem dla Y i podstawienie tego kontrolce graficznej. Przy zmianie ustawień AD2 efekty bywały momentami naprawdę komiczne, fragment także na filmiku.









    Do pobrania: rigol-scpi-waveform-xy.vi oraz getOneChannelData(SubVI).vi, oba proszę umieścić w jednym wspólnym folderze.

    ☘☘☘☘☘☘
    Komu w sercu gra, a komu w głowie szumi

    Sprawa wynikła w sumie przypadkiem, ale ciekawie to wygląda zatem dwa słowa: szum własny toru pomiarowego oscyloskopu i jak to wygląda pod przysłowiową lupą. Najpierw zrzutki ekranu Rigola dla różnych wartości podstawy czasu i najmniejszym (najczulszym) zakresie pomiarowym (bez hackowania na 500uV), wejścia kanałów maszyny oczywiście wiszące w powietrzu. Jak widać meszek jest i to bardzo dobrze widoczny.



    Ale jak spróbujemy to odczytać z bufora pamięci Rigola, a jest to taki sam przebieg jak każdy - efekty są dość niezwykłe. Podstawą zabawy jest tu ustawienie autoskalowania osi X oraz Y wykresów - fluktuacje danych z wektorów wejściowych są malusie, ale kontrolka postara się dostosować do ich rozpiętości min-max, co da efekty jak poniżej. Taki wektorowy szum w formie serwetki.

     

    Na koniec artystyczny akcent, oto szum przetworników Rigol DS1054Z dla różnych (nie ukrywam przypadkowych) nastaw podstawy czasu, genialna zaiste zabawa.



    #slowanawiatr, październik 2018

  • Natasza Biecek 2004-2018/~, e-mail