Serielles Port in C#

#2896621
Lesenswert?

Hallo,
für ein kleines Projekt will ich andauernd Messdaten von einem uC auf 
meinem PC über die serielle Schnittstelle einlesen!
Leider habe ich nun das Problem, dass ich nur einmal etwas zurückbekomme 
anstatt den andauernden Messwerten.

Ich hab mir das so vorgestellt, dass ich zuerst eine "1" Senden muss, 
dann bekomme ich vom Controller die Antwort "ALles OK Messung startet".
Leider kriege ich aber nur diese Nachricht und keine weiteren Messdaten 
auf meinem selbst programmierten seriellen Port!

Das uC sollte stimmmen, da es im Simulator ( Keil ) und auch mit 
Hyperterminal einwandfrei funktioniert.

Habe nun schon sehr sehr viel Zeit reingesetzt und hoffe jemand von euch 
kann mir helfen!

Projekt und der Code als txt sind im Anhang!

mfg
Florian W.
Angehängte Dateien:
#2896801
Lesenswert?

Ich würde in DataReceived lieber nur .ReadExisting() aufrufen.
Mit .ReadLine() blockiert der Thread ggf. wenn im Puffer noch keine 
komplette Zeile vorhanden ist, könnte vllt. problematisch sein.

...oder mach die ganze Geschichte in einem Thread (bzw. 
BackgroundWorker) und verwende DataReceived gar nicht.

Ansonsten würde ich generell immer:
- serialPort.Encoding setzen
- serialPort.NewLine setzen
Gast #2899142
Lesenswert?

Einfach einen BackgroundWorker aus der Toolbox auf die Form ziehen.
Klickt man dann doppelt drauf erzeugt VS die Methode für dessen 
DoWork-Event.
Mittels .RunWorkerAsync() kann der BackgroundWorker gestartet werden, 
die DoWork()-Methode wird dann in einem eigenen Thread ausgeführt und 
läuft unabhängig vom GUI-Thread.

Da auf Windows.Forms-Elemente aus anderen Threads nicht zugegriffen 
werden darf, muss man in DoWork() wie auch bei DataReceived mit Invoke 
arbeiten - oder kann alternativ Daten an den GUI-Thread über die 
backgroundWorker.ReportProgress()-Funktion übermitteln.
http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker(v=vs.80).aspx
...auf youtube gibts auch einige Videos darüber.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren