[PYTHON] Holen Sie sich mit pyVISA Daten von einem Oszilloskop

Einführung

Mit PyVISA können Sie Daten vom Oszilloskop abrufen. Informationen zur Installationsmethode finden Sie unter VISA in Python - Qiita. In meinem Fall ist bei der Verwendung von PyVISA ein Fehler aufgetreten. [[Hinweis] pyvisa.errors.VisaIOError: VI_ERROR_INV_OBJECT (-1073807346): Die angegebene Sitzungs- oder Objektreferenz ist ungültig. --Qiita] Ich habe NI-VISA unter Bezugnahme auf (https://qiita.com/grinpeaceman/items/9a580c137f1cbbfe5ba7) installiert.

Python-Code

Unten finden Sie den Code und beschreibende Kommentare.

import numpy as np
import visa

rm = visa.ResourceManager()

#An diesem Ort, rm.list_resources()Von innen
#Wählen Sie das gewünschte Gerät und rm.open_resource()Bitte weitergeben an
inst = rm.open_resource(rm.list_resources()[0])

#Timeout-Einstellung
scope.timeout = 30000 #30 Sekunden

# Setting source as Channel 1
scope.write('DATA:SOU CH1') 
scope.write('DATA:WIDTH 1') 
scope.write('DATA:ENC ASCI')

#Es ist eine Einstellung, um Daten vom Oszilloskop auf VOLL zu erfassen
#In meiner Umgebung scheint das Auskommentieren dieses Speicherorts die Datenmenge zu verringern
scope.write('DATA:RESOLUTION FULL')

# Getting axis info
#Der Prozess des Abrufens von Daten ist
# How to save Data from Oscilloscope using Python in Linux - Tech For Curious
# <https://techforcurious.website/how-to-save-data-from-oscilloscope-using-python-in-linux/#more-348>Oder
# How do I get a waveform using the Instrument Control Toolbox in Matlab? | Tektronix
# <https://techforcurious.website/how-to-save-data-from-oscilloscope-using-python-in-linux/#more-348>
#Ich bezog mich auf
ymult = float(scope.query('WFMPRE:YMULT?')) # y-axis least count
yzero = float(scope.query('WFMPRE:YZERO?')) # y-axis zero error
yoff = float(scope.query('WFMPRE:YOFF?')) # y-axis offset
xincr = float(scope.query('WFMPRE:XINCR?')) # x-axis least count
xoff = float(scope.query('WFMP:PT_OFF?')) # x-axis offset
xzero = float(scope.query('WFMPRE:XZERO?')) # x-axis least count

#Holen Sie sich die Daten. In meiner Umgebung ca. 6.Es dauerte 5 Sekunden
ADC_wave = scope.query_ascii_values('CURV?', container=np.array)

#Daten
volts = (ADC_wave - yoff) * ymult + yzero
time = np.arange(xzero, xincr * len(Volts) - xoff + xzero, xincr)

Hier ist der obige Code, mit dem Sie Daten in Echtzeit erfassen, anzeigen und speichern können.

import numpy as np
import matplotlib.pyplot as plt
import visa
from matplotlib import _pylab_helpers
import tkinter
from tkinter import filedialog
import threading
import csv

#Flagge, die sagt, ob gespeichert werden soll
#Sperren Sie den Thread, wenn Sie diese Variable ändern
is_save_requested = False

def gui(lock):
    global is_save_requested

    def change_title():
        global is_save_requested
        lock.acquire()
        is_save_requested = True
        lock.release()

    root = tkinter.Tk()

    #Taste
    button1 = tkinter.Button(
        master=root,
        text="Save",          #Ursprünglicher Wert
        width=30,               #Breite
        bg="lightblue",         #Farbe
        command=change_title    #Funktion, die beim Klicken ausgeführt werden soll
        )
    button1.pack()

    root.mainloop()

def get_data_from_inst(rm , scope):

    scope.timeout = 30000

    # Setting source as Channel 1
    scope.write('DATA:SOU CH1') 
    scope.write('DATA:WIDTH 1') 
    scope.write('DATA:ENC ASCI')
    scope.write('DATA:RESOLUTION FULL')

    # Getting axis info
    ymult = float(scope.query('WFMPRE:YMULT?')) # y-axis least count
    yzero = float(scope.query('WFMPRE:YZERO?')) # y-axis zero error
    yoff = float(scope.query('WFMPRE:YOFF?')) # y-axis offset
    xincr = float(scope.query('WFMPRE:XINCR?')) # x-axis least count
    xoff = float(scope.query('WFMP:PT_OFF?')) # x-axis offset
    xzero = float(scope.query('WFMPRE:XZERO?')) # x-axis least count

    ADC_wave = scope.query_ascii_values('CURV?', container=np.array)

    Volts = (ADC_wave - yoff) * ymult + yzero
    Time = np.arange(xzero, xincr * len(Volts) - xoff + xzero, xincr)
    return (Time, Volts)

def main():

    rm = visa.ResourceManager()
    inst = rm.open_resource(rm.list_resources()[0])

    #Einrichten einer GUI, die das Speichern auslöst
    global is_save_requested
    lock = threading.Lock()
    t1 = threading.Thread(target=gui, args=(lock,))
    t1.start()
    
    data = get_data_from_inst(rm, inst)
    
    x, y = data
	
    x = x * 1e6 # sec to micro sec
    y = y * 1e3 # V to mV
    
    fig, ax = plt.subplots(1, 1)
    ax.set_xlabel('time(μs)')
    ax.set_ylabel('Intensity (mV)')

    lines, = ax.plot(x, y)
    
    while True:
	
        manager = _pylab_helpers.Gcf.get_active()
        if manager is None: break
	
        #Plotdaten aktualisieren
        data = get_data_from_inst(rm, inst)

        x, y = data

        x = x * 1e6 # sec to micro sec
        y = y * 1e3 # V to mV

        # data update
        lines.set_data(x, y)

        plt.pause(.01)

        #Prozess speichern
        lock.acquire()
        if is_save_requested:
            file =  filedialog.asksaveasfilename(initialfile='', title = "Wählen Sie einen Speicherort",filetypes = [("CSV-Datei", ".csv")])

            if file:
                with open(file, mode='w',encoding="utf-8") as f:
                    writer = csv.writer(f, lineterminator='\n')
                    writer.writerows(np.array(data).T)

            is_save_requested = False

        lock.release()

if __name__ == "__main__":
    main()

abschließend

pyVISA ist sehr praktisch!

Recommended Posts

Holen Sie sich mit pyVISA Daten von einem Oszilloskop
[Hinweis] Mit Python Daten von PostgreSQL abrufen
Holen Sie sich Daten von Cloudant mit Bluemix-Kolben
Strukturdaten von CHEMBLID abrufen
Holen Sie sich Youtube-Daten mit Python
Abrufen von Daten aus der Datenbank über ODBC mit Python (Access)
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Holen Sie sich mit DataFrame eine Spalte aus DataFrame
[Python] Mit DataReader Wirtschaftsdaten abrufen
Holen Sie sich Daten von Twitter mit Tweepy
Holen Sie sich Daten von VPS MySQL mit Python 3 und SQL Alchemy
Ich erhalte eine Fehlermeldung beim Import von Pandas.
Empfangen Sie Textdaten von MySQL mit Python
Scraping von einer authentifizierten Site mit Python
Bedienen Sie das Oszilloskop mit dem Raspberry Pi
Holen Sie sich mit Python Zeitreihendaten von k-db.com
Holen Sie sich Aktienkursdaten mit Quandl API [Python]
Generieren Sie mit Python eine Einfügeanweisung aus CSV.
Holen Sie sich mehr als 10 Daten aus dem SSM-Parameterspeicher
Ich erhalte eine Fehlermeldung mit allen yum-Befehlen
Extrahieren Sie mit Python Daten von einer Webseite
So kratzen Sie Bilddaten von Flickr mit Python
Holen Sie sich mit Python + Zeep einen Zeitplan von der Garoon SOAP API
Lesehinweis: Einführung in die Datenanalyse mit Python
Holen Sie sich mit Python Daten vom GPS-Modul mit 10 Hz
So erhalten Sie mit SQLAlchemy + MySQLdb mehr als 1000 Daten
Erhalten Sie Kommentare und Abonnenten mit der YouTube-Daten-API
Erhalten Sie E-Mails von Google Mail und beschriften Sie sie mit Python3
[Grundlagen der Datenwissenschaft] Sammeln von Daten aus RSS mit Python
Datenanalyse mit Python 2
Daten aus S3 extrahieren
Daten mit TensorFlow lesen
Beginnen Sie mit MicroPython
Datenmanipulation mit Pandas!
Holen Sie sich Tweets mit Tweepy
Holen Sie sich Gzip-komprimierte Daten in den Speicher
Daten mit Pandas mischen
Datenerweiterung mit openCV
Beginnen Sie mit Mezzanine
Daten mit Scipy normieren
Datenanalyse mit Python
LADEN SIE DATEN mit PyMysql
Holen Sie sich ein Bild von einer Webseite und ändern Sie die Größe
[Python] Senden Sie eine E-Mail aus Google Mail mit einer zweistufigen Authentifizierungseinstellung
Erste Schritte mit dem Zeichnen mit matplotlib: Erstellen von Diagrammen aus Datendateien
Ich habe versucht, mit Python eine E-Mail von Amazon SES zu senden
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Überprüfen Sie! Erhalten Sie Sensordaten über Bluetooth mit Raspberry Pi ~ Preparation
Erstellen Sie mit Docker eine Umgebung für "Deep Learning von Grund auf neu"
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Xpath-Zusammenfassung beim Extrahieren von Daten von einer Website mit Python Scrapy
[Python] Ruft das Skriptausführungsverzeichnis mit einem absoluten Pfad ab
Versuchen Sie, Daten zu erfassen, während Sie mit anaconda eine Portweiterleitung an RDS durchführen.
So erhalten Sie einen Überblick über Ihre Daten in Pandas
Holen Sie sich zusätzliche Daten zu LDAP mit Python (Writer und Reader)
Nachricht vom ersten Offset mit Kafka Consumer in Python abrufen
[Einführung in Python] So erhalten Sie Daten mit der Funktion listdir