public void EventHandlerWHMessungWorker(object sender, DoWorkEventArgs e) { for (int i = 0; i < Arduino.Datensatz168p.Count(); i++) { if (Arduino.Datensatz168p[i].WhMessungAn)//Messung für den Datensatz ist nicht an { Arduino.Send_Komando(PassivBMS.WhMessung(i + 1)); System.Threading.Thread.Sleep(1000); if (Arduino.Datensatz168p[i].WHMessungAnzahl > 2)// Erst ab den dritten Dattensatz beginng die Messung { if (Arduino.Datensatz168p[i].Whtime != Arduino.Datensatz168p[i].time) { deltT = Convert.ToDouble(Arduino.Datensatz168p[i].Whtime - Arduino.Datensatz168p[i].time); Arduino.Datensatz168p[i].WhMessungErgebnis += deltT * Arduino.Datensatz168p[i].vin * Arduino.Datensatz168p[i].alast / 1000 / 60 / 60;//Umrechung in Wh Arduino.Datensatz168p[i].Whtime = Arduino.Datensatz168p[i].time; Arduino.Datensatz168p[i].WhMessung.Add(Convert.ToString(deltT) + "," + Convert.ToString(Arduino.Datensatz168p[i].vin) + "," + Convert.ToString(Arduino.Datensatz168p[i].alast)); Arduino.Datensatz168p[i].Whtime = Arduino.Datensatz168p[i].time; } } else { Arduino.Datensatz168p[i].WhMessungMessungVinStart = Arduino.Datensatz168p[i].vin; Arduino.Datensatz168p[i].Whtime = Arduino.Datensatz168p[i].time; } Arduino.Datensatz168p[i].WHMessungAnzahl++; } else { if (Arduino.Datensatz168p[i].mFet) { Arduino.Send_Komando(PassivBMS.Mosfet(i + 1, false)); Arduino.Datensatz168p[i].mFet = false; } } if (Arduino.Datensatz168p[i].fehler)//Bricht die Messung ab da ein Fehler aufgetreten ist { Thread.Sleep(1000); Arduino.Send_Komando(PassivBMS.Mosfet(i + 1, false)); Arduino.Datensatz168p[i].mFet = false; break; } } }
private void ButtonWHMessungStart_Click(object sender, EventArgs e) { utcDate = DateTime.UtcNow; utcDate = utcDate.AddHours(2.0); Arduino.Datensatz168p[Convert.ToInt32(AuswahlBMS) - 1].mFet = true; Arduino.Send_Komando(PassivBMS.Mosfet(AuswahlBMS, true)); Arduino.Datensatz168p[Convert.ToInt32(AuswahlBMS) - 1].WhMessungAn = true; Arduino.Send_Komando(PassivBMS.WhMessung(AuswahlBMS)); Thread.Sleep(300); Arduino.Datensatz168p[Convert.ToInt32(AuswahlBMS) - 1].WhMessungStartzeit = utcDate; TextBoxWhMessungZeitStart.Text = Arduino.Datensatz168p[Convert.ToInt32(AuswahlBMS) - 1].WhMessungStartzeit.ToString(System.Globalization.CultureInfo.CreateSpecificCulture("de-DE")); Thread.Sleep(100); TextBoxWhMessungVinStart.Text = ""; TextBoxWhMessungZeitEnde.Text = ""; TextBoxWhMessungVinEnde.Text = ""; TextBoxWhMessungAnzahl.Text = ""; TextBoxWhMessung.Text = ""; Arduino.Datensatz168p[Convert.ToInt32(AuswahlBMS) - 1].WHMessungAnzahl = 0; if (!WHMessungWorker.IsBusy)// WH messung läuft bereits und kann nicht zweimal gestartet werden Alle Messungen müssen vorher beenden werden { WHMessungWorker.RunWorkerAsync(); } }