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!
08.07.2013, 13:29 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2013 13:54 von jg.)
kann es sein, dass das Öffnen einer Visa-Session (COM-Port) den Eingangspuffer löscht?
Ich habe hier einen Aufbau mit einem RS232-Teilnehmer, der in bestimmten Zeitabständen selbstständig Daten an den PC sendet. Öffne ich den Port nachdem das Telegramm eingetroffen ist, so finde ich keine Daten im Puffer.
Kennt ihr dieses Verhalten?
Kann man das Abstellen?
Besten Dank und Grüße
Marcusius
Anzeige
08.07.2013, 13:52 (Dieser Beitrag wurde zuletzt bearbeitet: 08.07.2013 13:53 von Achim.)
(08.07.2013 13:29 )Marcusius schrieb: Öffne ich den Port nachdem das Telegramm eingetroffen ist, so finde ich keine Daten im Puffer.
Woher weißt du dass das Telegramm eingetroffen ist, wenn die Schnittstelle nicht "bereit" ist?
Das Verhalten kenne ich jetzt nicht...aber ich käme auch nie im Leben auf die Idee zu erwarten, dass ein Gerät Daten irgendwie "hält", wenn ich es vorher nicht in Bereitschaft versetzt hätte...
A.
"Is there some mightier sage, of whom we have yet to learn?"
"Opportunity is missed by most people because it is dressed in overalls and looks like work." (Thomas Edison)
ich merke ich habe einen Denkfehler. Solange keine Visa-Schnittstelle geöffnet ist, gehen die Daten, die mein Teilnehmer sendet verloren.
Das bedeutet, dass ich meine Schnitzstelle solange offen halten muss, bis Daten eingetroffen sind.
Hintergrund: Ich wollte ein ständiges "Pollen" via Visa Event und Timeout vermeiden.
Nun gut, dann werde ich die Schnitzstelle nicht gleich nach dem Event-Timeout schließen, sondern erneut das Event setzen.
So richtig klappt das hier bei mir noch nicht. Lasst mich meine Situation noch einmal kurz erklären:
Via 'VISA write' versetze ich meinen Teilnehmer in den Zustand, dass er selbstständig alle paar Sekunden ein Telegramm an den PC sendet. (Funktioniert, via Hyperterminal überprüft). Das genannte Schreiben steckt in einem Sub-VI.
Nun wird Timeout-gesteuert (Event-Struktur) ein Lese-Sub-VI gestartet. Darin befindet sich ein' VISA open', 'Clear', 'Enable Event', 'Discard Event' und schließlich 'Wait on Event'. Am 'Wait on Event' scheitert es aber. Es werden keine eintreffenden Daten erkannt und folglich auch kein Event ausgelöst. Mit den Eventtypen habe ich schon rumprobiert, daran liegt es nicht.
Generelle Frage: Setzt eine' VISA Read' Aktion IMMER eine Write-Aktion vorraus?
Dazu folgende Beoachtung: Wenn ich in meinem Lese-Sub-VI eine kleine Write-Aufforderung unterschummle, die eine Antwort des Teilnehmer erzwingt wird die Antwort ausgelesen (d.h. 'Wait on Event' funktionert). Ich beende dann das Sub-VI aber noch nicht, sondern Lese erst dann alles aus, wenn "Bytes at port" größer als die Schummelantwort ist, was bedeutet, dass ein selbstständiges Telegramm eingetroffen ist. Auf diese Weise erhalte ich mein gewünschtes Telegramm.
Diese Beobachtung führt mich zu der oben gestellten Frage. Aber kann das sein? Es muss doch möglich sein, einen Port zu öffnen und aus eintreffende Daten zu warten! ICh wollte gerade die 'Wait on Event' Funktion nutzen um nicht althergebracht den Port nach der Byte-Anzahl zu pollen.
- Warum wird der Port ständig aufs Neue geööfnet und geschlossen?
- Wozu brauchst du überhaupt BytesAtPort? Entweder man hat ein TermChar oder man weiß, wieviele Zeichen zu lesen sind...
Kann man alles machen mit TermChar. Habe ich auch schon probiert. Es liegt ja in erster Näherung nicht am Read. 'Wait on event' liefert mir nichts. Was macht diese Funktion intern? Fragt die auch nur 'Bytes at port' ab?
Das mit dem Öffnen und Schließen habe ich schon beachtet. 'Wait on Event' liegt in einer While-Schleife mit nem Timeout. da wird also nicht ständig geöffnet und geschlossen.
Kann das jemand beantworten: Reagiert 'Wait on event' nur, wenn vorher auf den gleichen seriellen Port geschrieben wurde?
Ich habe etwas mit der Parität rumgespielt und siehe da, plötzlich geht es. D.h. ich habe die Parität zunächst falsch eingestellt und nach dem zurücksetzen auf None (wie bei dem Schreib - VI auch) geht es plötzlich. None ist aber immer die Std.einstellung. Erst durch gezieltes verstellen und rücksetzen kommt klappt es erst mit dem 'Wait on Event'.
VISA open konfiguriert die Schnittstelle nicht. Das musst du explizit machen und daher kann die Parität ggf. vorher auf etwas falschem stehen. Da du bisher aber keinen Code gezeigt hast ist jetzt nicht zwingend die Erklärung, weil ich natürlich nicht weiss ob du evtl. doch noch was anderes machst ausser die Schnittstelle zu öffnen.
Zitat:Öffne ich den Port nachdem das Telegramm eingetroffen...
Dass VISA open nicht die Schnittstelle konfiguriert ist bekannt. Einen entsprechenden Property-node habe ich im Blockdiagramm. Das hatte ich nicht erwähnt in meinem Posting.
An der Parität lag es auch nicht, aber das hat mich zumindest auf die Spur gebracht. Es war letztlich ein Timing-Problem. Dass es daran lag, deckt sich mit meinem ersten Posting in diesem Thread.