| |
VB.NET - Ein- und UmsteigerRe: Mehrere Befehle über RS232 senden/empfangen | | | Autor: Preisser | Datum: 08.07.12 14:06 |
| Hallo,
Bibobernie schrieb:
Zitat: | | Naja, ich empfange die Daten derzeit nicht über den Thread
sondern über ein Datarecive in dem ich alle existierenden
Zeichen einlese und an die Methode zum zusammenfügen
übergebe. Daher prüfe ich dort ob ein Empfangener String auch
Chr(13) enthält. Ich dachte zuerst auch das ich durch das
"If Buffer.Contains(Chr(13)) Then" unter Umständen
ein oder mehrere Zeichen übersehen könnt. Da das Datarecive
aber nach jedem Zeichen diese Methode aufzurufen scheint
hatte ich bis jetzt damit keine Probleme. | |
Ja, vermutlich funktioniert es meistens, weil das Gerät immer eine Nachricht absendet und eine Pause macht, bevor es eine weitere absendet - dann wird man das einzelne Paket meistens auch als solches empfangen. Trotzdem könnte es aber auch passieren, wenn das Gerät zwei Nachrichten schnell hintereinander abschickt, dass diese dann "in einem Rutsch", also in einem Paket, ankommen (oder, wenn eine Nachricht sehr groß ist, dass diese in mehreren Paketen ankommt).
Es handelt sich ja beim SerialPort um eine stream-basierte Kommunikation, nicht message-basiert, sodass man sich selbst darum kümmern muss, die einzelnen Nachrichten korrekt zu interpretieren.
Deshalb müsste man eigntlich immer beim Trennzeichen (13) den String splitten, und falls am Ende kein Trennzeichen stand, den hinteren Teil wieder an den Puffer anhängen, damit dieser für das nächste Datenpaket noch zur Verfügung steht. Wie gesagt, die SerialPort.ReadTo(...)-Methode erledigt das aber bereits .
Zitat: | | An sowas hatte ich auch gedacht allerdings habe ich ja zusätzlich das Datarecive-Event aktiviert. Wenn ich dann versuche im Thread mittels ReadTo die Antwort auszulesen kommt es da nicht zu eventuellen Redundanzen? Also das ich zuerst z.B. firstAnswer einlesen kann aber das Datarecive Event danach auch noch einmal den Empfangenen String bearbeitet. Oder gibt es eine Möglichkeit solche Events temporär, z.B. für die Dauer einer Methode, zu deaktivieren? | |
Naja, wenn du die Methode mit dem separaten Stream verwendest, darfst du eben einfach keinen Handler zum DataReceived-Event hinzufügen. | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|