Forum: Mikrocontroller und Digitale Elektronik SCIP VISA / Verbindung über USB mit Funktionsgenerator


von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

Ich möchte den Funktionsgenerator Keysight 33622A über den PC 
konfigurieren.
Dazu stellt der Hersteller Code Beispiele für C# zur Verfügung.
Siehe:
https://www.keysight.com/main/editorial.jspx?cc=DE&lc=ger&ckey=887951&nid=-35258.536894470&id=887951

VISA: Waveform Download using C#
This sample program downloads to and executes an arbitrary waveform from 
the Keysight 33220A.

Ich habe das Programm für mein Gerät angepasst. Verbindung mit dem Gerät 
wird aufgebaut, aber es wird eine Fehlermeldung (siehe Anhang) 
ausgegeben, wenn die SCPI Commands gelesen werden. Hat jemand eine 
spontane Idee?

von Jim M. (turboj)


Lesenswert?

Was steht denn in Globls.vi so drin?

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


Lesenswert?

Warum macht du einen neuen Thread auf?
Beitrag "Keysight 33622A Waveform Generator c#"

So allgemein würde es dir helfen dich mit den Grundlagen vertraut zu 
machen statt von irgendwo Code zusammen zu kopieren und schon Probleme 
zu haben die IDE richtig zu konfigurieren.

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

anbei die Globls.

von Thomas Z. (usbman)


Lesenswert?

schau halt nach was der Status Code bedeutet und korigiere das (0xBFFF 
0015)

von noßßa (Gast)


Lesenswert?

Thomas Z. schrieb:
> schau halt nach was der Status Code bedeutet und korigiere das (0xBFFF
> 0015)

meinst du damit die -107...

von Thomas Z. (usbman)


Lesenswert?

Genau das mein ich... Es geht ja schon das senden schief. Wie sieht dein 
SendString überhaupt aus? Ist das ein gültiges Kommando?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Ganz wichtig:
1. Keine Fehlercodes usw. durch die Applikation ausgeben lassen,
   sondern nur Schwurbeltext.

2. Fehlercodes niemals in einem Format darstellen, welches zur
   Fehlersuche im aktuellen Kontext geeignet wäre.

von oooops (Gast)


Lesenswert?

Andreas S. schrieb:
> Ganz wichtig:

Möglichst noch die Hauskatze mit auf das Foto der Fehler-
Bildschirmausgabe bringen.

Fehlermeldungen sind urheberrechtlich geschützt, daher ist
Copy & Paste von Texten verboten!

von Soul E. (Gast)


Lesenswert?

oooops schrieb:

> Möglichst noch die Hauskatze mit auf das Foto der Fehler-
> Bildschirmausgabe bringen.

Die Katze kann beim Debuggen helfen. Ernsthaft. Du erklärst ihr Deinen 
Code, Zeile für Zeile. Und da wo sie besonders nachdenklich guckt, da 
denkst Du auch nochmal nach. So findet man viele Fehler selber, weil man 
nochmal von aussen auf das Ganze schaut.

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe das Programm nochmal durchgearbeitet.

Thomas Z. schrieb:
> schau halt nach was der Status Code bedeutet und korigiere das (0xBFFF
> 0015)

Timeout Expired Before Operation Completed

Meine Vorgehensweise: herausfinden, wann, also nach welchem Schritt die 
Routine GetData, die für die Fehlermeldung verantwortlich ist und zig 
mal im Programm aufgerufen wird, Bauchschmerzen hat.

Wenn ich mittels Einzelschritte das Programm laufen lasse, bekomme ich 
die Fehlermeldung -107... garnicht, sondern (Fehler 1-3). Das ist für 
mich der Hinweis, dass es noch weitere Probleme gibt -> ich nehme an, 
dass ich das Gerät mit falschen Werten füttere.

Zurück zum Thema -107...
Habe letztlich alle SCIP_Cmd nacheinander mit Haltepunkte versehen, um 
herauszufinden, ab wann der Überlauf nicht mehr auftritt. Er tritt nicht 
auf, wenn ich den Haltepunkt auf "Wait for reset to complete" lege 
(siehe Anhang wait). Error von remote interface tritt ebenfalls nicht 
mehr auf.

Kurz: Entweder Zeile 343 oder 344 einen Haltepunkt, und der Überlauf 
passiert nicht. Woran liegt das?

von noßßa (Gast)


Lesenswert?

niemand?

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

ich habe die ersten drei Commands über die vom Hersteller zur Verfügung 
gestellte Bedienoberfläche ans gerät geschickt. auch hier gibt es DIE 
Fehlermeldung (siehe Anhang). Jetzt bin ich ratlos. Es liegt also nicht 
am Programm. Sehe ich den Wald lauter Bäumen nicht?

von Peter D. (fenstergucker)


Lesenswert?

Klickst du bei "*RST" und "*CLS" auf "Send & Read"? Diese Kommandos 
senden nichts zurück und der Timeout-Fehler wäre normal. Bei "*OPC?" 
funktioniert es ohne Timeout-Fehler, da bekommst du auch eine Antwort.

von noßßa (Gast)


Lesenswert?

Peter D. schrieb:
> Klickst du bei "*RST" und "*CLS" auf "Send & Read"? Diese Kommandos
> senden nichts zurück und der Timeout-Fehler wäre normal. Bei "*OPC?"
> funktioniert es ohne Timeout-Fehler, da bekommst du auch eine Antwort.

hab ich mir schon gedacht. Warum aber dann dieses Verhalten im Code? 
Dort sende ich und lese bewusst nicht...

von noßßa (Gast)


Lesenswert?

noßßa schrieb:
> Dort sende ich und lese bewusst nicht

getData wird aufgerufen, wenn OPC? geschickt wird.

Die Fehlermeldungen stimmen überein. Was sagt mir das jetzt?

von Peter D. (fenstergucker)


Lesenswert?

Probiere eine Pause nach jedem Senden im Code einzufügen, vielleicht so 
100 ms oder mehr.

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Je nachdem, wie "RST*" auf dem Gerät implementiert ist, gibt es 
anschließend ein kleines Päuschen, in dem der eigentliche Reset 
ausgeführt wird. Dabei können durchaus Zeichen abhandenkommen, z.B. das 
nachfolgende Kommando oder Teile davon. Dann gibt es eben ein Timeout.

Daher ist dringend empfohlen, nach "RST*" eine Pause von ein paar 100 ms 
einzulegen.

von Dirk K. (merciless)


Lesenswert?

Was sollen die Fehlermeldungen mit der NullReferenceException?
Der Wert von VisaExample.ActiveForm ist null, es wird aber
eine Referenz auf eine Form erwartet, auf der dann Refresh()
aufgerufen werden soll.

merciless

von noßßa (Gast)


Lesenswert?

Dirk K. schrieb:
> Was sollen die Fehlermeldungen mit der NullReferenceException?
> Der Wert von VisaExample.ActiveForm ist null, es wird aber
> eine Referenz auf eine Form erwartet, auf der dann Refresh()
> aufgerufen werden soll.
>
> merciless

das ist ja nochmal ein andere Thema...

von noßßa (Gast)


Lesenswert?

Andreas S. schrieb:
> Je nachdem, wie "RST*" auf dem Gerät implementiert ist, gibt es
> anschließend ein kleines Päuschen, in dem der eigentliche Reset
> ausgeführt wird.

okay. Das ist ein Beispielcode für den 33220A, veröffentlicht von 
Keysight. Du meinst, dass die Befehle in ihrer Auswirkung je nach Gerät 
variieren können und ich somit für meinen konkreten Anwendungsfall eine 
Verzögerung einbauen soll? Hätte eigentlich erwartet, wenn Keysight den 
Code als Vorlage zur Verfügung stellt, ist er allgemein anwendwabr.

von Thomas Z. (usbman)


Lesenswert?

Im anderen Thread hast du geschrieben, dass die Programmierung nicht das 
Problem sei....
Ich sage jetzt mal dass genau das dein Problem ist.

Programmieren besteht nicht daraus einfach Routinen ohne nachzudenken 
aufzurufen. Da ist etwas mehr Knowhow notwendig.
Ansonsten bleibt ja noch die Möglichkeit das Ding mit dem Konfigurator 
zu bedienen.

von noßßa (Gast)


Lesenswert?

Andreas S. schrieb:
> Je nachdem, wie "RST*" auf dem Gerät implementiert ist, gibt es
> anschließend ein kleines Päuschen, in dem der eigentliche Reset
> ausgeführt wird. Dabei können durchaus Zeichen abhandenkommen, z.B. das
> nachfolgende Kommando oder Teile davon. Dann gibt es eben ein Timeout.
>
> Daher ist dringend empfohlen, nach "RST*" eine Pause von ein paar 100 ms
> einzulegen.

ich will nicht sagen, dass du unrecht hast. Aber wenn ich deinen Ansatz 
weiter verfolge, ergeben sich mir viele Fragen:

Warum hat der Hersteller nicht auf die Problematik hingewiesen? Wie viel 
Zeit ist nötig (100 MS? soll ich lieber 100 Sekunden sagen? od3er ein 
Jahr?)Wie kann ich sichergehen, dass andere Commands genug Zeit haben 
respektive abgearbeitet werden? Wenn tatsächlich die Zeit der 
entscheidende Faktor ist: warum wird nicht eine Rückmeldung vom Gerät 
erwartet, bevor der nächste Command gesendet werden darf (und nicht ein 
einfacher Send Befehl)?

von noßßa (Gast)


Lesenswert?

noßßa schrieb:
> Wenn tatsächlich die Zeit der
> entscheidende Faktor ist: warum wird nicht eine Rückmeldung vom Gerät
> erwartet, bevor der nächste Command gesendet werden darf (und nicht ein
> einfacher Send Befehl)?

ich schreibe ein bisschen durcheinander, bin müde. Ihr versteht schon. 
Übrigens Vielen Dank an die, die helfen!

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

noßßa schrieb:
> Andreas S. schrieb:
>> Je nachdem, wie "RST*" auf dem Gerät implementiert ist, gibt es
>> anschließend ein kleines Päuschen, in dem der eigentliche Reset
>> ausgeführt wird.
>
> okay. Das ist ein Beispielcode für den 33220A, veröffentlicht von
> Keysight. Du meinst, dass die Befehle in ihrer Auswirkung je nach Gerät
> variieren können und ich somit für meinen konkreten Anwendungsfall eine
> Verzögerung einbauen soll?

Ja.

> Hätte eigentlich erwartet, wenn Keysight den
> Code als Vorlage zur Verfügung stellt, ist er allgemein anwendwabr.

Willkommen in der Realität.

von Peter D. (fenstergucker)


Lesenswert?

Im Datenblatt steht wie lange das Gerät braucht um Kommandos 
auszuführen. Siehe "Programming times", z.B. Change function (meas) - 30 
ms für USB, usw.

Das der Reset-Befehl länger dauern kann, könnte man sich denken, da 
passiert ja einiges. Vielleicht muss auf Relais gewartet werden usw.

Die Kommunikation mit dem Gerät passiert mit dem USB-TMC-Protokoll. 
Darüber sitzt dann die VISA-Bibliothek und vereinfacht die 
Kommunikation, dass muss man mitbedenken. Wenn du nicht weißt wann und 
wie Fehler zurückgegeben werden, oder ob und wie ein Timeout eingestellt 
wird, ist es halt einfacher vorerst jedes Kommando einzeln zu senden, 
kurze Pausen einzulegen und versuchen alle Rückgaben im Programmcode auf 
Fehler zu prüfen.

Und die SCPI-Kommandos solltest du vollständig angeben, manchmal 
übersieht man sonst Fehler. Also statt "SOUR:FREQ 5000" dann 
":SOUR1:FREQ 5000". Also mit "Root" (erster Doppelpunkt) beginnen, und 
z.B. Kanäle angeben.

Probiere es einmal nur mit einen Command Line-Projekt, und frage die IDN 
ab "*IDN?". Wenn das funktioniert sollte alles weitere einfach sein.

: Bearbeitet durch User
von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

noßßa schrieb:
>> Daher ist dringend empfohlen, nach "RST*" eine Pause von ein paar 100 ms
>> einzulegen.
>
> ich will nicht sagen, dass du unrecht hast.

Ich habe bereits mehrere kommerziell erhältlichen Geräte mit SCPI 
ausgestattet.

> Aber wenn ich deinen Ansatz
> weiter verfolge, ergeben sich mir viele Fragen:

Zunächst einmal die Gegenfragen:
1. Hast Du überhaupt schon einmal das normative Dokument zu
   SCPI a) recherchiert, b) gelesen, c) verstanden?

2. Hast Du überhaupt schon einmal die normativen Dokumente zu
   IEEE 488.2 bzw. IEC 60488-2 a) recherchiert, b) gelesen, c) 
verstanden?

3. Hast Du überhaupt das exakt zu Deinem Gerät passende
   SCPI-Referenzhandbuch a) recherchiert, b) gelesen, c) verstanden?

4. Hast Du überhaupt die Dokumentation zur USB-Geräteklasse USBTMC
   a) recherchiert, b) gelesen, c) verstanden?

5. Hast Du überhaupt die Dokumentation zu NI VISA und ggf. die Umsetzung
   in Form der entsprechenden HP/Agilent/Keysight-Treiber
   a) recherchiert, b) gelesen, c) verstanden?

Ich vermute ja sehr stark, dass Du nichts davon getan hast.

Aus 10.32.1 folgt zwar eigentlich ziemlich klar, dass "*RST" keinen 
kompletten Gerätereset durchführen und auch nicht den Zustand einer IEEE 
488.1-Schnittstelle ändern soll ("shall not"). Allerdings bedeutet 
dies nicht, dass der Zustand nicht geändert werden darf ("must not"). 
Außerdem ist die Formulierung "The state of the IEEE 488.1 interface" 
wörtlich zu nehmen. Du verwendest jedoch USB, vermutlich über die 
USBTMC-Klasse.

In der Dokumentation zum Keysight 33622A finden sich leider auch keine 
entsprechenden Hinweise. Ganz im Gegenteil werden dort sogar durch 
Kommata getrennte, mehrfache Kommandos mit "*RST" aufgeführt. Offenbar 
kommt es hier zu Abweichungen zwischen der Dokumentation und der 
konkreten Implementierung der Gerätefirmware.

> Warum hat der Hersteller nicht auf die Problematik hingewiesen?

Entweder ist das beim Schreiben der Dokumentation durchgerutscht, ein 
Implementierungsfehler oder Tradition.

> Wie viel Zeit ist nötig (100 MS? soll ich lieber 100 Sekunden sagen?
> od3er ein Jahr?)

Das musst Du ggf. experimentell bestimmen.

Bei USB gegenüber IEEE-488.1 kommt hinzu, dass möglicherweise (und damit 
fälschlicherweise!) eine erneute Enumeration auf dem USB ausgelöst wird. 
Deren zeitlicher Ablauf wird überwiegend durch den USB Host bestimmt und 
weniger durch das Gerät. Eigentlich müssten dann auf Applikationsebene 
die Geräte-Handles ungültig werden, aber womöglich hat da jemand einen 
Workaround im Gerätetreiber eingebaut.

Ggf. kannst Du ja nach dem "*RST" und einer kleinen Wartezeit auch 
selbst das Gerät pollen und die ggf. auftretenden Fehler korrekt 
behandeln.

> Wie kann ich sichergehen, dass andere Commands genug Zeit haben
> respektive abgearbeitet werden?

Grundsätzlich gibt es bei SCPI auch die sog. "queued execution" mehrere 
Kommandos. Inwiefern diese bei Deinem Messgerät implementiert ist, musst 
Du selbst schauen. Willst Du jegliche Überlappung vermeiden, musst Du 
nach jedem Kommando ggf. mit "OPC" bzw. "*OPC?" die sequentielle 
Ausführung sicherstellen. Hierbei gilt es unbedingt die Bemerkungen 
unter 4.1.3.3 zu beachten, insbesondere dass nach einigen Kommandos 
(z.B. "*RST") OCIS ohne Setzen von NOP und Setzen von OPC im SESR 
eingenommen wird!

> Wenn tatsächlich die Zeit der
> entscheidende Faktor ist: warum wird nicht eine Rückmeldung vom Gerät
> erwartet, bevor der nächste Command gesendet werden darf (und nicht ein
> einfacher Send Befehl)?

Zum einen ist das Verhalten in den obigen Dokumenten genau spezifiziert, 
was in den meisten Fällen (IEEE 488.1, USBTMC, LXI, VXI) auch eine 
zuverlässige Flusskontrolle beinhaltet. Bei EIA-232 hängt es von den 
korrekt eingestellten Schnittstellenparametern ab; auch USB-Geräte, die 
nur einen internen USB-UART-Wandler statt einer USBTMC-Implementierung 
enthalten, kann es zu Problemen kommen.

Es empfiehlt sich bei allen EIA-232- bzw. UART-basierten 
Geräteanbindungen, zu Beginn der Kommunikation oder nach einem (wie auch 
immer gearteten) Geräte-Reset den hostseitigen Empfangspuffer zu leeren. 
Ggf. kann sonst entweder mal ein einzelnes Zeichen oder bei manchen 
Geräten auch eine Meldung des Bootloaders, z.B. "*RESET*", oder Teile 
davon auftauchen. Wie lange man den Empfangspuffer beobachten und leeren 
sollte, hängt von der maximalen Dauer des Bootvorganges ab. Meistens 
reicht hier aber etwas in der Größenordnung von einer Sekunde.

"Mittendrin", d.h. ohne ein Reset-Kommando, muss man aber keine 
Störungen befürchten.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Probiere es einmal nur mit einen Command Line-Projekt, und frage die IDN
> ab "*IDN?". Wenn das funktioniert sollte alles weitere einfach sein.

Ich habe schon einmal ein älteres Netzgerät (EA-PS 9036-350) erlebt, 
welches einen fiesen Firmware-Fehler enthielt. Sobald man mehrmals 
hintereinander "*IDN?" abfragte, ohne zwischendurch ein anderes Kommando 
zu senden, stürzte der IEEE-488-Controller ab. Da ich beim Herantasten 
an ein neues SCPI-basiertes Gerät eigentlich immer eine Folge von 
mehreren "*IDN?" schicke, war ich um so erstaunter. Es kostete mich 
etliche Stunden Fehlersuche, bis  klar war, dass wirklich die 
Gerätefirmware fehlerhaft war und nicht mein Testprogramm.

Der Grund, warum ich diesen IDN-Test überhaupt durchführe, besteht 
darin, dass ich ja selbst auch Geräte mit SCPI entwickele. Und das 
allererste Kommando mit Rückgabewert, das ich in solch einem Fall teste, 
ist eben "*IDN?". Damit lassen sich auch sehr schön die entsprechenden 
Low-Level-Schichten testen, z.B. Übertragungsfehler.

von noßßa (Gast)


Lesenswert?

vielen Dank für die Infos, hat mich sehr gefreut.

zu den Normen: die gucke ich mir mal an. Die Frage ist auch, ob es als 
Anwender überhaupt notwendig ist, sich im Detail mit diesen Sachen 
auseinanderzusetzen? Denn eigentlich ist das ganze nur Mittel zum 
Zweck...

Andreas S. schrieb:
> Hierbei gilt es unbedingt die Bemerkungen
> unter 4.1.3.3 zu beachten, insbesondere dass nach einigen Kommandos
> (z.B. "*RST") OCIS ohne Setzen von NOP und Setzen von OPC im SESR
> eingenommen wird!

kannst du mir das nochmal nerklären? habe ich nicht ganz verstanden

von noßßa (Gast)


Lesenswert?

https://stackoverflow.com/questions/5449956/how-to-add-a-delay-for-a-2-or-3-seconds

welche Möglichkeit für ein Delay würdet ihr wählen?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

noßßa schrieb:
> zu den Normen: die gucke ich mir mal an. Die Frage ist auch, ob es als
> Anwender überhaupt notwendig ist, sich im Detail mit diesen Sachen
> auseinanderzusetzen? Denn eigentlich ist das ganze nur Mittel zum
> Zweck...

Du hast (mindestens) ein konkretes Problem, welches auf die 
Kommunikation mit dem Gerät zurückzuführen ist. Folglich sind die 
betreffenden Dokumente essentiell für die Beurteilung.

> kannst du mir das nochmal nerklären? habe ich nicht ganz verstanden

Das ist in den entsprechenden Dokumenten.

von Peter D. (fenstergucker)


Lesenswert?

Ich habe das USB-TMC- und SCPI-Protokoll selbst für einen Microchip 
PIC18F2550 programmiert. Und mit libusb-1.0 und PureBasic für den PC. 
Zusätzlich noch das VXI-11-Protokoll für die LAN-Verbindung.

Für USB-TMC ist hier meine Literaturliste, findest du alles im Internet. 
Die ersten zwei Bücher sind nicht notwendig:
1
;- -- Literaturliste zu den Referenzen in den Kommentaren im Quelltext:
2
; Bruhns - 'USB in der Messtechnik' von Henry Bruhns, 2008 Franzis Verlag GmbH, ISBN 978-3-7723-5509-7
3
; UsbComplete - USB Complete - Fourth Edition 2009 - Jan Axelson
4
; Usb20 - Universal Serial Bus Specification Revision 2.0, 2000
5
; UsbTmc - Universal Serial Bus Test And Measurement Class Specification (USBTMC) Revision 1.0, 2003
6
; Usb488 - Universal Serial Bus Test And Measurement Class, Subclass USB488 Specification (USBTMC-USB488) Revision 1.0, 2003
7
; IEEE4881 - IEEE Standard Digital Interface For Programmable Instrumentation, 1988
8
; IEEE4882 - IEEE Standard Codes, Formats, Protocols And Common Commands, 1988
9
; IEEE4882-92 - IEEE Standard Codes, Formats, Protocols And Common Commands for Use With IEEE Std 488.1-1987, 1992
10
; SCPI - Standard Commands For Programmable Instruments (SCPI), Version 1999.0
Bevor du die IDN nicht mit einem Beispielcode abfragen kannst, wird dir 
die Literatur vorerst nicht weiterhelfen. Bei C# und VISA kann ich dir 
leider nicht helfen, das verwende ich nicht.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Das von Peter D. genannte Buch von Henry Bruhns ist sehr leicht 
verständlich und inhaltlich sehr präzise. Herr Bruhns war vor seiner 
derzeitigen Tätigkeit an der HAW Hamburg bei Rohde&Schwarz maßgeblich an 
der Entwicklung von SCPI und den entsprechenden geräteseitigen 
Implementierungen beteiligt.

Es ist aber nicht zwingend erforderlich, das Buch als toten Baum zu 
kaufen. Bei mehreren Buchhändlern (z.B. Amazon) kann man auch viele 
Auszüge aus dem Buch finden.

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

ich danke euch nochmal! Also das Programm läuft jetzt, habe an der 
Problemstelle jeweils eine Sekunde delay eingefügt. Ob die anderen 
Commands abgearbeitet werden, kann ich zum jetzigen Standpunkt nicht 
beurteilen.

Zum Thema Literatur und Normen: ich gucke mir das an. Aber ich sehe mich 
momentan noch nicht zu einem intensivem Studium gezwungen

von noßßa (Gast)


Lesenswert?

nochmal zur Verzögerung: warum ist sie notwendig, wenn ich OPC? verwende 
(OPC? - Operation complete query
Returns an ASCII "+1" when all pending overlapped operations have been 
completed. )

von noßßa (Gast)


Lesenswert?

Damit ist die Thematik, dass die Befehle sich überlappen und Zeit zum 
Abarbeiten bracuhen, vom Tisch...

von noßßa (Gast)


Lesenswert?

außerdem die Frage: ich habe alle Einstellungen zurückgesetzt.
Wenn ich das Programm laufen lasse, sind alle Einstellungen übernommen. 
Ich bekomme aber die Fehlermeldungen 786. Blick ins Handbuch ergibt:

786 Not able to delete a built-in arb waveform

786 Specified arb waveform already exists
´Kann damit nichts anfangen. Was will man mir sagen?

von noßßa (Gast)


Lesenswert?

noßßa schrieb:
> außerdem die Frage: ich habe alle Einstellungen zurückgesetzt.
> Wenn ich das Programm laufen lasse, sind alle Einstellungen übernommen.
> Ich bekomme aber die Fehlermeldungen 786. Blick ins Handbuch ergibt:
>
> 786 Not able to delete a built-in arb waveform
>
> 786 Specified arb waveform already exists
> ´Kann damit nichts anfangen. Was will man mir sagen?

kann das der Hinweis sein, dass wieder einige Commands verschluckt 
wurden?...

von Soul E. (Gast)


Lesenswert?

noßßa schrieb:

> nochmal zur Verzögerung: warum ist sie notwendig, wenn ich OPC? verwende

Weil *RST oft einen echten Reset des Gerätes ausführt. Und in der Zeit 
ist die Kiste nicht ansprechbar. Da wird dann auch Dein *OPC? nicht 
angenommen.

Wie lange der Reset dauert hängt vom Gerät ab. Das MSOX3054T vor meine 
Nase braucht über eine Minute dafür, das hatte anscheinend einen 
Spielautomaten in der Familie. Das Vorgängergerät MSO6054A war nach 10 
Sekunden am Bus erreichbar.

Wenn Deine Kiste sowas wie "Preset" hat, dann nimm das zum Normieren. 
*IFC senden, Preset-Kommando schicken, und dann für die Messung passend 
einrichten.

von noßßa (Gast)


Lesenswert?

Soul E. schrieb:
> Weil *RST oft einen echten Reset des Gerätes ausführt. Und in der Zeit
> ist die Kiste nicht ansprechbar. Da wird dann auch Dein *OPC? nicht
> angenommen.

so wie ich das verstanden habe, nutzt man OPC? gerade dann, wenn die 
Kiste nicht ansprechbar ist. Und das Gerät meldet sich, bis alles 
abgearbeitet wurde. Deswegen auch "wait for reset to complete". OPC? 
wird ja nicht einfach verschluckt. Sonst würde ja CLS auch nicht 
ankommen, da Reset noch arbeitet. Ich weiß nicht, ob OPC? innerhalb 
einer bestimmen Zeitspanne beantwortet werden muss. Sonst ist diese 
wahrscheinlich einfach zu lang.


Hat noch jemand etwas zu 786? was ich damit anfangen kann?

von noßßa (Gast)


Lesenswert?

Peter D. schrieb:
> Für USB-TMC ist hier meine Literaturliste, findest du alles im Internet.

ist zum´Teil schon mehr als zwei Jahrzehnte alt

Andreas S. schrieb:
> Grundsätzlich gibt es bei SCPI auch die sog. "queued execution" mehrere
> Kommandos. Inwiefern diese bei Deinem Messgerät implementiert ist, musst
> Du selbst schauen. Willst Du jegliche Überlappung vermeiden, musst Du
> nach jedem Kommando ggf. mit "OPC" bzw. "*OPC?" die sequentielle
> Ausführung sicherstellen. Hierbei gilt es unbedingt die Bemerkungen
> unter 4.1.3.3 zu beachten, insbesondere dass nach einigen Kommandos
> (z.B. "*RST") OCIS ohne Setzen von NOP und Setzen von OPC im SESR
> eingenommen wird!

das wäre für mich nochmal wi9chtig zu verstehe. Wie gesagt, ich gehe 
davon aus, dass mit OPC? auf die Abarbeitung von Reset etc gewartet wird

von Dirk B. (dirkb2)


Lesenswert?

noßßa schrieb:
> Sonst würde ja CLS auch nicht
> ankommen, da Reset noch arbeitet.

Woher weißt du, dass es abgearbeitet und nicht einfach unterschlagen 
wird?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

noßßa schrieb:
> das wäre für mich nochmal wi9chtig zu verstehe. Wie gesagt, ich gehe
> davon aus, dass mit OPC? auf die Abarbeitung von Reset etc gewartet wird

Nein, wie sich ja schon bei vielen Geräten zeigt, ist "*RST" oftmals 
nicht streng IEEE-488-konform implementiert, d.h. es erfolgt auch eine 
Beeinflussung der Kommunikationsschnittstelle, z.B. Neuinitialisierung 
und Löschen des Empfangspuffers.

Bei anschließenden Pollen, um das Ende des Geräteresets mitzubekommen, 
müssen daher ggf. folgende Zustände berücksichtigt werden:

1. "OPC?" wird komplett verschluckt; Timeout beim Empfang der Antwort
2. "OPC?" wird teilweise verschluckt, d.h. als Kommando wird z.B. "PC?", 
"?" oder gar nur das Zeilen für das Zeilenende empfangen; folglich 
antwortet das Gerät dann mit einem Fehler, der auf ein unbekanntes 
Kommando hindeutet. Auch hier verhalten sich verschiedene 
SCPI-Implementierungen deutlich unterschiedlich.
3. Nach dem Reset befinden sich noch einzelne Zeichen im hostseitigen
Empfangspuffer. Diese werden als fehlerhafte Antwort interpretiert.
4. Alles geht gut; "OPC?" liefert ohne Timeout eine "1".

Bei anderen Kommandos, die kein resetähnliches Verhalten bewirken, 
besteht hingegen nicht die Gefahr, dass das Kommando falsch 
interpretiert oder die Antwort ausbleibt oder fehlerhaft ist. 
Vorausgesetzt natürlich, dass kein Fehler in der Firmware oder dem 
Stapel am hostseitigen Bibliotheksfunktionen vorliegt.

: Bearbeitet durch User
von noßßa (Gast)


Lesenswert?

vielen Dank für deine Ausführungen.

Andreas S. schrieb:
> Bei anderen Kommandos, die kein resetähnliches Verhalten bewirken,
> besteht hingegen nicht die Gefahr, dass das Kommando falsch
> interpretiert oder die Antwort ausbleibt oder fehlerhaft ist.

also ist es unwahrscheinlich, dass die Fehlermeldung 786 daher rührt. 
Hast du vllt eine Idee?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Habe ich Lust, mir ein Programm anzusehen, das Du nur in so kleinen 
Schnipseln veröffentlichst, dass man daran kaum etwas erkennen kann? 
Nein.

von ed (Gast)


Lesenswert?

Andreas S. schrieb:
> Habe ich Lust, mir ein Programm anzusehen, das Du nur in so kleinen
> Schnipseln veröffentlichst, dass man daran kaum etwas erkennen kann?
> Nein.

hast du überhaupt Lust, wenn ich dir das Programm zur Verfügung stelle, 
es dir anzugucken?

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Im Datenblatt steht wie lange das Gerät braucht um Kommandos
> auszuführen. Siehe "Programming times", z.B. Change function (meas) - 30
> ms für USB, usw.
>
> Das der Reset-Befehl länger dauern kann, könnte man sich denken, da
> passiert ja einiges. Vielleicht muss auf Relais gewartet werden usw.

kann ich in irgendeiner Form ableiten, wie lange ein reset dauern kann?

von noßßa (Gast)


Lesenswert?

im Datenblatt steht auch: Keysight 33210A, 33220A and 33250A Series 
compatible

da das Codebeispiel für 33220A ist, hätte das ja auf anhieb klappen 
sollen

von Soul E. (Gast)


Lesenswert?

noßßa schrieb:

> kann ich in irgendeiner Form ableiten, wie lange ein reset dauern kann?

Gerät einschalten, Stopuhr drücken und warten bis es betriebsbereit 
erscheint.

von noßßa (Gast)


Lesenswert?

Peter D. schrieb:
> Die Kommunikation mit dem Gerät passiert mit dem USB-TMC-Protokoll.
> Darüber sitzt dann die VISA-Bibliothek und vereinfacht die
> Kommunikation, dass muss man mitbedenken.

hast du da eine gute Graphik, die die ganzen Zusammenhänge 
veranschaulicht?

von noßßa (Gast)


Angehängte Dateien:

Lesenswert?

oder meinst du soetwas?

von Peter D. (fenstergucker)


Lesenswert?

noßßa schrieb:
> oder meinst du soetwas?

Ja, eigentlich könnte man sogar noch ein paar Schichten einfügen, aber 
im Prinzip meinte ich das.

Ich glaube die VISA-Software ist gut, wenn mehrere Instrumente hat, und 
die über eine Hersteller-Software gemeinsam steuern kann. Allerdings 
liest man von vielen Problemen im Internet, kommt mir zumindest so vor.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Peter D. schrieb:
> Ich glaube die VISA-Software ist gut, wenn mehrere Instrumente hat, und
> die über eine Hersteller-Software gemeinsam steuern kann. Allerdings
> liest man von vielen Problemen im Internet, kommt mir zumindest so vor.

Genau so ist es. Das, wovon man ziemlichen Abstand nehmen sollte, ist 
die auf VISA aufsetzende Schicht IVI. Damit beraubt man sich ziemlich 
der Möglichkeit, selbst noch SCPI-Kommandos zu verschicken, und muss 
sich stattdessen mit teils sehr, sehr fehlerhaft implementierten 
Bibliotheken und scheußlichen APIs herumplagen.

VISA finde ich auch bei nur wenigen (z.B. n=1) gleichzeitig genutzten 
Messgeräten ganz praktisch, die man wahlweise über unterschiedliche 
Schnittstellen ansprechen kann. Das Wechseln der Schnittstelle ist dann 
recht einfach. Allerdings sollte man ggf. auch die Lizenzkosten 
berücksichtigen:

https://www.ni.com/de-de/shop/software/products/ni-visa.html

von noßßa (Gast)


Lesenswert?

gibt es unterschiede zw VISA und NI-VISA

von noßßa (Gast)


Lesenswert?

http://zone.ni.com/reference/en-XX/help/370131S-01/ni-visa/comparisonni-visaandni-488apis/

hab dazu folgendes gefunden... kann damit nicht viel anfangen

von noßßa (Gast)


Lesenswert?

dann gibt es noch VISA COM

von Dirk B. (dirkb2)


Lesenswert?

noßßa schrieb:
> gibt es unterschiede zw VISA und NI-VISA

VISA ist der Standard, NI-VISA die Implementation von NI

Es gibt noch andere Hersteller, die VISA verbauen.

von noßßa (Gast)


Lesenswert?

Peter D. schrieb:
> Usb488 - Universal Serial Bus Test And Measurement Class, Subclass
> USB488 Specification (USBTMC-USB488) Revision 1.0, 2003
> ; IEEE4881 - IEEE Standard Digital Interface For Programmable
> Instrumentation, 1988
> ; IEEE4882 - IEEE Standard Codes, Formats, Protocols And Common
> Commands, 1988
> ; IEEE4882-92 - IEEE Standard Codes, Formats, Protocols And Common
> Commands for Use With IEEE

wo bekomme ich die Normen umsonst?

von noßßa (Gast)


Lesenswert?

habe sie jetzt. aber wonach soll ich filtern?

von noßßa (Gast)


Lesenswert?

wo ist überhaupt der Unterschied zw IEEE 488.2 und SCPI?

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

noßßa schrieb:
> wo ist überhaupt der Unterschied zw IEEE 488.2 und SCPI?

Das findet man alles in der entsprechenden Primärliteratur.

von Dirk B. (dirkb2)


Lesenswert?

noßßa schrieb:
> wo ist überhaupt der Unterschied zw IEEE 488.2 und SCPI?

reicht das erstmal 
https://de.wikipedia.org/wiki/Standard_Commands_for_Programmable_Instruments?wprov=sfti1 
?

von n0ßßa (Gast)


Lesenswert?

ja hab jetzt alles. Bis auf Literatur für VISA.

Macht es Sinn, wenn man sich einen Überblick über das Thema verschaffen 
möchte, das Ganze in Hardware (IEEE 488.1) und Software (IEEE $88.2, 
VISA; SCPI) zu unterteilen. Oder wie würdet ihr vorgehen?

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.