16.01.2017, 18:51
Beitrag #1
|
Schnittlauch
LVF-Neueinsteiger
Beiträge: 4
Registriert seit: Jan 2017
LabView 2013
2016
DE
|
Fehler -1073807298 bei VISA: Lesen
Hallo LabVIEWer
ich schreibe eine VI zum Auslesen des Thermometers Optris CS LT. Es kommuniziert über RS232, aber ich schließe es per USB an meinen Computer an. Der Adapter wurde mit dem Thermometer mitgeliefert und gehört dazu. Ich benutze den mitgelieferten Treiber.
Beim Ausführen meines VIs bekomme ich in ca. 10% der Fälle den Fehler -1073807298 in 'Visa: Lesen': VISA: (Hex 0xBFFF003E) Operation konnte wegen eines I/O-Fehlers nicht durchgeführt werden. Wenn er einmal auftritt, dann meist noch mehrere Male direkt danach. Wenn der Fehler allerdings auftritt, liest das VI dennoch die Temperatur aus. Es funktioniert also immer, wirft nur manchmal am Ende diesen Fehler. Hat jemand eine Idee woran das liegen könnte?
Das Thermometer kommuniziert über verschiedene Befehle, die ich als Bild angehängt habe. Ich möchte erstmal nur die Temperatur abfragen und erwarte 2 Byte als Antwort, die auch immer kommen.
Außerdem meine VI, geschrieben mit LabVIEW 2013.
Simple_Serial_Communication.vi (Größe: 35,15 KB / Downloads: 344)
Ich habe die VI nur soweit hinbekommen wie sie jetzt ist, weil ich hier im Forum viele gute Fragen und Antworten zu Problemen gefunden habe, die vorher aufgetreten sind. Also schon mal vielen Dank dafür!
Beste Grüße und vielen Dank
Schnittlauch
|
|
|
16.01.2017, 19:56
(Dieser Beitrag wurde zuletzt bearbeitet: 16.01.2017 19:57 von GerdW.)
Beitrag #2
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Fehler -1073807298 bei VISA: Lesen
Hallo Schnittlauch,
Zitat:Wenn der Fehler allerdings auftritt, liest das VI dennoch die Temperatur aus. Es funktioniert also immer, wirft nur manchmal am Ende diesen Fehler.
Einfache Lösung: Fehler abfangen und ignorieren!
Zitat:Hat jemand eine Idee woran das liegen könnte?
An der Art, wie dein VI arbeitet!?
Warum musst du bei jedem Aufruf erneut die Schnittstelle initialisieren?
Sowas macht man üblicherweise genau einmal vor einer Schleife. Und den Port schließt man genau einmal nach einer Schleife. Und in der Schleife fragt man beliebig oft Messwerte ab!
-BytesAtPort sollte man eher nicht verwenden: du weißt doch, wieviele Bytes als Antwort kommen! Also einfach 2 Bytes einlesen!
- Die Umwandlung der Bytes nach Temperatur geht auch einfacher… (Kann sein, dass du im Bild beim Join die Inputs austauschen musst.)
|
|
|
17.01.2017, 10:56
Beitrag #3
|
Schnittlauch
LVF-Neueinsteiger
Beiträge: 4
Registriert seit: Jan 2017
LabView 2013
2016
DE
|
RE: Fehler -1073807298 bei VISA: Lesen
Die Funktion Bytes-at-Port hat bei mir hier immer gut funktioniert, ich habe sie rausgenommen ohne einen Unterschied zu sehen.
Wenn ich eine while-Schleife einfüge wie von dir vorgeschlagen passiert folgendes: Wenn ich nur ein Stop-Bedienungselement einfüge, also keine intrinsische Abbruchbedingung, funktioniert es ohne Fehler, immer. Ist aber nicht sehr praktisch. Sobald ich irgendeine Stopbedingung einbaue, wie z.B. 5 mal durchlaufen, tritt der Fehler wieder auf. Zufällig bei einer der Wiederholungen.
Das verstehe ich nicht, ich dachte LabVIEW fragt die Abbruchbedingung immer nach Durchlauf der Schleifeniteration ab. Wieso macht es dann einen Unterschied, ob da eine while-Schleife ist oder nicht, bzw sie eine Abbruchbedingung hat oder nicht. Der Fehler tritt ja vor Erreichen der Abbruchbedingung auf, wenn er auftritt.
Zum Fehlen der while-Schleife in meinem ersten VI: Ich plane ja nicht die VI so zu benutzen, immer wieder auszulösen und immer wieder den Port neu zu initialisieren. Ich wollte es nur erstmal irgendwie zum laufen bringen. Ich kann den Fehler natürlich einfach ignorieren, da ja trotzdem alles funktioniert. Ich wollte nur gern verstehen warum er auftritt.
Vielen Dank für deine schnelle Antwort
Schnittlauch
|
|
|
17.01.2017, 11:14
Beitrag #4
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Fehler -1073807298 bei VISA: Lesen
Hallo Schnittlauch,
Zitat:Wenn ich nur ein Stop-Bedienungselement einfüge, also keine intrinsische Abbruchbedingung, funktioniert es ohne Fehler, immer. Ist aber nicht sehr praktisch.
Wieso ist es unpraktisch, wenn ein VI OHNE Fehler durchläuft?
Bist du dir sicher, dass kein (VISA-)Fehler auftritt?
Zitat:Sobald ich irgendeine Stopbedingung einbaue, wie z.B. 5 mal durchlaufen, tritt der Fehler wieder auf. Zufällig bei einer der Wiederholungen.
Wie sieht das dann bei dir aus?
Passt das evtl. mit meiner Frage zum ersten Punkt zusammen: Bist du dir sicher, dass oben keine VISA-Fehler auftreten?
Zitat:Ich wollte nur gern verstehen warum er auftritt.
- Du hast da ein komisches Gerät mit komischem Kommunikations-Protokoll…
- Du verwendest einen komischen USB-2-RS232-Konverter…
- Du bist dauernd mit Port öffnen/schließen/Buffer leeren/etc beschäftigt…
|
|
|
17.01.2017, 12:08
Beitrag #5
|
Schnittlauch
LVF-Neueinsteiger
Beiträge: 4
Registriert seit: Jan 2017
LabView 2013
2016
DE
|
RE: Fehler -1073807298 bei VISA: Lesen
Unpraktisch, weil ich keine while-Schleife brauche, die ich manuell oder eben extern abbrechen muss.
Ich bin so weit sicher, dass keine Fehler auftreten. Ich habe es seeehr oft und lange ausprobiert. Würde ein Fehler auftreten, könnten Folgeiterationen die Temperatur nicht mehr auslesen.
Tritt der Fehler auf, zB bei der 2. Iteration, wenn ich eine Abbruchbedingung definiere, wird erst die Temperatur einmal angezeigt, dann läuft die while-Schleife an dem Fehlerstrang noch durch und liest keine neuen Werte mehr aus. Es sind dann auch keine Bytes zum lesen da und beide Bytes werden als 0 interpretiert und der erste Wert überschrieben, immer wieder mit 0 eben.
|
|
|
17.01.2017, 12:44
(Dieser Beitrag wurde zuletzt bearbeitet: 17.01.2017 12:46 von GerdW.)
Beitrag #6
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Fehler -1073807298 bei VISA: Lesen
Hallo Schnittlauch,
Zitat:Tritt der Fehler auf, zB bei der 2. Iteration, wenn ich eine Abbruchbedingung definiere, wird erst die Temperatur einmal angezeigt, dann läuft die while-Schleife an dem Fehlerstrang noch durch und liest keine neuen Werte mehr aus.
Das kapiere ich nicht…
Wenn du die Whileschleife bei einem Fehler beendest, wieso läuft sie dann noch weiter und warum bekommst du dann noch Null-Bytes?
Zitat:Es sind dann auch keine Bytes zum lesen da und beide Bytes werden als 0 interpretiert und der erste Wert überschrieben, immer wieder mit 0 eben.
Das ist ein typisches Programmierproblem: Der Programmierer hat vergessen, dass er auch noch etwas Fehlerbehandlung bedenken muss!
Zitat:weil ich keine while-Schleife brauche, die ich manuell oder eben extern abbrechen muss.
Das spricht für eine sehr ungewöhnliche Messaufgabe: nur einmal einen Wert abfragen…
|
|
|
17.01.2017, 15:55
Beitrag #7
|
Schnittlauch
LVF-Neueinsteiger
Beiträge: 4
Registriert seit: Jan 2017
LabView 2013
2016
DE
|
RE: Fehler -1073807298 bei VISA: Lesen
Der Fehler beendet ja nicht die while-Schleife, er verhindert nur das Lesen von Daten. Der geht über den Fehlerstrang raus, damit der Port zugemacht wird, bevor das Programm abbricht.
Ich habe inzwischen eine Version geschrieben, die den Fehler auffängt und ignoriert. Funktioniert gut. Nur einen Wert auslesen will ich, weil das ganze zeitlich abgestimmt mit anderen Messgeräten laufen muss. Die Initialisierung und das Schließen des Ports habe ich dafür in eigene VIs gepackt und die werden nur einmal benutzt, keine Sorge. Im richtigen Moment frage ich eben nach einem Wert, aber das passiert öfters, da hast du schon recht. Wie gesagt, ich wollte ja nur erst eine kompakte Version schreiben, um das Thermometer zu verstehen. Dieses Phänomen mit der while-Schleife verstehe ich allerdings immer noch nicht.
Trotzdem aber vielen Dank für deine Hilfe und bis zum nächsten Mal
Beste Grüße
Schnittlauch
|
|
|
17.01.2017, 16:07
Beitrag #8
|
GerdW
______________
Beiträge: 17.480
Registriert seit: May 2009
LV2021
1995
DE_EN
10×××
Deutschland
|
RE: Fehler -1073807298 bei VISA: Lesen
Hallo Schnittlauch,
Zitat:Dieses Phänomen mit der while-Schleife verstehe ich allerdings immer noch nicht.
Um das zu verstehen, wäre ein VI oder wenigstens ein Bild deines BD hilfreich!
Leider lieferst du ja keins von beidem…
|
|
|
| |