LabVIEWForum.de - Fehler beim Erstellen einer Datei, durch VISA ausgelöst?

LabVIEWForum.de

Normale Version: Fehler beim Erstellen einer Datei, durch VISA ausgelöst?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

ich will während der Laufzeit beliebig viele neue Textdateien erstellen und die gemessensen Werte darin speichern. Das gesamte Projekt ist schon recht groß, deshalb habe ich hier eine abgespeckte Version zur Verfügung gestellt. Ich erhalte die Fehlermeldung "1073807298" in der Fehlerleitung von "delete read buffer" in WriteAndRead.vi, wenn ich während der Laufzeit neue Dateien erstelle. Komisch finde ich
1) die Datei wird erstellt
2) die Fehlermeldung erscheint nicht immer.

Ich konnte bis zu 10 neue Dateien erstellen und diese mit Werten füllen, aber dann kam die Fehlermeldung.
Wenn ich außerhalb der while-Schleife eine Datei erstelle (also nur 1 mal), funktioniert alle tadellos.

Die Dateien kann ich in separaten VIs problemlos neu erstellen, nur in Kombination mit VISA streikt es.

Die Datei wird ja erst erstellt, dann läuft der Timeout ab und dann erst werden wieder Daten gesendet und gelesen.

Die abgespeckte Version hier funktioniert nicht wirklich aufgrund anderer VISA-Fehler, weil hier mit nichts kommuniziert wird. Blush

Grüße vom
Klausenwirt.

[attachment=48708]
Timeout
[attachment=48709]

Datei erzeugen
[attachment=48710]

Daten senden und lesen
[attachment=48711]
Hallo Wirt,

wenn du VISA und File-Funktionen mischt, darfst du dich nicht wundern, wenn VISA-Fehler zu Problemen beim FileWrite führen…

Mögliche Ideen/Vorschläge:
- erstmal durch Debugging die genaue Fehlerquelle suchen (wahrscheinlich eine der VISA-Funktionen)
- VISA und FileAccess voneinander trennen und zumindest getrennte ErrorCluster verwenden
- Error-Leitungen ebenso wie VISA-Referenzen konsequent durchverdrahten! (s. Anhang)
- Wenn du subVIs erstellst, solltest du denen immer ErrorIO verpassen! (SaveData, CreateFile)
Ich muss ja über VISA die Werte lesen und sie dann über SaveData abspeichern. Wie sollte ich die voneinander trennen? Ein shift-Register als Zwischenspeicher benutzen und die Daten in einem anderen Ereignis abspeichern? Wenn ich da dann aber nicht das VISA-Register verbinde, geht ja der VISA-Wert verloren.
Da SaveData von WriteAndRead abhängig ist, wird es ja erst danach ausgeführt. Den COM-Port jedes mal neu öffnen und schließen halte ich nicht für sinnvoll.
Hallo Wirt,

Zitat:Ich muss ja über VISA die Werte lesen und sie dann über SaveData abspeichern.
Das stimmt.
Aber niemand zwingt dich, den selben ErrorCluster für beide Teilaufgaben zu verwenden…
Ich gehe davon aus, dass Gerd es schon verbessert hat, aber nochmal der Vollständigkeit halber, hier liegt dein Problem:
[attachment=48753]
Im Datei Erzeugen Case verlierst du die VISA-Refnum.

Gruß, Jens
Die fehlende Verbidung war nur in diesem Beispiel vorhanden. Getrennte Error-Cluster haben das Problem nicht behoben, aber das Schließen der VISA-Schnittstelle hat geholfen. Die Initialisierung und Konfiguration der VISA-Schnittstelle nach jeder neu erzeugten Datei ist vielleicht von der Performance her nicht sehr optimal, aber es funktioniert.

[attachment=48953]
Referenz-URLs