mikrocontroller.net

Forum: PC-Programmierung VB2008: Serielle Schnittstelle und Synchronisation der Applikation


Autor: Volker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Forum,

ich möchte den Datenempfang über die serielle Schnittstelle mit meiner 
restlichen Applikation synchronisieren. Die Datenübertragung wird durch 
ein kleines Protokoll gesteuert. Wenn ich Daten sende, dann bekomme ich 
nach einiger Zeit eine positive/negative Antwort. Anschliessend sollen 
je nach Antwort entweder neue Daten gesendet, oder die alten wiederholt 
werden.

In der Umsetzung sieht das bislang so aus, dass ich über die SerialPort 
Komponente auf serielle Schnittstelle zugreife. Über den DataReceived 
Event empfange ich die Daten, die dann dekodiert und ausgewertet werden. 
Das funktioniert soweit auch alles zufrieden stellend.

Wenn ich jetzt viele Daten zu senden habe, dann würde ich gerne im 
Programmteil, der die Sendedaten in ein Protokoll verpackt so lange mit 
dem Senden "warten", bis ich das OK für das korrekte Versenden der Daten 
über die serielle Schnittstelle zurück gekommen ist (loop-until) und ich 
dann das nächste Datenpaket auf die Reise schicke.

Die Frage ist nun, wie bekomme ich beim Senden mit, dass etwas empfangen 
worden ist? Unterbricht der DataReceived Event meinen anderen 
Programmteil und wertet die Daten aus? Läuft die SerialPort Komponente 
in einem eigenen Thread?

Meine ersten Versuche dahingehend waren leider nicht erfolgreich. Ich 
habe im DataReceived Event nach der Dekodierung ein Flag für den 
korrekten Empfang gesetzt und auf dieses beim Senden geprüft. Leider bin 
ich an dieser Stelle dann immer in eine Endlosschleife gestapft :-(

Wie kann ich nun den Datenaustausch zwischen der SerialPort Komponente 
und meiner restlichen Applikation gestalten? Ist es eine gute Idee die 
Auswertung in einen eigenen Thread zu verpacken? Würde zum Beispiel der 
BackgroundWorker etwas bringen, wenn ich auf die positive Antwort warte? 
Wie warte ich am Geschicktesten in einem Programmteil auf Daten von der 
seriellen Schnittelle?

Bin für jede Hilfe dankbar!

Viele Grüße

Volker

Autor: Andreas Kanzler (scavanger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jep, mit Threads bist du auf dem richtigen Weg. Die musst du sogar 
verwenden da ansonsten deine GUI blokiert solange auf die Daten gewartet 
wird.

Bau dir am besten eine Klasse die das Empfangen der Daten übernimmt (in 
einem eigenem Thread) und wenn alle Daten empfangen worden sind feuert 
die Klasse einen Event der signalisiert das alle Daten angekommen sind.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.