Forum: PC-Programmierung Messdatenerfassung von Oszilloskop


von Mia (mamai)


Lesenswert?

Hallo Zusammen,
ich arbeite grad mit dem Oszi Yokogawa DLM2032 und will eine Methode zur 
Messdatenerfassung  mit Hilfe von Scipy-Befehle und C# schreiben.
Leider bin ich bei der Suche nach der richtigen Scipy-befehle  für 
Messdatenerfassung gescheitert.
weißt jemanden, welche Befehle sind für Datenerfassung durch einer 
Remotezugriff zuständig.
Danke im Voraus

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

https://cdn.tmi.yokogawa.com/IM710105-03E.pdf
S.94 von 108 steht, die USB-Verbindung zum PC kennt zwei Protokolle, ein 
GPIB488 via USB und ein lesender Zugriff auf Massenspeicher (z.B: 
USB-Stick?).

Hat SciPy überhaupt eigene I/O oder steckt das in Python selbst?
https://docs.scipy.org/doc/scipy/tutorial/index.html#user-guide
ich sehe da nur File I/O, das ist es nicht.

von Dunno.. (Gast)


Lesenswert?

Wirklich scypi, oder vielleicht scpi..?

Zu letzterem gibt's üblicherweise von den Herstellern Beispiele und 
Manuals. Auch von yokogawa.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

oder Skippy
https://de.wikipedia.org/wiki/Skippy,_das_Buschk%C3%A4nguruh

Hat mich auch gewundert, was ein Zusatzpaket zu Python mit C# zu tun 
hat. Aber man lernt ja nie aus.

https://de.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instruments
davon hatte ich noch nicht gelesen.
Eine Erweiterung für GPIB, also wird dieses Protokoll wohl benutzt. Seit 
1989, letzte Spezifikation von 1999.

https://sigrok.org/wiki/Yokogawa_DLM2000_series
"The device uses GPIB, USBTMC or LXI via its ethernet port for 
communication with a host PC. The protocol is based on SCPI commands."

und da steht dann auch der Link zum communication-manual
https://www.yokogawa.com/pdf/provide/E/GW/IM/0000022842/0/IM710105-17E.pdf

SCPI wird zwar nirgends erwähnt, es scheint sich trotzdem um dieses 
Protokoll zu handeln. Optional ist eine echte GPIB-Schnittstelle 
erhältlich, aber das selbe müsste auch über USB laufen.

: Bearbeitet durch User
von Dunno.. (Gast)


Lesenswert?

Scpi ist einfach das übliche an Messgeräten. Egal ob per gpib, rs232, 
USB, oder Ethernet.

Die Kommandos sind eigentlich immer so aufgebaut.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ist das USBTMC-USB488 eine eigene Klasse oder wird das z.B. wie eine 
serielle Schnittstelle mit einem FTDI-Chip angesprochen? Dann könnte man 
probeweise die Texte mit einem Terminalprogramm senden und empfangen. 
Aber ich habe den Eindruck, das ist etwas ganz eigenes zu dem man auch 
eine Art Treiber braucht.
Nachdem klar ist, dass kein SciPy gemeint war, er muss ja irgendwie mit 
seinem C#-Programm die ASCII-Befehle an das Oszilloskop schicken und 
dessen Reaktionen empfangen können.

Wäre es die optionale GPIB-Schnittstelle, dann müsste er auch eine 
GPIB-Karte im PC haben und dazu einen Treiber. Ebenso denke ich braucht 
er einen Treiber für diese spezielle USB-Schnittstelle. Natürlich mit 
Handbuch zur Programmierung dazu, wie es bei einer GPIB-Karte der Fall 
wäre. Die konnte man früher mal z.B. mit gewöhnlichem BASIC ansprechen. 
Es gab ein paar BASIC-Befehle, mit denen man sein eigenes Programm 
schreiben konnte.

Wir hatten hier mal eine Thread zu SCPI:
Beitrag "USB 2.0 (USB-TMC488 protocol)"
darin ein Link zu einem anderen Thread ebenfalls hier
Beitrag "Re: SCIP VISA / Verbindung über USB mit Funktionsgenerator"

Vielleicht ist das hier empfohlene Franzis-Buch ISBN 9783772355097 das 
richtige, alles andere sind nur Normen.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Christoph db1uq K. schrieb:
> Ist das USBTMC-USB488 eine eigene Klasse

USBTMC ist eine eigene Klasse. USB488 eine Subklasse.

> Dann könnte man
> probeweise die Texte mit einem Terminalprogramm senden und empfangen.

Man kann USBTMC zwar mit ein bisschen Verbiegen nach oben hin wie eine 
Terminal-Schnittstelle aussehen lassen (auf Linux schon gemacht). Aber 
das ändert aber nichts daran, dass man nach unten hin einen 
USBTMC-Treiber braucht.

> Aber ich habe den Eindruck, das ist etwas ganz eigenes zu dem man auch
> eine Art Treiber braucht.

Profitipp: Einfach mal in den Standard schauen.
https://www.usb.org/sites/default/files/USBTMC_1_006a.zip

> Ebenso denke ich braucht
> er einen Treiber für diese spezielle USB-Schnittstelle.

Eine VISA oder VISA.NET (wegen C#) Implementierung kommt normalerweise 
auch mit einem USBTMC-Treiber. Z.B. von National Instruments oder 
Keysight (HP). Wenn man dann den ganzen Haufen VISA-Zeugs installiert 
hat, dann kann man VISA auch zur Programmierung verwenden, statt in 
Windows direkt auf dem USBTMC-Treiber rumzuackern.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Ich habs befürchtet. Eine USB-Schnittstelle ist selten "einfach", 
deshalb sind die FTDI-Chips und ähnliche so beliebt. Man kann sie mit 
einem einfachen Mikrocontroller benutzen. Ansonsten muss man ein ganzes 
Entwicklungspaket installieren und sich durch die Doku durcharbeiten.

Jedenfalls sind wir damit der Beantwortung von Mias Frage (hab den Namen 
nicht beachtet, tschuldigung) etwas näher gekommen. Sie hat sich leider 
bisher nicht mehr gemeldet.

von Mia (mamai)


Lesenswert?

Hallo Zusammen
Danke erstmal an allem, die mir geantwortet haben.
was ich meine war  Messdaten von Oszi mit Hilfe  von SCPI-Befehle und C# 
durch Serielle Kommunikation abfragen. Für die Kommunikation mit dem 
Oszi habe ich mir Visa-Treiber von National Instruments installiert und 
für das Ansprechen der physikalischen Ports arbeite ich mit Serial 
Klasse von .NET Klassenbibliothek.
Danke im Voraus

: Bearbeitet durch User
von Ralph B. (rberres)


Lesenswert?

Mia schrieb:
> was ich meine war  Messdaten von Oszi mit Hilfe  von SCPI-Befehle und C#
> durch Serielle Kommunikation abfragen.

Ich kenne es so, das es egal ist, ob man die SCPI Befehle über den 
IEEE488 Bus, den USB Bus oder der RS232 Schnittstelle abfragt.

Die Verbindung zum Messgerät muss aber sicher gestellt sein. Das hat 
aber nichts mit dem SCPI Befehl zu tun.

Welcher Befehl sehr oft geht ( aber nicht immer ) ist *IDN?
Da sollte dann als Antwort der Name des Gerätes und eventuell die 
Seriennummer zurück kommen.

Die SCPI Befehle sollten entweder im Usermanual oder im Programmermanual 
des jeweilgen Gerätes dokumentiert sein.

Manche verstehen aber das * am Anfang nicht, und bei älteren Geräten, 
welche noch skryptische Befehle haben und kein SCPI verstehen das auch 
nicht.

Damit kann man zumindestens testen, ob eine Kommunikation mit dem Gerät 
erfolgt.

Ralph Berres

: Bearbeitet durch User
von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Hallo Ralph
>RS232 Schnittstelle
Das Gerät hat keine RS232 mehr, nur USB oder Netzwerk, optional noch das 
alte GPIB. Aber "Visa-Treiber" und "National Instruments" dürfte USB 
bedeuten, wie es Hannes J. oben beschrieben hat.
Der "*IDN?"-Befehl steht im Handbuch von Yokogawa drin, liefert 
Gerätetyp und Seriennummer.

von Ralph B. (rberres)


Lesenswert?

Christoph db1uq K. schrieb:
> Das Gerät hat keine RS232 mehr, nur USB oder Netzwerk, optional noch das
> alte GPIB. Aber "Visa-Treiber" und "National Instruments" dürfte USB
> bedeuten, wie es Hannes J. oben beschrieben hat.

hallo Christoph

meines Wissens funktioniert SCPI auch über Netzwerkschnittstelle.

Oft haben die Geräte mit Netzwerkschnittstelle sogar einen eigenen 
Webserver, welches man über einen Internetexplorer direkt aufrufen kann.

Das ist praktisch , wenn man einen Screenshort auf den Rechner laden 
will.

Der Agilent MSO 6104 kann das z.B.

Ralph Berres

von Mia (mamai)


Lesenswert?

Ralph B. schrieb:
> Die Verbindung zum Messgerät muss aber sicher gestellt sein. Das hat
> aber nichts mit dem SCPI Befehl zu tun.

Die Verbindung zum Messgerät ist sichergestellt und kann mit dem 
Messgerät mit Hilfe von SCPI-Befehle Abfragen senden  und Antwort 
empfanden.
meine Frage ist, welche SCPI-Befehle brauche ich, um die Messdaten von 
Signal in Stopp-Modus abzufragen.

: Bearbeitet durch User
von Zeno (Gast)


Lesenswert?

Mia schrieb:
> meine Frage ist, welche SCPI-Befehle brauche ich, um die Messdaten von
> Signal in Stopp-Modus abzufragen.
Vielleicht mal das von Christoph verlinkte Manual befragen?
Christoph db1uq K. schrieb:
> und da steht dann auch der Link zum communication-manual
> https://www.yokogawa.com/pdf/provide/E/GW/IM/0000022842/0/IM710105-17E.pdf
Oder bist Du zu bequem dazu und hättest es gern vorgekaut auf dem 
silbernen Tablet?

von Mia (mamai)


Lesenswert?

Zeno schrieb:
> Oder bist Du zu bequem dazu und hättest es gern vorgekaut auf dem
> silbernen Tablet?

das stimmt nicht, ich habe erst gefragt, nachdem ich gesucht und mit 
verschiedene SCPI-Befehle ohne Erfolg probierte habe.

von Ralph B. (rberres)


Lesenswert?

Mia schrieb:
> das stimmt nicht, ich habe erst gefragt, nachdem ich gesucht und mit
> verschiedene SCPI-Befehle ohne Erfolg probierte habe.

Ich würde an deiner Stelle als erstes mit dem *IDN? versuchen.

Wenn der nicht funktioniert, stimmt grundsätzlich was nicht mit der 
Kommunikation zwischen Rechner und Oszillografen.

Erst wenn sich der Oszillograf erfolgreich mit seinen Namen meldet, 
kannst du andere SCPI Befehle ausprobieren.

Ralph Berres

von Dunno.. (Gast)


Lesenswert?

Ralph B. schrieb:
> *IDN?

Aber noch mit \r oder \r\n terminieren, oder nicht?


Steht aber üblicherweise auch im entsprechenden Manual...

von Ralph B. (rberres)


Lesenswert?

Dunno.. schrieb:
> Aber noch mit \r oder \r\n terminieren, oder nicht?

Das übernimmt normalerweise die Software zu der Schnittstelle im PC, 
welche dem Dienstprogramm eine Visa oder SICL Schnittstelle zur 
Verfügung stellt.


Zeno schrieb:
> https://www.yokogawa.com/pdf/provide/E/GW/IM/0000022842/0/IM710105-17E.pdf

Das Teil hat ja einen wirklich mächtigen Befehlsdatensatz.

Ralph Berres

: Bearbeitet durch User
von Olaf (Gast)


Lesenswert?

> meines Wissens funktioniert SCPI auch über Netzwerkschnittstelle.

Das muss man natuerlich fuer jedes Geraet einzeln klaeren, aber
bei allem was mich bisher interessiert hat war das genau so.
Das sieht dann so aus: (unter linux, fuer RTB2004)
1
  if ((s=socket(AF_INET, SOCK_STREAM, 0))==-1)  err("kein socket");
2
  memset((char *) &si_me, 0, sizeof(si_me));
3
  si_me.sin_family = AF_INET;
4
  si_me.sin_port = htons(5025); //Port für SCPI-Kommando über TCP
5
  inet_aton("192.168.12.220", (struct in_addr *) &si_me.sin_addr.s_addr );
6
  if ( connect(s,(struct sockaddr *) &si_me , sizeof(si_me))==-1) err("keinconnect");
7
8
9
 sprintf(buf,"*IDN?\n"); 
10
 write(s,buf,strlen(buf));

Mit anderen Worten man kann oftmals direkt SCPI in TCP/IP Paketen
versenden und sich den ganzen aufgeblasenen Treiberkack sparen.
Das macht dann die eigene Anwendung von 1GByte auf 10kByte kleiner und 
vermutlich 10x schneller.
Ich hab hier z.B ein kleines Kommandozeilentool das mir einfach nur ein 
Bild vom Oszi holt und abspeichert das ist dann 11kb gross.

Fuer Detailprobleme hilft dann Wireshark. .-)

Olaf

von Zeno (Gast)


Lesenswert?

Ralph B. schrieb:
> Zeno schrieb:
>> https://www.yokogawa.com/pdf/provide/E/GW/IM/0000022842/0/IM710105-17E.pdf
>
> Das Teil hat ja einen wirklich mächtigen Befehlsdatensatz.
Ja und da in dem Manual alles auch beschrieben ist, verstehe ich nicht, 
wieso man da nichts hinbekommt. Das deutet darauf hin, daß die 
Verbindung nicht richtig steht oder der Aufbau der Abfragesequenzen 
fehlerhaft ist.
Ich würde auch Deinen Rat befolgen und erst mal den Namen des Gerätes 
abfragen. Soweit ich das im Manual gelesen habe heißt der Befehl - ohne 
Gewähr - hierfür IDY. Zudem muß man das Teil auch noch für Remote öffen. 
Wie das geht ist im obigen verlinkten Manual beschrieben, ebenso wie der 
Aufbau der Befehlsfolgen. Das Manual macht auf mich einen sehr guten 
umfassenden Eindruck. Damit sollte es möglich sein was hin zu bekommen. 
Man muß sich halt auf den Hosenboden setzen und das Manual studieren.
Auf der Herstellerseite gibt es außerdem auch Programmierbeispiele. Der 
Link dazu befindet sich in einem von Christoph verlinkten PDF.

von Ralph B. (rberres)


Lesenswert?

Zeno schrieb:
> Soweit ich das im Manual gelesen habe heißt der Befehl - ohne
> Gewähr - hierfür IDY.

siehe

*IDN? (IDeNtify)
Function Queries the DLM2000 model.
Syntax *IDN?
Example *IDN?
-> YOKOGAWA,710120,08ELP1024,F1.01
Description The information is returned in this
form:<Manufacturer>, <Model>, <Serial no.>,
<Firmware version>.
The following values are returned for <Model>:
710105 for the DLM2022, 710110 for the
DLM2024, 710115 for the DLM2032, 710120 for
the DLM2034, 710125 for the DLM2052,


Ralph Berres

von huhu (Gast)


Lesenswert?

Falls irgendwo NI-Visa vorhanden ist würde ich erstmal damit probieren 
ob eine Verbindung möglich ist.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>...habe ich mir Visa-Treiber von National Instruments installiert...
scheint also schon vorhanden zu sein

https://knowledge.ni.com/KnowledgeArticleDetails?id=kA03q000000x1qzCAA&l=de-DE

"USBTMC Instruments
NI-VISA will detect USBTMC instruments automatically, so no additional 
configuration is necessary after installing the NI-VISA driver. The 
instrument will be installed as a USB Test & Measurement Class Device."

Also geht doch vollautomatisch, wenn nicht, war man zu doof für 
NI-Produkte.

https://www.ni.com/docs/de-DE/bundle/ni-visa/page/ni-visa/introprogrammingusbdevicesni-visa.html
Die wollen natürlich, dass man mit Labview programmiert.

von Olaf (Gast)


Lesenswert?

> Also geht doch vollautomatisch, wenn nicht, war man zu doof für
> NI-Produkte.
> Die wollen natürlich, dass man mit Labview programmiert.

Haelst du es fuer moeglich das man auch zu klug sein kann fuer 
NI-Produkte? Als Labview-Opfer kommen einen gelegentlich solche 
Gedanken.

Olaf .-)

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

>Labview-Opfer
genau deshalb habe ich es so formuliert.

Es gibt den NI-VISA auch für Linux. Aber im Kleingedruckten direkt 
darunter heißt es:
Hinweis: Installieren Sie Programmierumgebungen wie NI LabVIEW oder 
Microsoft Visual Studio®, bevor Sie dieses Produkt installieren.

https://www.ni.com/de-de/support/downloads/drivers/download.ni-visa.html#460385

wo bekomme ich Visual Studio für Linux?

von Olaf (Gast)


Lesenswert?

> Es gibt den NI-VISA auch für Linux.

Also bevor ich mir damit mein Linux kontaminiere programmiere
ich mir lieber alles selbst. Genauer gesagt wird das in den
naechsten Tagen sogar mal passieren weil ich auch noch
1-2 alte Messgeraete ansprechen wollte...

Olaf

von Test (Gast)


Lesenswert?

Eine aus meiner Sicht sehr einfache Lösung um mit Messgeräten zu 
kommunizieren ist die Python VISA Bibliothek PyVisa. Da bedarf es keiner 
riesigen Hersteller Treiber Pakete, man kann sie wenn benötigt aber auch 
als Backend benutzen. PyVisa bring ein eigenes pure Python Visa Backend 
mit.

Wenn das Gerät dem SCPI Standard folgt muss es auch *IDN beherrschen 
sonst ist es nicht konform. Es sind nur eine handvoll dieser Kommandos 
vorgeschrieben, die restliche Struktur darf sich der Hersteller 
ausdenken.

Ob USBTMC von der PyVisa Bibliothek unterstützt wird kann ich nicht 
sagen da es mir bisher nicht untergekommen ist. Rohde, Keysight, 
Tektronix Geräte lassen sich meistens per LAN oder USB Seriel Interface 
ansprechen. Das Funktioniert sehr stabil. Zumindest bei mir.

Ich habe die Doku vom Oszi nicht gelesen, aber beim auslesen von Daten 
gibt es meistens mehrere Wege wie die Daten über tragen werden, als 
ASCII Zeichen oder als Binärdaten, vielleicht hängt es ja an der 
Interpretation der Rückgabe Werte. Auch immer eine gute Idee ist es den 
Fehlerspeicher auszulesen wenn etwas nicht funktioniert.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

USBTMC scheint unterstützt zu sein:
https://pyvisa.readthedocs.io/en/latest/introduction/names.html?highlight=USBTMC#visa-resource-syntax-and-examples

USB::0x1234::125::A22-5::INSTR
A USB Test & Measurement class device with manufacturer ID 0x1234, model 
code 125, and serial number A22-5. This uses the device’s first 
available USBTMC interface. This is usually number 0.

https://pyvisa.readthedocs.io/projects/pyvisa-py/en/latest/installation.html?highlight=USBTMC#usb-resources-usb-instr-raw

On Windows, you may have to uninstall the USBTMC specific driver 
installed by Windows and re-install a generic driver.
Note that on Windows, devices that are already open cannot be detected 
and will not be returned by ResourceManager.list_resources.
Another useful reference for how to configure your system is
https://github.com/python-ivi/python-usbtmc.

https://pyvisa.readthedocs.io/projects/pyvisa-py/en/latest/faq.html?highlight=USBTMC#why-putting-pyvisa-in-the-middle

: Bearbeitet durch User
von Christian R. (supachris)


Lesenswert?

PyVISA klappt sehr gut, wir nutzen das in Kombination mit dem NI Zeug 
als Backend. Die direkte Variante ist nicht sonderlich stabil gewesen 
bei unseren Tests.

Die Thread-Starterin möchte aber C# nutzen, da wäre eine .NET 
Implementierung sinnvoller. Da könnte man z.B. direkt da NI-VISA nehmen: 
https://www.ni.com/de-de/support/documentation/supplemental/15/national-instruments-visa--net-library.html
Das von R&S müsste auch gehen: 
https://www.rohde-schwarz.com/de/driver-pages/fernsteuerung/3-visa-and-tools_231388.html

von Ralph B. (rberres)


Lesenswert?

mal eine Frage, welches mit dem Trhead nicht direkt was zu tun hat.

Wo sind eigentlich so Ausdrücke wie Scypi für SCPI oder Scasi für scsi 
entstanden?

Ist das die Ausdrucksweise von irgendwelchen möchtegernprofis, welche 
sich mit so einer Ausdrucksweise profilieren müssen?

Ralph Berres

von Test (Gast)


Lesenswert?

Christian R. schrieb:
> Die Thread-Starterin möchte aber C# nutzen, da wäre eine .NET
> Implementierung sinnvoller.

Schon klar, aber anscheinend ist die Person nicht in der Lage das damit 
umzusetzen, daher ein Vorschlag wie der einstieg vielleicht leichter 
fällt.
Es war ja auch kein Code Beispiel dabei das ein nachvollziehen des 
Problems erlaubt oder eine Info welche Kommandos erfolglos probiert 
wurden.

Ansonsten schlage ich vor RTFM.
:WAVeform:ALL:SEND? Hat ca 2 Minuten gedauert.

:WAVeform:ALL:SEND?
Function Queries the waveform data specified by the :WAVeform:ALL:TRACe 
command.
Syntax :WAVeform:ALL:SEND? {<NRF>} <NRF> = 0 to the acquisition count

Ist das die gesuchte Antwort?

von Test (Gast)


Lesenswert?

Ralph B. schrieb:
> Wo sind eigentlich so Ausdrücke wie Scypi für SCPI oder Scasi für scsi
> entstanden?

Im englischen, damit man beim reden vorwärts kommt und nicht die 
Buchstaben einzeln sagen muss. Spricht sich angenehmer und ist am Ende 
besser zu verstehen, gerade beim fernmündlicher Kommunikation in frühen 
Jahren.

Nur die Leute die sich nicht auskennen schreiben es dann wie gesprochen 
auf.

von Chris K. (kathe)


Lesenswert?

Schon mal an Socket session over LAN gedacht. VXI-11
Zum Verbindungstest ping auf das Gerät
z.b. Putty connect zum Gerät Telnet - meistens port 5025.

Dort *IDN? absenden. (mit \r\n)
! Bug in putty deßhalb den Befehl nochmal senden dann sollte sich das 
Gerät melden.

Aber wo ist eigentlich Mia?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.