Abrufen der VISA Schnittstelle - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA) +---- Thema: Abrufen der VISA Schnittstelle (/Thread-Abrufen-der-VISA-Schnittstelle) |
Abrufen der VISA Schnittstelle - saibotobias - 31.08.2007 07:34 Hallo zusammen, bisher habe ich bei meinen Anwendung stets auf die VISA Schnittstelle geschrieben und nach einer definierten Zeit wieder gelesen. Bei der aktuellen Anwendung ist die Dauer bis zur Anwort unbestimmt. Daher muss ich nur einlesen wenn am VISA Port auch wirklich Daten ankommen. Ich hab zwar schon eine mögliche Lösung. Funktioniert das entsprechend meinen Bild? Gibt es verbesserungsvorschläge? Danke Gruß Tobi Abrufen der VISA Schnittstelle - rolfk - 31.08.2007 08:41 ' schrieb:Funktioniert das entsprechend meinen Bild? Funktioniert zwar aber Du solltest da sicher noch etwas mehr drum herum tun. So wie es jetzt ist könnte der Bytes at Serial Port Aufruf genau in dem Moment passieren, wenn ein Datenstring reintrudelt. Du liest dann nur einen Teil des Strings, der dann wohl ein bisserl undeutlich ist, und der Rest bleibt im Buffer. VISA Clear sendet ein Clear Command und löscht die Buffer aber nicht. Das Clear Command für serielle Instrumente ist einfach ein *CLR command das als String gesendet wird. Funktioniert aber so eben nur für Instrumente die dem SCPI Standard für Messinstrumente entsprechen. Um den Buffer zu löschen müsstest Du schon VISA Flush I/O Buffer gebrauchen. Wie das am Besten geht, hängt von Deinem Instrument ab. Entweder sendet das einen konstant langen String (selten) oder hängt am Ende einen bestimmten Character an (sehr oft etwa einen Zeilenumbruch). Im ersten Fall liest Du eben nicht die am Port befindlichen Bytes sondern die Anzahl die eine Antwort hat, im zweiten Fall schaltest Du den Termination Character ein (default für den seriellen Port auf 0xA "LineFeed" gesetzt) und liest eine Anzahl Bytes die sicher grösser ist als der längste String den Du erwartest. VISA Read terminiert immer auf einen der folgenden Ereignisse: - communication error (parity, etc) - Anzahl gefragte Bytes empfangen - Termination Character detektiert (wenn enabled) - Timeout abgelaufen Also wartet Deine VISA Read maximal das eingestellte Timeout wenn das Gerät plötzlich zu spinnen anfangt, normalerweise aber eben viel weniger lang. Rolf Kalbermatter |