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!
09.11.2009, 11:56 (Dieser Beitrag wurde zuletzt bearbeitet: 09.11.2009 11:57 von Lucki.)
Ich habe festgestellt, daß VISA Schreiben (COM-Port) anders funktioniert als ich das bisher angenommen hatte. Ich dachte bisher, beim Schreiben wird der Schreibpuffer benutzt. D.h. die Daten werden in den Schreibpuffer geschrieben, Ausführungszeit dieser Aktion vernachlässigbar, und Visa Write ist damit beendet. Anschließend wickelt ein untergeordnete Routine, mit der der Programmierer nichts mehr zu tun hat, automatisch die serielle Übertragung der Daten über die Schnittstellenleitung ab.
Es ist aber nicht so: VISA Write wird erst freigegeben, wenn die Datenüberagung vollständig beendet ist. D.h. der Schreibpuffer wird überhaupt nicht verwendet.
Desalb meine Frage: Wozu ist der VISA-Schreibpuffer dann überhaupt da? In welchen Fällen kommt er zum Einsatz?
Was meinst du mit freigegeben?
Meinst du, das VI VISA-Write bringt einen Fehler, solange die Daten noch nicht übertragen sind? Freigegeben, also ohne Fehlerrückmeldung wäre dann, wenn der Puffer leer ist.
Oder meinst du tatsächlich, das SubVI VISA-Write wird erst dann beendet, wenn der "Puffer" versendet worden ist? (Bei synchroner Einstellung der Schnittstelle wäre das so).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
' schrieb:Oder meinst du tatsächlich, das SubVI VISA-Write wird erst dann beendet, wenn der "Puffer" versendet worden ist? (Bei synchroner Einstellung der Schnittstelle wäre das so).
Ja, genau das meine ich und ich lese bei Dir zwischen den Zeilen, daß Dich das auch überrascht. (Von synchroner Einstellung verstehe ich überhaupt nichts, vielleicht wird das hier benutzt ohne daß ich davon weiß. Ich benutze Windwos XP)
Hier ist das Test-VI:
Mach mal einen Versuch: Disable mal den Parameter "Send End En".
Genial! Danke Dir! Wie bist Du nur darauf gekommen? Und außerdem: Des Send End End ist total entberlich, man kann ja genausogut TermChar vom Programm her, also gewissermaßen manuell, an das Ende das Sendestsrings anhängen. Die Ausführungdauer von "VISA Schreiben" beträgt jetzt nur noch 0,00001 as (1 as = Attosec = 10^-18 s )
Ich habe diese sytematischen Versuche übrigens gemacht, weil es in umgekehrter Datenrichtung Probleme gab. Beim Datenempfang von einem Virtuellen Com Port (VCP) über einen USB-Seriell-Adapter mit FTDI Chip traten Verzögerungen von bis zu 15 ms auf, auf die FTDI auch hinweist. Also der Lesepuffer gab die Daten nicht frei, obwohl die Daten drin waren
Lösung war, sich nicht darauf zu verlassen, daß Visa Lesen den TermChar erkennt, sondern das VI "auf Ereignis warten" (Thermchar) für die Erkennung zu verwenden. Das funktionierte.
Gruß Ludwig
VI_ATTR_ASRL_END_OUT defines the method of terminating writes. Defaults to VI_ASRL_END_NONE. (This value means that the setting of VI_ATTR_SEND_EN is irrelevant.) To have VISA automatically append a termination character to each write operation, set this attribute to VI_ASRL_END_TERMCHAR. To have VISA automatically send a break condition after each write operation, set this attribute to VI_ASRL_END_BREAK.
Das heißt auf gut deutsch:
Am Ende eines jeden Sendestrings wird automatisch ein Endezeichen angehängt. Da gibt es jetzt zwei Möglichkeiten. Man kopiere den String am Eingang von VISA-Wr in einen Zwischenpuffer, hänge da noch das Endezeichen hintenan und verlasse unverzüglich das SubVI VISA-Wr (den Rest macht dann der Treiber). Oder man warte gemächlich im SubVI VISA-Wr bis der String am Eingang der Reihe nach endlich mal leergesendet wurde, sende dann noch ein Endezeichen und verlasse das VISA-Wr. Und jetzt rate mal, welche dieser Möglichkeiten in LV integriert ist. Ich habe ja auf ersteres getippt.
"Synchrones VISA-Wr" heißt in diesem Falle, dass das VISA-Wr erst verlassen wird, wenn alle Zeichen tatsächlich gesendet wurden.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).