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.
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
Wie genau funktioniert das den in einem Thread? Hab da jez bisschen gegooglt aber keine Ahnung wie ich das angehen soll :(
Die while - Schleife wird niemals bedient.
1 | string RecievedLine = " "; |
2 | while (RecievedLine != " ") |
3 | {
|
4 | ...
|
Zum Threaden für Form - Anwendungen kannst du die Timer - Klasse verwenden. http://msdn.microsoft.com/de-de/library/vstudio/system.windows.forms.timer.aspx
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.
ähm, der DataReceived wird doch nur aufgerufen wenn ich Daten bekomme, odeR? und danke das mit dem ReadExisting hat gut geklappt!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.