Forum: PC-Programmierung DataReceive Fehler bei wiederholtem Empfagen


von Martin (Gast)


Lesenswert?

1
  private void port_DataReceive(object sender, SerialDataReceivedEventArgs e)
2
        {
3
            if (!comport.IsOpen) return;
4
5
            if (CurrentDataMode == DataMode.Text)
6
            {
7
                data = "NULL";
8
                data = comport.ReadExisting();
9
                
10
                int length = data.Length;
11
12
                if (length != 18)
13
                {
14
                    MessageBox.Show("Nicht alle daten sind angekommen", "Übertragungsfehler", MessageBoxButtons.OK, MessageBoxIcon.Error);
15
                    return;
16
                }
17
.
18
.
19
.

HAllO  ich möchte über den ComPort Daten empfangen.
Mein Problem ist, dass bei 2. Senden der Daten nicht alle 18 ASCII 
Zeichen ankommen. Bei 1. Durchlauf der oben gezeigten Funktion läuft es 
wunderbar, dann bekomme ich immer nur 1 bis 2 ASCII Zeichen an.

Kann mir jemand sagen was ich falsch mache?

Bautrate 9600
kein Parity
1 Stopbit
8 dataBits

Danke schon mal Gruß

Martin.

von Peter II (Gast)


Lesenswert?

Martin schrieb:
> Kann mir jemand sagen was ich falsch mache?

nichts machst du falsch, das ist absolut normal.

Die zeichen kommen rein wie sie lust haben. also mal 2 zeichen mal 5 
zeichen und eventuell mal 10 zeichen auf einmal. Du musst dich selber 
darum kömmern sie wieder zusamemnzusetzen.

von Martin (Gast)


Lesenswert?

Als Zusatz!


Wenn ich debugge läuft alles ohne Fehler!!!!

von Peter II (Gast)


Lesenswert?

Martin schrieb:
> Wenn ich debugge läuft alles ohne Fehler!!!!

klar weil du wartezeiten reinbringt die alles ändern.

von Martin (Gast)


Lesenswert?

Danke!!!

von Jonas B. (jibi)


Lesenswert?

>data = "NULL";
>data = comport.ReadExisting();

Was is'n das fürn Murks? So is besser:

data = string.Empty;
data = comport.ReadExisting();

Außerdem sollte man für den Empfang und das Senden Threads starten die 
das ganze asynchron abarbeiten und nicht eventuell deine GUI blockieren.

Gruß Jonas

von Peter II (Gast)


Lesenswert?

Jonas Biensack schrieb:
> Was is'n das fürn Murks? So is besser:
>
> data = string.Empty;
> data = comport.ReadExisting();

was ist daran besser, ist genauso ein Murks!

data = comport.ReadExisting();

reicht vollkommen aus, mehr also eine neue Referenz kann man data nicht 
zuweisen.

Aber das ist eh nicht das hauptproblem.

von Peter II (Gast)


Lesenswert?

Jonas Biensack schrieb:
> Außerdem sollte man für den Empfang und das Senden Threads starten die
> das ganze asynchron abarbeiten und nicht eventuell deine GUI blockieren.

er arbeitet schon mit events,  dabei blockiert keine GUI!

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.