Hi!
In der Hilfe zum Terminationchar steht:
Abschlusszeichen führt zur Beendigung des Lesevorgangs. Der Lesevorgang wird beendet, wenn das Abschlusszeichen vom seriellen Gerät empfangen wird. 0xA ist das hexadezimale Äquivalent eines Zeilenvorschubzeichens (n). Ändern Sie das Abschlusszeichen in 0xD bei Nachrichten, die mit einem Wagenrücklauf ® enden.
Wenn ich also einen Befehl abschicke und eine Stringkette mit mehreren Bytes erwarte, die am Schluss ein <CR> beinhaltet, setze ich den Termination Char auf 0xD (für Carriage Return).
Was mir nicht ganz klar ist: Ich weiss nicht, wann das Abschlusszeichen kommt. Wenn ich nun die serielle Schnittstelle so konfiguriere, dass sie auf den Termination Char wartet, muss ich dann nach dem Sendevorgang eine bestimmte Zeit lang warten oder kann ich gleich dahinter ohne Verzögerung (ohne Wait) den Lesevorgang setzen, der aber wirklich erst dann liest, wenn dieser Char da is oder der Timeout erreicht ist?
Is das also wie im angehängten Bild möglich?
Was passiert hier, wenn nach 12ms "HalloIchBin" und nach 24ms "DieAntwort<CR>" zurückkommt. Lese ich dann nur "HalloIchBin" aus oder "HalloIchBinDieAntwort<CR>"?
Danke euch!
Lg,
Tommy!
Wenn du weisst wieviele Bytes als Antwort kommen, wartest du in einer Schleife, bis die entsprechenden Byte am Ser.Port sind. Dann kannst du diese auf einmal lesen, wenn der Serielle Puffer (FIFO) genug gross ist.
Ansonsten braucht es fast immer eine Lese-Schlaufe mit Shiftregister.
Die Daten werden in den Seriellen Buffer geschrieben (ByteAtSer.Port), wenn du einen Teil davon gelesen hast (READ) wird er da gelöscht.
Ev. verstehe ich auch das Problem nicht ganz.
' schrieb:Hi!
In der Hilfe zum Terminationchar steht:
Abschlusszeichen führt zur Beendigung des Lesevorgangs. Der Lesevorgang wird beendet, wenn das Abschlusszeichen vom seriellen Gerät empfangen wird. 0xA ist das hexadezimale Äquivalent eines Zeilenvorschubzeichens (n). Ändern Sie das Abschlusszeichen in 0xD bei Nachrichten, die mit einem Wagenrücklauf ® enden.
Wenn ich also einen Befehl abschicke und eine Stringkette mit mehreren Bytes erwarte, die am Schluss ein <CR> beinhaltet, setze ich den Termination Char auf 0xD (für Carriage Return).
Was mir nicht ganz klar ist: Ich weiss nicht, wann das Abschlusszeichen kommt. Wenn ich nun die serielle Schnittstelle so konfiguriere, dass sie auf den Termination Char wartet, muss ich dann nach dem Sendevorgang eine bestimmte Zeit lang warten oder kann ich gleich dahinter ohne Verzögerung (ohne Wait) den Lesevorgang setzen, der aber wirklich erst dann liest, wenn dieser Char da is oder der Timeout erreicht ist?
Is das also wie im angehängten Bild möglich?
Was passiert hier, wenn nach 12ms "HalloIchBin" und nach 24ms "DieAntwort<CR>" zurückkommt. Lese ich dann nur "HalloIchBin" aus oder "HalloIchBinDieAntwort<CR>"?
Danke euch!
Lg,
Tommy!
Wenn Du ein Instrument hast das Termination Character sendet und VISA darauf eingestellt hast kannst Du grundsätzlich gleich nach dem Senden des Kommandos zu lesen versuchen. Du musst nur darauf achten, dass das Timeout bei der Read Node grösser ist als die Zeit die das Instrument benötigt um die komplette Antwort zu senden. VISA Read kehrt nämlich zurück nachdem entweder:
1) Die verlangten Anzahl Character empfangen sind (kein Fehler)
2) Der Termination Character empfangen ist (kein Fehler)
3) Das Timeout abgelaufen ist (entsprechender Fehler erscheint im Error Cluster)
4) Ein Fehler aufgetreten ist (entsprechender Fehler erscheint im Error Cluster)
Ob Du gleich nach dem Senden Lesen sollst hängt ganz davon ab wie schnell Dein Gerät ist und ob Du noch andere Dinge zu tun hast die quasi gleichzeitig erledigt werden sollten. Bei schnellen geräten ist ein direktes Lesen sicher iO und wenn Du eh nichts anderes sinnvolles zu tun hast dann bleibt Dir auch nicht viel mehr übrig.
Rolf Kalbermatter
' schrieb:Du musst nur darauf achten, dass das Timeout bei der Read Node grösser ist als die Zeit die das Instrument benötigt um die komplette Antwort zu senden. VISA Read kehrt nämlich zurück nachdem entweder:
Hey! Danke für deine Antwort!
Welches Timeout bei der Read Node meinst du? Da gibts nirgends nen Eingang...
und
Was meinst du mit VISA Read kehrt zurück? Meinst du damit, falls einer dieser 4 Punkte zutrifft, gibt VISA Read nen Fehler aus und der Datenfluss geht weiter?
Lg,
Tommy!
' schrieb:Welches Timeout bei der Read Node meinst du? Da gibts nirgends nen Eingang...
und
Was meinst du mit VISA Read kehrt zurück? Meinst du damit, falls einer dieser 4 Punkte zutrifft, gibt VISA Read nen Fehler aus und der Datenfluss geht weiter?
Das Timeout gibst du bei Config SerialPort an.
Rolf hat ja geschrieben, wann es einen Fehler gibt und wann nicht.
' schrieb:Das Timeout gibst du bei Config SerialPort an.
Rolf hat ja geschrieben, wann es einen Fehler gibt und wann nicht.
Mir war nur nicht ganz klar, was er mit "kehrt zurück" meinte