Das sind viele Fragen:
Zitat:- Eigenschaftsknoten Bytes at Port
Hier handelt es sich um eine reine Statusmeldung, im Buffer ändert sich nichts. Man kann den Ausgang dazu benutzen, ihn an VISARed anzuschließen, so daß dann genau die Anzahl Bytes gelesen werden, welche im Buffer sind
Zitat:VISA: Read
Das steht schon im Posting von Markus. Also auf Deutsch: die Funktion wartet, bis eines der drei Ereignisse eingetritt:
a) Die am Eingang angeschlossene Bytezahl (oder mehr) befinden sich im Empfangsbuffer.
b) Falls in VISAKonfig aktiviert: TerminalChr trifft ein. In der Regel ist das 0xA
c) Timeout. Wert wird in Visakonfig eingestellt.
Edit zu b)
Wenn im Moment des Lesens nicht mehr auf das Eintreffen von 0xA gewartet werden muß, weil sich im Puffer schon eine Zeichenkette mit ein oder mehreren 0xA befindet, dann liest VisaRead ohne zu warten den Teil des Puffers bis zum nächsten 0xA aus.
Zitat:Meine Frage bezieht sich auf das Entleeren des Eingangspuffers von VISA Read, und zwar was geschieht wenn mehrere Responsetelegramme hintereinander empfangen werden sollen, wird der Eingangspuffer dann überschrieben, serialisiert, verworfen,...
Überschrieben wird der Empfangsbuffer grundsätzlich nicht. Es gibt da 2 Möglichkeiten.
a) Mit Flußkontrolle (Entweder "Hart" mit RTS/CTS oder "Soft" mit Xoff/Xon): Das Senden von Bytes (auf der Gegenstelle) wird gegebenenfalls verhindert, damit der Empfangsbuffer nicht überläuft.
b) Ohne Fußkontrolle: Hier muß dafür gesorgt sein, das der Empfangsbuffer genügend groß ist bzw. mit genügender Geschwindigkeit entleert wird. Wenn der Buffer voll ist und es wird weiter gesendet, dann wird nichts überschrieben, sondern die weiter gesendeten Bytes werden ins Nirvana gesendet und gehen verloren.
Zitat:Was passiert außerdem mit dem Eigenschaftsknoten Bytes at Port wenn im Moment erst ein Teil der Responsedaten empfangen wurden?
Wie ich schon sagte, passiert beim Lesen von Bytes at Board nie etwas, es wird die momentane Anzahl von Bytes im Buffer ausgegeben, fertig. Man kann auch den Eigenschaftknoten in eine While-Schleife hineintun und so lannge pollen, bis eine erwartete Anzahl von Bytes im Buffer eingetroffen ist.
Zitat:Wie kann ich mehrere nacheinander eintreffende Responsetelegramme voneinander unterscheiden, bzw. feststellen ob ein Telegramm nicht empfangen wurde?
Die Telegramme werden in der Reihenfolge empfangen, in der sie gesendet wurden, won daher gibt es keine Probleme. Mit dem Eigenschaftknoten Bytes on Board kannst Du jederzeit konntrollieren, ob sich vielleicht mehrere Telegramme im Buffer angestaut haben und ob der Stau vielleicht sogar in die Nähe der voreingstellte Buffergröße kommt.
Eine andere Frage ist, wie man in einem Bytestrom von mehreren Telegrammen die Schittstellen zwischen den einzelnen Telegrammen (das Ende jedes Telegramms) feststellt. Möglichkeit 1: Mit TerminalChar. Nachteil ist: Datenbytes dürfen dann nur als ASCII-Zeichen gesendet werden, d.h es werden zwei ASCII-Zeichen für ein Datenbyte gebraucht. (Also z. B die Zeichenkette "FF" für die 8 bit-Zahl 255). Diese Übertragungsart ist der Regelfall, wir man schon daran sieht, daß Visa Read nur das Textformat annimmt. Der genannte "Nachteil" ist eher selten relevant.
Möglichkeit 2: Der Sender sendet nur nach Aufforderung, und man weiß, daß z.B 12 Bytes als Antwort kommen müssen. Dann wartet man mit VisaRead, bis 12 Bytes eingetroffen sind. Probleme mit Bufferüberlauf kann es da gar nicht geben.