Forum: Projekte & Code Messinstrumente - SCPI für USB und LAN (Windows)


von Peter D. (fenstergucker)


Angehängte Dateien:

Lesenswert?

Ich habe ein Programm in PureBasic für Windows geschrieben, mit dem man 
SCPI-Kommandos an Messinstrumente mit USBTMC-, LXI- oder 
Raw-TCP-Verbindung senden kann. Das Programm ist aus Interesse 
enstanden, wie die Steuerung von Messinstrumenten funktioniert. Darum 
wird auch keine VISA-Installation benötigt, allerdings der Microsoft 
WinUSB-Treiber, wenn man USBTMC-Instrumente ansprechen will.

https://peter.dreisiebner.at/messinstrumente

Im Moment kann man nur SCPI-Kommandos senden, andere Funktionen sind 
geplant. Getestet habe ich nur mit meinen eigenen Instrumenten, die sind 
auf der Webseite unten aufgelistet. Ansonst habe ich keine Rückmeldung, 
kann also sein, dass es bei jemand anderen gar nicht funktioniert.
Es gibt auch eine Hilfeseite mit kurzer Erklärung, und die Sprache des 
Programms kann in den Einstellungen auf Deutsch geändert werden.

Die Oberfläche ist altbacken und verwendet das Multi Document Interface 
(MDI). Wobei aber z.B. das SCPI-Fenster auch eigenständig geöffnet 
werden kann.

Hier ist eine Stichwortliste zu dem Programm:
- Betriebssystem Windows XP bis 10.
- Keine Installation notwendig, entpacken in ein Verzeichnis mit 
Schreibrechten.
- Es werden nirgends ungefragt Daten gespeichert, Registry, 
Tempverzeichnis, usw.
- Die Oberfläche ist skalierbar für HiDPI, ist aber wenig getestet.
- Es können beliebig viele Instrumente gleichzeitig verwendet werden.
- Fehlermeldungen werden im Log-Fenster ausgegeben.
- Beim Suchen nach Instrumenten im Netzwerk werden UDP-Broadcast Pakete 
gesendet, an Port 111, 5025 und 50000. Eine Firewall wird wahrscheinlich 
anschlagen, man kann Instrumente auch manuell hinzufügen.
- SCPI-Kommandos können in Dateien gespeichert und geladen werden.
- Man kann binäre Daten mithilfe einer Datei senden.

Vielleicht hat jemand Bedarf an den Programm bzw. Tool, mehr ist es ja 
noch nicht. Für die weiteren Funktionen wird es noch dauern, und die 
sind vorerst nur für meine Instrumente geplant. Aber die SCPI-Kommandos 
sollten für viele Instrumente verwendbar sein.

Rückmeldungen sind gerne willkommen.

Peter

von Peter D. (fenstergucker)


Lesenswert?

Ich habe das Programm etwas erweitert. Es werden die Fensterpositionen 
gespeichert und wiederhergestellt. Man kann den 'Arbeitsbereich' 
speichern und laden, ist im Menü "Fenster". Wie gehabt können die 
Fenster auch separat geöffnet werden, wenn beim Öffnen die Strg-Taste 
gedrückt wird.
Die geöffneten MDI-Client-Fenster lassen sich in einen freien Bereich 
einpassen.

Es gibt aber Probleme, wenn mehrere Bildschirme mit unterschiedlicher 
Skalierung verwendet werden. Da werden die Positionen nicht 
wiederhergestellt, die Fenster werden dann am Hauptbildschirm angezeigt.

Es ist jetzt auch das Einlesen, Anzeigen und Speichern eines 
Bildschirmfotos vom Instrument möglich. Die Funktionen werden noch 
erweitert, für automatisch einlesen, andere Farbdarstellung, usw.
Für die unterstützten Instrumente gibt es Konfigurationsdateien im 
Verzeichnis 'Instrument'. Man kann selbst solche Dateien erstellen, oder 
mir die genaue Bezeichnung des Instruments schicken. Dazu benötige ich 
auch die Ausgabe vom SCPI-Kommando '*IDN?'. Vorallem die ersten zwei 
Felder von Hersteller und Modellbezeichnug. Diese Angaben werden für die 
Erkennung des Instruments und der richtigen Konfigurationsdatei 
benötigt.

Mich würde interessieren, ob sich auch Siglent-Instrumente z.B. im 
Netzwerk finden und ansprechen lassen. Vielleicht kann das jemand 
ausprobieren und hier berichten.

Peter

von Voodoo (Gast)


Lesenswert?

Nettes Spielzeug.
Finde ich an sich nicht schlecht so etwas zum lernen zu machen. 
Allerdings werde ich es nicht mit anderen Geräten Testen da es eine 
Windows Lösung ist und ich meine Messrechner mit Linux per SSH 
anspreche.
Ich benutze das pure python visa Backend der pyVisa Bibliothek um 
Hersteller unabhängig zu bleiben. So etwas wie du gemacht hast würde 
mich eher mit Flask gebaut interessieren. Bisher nutze ich für so etwas 
einfach die Kommandozeile. Ich habe Messgeräte Klassen geschrieben denen 
man einfach eine Liste an Befehlen geben kann. Tut das gleiche nur eben 
ohne GUI. Ich mache das allerdings auch nicht zum vergnügen sondern um 
vorwärts zu kommen. Nachdem ich jetzt für verschiedene Projekte und 
Messaufbauten Verschiedenen GUI Frameworks durch habe bin ich der 
Ansicht das Webbasiert das beste ist. Da bei mir Messungen auch schon 
mal länger dauern könnte ich dann am Telefon kontrollieren ob alles 
läuft ;-)

von Peter D. (fenstergucker)


Angehängte Dateien:

Lesenswert?

Es ist jetzt möglich bei der Bildschirmfoto-Funktion, Optionen für die 
Steuerung des Instruments auszuwählen. Damit kann z.B. der Single-Modus 
gestartet werden, auf ein Ereignis gewartet, und danch das 
Bildschirmfoto eingelesen und gespeichert werden. Es lässt sich auch 
automatisch ausführen. Getestet habe ich nur mit dem Rigol DS1000Z und 
dem RTB2000. Die entsprechenden SCPI-Kommandos sind aber für alle 
unterstützten Instrumente in den Konfigurationdateien gespeichert.

https://peter.dreisiebner.at/messinstrumente/

Peter

: Bearbeitet durch User
von F. M. (foxmulder)


Lesenswert?

Seeehr hübsch, vielen Dank.

von Peter D. (fenstergucker)


Lesenswert?

Eine serielle Verbindung zu den Instrumenten funktioniert jetzt auch. 
Bei dem Hameg HM2008 kann man den Bildschirmspeicher auslesen und als 
Bild speichern.

Peter

von Peter D. (fenstergucker)


Lesenswert?

Für das Hameg HM2008 und den Rigol Oszilloskopen DS/MSO1000Z und 
DS/MSO2000A ist es jetzt möglich, die eingelesenen Messkurvendaten zu 
speichern. Mit der Messkurve-Funktion können die analogen und digitalen 
Kanäle manuell oder automatisch eingelesen werden. Speichern kann man 
die Daten als CSV- oder Binärdatei pro Kanal. Das Anzeigen der 
Messkurven ist noch nicht möglich.
Das Einlesen und Speichern der digitalen Kanäle konnte ich für das 
MSO1000Z nicht testen.

https://peter.dreisiebner.at/messinstrumente/

Peter

von Peter D. (fenstergucker)


Lesenswert?

Für das R&S RTB2000 und das Siglent SDS2000X Plus, ist es jetzt 
ebenfalls möglich die Messkurvendaten der analogen und digitalen Kanäle 
als CSV-Datei zu speichern. Das Anzeigen ist immer noch nicht möglich, 
daran arbeite ich als nächstes.

Beim RTB2000 kann man die 8 Bit und 10 Bit Daten einlesen. Aber es fehlt 
z.B. noch die richtige Verarbeitung der Envelope-Darstellung, da werden 
die Daten falsch gespeichert. Ich habe auch noch nicht viel getestet.

LXI-Instrumente werden nicht immer im Netzwerk automatisch gefunden, 
wenn die LXI-Suche aktiviert ist. Dann kann man die Instrumente manuell 
als LXI-Instrument hinzufügen, das Programm merkt sich das für den 
nächsten Start.
Wenn jemand das Problem hat, wäre es nett wenn mir die Log-Datei (Menü 
'Help'->'Log...') per E-Mail zugeschickt wird. Die Adresse ist im 
About-Dialog vorhanden.

Beim manuellen hinzufügen sollte die Beschreibung genau sein, damit die 
Vektor-Icons angezeigt werden. z.B. für das Siglent funktioniert 
"Siglent SDS2354 Plus".

Peter

von Klaus H. (nikolaus10)


Lesenswert?

Danke fuer die Mühe.
Bitte weitermachen.

Gruesse

von Alois N. (alois)


Lesenswert?

Hallo @Peter,

die Homepage ist nicht erreichbar. Gibt es das Projekt noch?

Viele Grüße Alois

von Peter D. (fenstergucker)


Lesenswert?

Alois N. schrieb:
> die Homepage ist nicht erreichbar. Gibt es das Projekt noch?

Ja, das Programm gibt es noch, hier ist ein ZIP-Archiv der Webseite:
1
https://peter.dreisiebner.at/messinstrumente_website.zip

Peter

von Ralph B. (rberres)


Lesenswert?

kann man das Programm auch mit einer IECbus Karte HP82350B betreiben?

Ralph Berres

von Alois N. (alois)


Lesenswert?

Danke für die Bereitstellung.

Viele Grüße Alois

von Peter D. (fenstergucker)


Lesenswert?

Die Webseite ist wieder mit dem Programm online.
Ich habe eine Unterstützung für Windows 2000 und dem 
libusb-win32-Treiber (libusb0) programmiert.

@Ralph B.
> kann man das Programm auch mit einer IECbus Karte HP82350B betreiben?
Leider nein, es werden nur USBTMC-, serielle und LAN-Instrumente 
unterstützt.
USBTMC funktionert nur mit den WinUSB/libusb-Treibern.

Peter

von egberto (Gast)


Lesenswert?

The requested URL /messinstrumente_website.zip was not found on this 
server.

von egberto (Gast)


Lesenswert?

ok, habs, Webseite ist wieder da.

von Peter D. (fenstergucker)


Lesenswert?

Ich habe das Programm um eine Skriptfunktion erweitert. Eine neue 
Testversion v0.3.0 ist online. In der Hilfe gibt es eine kurze 
Beschreibung, und auch eine eigene Seite für die Skriptanweisungen.

https://peter.dreisiebner.at/messinstrumente/hilfe.htm#skript

Man kann noch keine Daten aus dem Skript speichern, aber senden und 
empfangen von SCPI-Kommandos funktioniert.

Peter

von Veit D. (devil-elec)


Lesenswert?

Hallo Peter,

jetzt muss man ja aufpassen die beiden Peter D. nicht zu verwechseln. 
:-)

Ich habe dein Programm mit meinem Rigol DS1054Z ausprobiert. Habe die 
Screenshotfunktion getestet und es funktioniert. Win10 64Bit. Für mehr 
habe ich die Rigol Software auch nicht verwendet. Allerdings weiß ich 
nicht wie ich mit dem Zadig Tool den alten Treiber für den Fall der 
Fälle laden könnte. Original war "Usbtmc v16.3.17614.0" eingestellt. Das 
fehlt jedoch in der jetzigen Auswahl. Falls du einen Tipp hast? 
Ansonsten muss es eben so bleiben.

Großes fettes Danke für deine Software.

von Peter D. (fenstergucker)


Lesenswert?

Hallo Veit,

ich glaube es genügt, wenn du den Treiber über den Gerätemanger mit 
Dateien deinstallierst. Nach neuen anstecken des DSOs sollte wieder der 
NI/Rigol-Treiber installiert werden.

Peter

von Veit D. (devil-elec)


Lesenswert?

Hallo Peter,

hat leider nicht funktioniert. Mit dem WinUSB Treiber steht es im 
Gerätemanager ganz unten unter "USB Geräte". Nach Deinstallation und neu 
anstecken war der "usbser" Treiber installiert und es stand ganz oben 
unter "Anschlüsse COM LPT" mit ComPort Nummer drin. Habe wieder mittels 
Zadig den WinUSB Treiber installiert. Ist jetzt nicht so dramatisch. Zur 
Not müßte ich in der Rigol Installation den Treiber manuell suchen und 
installieren.

von Peter D. (fenstergucker)


Lesenswert?

Man kann jetzt auch Daten im Skript speichern. Man kann sich auch 
einzelne Zeilen mit eingelesenen Werten bzw. Daten zusammenkopieren. 
Beim Speichern in eine Datei können diese Zeilen angefügt werden.
Die Skriptfunktion ist aber keine Programmiersprache, sondern eine 
einfache Stapelverarbeitung. Datentypen werden automatisch konvertiert 
so gut es geht.
Hier ist ein Beispiel für das Rigol DS1000Z umd Bildschirmkopien 
einzulesen und zu speichern:
1
// Beispielskript mit vorhandenen Funktionen.
2
instrument $DS1000Z usbtmc 1AB1 04CE // Instrument öffnen.
3
instrument $MSO2000 vxi 192.168.1.39 // Instrument öffnen.
4
$DS1000Z // Instrument auswählen.
5
6
#screencopy set :DISP:DATA? ON,OFF,BMP24 // Konstante.
7
#file set "E:\Screencopy - /F /O /Y-/M-/D /H./N./S./Z.bmp" // Konstante, die Anführungszeichen bleiben erhalten.
8
#runs set 5 // Konstante.
9
10
data screencopy // Variable.
11
integer counter // Variable.
12
counter set 0 // Zuweisung an Variable.
13
14
label loop // Sprungmarke.
15
16
function scpi write :STOP // SCPI-Kommando senden.
17
function wait 100 // Warte 100 ms.
18
screencopy function scpi read #screencopy // SCPI-Kommando senden, empfangen und zuweisen.
19
screencopy function remove block last 1 // Das SCPI-Blockformat entfernen, und am Ende das Terminierungszeichen.
20
screencopy function save #file // Bildschirmkopie speichern.
21
function scpi write :RUN // SCPI-Kommando senden.
22
23
function wait 0 // Warte auf Bestätigung, Schaltfläche 'Ausführen' betätigen.
24
25
counter add 1 // Die Variable um 1 erhöhen.
26
counter compare #runs // Vergleich mit 5.
27
false goto loop // Bedingter Sprung zu Label nach Vergleich.
28
// Ende nach 5 Durchläufen.

Peter

von Klaus H. (nikolaus10)


Lesenswert?

Hallo Peter

Danke fuer deine Arbeit.

Kann man auch mit Hilfe von *IDN?
eine Abfrage machen welche Instrumente vorhanden und aktiv sind?
Ein art "Scanvorgang"

Gruss

von Peter D. (fenstergucker)


Lesenswert?

Klaus H. schrieb:
> Kann man auch mit Hilfe von *IDN?
> eine Abfrage machen welche Instrumente vorhanden und aktiv sind?
> Ein art "Scanvorgang"

Nicht mit dem Skript, aber im Auswahlfenster für die Instrumente. Du 
musst nur die Optionen im 2. Reiter "Optionen für USB & LAN" die 
passenden Einstellungen aktivieren. Die Netzwerksuche ist nicht 
automatisch aktiv, das kann aktive Übertragungen abbrechen, z.B. meine 
Rigol-Instrumente mögen das nicht.
Wenn man im Auswahlfenster ein Instrument öffnet, wird im Log-Fenster 
eine Zeile für das Skript mit 'instrument ...' ausgegeben.

Edit: die Option für 'Nach RawTCP suchen ...' sendet an den Port 5.025 
in einer UDP-Verbindung '*IDN?'. Instrumente die antworten, werden in 
der Auswahlliste angezeigt.

Peter

: Bearbeitet durch User
von Peter D. (fenstergucker)


Lesenswert?

Ich habe mein Programm 'Messinstrumente' aktualisiert. Die Unterstützung 
von Instrumenten die ich nicht mehr selbst besitze, habe ich entfernt. 
Es bleibt nur das R&S RTB2000 Oszilloskop über, und nur für 
Bildschirmkopien die Rigol-Instrumente DSA800, DG4000 und DP800.
Das SCPI-Fenster und Skript-Fenster funktionieren aber für alle 
Instrumente.

Neu ist die Möglichkeit per Waveform-Fenster oder Skript, die Daten der 
Logikkanäle vom RTB2000 einzulesen, und im VCD-Format für Sigrok 
PulseView zu speichern. Man kann auch die Daten per Skript aus der 
History einlesen, zusammenfassen und als eine Datei speichern. Ein 
Beispielskript ist auf der Hilfeseite vorhanden, und auch im ZIP-Archiv 
im 'Script'-Verzeichnis.

https://peter.dreisiebner.at/messinstrumente/

Peter

: Bearbeitet durch User
von Veit D. (devil-elec)


Lesenswert?

Hallo,

schön für die Arbeit aber mit Verlaub, die Entfernung der Meßgeräte 
macht keinen Sinn. Was drin war kann doch drin bleiben. Nicht jeder hat 
Rhode & Schwarz Meßgeräte. Zudem deine Seite ewig Offline war.

: Bearbeitet durch User
von JK (Gast)


Lesenswert?

Leider wieder offline. Würde das Programm dringends brauchen. 
Beziehungsweise eins welches periodisch die Messdaten in eine excel 
schreibt.

Hab das Oszi auch extra mitn LAN verbunden um andere Programme zu 
verwenden. Die können aber auch nur Bildschirmkopien machen.
Damit kann man halt keine Entladungskennlinie aufzeichnen -.-

Danke an den Peter Dreisiebner für die bisherige Arbeit die meiner 
Meinung nach Rigol machen sollte.

von Veit D. (devil-elec)



Lesenswert?

Hallo,

was ich gesichert habe. Mit meinem Rigol DS1054Z funktioniert nur die 
älteste Version.

von Peter D. (fenstergucker)


Lesenswert?

Die Webseite ist umgezogen auf einen neuen Webhoster, und das Programm 
heißt jetzt 'Messinstrumente-Skript'.

https://www.dreisiebner.at

Die Instrumente können nur per Skript-Anweisungen gesteuert werden. Die 
Ansicht der Daten kann auch nur per Skript geöffnet werden. Das Programm 
ist in deutsch, die Hilfe ist integriert, und ist auch als PDF 
vorhanden.

Peter

von Klaus H. (nikolaus10)


Lesenswert?

Hallo Peter D.

Danke fuer die Arbeit.
Ich probiere es mal aus.

von Peter D. (fenstergucker)


Lesenswert?

Man kann jetzt auch die analogen Kanaldaten vom R&S RTB2000 im mehreren 
Formaten speichern.
Mit dem folgenden Skript werden z.B. alle sichtbaren Kanäle, eine 
Bildschirmkopie und die Einstellungen gespeichert.

Peter
1
// R&S RTB2000
2
// Die Daten der sichtbaren Kanäle, die Einstellungen
3
// und eine Bildschirmkopie speichern.
4
5
// Verbindung von der Konstanten-Datei verwenden. IP-Adresse anpassen.
6
#rtb-lan
7
8
// Konstante für den Dateinamen erstellen.
9
// Die Dateierweiterung wird für die Bildschirmkopie und Kanaldaten ersetzt.
10
// Die Platzhalter ergeben Model, Datum und Uhrzeit, z.B.: "RTB2004 20230610_113254.set"
11
#Dateiname set "T:\/O /Y/M/D_/H/N/S.set"
12
13
// Variablen erstellen.
14
data Einstellungen
15
image Bildschirmkopie
16
waveform Kanäle
17
18
// Die Einstelllungen einlesen und speichern.
19
Einstellungen function scpi read :SYSTem:SET?
20
Einstellungen function save #Dateiname
21
22
// Die Bildschirmkopie erstellen und im PNG-Format speichern.
23
Bildschirmkopie function screencopy
24
Bildschirmkopie function save #Dateiname
25
26
// Alle sichtbaren analogen und digitalen Kanäle aus dem Bildschirmspeicher mit 10 Bit einlesen.
27
// Mit 'memory' oder 'allmemory' anstatt 'screen', werden die Daten aus dem Speicher eingelesen.
28
Kanäle function waveform all 16 screen
29
30
// Die Daten im CSV-Format speichern, mit dem oben angebenen Dateinamen.
31
// Es kann das Format csv, txt, bin, flt, vcd verwendet werden, siehe Hilfe.
32
Kanäle function save #Dateiname csv

von Peter D. (fenstergucker)


Angehängte Dateien:

Lesenswert?

Um Skripte einfacher starten zu können, kann man jetzt per Skript ein 
Ansichtsfenster mit Schaltflächen erstellen. Mit dem 
Kommandozeilenparameter '/run "..."' kann man das Fenster beim Start des 
Programms automatisch anzeigen lassen. Beschreibung findet man in der 
Hilfe unter Datentyp 'launcher' und Ansichtsfenster 'Skriptstarter'.

https://www.dreisiebner.at

Peter

von Peter D. (fenstergucker)


Lesenswert?

Die Startseite der Website ist jetzt leer.
Hier ist der Link direkt zur Seite für das Programm:
https://www.dreisiebner.at/messinstrumente-skript/

Peter

von Peter D. (fenstergucker)


Lesenswert?

Es wird jetzt auch das Brymen BM869s Multimeter mit BC-86X-Adapter 
(USB-HID) unterstützt.
Die HID-Funktionen sind noch nicht fertig, aber das Einlesen des 
Hauptwerts funktioniert. Ein Beispielskript ist im Skript-Verzeichnis 
vorhanden.

Peter

von Klaus H. (nikolaus10)


Lesenswert?

Danke fuer die Muehe

Gibt es die Moeglichkeit die preiswerten "SparkFun DataLogger" danit 
abzurufen?
Oder kennt jemand ein Program mit dem man die LoggerDaten visualisieren 
kann ?

von Marcel B. (mabu1)


Lesenswert?

Klaus H. schrieb:
> Danke fuer die Muehe
>
> Gibt es die Moeglichkeit die preiswerten "SparkFun DataLogger" danit
> abzurufen?
> Oder kennt jemand ein Program mit dem man die LoggerDaten visualisieren
> kann ?

Seit wann können die Dinger SCPI? Wenn ich mich recht entsinne kann man 
die konfigurieren, dass die Messungen, die eingestellt werden via 
virtueller serieller Schnittstelle gesendet werden als ASCII.

Ein Kollege hat damals da einfach mit einem Skript gearbeitet und in 
Python das eingelesen, geparst und gespeichert / Plots erzeugt. Da gibts 
doch haufenweise Beispiele für ähnliche Dinge, ausm QRL kann ich dir den 
Code nicht rausgeben.

von Peter D. (fenstergucker)


Lesenswert?

Mein Rigol DP831 Labornetzteil hatte seine Kalibrierung vergessen. Es 
wurde keine Spannung oder Strom an den drei Kanälen ausgegeben. Eine 
manuelle Kalibrierung war dadurch auch nicht möglich. Vor langer Zeit 
hatte ich mir die Standardwerte von den Kalibrierschritten 
abgeschrieben.
Mit einem Skript habe ich die Werte zurückgeschrieben ohne zu Messen, 
und das Netzteil funktionierte wieder. Allerdings waren angezeigte und 
ausgegebene Spannung bzw. Strom ungenau.

Mit einem zweiten Skript und einem Brymen BM869s mit USB-Adapter habe 
ich jetzt eine Kalibrierung durchgeführt. Die angezeigten und 
ausgegebenen Werte stimmen jetzt sehr gut mit dem Multimeter überein, 
viel besser als beim Kauf.

Die Skripte sind sehr lang, da es keine Befehle für Arrays oder 
Schleifen gibt, sondern nur Vergleiche und Goto. Am Ende des Skripts 
sind die eigentlichen 'Funktionen' für die Kalibrierung.

Eine neue Version des Programms mit den Skripten ist online.
https://www.dreisiebner.at/messinstrumente-skript/

Skripte:
Rigol DP831 - Kalibrieren mit Brymen BM869s.txt
Rigol DP831 - Kalibrierung mit Standardwerten.txt

Peter

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.