INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

VISA Read - Byte Count Wert



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

11.05.2009, 21:27
Beitrag #1

LabVIEWDompteur Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: May 2009

2010 SP1
-
DE

81377
Deutschland
VISA Read - Byte Count Wert
Hallo LabVIEWforumianer! Ich versuche zur Zeit einen Spektrumanalyser via GPIB bzw. mittels VISA auszulesen. Nun ist es aber so, dass jeder VISA-Read gerne einen Byte Count Wert hätte. Die Frage ist "simpel" wie komme ich an diesen? Folgendes habe ich schon probiert:
   

Im ersten Versuch habe ich die Property Node: Bytes at Port versucht zu verwenden, leider löst diese einen Fehler aus, bzw. für das GPIB Interface ist diese Node nicht definiert/nicht unterstützt.
Im zweiten Versuch habe ich einfach einen Wert gesetzt, dieser muss natürlich lang genug sein, sonst werden die Strings nicht vollständig ausgelesen. Dies ist bei einfachen Befehlen noch nicht problematisch, allerdings geht es letztlich um das Auslesen eines Kurvenverlaufs mit variierender Punktezahl (diese kann ich einfach auslesen bzw. errechnen (die Punktezahl). Wie kann ich nun vorgehen um die genaue Anzahl der Bytes herauszufinden, oder bekomme ich ein "Ende"-Zeichen, so dass ich nach x-Iterationen des Read in einer Schleife, den Read abbrechen kann?

Noch eine weitere Frage:
Ich werde öfter im Program VISA-Read und -Write benutzen müssen in verschiedenen Programmbereichen:
a) Öffne ich in jedem Programmbereich via VISA-Open und Close neu?
b) Schleppe ich die Wires für Resource und Error durch das ganze Programm?
Irgendwie hört sich beides nicht so top anSmile, wie macht mans richtig?
Nochmal anders gefragt: Sollte ich einen Read und Write in ein SubVI kapseln, muss der Nutzer ja VISA-Open und Close wieder herumbastelen, d.h. das SubVI ist nicht ohne weiteres eigenständig lauffähig.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
12.05.2009, 07:25 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2009 07:28 von rolfk.)
Beitrag #2

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
VISA Read - Byte Count Wert
' schrieb:Hallo LabVIEWforumianer! Ich versuche zur Zeit einen Spektrumanalyser via GPIB bzw. mittels VISA auszulesen. Nun ist es aber so, dass jeder VISA-Read gerne einen Byte Count Wert hätte. Die Frage ist "simpel" wie komme ich an diesen? Folgendes habe ich schon probiert:
[attachment=46221:ByteCount.png]

Im ersten Versuch habe ich die Property Node: Bytes at Port versucht zu verwenden, leider löst diese einen Fehler aus, bzw. für das GPIB Interface ist diese Node nicht definiert/nicht unterstützt.
Im zweiten Versuch habe ich einfach einen Wert gesetzt, dieser muss natürlich lang genug sein, sonst werden die Strings nicht vollständig ausgelesen. Dies ist bei einfachen Befehlen noch nicht problematisch, allerdings geht es letztlich um das Auslesen eines Kurvenverlaufs mit variierender Punktezahl (diese kann ich einfach auslesen bzw. errechnen (die Punktezahl). Wie kann ich nun vorgehen um die genaue Anzahl der Bytes herauszufinden, oder bekomme ich ein "Ende"-Zeichen, so dass ich nach x-Iterationen des Read in einer Schleife, den Read abbrechen kann?

Noch eine weitere Frage:
Ich werde öfter im Program VISA-Read und -Write benutzen müssen in verschiedenen Programmbereichen:
a) Öffne ich in jedem Programmbereich via VISA-Open und Close neu?
b) Schleppe ich die Wires für Resource und Error durch das ganze Programm?
Irgendwie hört sich beides nicht so top anSmile, wie macht mans richtig?
Nochmal anders gefragt: Sollte ich einen Read und Write in ein SubVI kapseln, muss der Nutzer ja VISA-Open und Close wieder herumbastelen, d.h. das SubVI ist nicht ohne weiteres eigenständig lauffähig.

Message Termination ist normalerweise das Zauberwort. Bei GPIB teilt das Gerät (ausser uralt Dynosuariers die noch nie was von IEEE 488.2 gehört haben) mittles Handshake mit wenn es das letzte Byte verschickt. Dann braucht man mit VISA nur noch einen Byte Count anzugeben der minimal so gross ist wie die längste erwartete Message. VISA Read bricht dann ab wenn:
1) dieser EOI (End of Information) gesehen wurde
2) die verlangten Bytes eingetroffen sind
3) das Timeout abgelaufen ist
4) ein Fehler aufgetreten ist

Bei serial funktioniert das auch und hier verwendet man meist einen Termination Character wie Carriage Return oder Line Feed.

Zu Deinen Fragen:
a) Nein bitte nicht!!!!!!!!!!
b) Ja!!! das ist kein Problem sondern hilft wenn sauber getan um eine eindeutige Abfolge in der Ausführung der Funktionen zu erreichen. LabVIEW ist Dataflow kontrolliert. Das heisst wenn Du mehrere Icons nebeneinander in ein Diagramm legst ohne dass da ein Wire vom einen zum anderen geht, ist die Reihenfolge der Ausführung dieser Funktionen zufällig und auf MultiCore Systemen sogar effektiv parallel. Das haben die meisten Instrumente gar nicht gern wenn man sie nicht in einer klar definierten Reihenfolge ansteuert.

Du schreibst Ja auch noch ein Programm darum, oder? Oder schreibst Du einen Instrumenten Treiber? Dann lese Dich doch mal in die Instrumenten Treiber Guidelines von NI ein. Funktionen in einem Instrumententreiber sind nicht völlig eigenständige VIs. Das wäre viel zu unflexible für eine professionelle Verwendung solcher Treiber.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2009, 07:57
Beitrag #3

Y-P Offline
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
LVF-Team

Beiträge: 12.612
Registriert seit: Feb 2006

Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN

71083
Deutschland
VISA Read - Byte Count Wert
Was kriegst Du da für einen Fehler? Oder ist es doch nur eine Warnung? Weil die kriegst Du da immer.

Gruß Markus

' schrieb:Im ersten Versuch habe ich die Property Node: Bytes at Port versucht zu verwenden, leider löst diese einen Fehler aus, bzw. für das GPIB Interface ist diese Node nicht definiert/nicht unterstützt.

--------------------------------------------------------------------------
Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2009, 08:32
Beitrag #4

Lucki Offline
Tech.Exp.2.Klasse
LVF-Team

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
VISA Read - Byte Count Wert
' schrieb:Nochmal anders gefragt: Sollte ich einen Read und Write in ein SubVI kapseln, muss der Nutzer ja VISA-Open und Close wieder herumbastelen, d.h. das SubVI ist nicht ohne weiteres eigenständig lauffähig.
Natürlich geht das, daß das Sub-VI selbständig lauffähig ist. Z.B. VISA-Open-Behandlung: Die kann durchaus im Sub-VI erfolgen, aber nur beim ersten Aufruf des VI oder wenn sich die Visa-Ressource geändert hat. Ansonsten bleibt die geöffnete Visa-Referenz in einem nicht initialisiertem Schieberegister für den nächsten Aufruf gepeichert.

Zur Frage:
b) Schleppe ich die Wires für Resource und Error durch das ganze Programm?
Eine mit Vorsicht verwendende Alternative ist die Verwendung von (versteckten) Anzeigen/Bedienelementen in Verbindung mit lokalen Variablen. Nur dann anzuraten, wenn man betreffs lokaler Variablen den nötigen Durchblick hat. (Beispiel: Bei einem Prog mit State-machine im Initialisieruns-Case und im Beendigungs-Case lokale Variable für die Visa-Referenz zum Öffnen/Schließen verwenden, im Hauptteil, also beim Lesen/Schreiben, das versteckte Bedienelement. Man hat weniger Drahtwirrwar, muß nicht ein Schieberegister durch alle Cases zu ziehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
12.05.2009, 22:20 (Dieser Beitrag wurde zuletzt bearbeitet: 12.05.2009 22:25 von LabVIEWDompteur.)
Beitrag #5

LabVIEWDompteur Offline
LVF-Grünschnabel
*


Beiträge: 20
Registriert seit: May 2009

2010 SP1
-
DE

81377
Deutschland
VISA Read - Byte Count Wert
1. Fehlercode
' schrieb:Was kriegst Du da für einen Fehler? Oder ist es doch nur eine Warnung? Weil die kriegst Du da immer.
Der Fehlercode war: -1073807331 und bezeichnet: "The specified attribute is not defined or supported by the referenced resource." laut der VISA Error Codes Liste . Heißt für mich, wie oben schon erwähnt: Mein Gerät unterstützt diesen Befehl nicht, zudem war der Property Node Eintrag auch unter Serial und nicht unter GPIB.

Warum soll bei obigem Beispiel immer eine Warnung auftreten?
Falls unklar: Die 2 Versuche sind natürlich nicht in einem VI, das ist nur im Bild so.

2. Byte Count Wert
' schrieb:Message Termination ist normalerweise das Zauberwort. Bei GPIB teilt das Gerät (ausser uralt Dynosuariers die noch nie was von IEEE 488.2 gehört haben) mittles Handshake mit wenn es das letzte Byte verschickt. Dann braucht man mit VISA nur noch einen Byte Count anzugeben der minimal so gross ist wie die längste erwartete Message.

VISA Read bricht dann ab wenn:
1) dieser EOI (End of Information) gesehen wurde
2) die verlangten Bytes eingetroffen sind
3) das Timeout abgelaufen ist
4) ein Fehler aufgetreten ist
D.h. die Lösung ist einfach nur einen ByteCount vorzugeben, der auf jedenfall groß genug ist und VISA-Read stoppt sobald nix mehr kommt?
Vorteil: Einfach
Nachteil: Verschwendung von Systemressourcen? Oder werden garnicht soviele Bytes vorweg reserviert wie ich im Bytecount vorgebe? Bzw. die ungenutzten Bytes wieder freigegeben falls nicht gebraucht? (Gut prinzipiell wird mich bzw. den PC die hier genutzte Anzahl weniger kratzen, ist rein informativ gefragt, bzw. man wills ja richtig machen)

3. VISA einmal öffnen und schließen
' schrieb:b) Ja!!! das ist kein Problem sondern hilft wenn sauber getan um eine eindeutige Abfolge in der Ausführung der Funktionen zu erreichen. LabVIEW ist Dataflow kontrolliert. Das heisst wenn Du mehrere Icons nebeneinander in ein Diagramm legst ohne dass da ein Wire vom einen zum anderen geht, ist die Reihenfolge der Ausführung dieser Funktionen zufällig und auf MultiCore Systemen sogar effektiv parallel. Das haben die meisten Instrumente gar nicht gern wenn man sie nicht in einer klar definierten Reihenfolge ansteuert.
Nummer 1 =Variante A: VISA wiederholt öffnen und schließen
Nummer 2 = Variante B: VISA einmal öffnen und schließen
Variante B so richtig mit dem einmal öffnen und schließen? Hier ist für mich zunächst ungewöhnlich, dass die VISA-Resource des Writes für den Frequenzspannenfall nicht zum Close geführt wird, sondern einfach "in der Luft" endet.
Variante A sollte gemieden werden?
In der Mittelstruktur wird jeweils geprüft ob ein erneuter VISA-Write nötig ist und für diesen Fall die entsprechende Case-Struktur ausgelöst. (Das sollte es zumindest tunSmile)
   

4. GPIB Doppelpunkt
Letzte Frage für heute:
Wozu wird einem GPIB Befehl ein Doppelpunkt vorangestellt, obwohl dem Instrument kein weiterer Befehl übergeben wurde.
Also z.B.
- zwei Befehle von FREQUENCY kombiniert einem Write übergeben: "FREQUENCY:CENTER 100MHz;SPAN 20MHz"
- zwei Befehle einem Write übergeben, eines von FREQUENCY und eines von FORM: "FREQUENCY:CENTER 100MHz;:FORM ASC"
- und jetzt kommts, nur ein Befehl: ":FORM ASC"
wozu ist im letzten Beispiel das ":" bzw. der Zusatznutzen zu "FORM ASC"? (Heißt ausgeschrieben Format ASCII)
warum wird ":" vor den LabVIEW befehl gesetzt?

Vielen Dank euch allen! Hab genug von LabVIEW für heute:)bis morgen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
13.05.2009, 12:13
Beitrag #6

rolfk Offline
LVF-Guru
*****


Beiträge: 2.306
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
VISA Read - Byte Count Wert
' schrieb:1. Fehlercode

Tja ich war mit nicht bewusst dass diese property für GPIB nicht funktioniert aber verwende die ehh nie, auch nicht für serial.

Zitat:Warum soll bei obigem Beispiel immer eine Warnung auftreten?
Die VISA Read liefert eine Warnung zurück (error status = FALSE, error code != 0) die besagt dass die zurückgelieferten Anzahl Bytes den angeforderten entspricht um darauf aufmerksam zu machen dass da noch mehr Bytes im Empfangsbuffer sein könnten.

Zitat:2. Byte Count Wert

D.h. die Lösung ist einfach nur einen ByteCount vorzugeben, der auf jedenfall groß genug ist und VISA-Read stoppt sobald nix mehr kommt?
Vorteil: Einfach
Nachteil: Verschwendung von Systemressourcen? Oder werden garnicht soviele Bytes vorweg reserviert wie ich im Bytecount vorgebe? Bzw. die ungenutzten Bytes wieder freigegeben falls nicht gebraucht? (Gut prinzipiell wird mich bzw. den PC die hier genutzte Anzahl weniger kratzen, ist rein informativ gefragt, bzw. man wills ja richtig machen)

Wegen der Systemresourcen solltest Du Dir vorab mal nicht zuviel Sorgen machen. Du wirst ja wohl nicht 2000000 Bytes oder mehr anfordern und ob LabVIEW einen Buffer von 10 oder 1000 Bytes alloziert macht in der Laufzeit keinerlei Unterschied.

Zitat:3. VISA einmal öffnen und schließen

Nummer 1 =Variante A: VISA wiederholt öffnen und schließen
Nummer 2 = Variante B: VISA einmal öffnen und schließen
Variante B so richtig mit dem einmal öffnen und schließen? Hier ist für mich zunächst ungewöhnlich, dass die VISA-Resource des Writes für den Frequenzspannenfall nicht zum Close geführt wird, sondern einfach "in der Luft" endet.

Variante A oder 1????? Jedenfalls sind B/2 richtig. Das mit dem offenem VISA Resource am zweiten Strang ist kein Problem. Aber eigentlich würde ich das Write ebenfalls im selben Strang einschlaufen. So wie Du das jetzt hast kann das in komplexeren Fällen dann diesem auf einem Multicore System theoretisch ein Problem provozieren Da beide Funktionen von LabVIEW effektiv parallel ausgeführt werden können.

Zitat:4. GPIB Doppelpunkt
Letzte Frage für heute:
Wozu wird einem GPIB Befehl ein Doppelpunkt vorangestellt, obwohl dem Instrument kein weiterer Befehl übergeben wurde.
Also z.B.
- zwei Befehle von FREQUENCY kombiniert einem Write übergeben: "FREQUENCY:CENTER 100MHz;SPAN 20MHz"
- zwei Befehle einem Write übergeben, eines von FREQUENCY und eines von FORM: "FREQUENCY:CENTER 100MHz;:FORM ASC"
- und jetzt kommts, nur ein Befehl: ":FORM ASC"
wozu ist im letzten Beispiel das ":" bzw. der Zusatznutzen zu "FORM ASC"? (Heißt ausgeschrieben Format ASCII)
warum wird ":" vor den LabVIEW befehl gesetzt?

Nun das jeweilige Kommandoset eines Instrumentes ist im Manual zu dem Instrument definiert und erklärt. Diese Kommandos scheinen sich am SCPI Standard zu orientieren aber das ist kein strikter Standard im eigentlichen Sinn sondern einfach ein Empfehlung wie ein Instrumentenbefehlssatz aufgebaut sein kann. Manche Instrumentenbauer halten sich in keiner Weise daran, andere mehr oder weniger aber die Idee dass man ein DMM von Hersteller X mit den gleichen Befehlen ansteuern kann dann ein DMM vom Hersteller Y ist auch mit SCPI nur ein frommer Wunsch. Das funktioniert oft nicht mal mit ähnlichen Instrumenten vom gleichen Hersteller.

Rolf Kalbermatter

Rolf Kalbermatter
Technische Universität Delft, Dienst Elektronik und Mechanik
https://blog.kalbermatter.nl
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
30
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  dynamische Byte-Anzahl einer Nachricht Gottimp 6 5.020 23.03.2021 18:15
Letzter Beitrag: GerdW
  VISA Read und Bytes at Port tanka 9 13.947 28.08.2019 08:10
Letzter Beitrag: Lucki
  VISA 1 Wert alle 2 Sekunden floH857 3 5.142 13.02.2017 09:51
Letzter Beitrag: Freddy
  VISA Read Fehler 1073807302 Stefan1101 4 7.755 29.08.2016 10:13
Letzter Beitrag: Stefan1101
  VISA Read mit Keithley 6487 dauert lange jusaca 3 5.583 28.01.2016 11:12
Letzter Beitrag: jusaca
  Problem: Empfangene Byte Anzahl ändert sich MKVH28 7 6.671 26.03.2015 17:39
Letzter Beitrag: Lucki

Gehe zu: