C# begrenzt COM-Schnittstelle

Gast #2476695
Lesenswert?

Hallo

mein Problem ist das ich wenn ich in C# ein Projekt mit 
COM-Schnittstelle 115200 Baud einstelle nur max alle 15 ms einen neuen 
Wert schicken kann, so das dieser aktuelle ist. Wenn ich schneller vom 
Mikrocontroller sende staut es sich irgendwann trotz Datatreceived event 
obwohl der Comport dir ganze Zeit geöffnet ist. Bei einem Bekannten 
läuft das programm ohne Probleme. Bei mir Zeigt das C#programm maximal 
10 empfangene Daten pro Sekunde, obwohl ich bei Hterm 400 mal die Daten 
gesendet bekomme.

private void COMPORT_DataReceived(object sender, 
SerialDataReceivedEventArgs e)
    {
        try
        {
           Einlesen = COMPORT.ReadLine();
           empfangen++;
        }
        catch
        {
           ;
        }
    }
Gast #2476791
Lesenswert?

Peter schrieb:
> Das geht aber bei nem Bekannten haben mal probiert wer am schnellsten
> senden kann. Als meins nicht besonders schnell ging hat er mein Programm
> mal bei sich probiert und hab auch da die 400 Datensätze geschickt und
> angezeigt bekommen

Wenn es irgendwo geht und woanders nicht liegt es meist an der 
Fehlerhaften software!

Was ist wenn nach dem Event keine Zeilenende kommt? dann blockiert dein 
Programm. Was ist wenn die Daten zu schnell kommen und 2 Zeilen im 
Puffer sind und nur ein event kommt?
Gast #2477106
Lesenswert?

Das sollte nicht so gemeint sein das ich das nicht ändern will. Ich will 
nur nachvollziehen und verstehen. Gleiche Software mit gleichem 
Controller läuft ja auf anderer Hardware. Nur bei mir eben nicht. Der 
Nachteil ist doch das der Controller im prog dann immer solange wartet 
bis der PC-Empfangsbereit ist. Dadurch geht mir viel perfomance 
verloren.
Gast #2477213
Lesenswert?

Peter schrieb:
> Gleiche Software mit gleichem
> Controller läuft ja auf anderer Hardware. Nur bei mir eben nicht. Der
> Nachteil ist doch das der Controller im prog dann immer solange wartet
> bis der PC-Empfangsbereit ist. Dadurch geht mir viel perfomance
> verloren.

Das kann schon alleine an unterschiedlich großen Puffern (Treiber, 
Hardware, etc.) liegen.
Wie bereits gesagt bei Events auf jedenfall alle vorliegenden Daten 
lesen bevor man den Event-Handler verlässt.
Ich persönlich bevorzuge Thread + SerialPort ohne Events, aber das ist 
Geschmackssache.
Wenn es um hohen Durchsatz geht (oder generell) vielleicht auch mal über 
USB nachdenken...
Gast #2477446
Lesenswert?

Hi

Ich bin fertig mit einem Windows 7 Hyperterminal mit Plugin-System. Das 
funktioniert sehr gut. Dabei würde ich in Deinem Fall prüfen, wie gross 
der
1
SerialCommPort1.BytesToRead
 ist. Das Lesen über das DataReceived Event würde ich da aussen vor 
lassen. Ich würde, wenn der BytesToRead Count korrekt ist, über
1
SerialCommPort1.Read(Byte(), Int32, Int32)
 arbeiten.
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.aspx


lg
Timo
Gast #2477570
Lesenswert?

Hallo

also habe es mal ohne Event Versucht, bzw mit

Einlesen = COMPORT.ReadExisting();

Passt auch soweit aber dann gehen ja auch viele Daten verloren. Will 
eine möglichst hohe Datenrate erreichen. Bin da eigentlich nur durch den 
Mikrocontroller begrenzt.

Thread hab ich schon gehört. Würde aber auch gerne zählen lassen wie oft 
die Daten angekommen sind (und Fehlerhaft ausgelesen wurden).

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