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 

Ende von VISA Read



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!

25.02.2009, 11:45
Beitrag #1

RomanT Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2007

2011
2006
DE


Schweiz
Ende von VISA Read
Sali allerseits

Ich habe folgendes Problem: Ich erwarte auf der seriellen Schnittstelle ein Kommando beliebiger aber definierter maximaler Länge, welches mit einem Endzeichen abgeschlossen ist und zu einem beliebigen Zeitpunkt eintreffen kann. Dies liesse sich ganz einfach realisieren, wenn ich bei der Konfiguration der VISA-Schnittstelle das Timeout deaktivieren könnte. Mir scheint jedoch, dass dies nicht möglich ist. Bleibt also wirklich nur die Möglichkeit, die Daten byteweise einzulesen, in einem Schieberegister aneinander zu hängen und manuell auf das Endzeichen zu überprüfen?

Grüsse
Roman
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.02.2009, 11:57
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Ende von VISA Read
Am einfachsten, machst du einen Timeout (z.B. 1 Sekunde) und falls kein Timeout ist, dann Daten auswerten.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.02.2009, 13:25
Beitrag #3

RomanT Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2007

2011
2006
DE


Schweiz
Ende von VISA Read
' schrieb:Am einfachsten, machst du einen Timeout (z.B. 1 Sekunde) und falls kein Timeout ist, dann Daten auswerten.

Das verstehe ich nun nicht ganz. Das Kommando, welches ich erhalte, folgt nicht etwa auf einen Befehl hin, sondern zu einem beliebigen Zeitpunkt, nämlich wenn ein Benutzer eine Taste drückt. Das heisst, das VISA Read wird einfach mal irgendwann, in diesem Falle zu Programmbeginn, ausgeführt und irgendwann tritt dann das Timeout ein, wenn bis dahin noch nicht das Endzeichen empfangen wurde. Und wenn ich das richtig gesehen habe, liest ja VISA Read beim Timeout ebenfalls den Buffer aus. Das heisst, ich habe dann unter Umständen, nämlich wenn das Timeout mitten während einer Übertragung erfolgte, nur einen Teil des Kommandos am Ausgang von VISA Read und der Rest wird später in den Buffer geschrieben. Ich müsste dann also nochmals auslesen und die beiden Teile zusammensetzen. Oder sehe ich das falsch, und der Timeoutcounter wird bei Datenempfang zurückgesetzt und in der Folge tritt gar nie ein Timeout während dem Empfang von Daten auf?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.02.2009, 13:35 (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2009 13:51 von Lucki.)
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
Ende von VISA Read
Der Timout läßt sich war nicht deaktivieren, aber reichen Dir denn die 7 Wochen, die Du mit der U32-Zahl in der Visa-Konfiguration immerhin vorgeben kanns, wirklich nicht aus?
Bessere Alternative: Timout ca.1 sec, bei Timeout den Fehler abfangen und Lesen so lange in der Schleife wiederholen, bis die gewünschten Daten kommen. Vorteil: Man hat - bei entsprechender Programmierung - die Möglichket des Stops durch Bedieneingriff.

Edit:

Zitat:Und wenn ich das richtig gesehen habe, liest ja VISA Read beim Timeout ebenfalls den Buffer aus. Das heisst, ich habe dann unter Umständen, nämlich wenn das Timeout mitten während einer Übertragung erfolgte, nur einen Teil des Kommandos am Ausgang von VISA Read und der Rest wird später in den Buffer geschrieben. Ich müsste dann also nochmals auslesen und die beiden Teile zusammensetzen

Du scheinst nicht zu wissen, daß das Aufsammeln der Stringzeichen mittels Shift-Register in mehreren Schleifendurchläufen nun wirklich eine ganz leichte Übung ist. Brauchst Du dazu ein Beispiel? Und bei Ende des Timeout brauchst Du nicht zu befürchten, daß dabei ein gerade übertragenes Byte zerstört wird.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.02.2009, 14:02
Beitrag #5

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Ende von VISA Read
Im Timeout-Fall Daten im Schieberegister mit String anhängen sammeln. Falls also kein Timeout Fehler kommt - Daten des Schieberegisters auswerten und leeren.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.02.2009, 14:39 (Dieser Beitrag wurde zuletzt bearbeitet: 25.02.2009 14:49 von Lucki.)
Beitrag #6

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

Beiträge: 7.699
Registriert seit: Mar 2006

LV 2016-18 prof.
1995
DE

01108
Deutschland
Ende von VISA Read
Vergiss alles bisher Gesagte, es gibt was Besseres.
Du aktivierst in der Konfiguration das Visa-Ereignis "Termchar" (Endezeichen) und wartest dann in einer Schleife auf das Ereignis. Bei Timeout wird erneut gewartet. Wenn es da ist, wird die Schleife verlassen und dann erst kommt VisaRead zum Zuge. Dann liest Du den String aus - fertig.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
25.02.2009, 17:01
Beitrag #7

RomanT Offline
LVF-Grünschnabel
*


Beiträge: 12
Registriert seit: Aug 2007

2011
2006
DE


Schweiz
Ende von VISA Read
' schrieb:Der Timout läßt sich war nicht deaktivieren, aber reichen Dir denn die 7 Wochen, die Du mit der U32-Zahl in der Visa-Konfiguration immerhin vorgeben kanns, wirklich nicht aus?
Bessere Alternative: Timout ca.1 sec, bei Timeout den Fehler abfangen und Lesen so lange in der Schleife wiederholen, bis die gewünschten Daten kommen. Vorteil: Man hat - bei entsprechender Programmierung - die Möglichket des Stops durch Bedieneingriff.

Edit:
Du scheinst nicht zu wissen, daß das Aufsammeln der Stringzeichen mittels Shift-Register in mehreren Schleifendurchläufen nun wirklich eine ganz leichte Übung ist. Brauchst Du dazu ein Beispiel? Und bei Ende des Timeout brauchst Du nicht zu befürchten, daß dabei ein gerade übertragenes Byte zerstört wird.

Dass das Zusammenfügen per Schieberegister eine einfache Sache ist, ist mir schon klar. Aber ich wollte dennoch wissen, ob es eine elegantere Lösung gibt. Aber anscheinend ist das doch die beste Lösung und ich werde das daher wohl so implementieren.

Danke euch.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2009, 10:34
Beitrag #8

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Ende von VISA Read
' schrieb:Dass das Zusammenfügen per Schieberegister eine einfache Sache ist, ist mir schon klar. Aber ich wollte dennoch wissen, ob es eine elegantere Lösung gibt. Aber anscheinend ist das doch die beste Lösung und ich werde das daher wohl so implementieren.

Was auch noch machbar ist, vor dem Read, mit der Property "Byte at Ser.Port" schauen ob Daten anstehen, und dann erst das Read aufrufen.
Somit kannst du das Timeout klein halten und musst nicht Daten mit SR zusammenfügen oder die TimeOut-Meldung zurücksetzen.

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.02.2009, 11:23
Beitrag #9

rolfk Offline
LVF-Guru
*****


Beiträge: 2.305
Registriert seit: Jun 2007

alle seit 6.0
1992
EN

2901GG
Niederlande
Ende von VISA Read
' schrieb:Was auch noch machbar ist, vor dem Read, mit der Property "Byte at Ser.Port" schauen ob Daten anstehen, und dann erst das Read aufrufen.
Somit kannst du das Timeout klein halten und musst nicht Daten mit SR zusammenfügen oder die TimeOut-Meldung zurücksetzen.

Das ist durchaus eine Möglichkeit. Aber einschalten des Termchar und dann mit "kleinen" Timeout lesen erscheint mir nicht so besonders schwierig. Je nach Instrument muss man halt schon mal einen bestimmten Fehler wie den Timeout Fehler filtern. Das ist doch nicht schlimm. Manche Leute hier scheinen einerseits den Error Cluster oft komplett zu vernachlässigen und/oder andererseits eine panische Angst zu haben wenn eine Funktion einen Fehler zurückgibt. Sicher bei Kommunikation mit externen Geräten ist es oft unvermeidbar, dass man manchmal Fehler erhält, die halt nicht wirklich Fehler sind sondern ganz einfach "Expected Behaviour". Filtern dieser Fehler ist dann ganz logisch und sinnvoll.

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
26.02.2009, 12:10
Beitrag #10

RoLe Offline
LVF-Guru
*****


Beiträge: 1.236
Registriert seit: Jul 2007

-
1997
en

0
Schweiz
Ende von VISA Read
' schrieb:Das ist durchaus eine Möglichkeit. Aber einschalten des Termchar und dann mit "kleinen" Timeout lesen erscheint mir nicht so besonders schwierig. Je nach Instrument muss man halt schon mal einen bestimmten Fehler wie den Timeout Fehler filtern. Das ist doch nicht schlimm. Manche Leute hier scheinen einerseits den Error Cluster oft komplett zu vernachlässigen und/oder andererseits eine panische Angst zu haben wenn eine Funktion einen Fehler zurückgibt. Sicher bei Kommunikation mit externen Geräten ist es oft unvermeidbar, dass man manchmal Fehler erhält, die halt nicht wirklich Fehler sind sondern ganz einfach "Expected Behaviour". Filtern dieser Fehler ist dann ganz logisch und sinnvoll.
Das ist durchaus auch eine MöglichkeitWink
Ich finde auch, dass dies nicht schwierig ist und auch nicht schlimm, und bei mir hat jedes VI Error In/Out, auch wenn das VI gar keinen Fehler generieren kann. (Datenfluss)

Ich finde den TimeOut Fehler aber noch nützlich, um z.Bsp. eine Meldung auszugeben. (Ist das Kabel gesteckt?)
Ok, in dem Poster-Problem nützt das vermutlich nichts, da nicht bekannt ist, wann Daten kommen sollten.

Ich meinte auch bei meinem Vorschlag, dass der Termchar eingeschaltet ist, hätte ich schreiben sollen.

.·´¯)--> Leben ist das, was dir passiert, wenn du eifrig dabei bist andere Pläne zu machen <--(¯`·.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  VISA Read und Bytes at Port tanka 9 13.867 28.08.2019 08:10
Letzter Beitrag: Lucki
  VISA Read Fehler 1073807302 Stefan1101 4 7.690 29.08.2016 10:13
Letzter Beitrag: Stefan1101
  VISA Read mit Keithley 6487 dauert lange jusaca 3 5.557 28.01.2016 11:12
Letzter Beitrag: jusaca
Shocked Error 1073807313 - VISA Read in HOST.vi Hattorii 11 11.578 02.04.2014 15:28
Letzter Beitrag: Hattorii
  VISA Read liest nicht alle Bytes von Bytes at Port numumba 2 7.049 21.01.2014 20:24
Letzter Beitrag: numumba
  VISA Read Error erste Ausführung cobain2004 4 8.073 10.01.2014 21:15
Letzter Beitrag: jg

Gehe zu: