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


von Volker (Gast)


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

von Andreas K. (scavanger)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.