Hallo
es soll über den seriell port Daten abgelesen werden und angezeigt werden über balken daigramm echtzeit. hat bis 5 sensor gut geklappt.Ab ´5 sensor zeigt er folgenden fehler an.
das ist der code
private void ProcessCOMRx(object sender, EventArgs e) // Auswertung der eingegangenen Daten
{
if (!string.IsNullOrEmpty(COMRx)) // wenn eingegangene Daten vorhanden sind:
{
string[] werte = COMRx.Split('\t'); // Daten in einzelne Werte teilen
DateTime jetzt = DateTime.Now; // Aktuelle Zeit laden
TimeSpan zsp = jetzt.Subtract(programmStart);// jetzt - programmStart
string zeitStempel = zsp.ToString(@"hh\:mm\:ss\.fff"); // Zeitstempel erzeugen und formatieren
richTextBox1.ScrollToCaret();// Autoscroll-Funktion
richTextBox1.AppendText(zeitStempel + '\t' + COMRx + '\n'); // Zeitstempel und Messwert in RichTextBox einfügen
// und neue Zeile anfangen
if (aufnahmeAktiv) // wenn Aufnahme läuft:
{
TimeSpan d = jetzt - start; // Zeitdifferenz für Aufnahmezeitstempel berechnen
zeit = d.TotalSeconds; // Anzahl der Skunden der Zeitdifferenz ermitteln
messwerte += COMRx + '\n'; // aktuelle Messwert-Reihe in "string messwerte" aufnehmen
messzeit += zeit.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture) + '\n'; // Messzeitpunkt aufnehmen
if (zeit >= limit) // wenn Messzeitpunkt die festgelegte Messzeit erreicht:
{
aufnahmeBeenden(); // Aufnahme beenden
}
lblZeitJetzt.Text = zeit.ToString("0.00", System.Globalization.CultureInfo.InvariantCulture); // Zeit-Label aktualisieren
}
this.chart1.Series.Clear(); // chart1 leeren
int i = 0;
this.chart1.Series.Add("s1"); // neue Series zu chart1 hinzufügen
foreach (string wert in werte) // für jeden Wert in "string werte"-Array:
{
if (sensorAktiv[i]) // wenn der dazugehörige Sensor aktiv ist:
{
double nextX = 1;
if (this.chart2.Series[chart2Series[i]].Points.Count > 0) // wenn die Anzahl der Werte größer als 0 ist:
{
nextX = this.chart2.Series[chart2Series[i]].Points[this.chart2.Series[chart2Series[i]].Points.Count - 1].XValue + 1;
//^^ nächstn freien Punkt auf X-Achse auswählen
}
this.chart2.Series[chart2Series[i]].Points.AddXY(nextX, wert); // neuen Messwert in Diagramm von chart2 für entsprechenden
// Sensor einfügen
this.chart1.Series["s1"].Points.AddXY(i + 1, wert); // Balken für entsprechenden Messwert in chart1 einfügen
}
else // wenn der Sensor deaktiviert ist, jeweils wert 0 in entsprechenes Diagramm einfügen (wie oben)
{
double nextX = 1;
if (this.chart2.Series[chart2Series[i]].Points.Count > 0)
{
nextX = this.chart2.Series[chart2Series[i]].Points[this.chart2.Series[chart2Series[i]].Points.Count - 1].XValue + 1;
}
this.chart2.Series[chart2Series[i]].Points.AddXY(nextX, 0);
this.chart1.Series["s1"].Points.AddXY(i + 1, 0);
}
while (this.chart2.Series[chart2Series[i]].Points.Count > 200) // solange mehr als 200 werte pro sensor in chart2 sind:
{
this.chart2.Series[chart2Series[i]].Points.RemoveAt(0); // ersten Punkt des Diagramms löschen
}
double min = this.chart2.Series[chart2Series[i]].Points[0].XValue; // ersten Punkt des Diagramms ermitteln
foreach (System.Windows.Forms.DataVisualization.Charting.ChartArea CA in this.chart2.ChartAreas) // für jedes Diagramm in chart2:
{
CA.AxisX.Minimum = min; // Ausschnitt anpassen: Minimalwert
CA.AxisX.Maximum = min + 200; // Ausschnitt anpassen: Maximalwert
}
i++; // i um eins inkrementieren
}
COMRx = ""; // "string COMRx" leeren
}
}
Danke
hier der fehler :> Fehlermeldung:
(system.index.outofrange.expection der Index ist außerhalb des Array bereich)
Die Fehlermeldung sagt doch schon wo das Problem liegt.
Du versuchst auf einen nicht existenten Array Index zuzugreifen. Im Stack Trace der Exception steht sogar in welcher Codezeile.
Siehe dazu auch [Artikel] Debugger: Wie verwende ich den von Visual Studio?
Weeks of programming can save you hours of planning