Hallo Ich habe ein kleines Programm geschreiben das über den Serial Port einen String an ein RFM22B Funk Modul sendet. Das andere Modul empfängt den String und sendet ihn als Kontrolle zurück. Dabei soll je nach dem was zurück kommt die Farbe des Sende Knopfs geändert werden. Leider funktioniert die Auswertung des Empfangsstrings nicht so wie ich mir das vorstelle. Teilweise wird der String falsch empfangen. Einen Fehler der RFM Module schließe ich aus da ich wenn ich den String über ein Terminal Modul sende auch immer richtig zurückkommt. Habe das C# Programm einmal angehängt. Gruß Christoph
Direkt den Rückgabewert von .ReadExisting() zu nehmen macht auch keinen Sinn. Da könnte statt "Messer_ON\n" auch nur "Me" drin stehen und beim nächsten Aufruf dann "sser_ON" und später noch "\n". Du müsstest dir den Rückgabewerte von ReadExisting() an irgendeinen String (z.B. "ReceivedUntilNow") dranhängen und diesen nach vollständigen Zeilen durchsuchen, z.B. so:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
In ReceivedString wird einfach erstmal alles was so reinkommt drangehängt und dient einfach als Puffer. Die ExtractCompleteLines() geht über ReceivedString drüber und sammelt da komplette Zeilen raus (die anschließend in ReceivedString nicht mehr drin sind) btw: serialPort1_DataReceived läuft NICHT im GUI-Thread! Auf GUI-Elemente darf aber in der Regel nur vom GUI-Thread zugegriffen werden. D.h. z.B. bt_Messer.BackColor = Color.Red kann zu Exceptions führen! siehe z.B.: http://www.codeproject.com/Articles/52752/Updating-Your-Form-from-Another-Thread-without-Cre
Danke Bernd für die Hilfe. Es klappt nun. Dachte immer das nur anspringt wenn ein \n ankommt. Werde mir morgen das mal genauer anschauen und mich bei fragen melden :-) Gruß Christoph
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.