habe einmal eine grundsätzliche Frage...
Ich habe eine Funktion, die über eine COM-Schnittstelle daten bekommt(Siehe CODE)
Gucke ich mir den Verkehr der Daten von PC -> µC und umgekehrt an, erfolgt die Ausgabe der Werte wesentlich schneller als in meinem geschriebenen Programm,...
Mit folgendem Code ist die Ausgabe in der Listbox wesentlich langsamer als im HyperTerminal, woran kann es liegen, was ist schuld?
Hoffe ihr habt Hilfe für mich!
Danke im Voraus!
//Funktion: Empfang von µC
private void PortSeriell_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
wert = Convert.ToString(PortSeriell.ReadTo(";")); //PC liest Werte bis Zeichen ;
wertbefehl = wert; //Umspeichern in wertbefehl
//Startet der Wert mit : dann handelt es sich um einen Befehl
if (wert.StartsWith(":"))
{
wertbefehl = wert.Trim(':'); //: wird weggeschnitten
Give2lbx1(wertbefehl); //Übergabe an Funktion
}
//Startet der Wert mit # dann handelt es sich um eine Position
if (wert.StartsWith("#"))
{
wert = wert.Trim('#'); //# wird weggeschnitten
Positionscheck1(wert); //Übergabe an Funktion
}
}
//Ausgabefunktion der empfangenen Werte
private void Give2lbx1(string ausgabewert)
{
if (lbxAction.InvokeRequired)
{
Give2lbx stext = new Give2lbx(Give2lbx1);
Invoke(stext, new object[] { ausgabewert });
}
else
{
//Auswahl: welcher Befehl ist eingegangen?
switch (ausgabewert)
{
case "b":
bewegung = "fahren vorwärts";
break;
case "d":
bewegung = "fahren vorwärts STOPP";
break;
case "f":
bewegung = "fahren rückwärts";
break;
case "h":
bewegung = "fahren rückwärts STOPP";
break;
case "j":
befehl[4] = 0; //unwichtig....
bewegung = "Kamera vorwärts";
break;
case "l":
befehl[5] = 0;
bewegung = "Kamera vorwärts STOPP";
break;
case "p":
befehl[7] = 0;
bewegung = "Kamera rückwärts STOPP";
break;
case "n":
befehl[6] = 0;
bewegung = "Kamera rückwärts";
break;
case "r":
befehl[8] = 0;
bewegung = "Kamera rechts";
break;
case "t":
befehl[9] = 0;
bewegung = "Kamera rechts STOPP";
break;
case "v":
befehl[10] = 0;
bewegung = "Kamera links";
break;
case "x":
befehl[11] = 0;
bewegung = "Kamera links STOPP";
break;
}
lbxAction.Items.Add(ausgabewert.ToString() + " von µC erhalten - " + bewegung);
lbStatusMC.Text = bewegung;
}
}
//Wird Position von µC erhalten, wird sie gleich wieder an diesen gesendet!
private void Positionscheck1(string positionswert)
{
char[] position = new char[6]; //char-Array wird zum Senden an den µC angelegt
position[0] = '#';
position[5] = ';';
for (int i = 1; i < 5; i++)
{
position[i] = positionswert[i - 1]; //Zusammenfügen zu einem char-Array
}
PortSeriell.Write(position, 0, 6); //Zurücksenden an den µC
string ausgabetext = new string(position);
//Ausgabe der empfangenen und gesendeten Position
lbxAction.Items.Add(positionswert + " von µC erhalten! ");
lbxAction.Items.Add(ausgabetext + " an µC gesendet! ");
}