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!
Ich habe ein Problem in der beiliegenden Labview Programm. Dieses Programm hat immer gut funktioniert. Aber Ich weiß nicht, welche Veränderungen ich getan habe, damit Read Visa nicht mehr gut funktioniert. Ich schicke eine Anfrage über Write Visa und erwartet, dass Read Visa die Bytes von Abfrage plus eine Antwort Zurückschickt. Ich bekomme genau dem gesendeten Byte nur die Byte von der Antwort sind falsch. Die Byte von Antwort, die ich bekomme sind die Bytes von dem Ereignis, das vorher war und nicht für das aktuelle Ereignis. Beispiel:
RX: 0xA1, 0x11, 0x02, 0x0A -------> (erhaltene Antwort, was die vorherige Abfrage war)
Ich dachte, vielleicht ist schon ein Puffer bereits vorhanden, bevor sich die Visa öffnet.
Ich habe die Anzahl der Bytes an Port Überprüft, bevor der ersten Lese/Schreibfunktionen durchgeführt werden. Aber ich bekomme 0 Bytes at Port.
Weiß vielleicht Jemand voran liegt diese Verzögerung beim Lesen (Besonders für die Bytes von Antwort)?
Vielen Dank im Voraus für Ihre Reaktionen
MfG
- auch LV8.6 hat einen Aufräumknopf!
- du hast immer noch die VISA-Referenz mit deinem (hier fehlenden) subVI verbunden!
- du hast eine RaceCondition mittels deiner lokalen Variablen "transmitted Byte" geschaffen...
- warum öffnest du schon wieder einen neuen Thread zum gleichen VI?
- Nutzt du nun das TermChar? Dann brauchst du die ganzen "Bytes at port" nicht - da gibt es schon genügend Threads zu, die das erläutern!
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
RE: Antwort Visa Read falsch!!!
Ich habe jetzt die Hardware nicht zum Testen, aber was soll denn die For-Schleife nur mit einem Durchgang? Die kannst Du genauso gut auch weglassen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
soll ich die VI in eine andere Version laden? ich arbeite mit LV 2012, deswegen habe ich LV 8.6 gewählt, damit alle zugreifen kann.
Zitat:du hast immer noch die VISA-Referenz mit deinem (hier fehlenden) subVI verbunden!
Ich habe die SubVI nicht geladen, weil ich dort keine Probleme mehr habe. Das Problem liegt jetzt nur an die Bytes an read Puffer besonders die Bytes Antwort, die mit A1 anfängt. Soll ich auch die SubVI laden?
Zitat:- du hast eine RaceCondition mittels deiner lokalen Variablen "transmitted Byte" geschaffen...
Ja, ich prüfe, ob es genau was ich geschickt habe(ohne Antwort) bekommt!
Zitat:- warum öffnest du schon wieder einen neuen Thread zum gleichen VI?
Entschuldigung, nächste mal mache ich in dem gleichen Thread.
Zitat:Nutzt du nun das TermChar? Dann brauchst du die ganzen "Bytes at port" nicht - da gibt es schon genügend Threads zu, die das erläutern!
ja ich nutze das Termchar, ich habe schon viele Threads gelesen, aber hab noch keine Antwort gelesen Warum die Bytes von Antwort nicht aktuell sind.
Vielen Dank
MfG
Gisele
10.12.2012, 13:53 (Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2012 14:20 von GerdW.)
Zitat:Kannst du bisher sicherstellen, dass du auch immer die passende Antwort auf gesendeten Befehl abfragst?
das ist , was ich in meinem Programm versuche. Dies hatte seit ein paar Wochen immer richtig funktionniert.
wenn ich mich auf mein Programm verlasse, frage ich immer die passende Antwort auf gesendeten Befehl ab.
MfG
Gisele
Anzeige
10.12.2012, 14:24 (Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2012 14:26 von Lucki.)
Es ist wie der Kampf Don Quichotes gegen die Windmühlenflügel: Es wird immer wieder flasch gemacht und ich korrigiere es hier immer wieder.
Die Schuld daran gebe ich inzwischen den Beispielen in der Labview-Hilfe. Mit Zeilenendeerkennung (TermChar) ist die serielle Kommunikation nämlich so einfach, dass die Experten von NI sich geschämt haben, so etwas als Beispiel zu bringen. Und weil es das einfache Beispiel nicht gibt, wird weithin vermutet, dass alles noch komplizierter sein muss als all die aufgeblasenen NI-Beispiele zur seriellen Kommunikation.
Also: Weg mit solchen Funktionen wie Bytes on Board, Pufferkonfiguration, Wait. So einfach erhälst Du die richtige Antwort:
Hallo Lucki,
habe ich genau gemacht wie in deinem Bild. Ich bekomme die Anzahl der Bytes, die ich erwarte. aber nur die 4 letzte Bytes sind falsch (Bytes für die Antwort auf Abfrage) und ich weiß nicht warum.
Vielen Dank
Gisele
10.12.2012, 15:41 (Dieser Beitrag wurde zuletzt bearbeitet: 10.12.2012 15:45 von Lucki.)
Read liest den Pufferinhalt bis zum nächsten Zeilenende aus. Wenn dieser aus irgendeinem Grund schon vor dem Write nicht leer war (z.B weil die Gegenseite schon vor dem write-Kommando etwas in den Puffer geschickt hatte), dann liest man zwar etwas aus, aber das ist nicht die aktuelle Antwort auf das Write-Kommando. Die steckt dann immer noch im Puffer.
Du kannst ja sicherheitshalber unmittelbar vor dem Write immer den Empfangspuffer leeren.