public MainWindow() { connectionString = ConfigurationManager.ConnectionStrings["SHES.Properties.Settings.BazaPodatakaConnectionString"].ConnectionString; Baterije = new BindingList <Baterija>(); Potrosaci = new BindingList <Potrosac>(); SolarniPaneli = new BindingList <SolarniPanel>(); ElektricniAutomobili = new BindingList <ElektricniAutomobil>(); autoBaterije = new List <Baterija>(); Datumi = new BindingList <Datum>(); SnagaSunca = 0; cenovnik = 0; Punjac = new Punjac(); jednaSekundaJe = int.Parse(ConfigurationManager.AppSettings["jednaSekundaJe"]); distribucija = new Elektrodistribucija(); podaciZaGraf = new List <PodaciZaGraf>(); metode = new Metode(new MetodeRepozitorijum()); InitializeComponent(); metode.UcitajUredjaje(); Labels = new[] { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24" }; Formatter = value => value.ToString("N"); metode.UcitajDatume(); metode.UcitajPoslednjiSat(); labelCenovnik.Content = cenovnik + " $"; labelSnagaSunca.Content = SnagaSunca.ToString(); PodesiSnaguSunca(SnagaSunca); labelSnagaSunca.Foreground = Brushes.Black; labelSnagaRazmene.Content = distribucija.SnagaRazmene.ToString(); labelCena.Content = distribucija.Cena.ToString(); Thread pokreniServer = new Thread(() => PokreniServer()); pokreniServer.IsBackground = true; pokreniServer.Start(); Thread azuriranje = new Thread(() => Azuriranje()); azuriranje.IsBackground = true; azuriranje.Start(); DataContext = this; }
void Azuriranje() { int pozoviBaterije = 0; bool puni = false; bool puni2 = false; int vremeZaAzuriranje = trenutnoVreme.Minute * 60 + trenutnoVreme.Second; DateTime staraSekunda = DateTime.Now; int stariSat = trenutnoVreme.Hour; int brSekunda = 0; bool prosaoDan = false; DateTime stariDatum = trenutnoVreme.Date; //da se pozove ucitavanje //UcitajPoslednjiSat(); while (true) { trenutnoVreme = trenutnoVreme.AddSeconds(1); brSekunda++; PodesiTrenutnoVreme(); vremeZaAzuriranje++; double potrosnja = 0; int StaraSnagaSunca = 0; double StaraSnagaRazmene = 0; string StaraCena = ""; string puniSE = ""; string staroIme = ""; string staraCena = ""; App.Current.Dispatcher.Invoke((System.Action) delegate { int.TryParse(labelSnagaSunca.Content.ToString(), out StaraSnagaSunca); double.TryParse(labelSnagaRazmene.Content.ToString(), out StaraSnagaRazmene); StaraCena = labelCena.Content.ToString(); puniSE = labelPuniSe.Content.ToString(); staroIme = labelNaPunjacu.Content.ToString(); staraCena = labelCenovnik.Content.ToString(); }); if (Punjac.Automobil != null) { if (puni2 != Punjac.NaPunjacu) { if (Punjac.NaPunjacu == false) { PodesiPuniSe(""); } else { PodesiPunjac(Punjac.Automobil.JedinstvenoIme); } puni2 = Punjac.NaPunjacu; } if (puni != Punjac.PuniSe) { if (Punjac.PuniSe == false) { PodesiPuniSe(""); } else { PodesiPuniSe(Punjac.Automobil.JedinstvenoIme); } puni = Punjac.PuniSe; } } else { PodesiPunjac(""); puni = false; PodesiPuniSe(""); puni2 = false; } if (staraCena != cenovnik.ToString() + " $") { PodesiCenovnik(cenovnik); } if (StaraSnagaSunca != SnagaSunca) { PodesiSnaguSunca(SnagaSunca); } if (StaraSnagaRazmene != distribucija.SnagaRazmene) { PodesiSnaguRazmene(distribucija.SnagaRazmene); } if (StaraCena != distribucija.Cena.ToString() + " $") { PodesiCenu(distribucija.Cena); } if (pozoviBaterije == 60) { pozoviBaterije = 0; } if (trenutnoVreme.Hour >= 3 && trenutnoVreme.Hour < 6) { foreach (Baterija b in Baterije) { if (b.TrenutniKapacitet < b.Kapacitet) { double povratnaBaterije = metode.PunjenjeBaterije(b, false); baterije += povratnaBaterije; potrosnja += povratnaBaterije; } if (pozoviBaterije == 0 && b.TrenutniKapacitet <= b.Kapacitet) { if (b.TrenutniKapacitet + (b.MaksimalnaSnaga / 60) <= b.Kapacitet) { b.TrenutniKapacitet += b.MaksimalnaSnaga / 60; b.TrenutniKapacitet = Math.Round(b.TrenutniKapacitet, 4); } else { b.TrenutniKapacitet = b.Kapacitet; } } } } else if (trenutnoVreme.Hour >= 14 && trenutnoVreme.Hour < 17) { foreach (Baterija b in Baterije) { if (b.TrenutniKapacitet > 0) { double povratnaBaterije = metode.PraznjenjeBaterije(b); baterije -= povratnaBaterije; potrosnja -= povratnaBaterije; } if (pozoviBaterije == 0 && b.TrenutniKapacitet >= 0) { if (b.TrenutniKapacitet - (b.MaksimalnaSnaga / 60) >= 0) { b.TrenutniKapacitet -= b.MaksimalnaSnaga / 60; b.TrenutniKapacitet = Math.Round(b.TrenutniKapacitet, 4); } else { b.TrenutniKapacitet = 0; } } } } else if ((trenutnoVreme.Hour == 6 && trenutnoVreme.Minute == 0 && trenutnoVreme.Second == 0) || (trenutnoVreme.Hour == 17 && trenutnoVreme.Minute == 0 && trenutnoVreme.Second == 0)) { foreach (Baterija b in Baterije) { metode.ResetBaterije(b); } } foreach (Potrosac p in Potrosaci) { if (p.Upaljen) { potrosaci += p.Potrosnja / 3600; potrosnja += p.Potrosnja / 3600; } } if (Punjac.PuniSe) { if (Punjac.Automobil.BaterijaAuta.TrenutniKapacitet < Punjac.Automobil.BaterijaAuta.Kapacitet) { potrosnja += metode.PunjenjeBaterije(Punjac.Automobil.BaterijaAuta, true); } if (pozoviBaterije == 0 && Punjac.Automobil.BaterijaAuta.TrenutniKapacitet <= Punjac.Automobil.BaterijaAuta.Kapacitet) { if (Punjac.Automobil.BaterijaAuta.TrenutniKapacitet + (Punjac.Automobil.BaterijaAuta.MaksimalnaSnaga / 60) <= Punjac.Automobil.BaterijaAuta.Kapacitet) { Punjac.Automobil.BaterijaAuta.TrenutniKapacitet += Punjac.Automobil.BaterijaAuta.MaksimalnaSnaga / 60; Punjac.Automobil.BaterijaAuta.TrenutniKapacitet = Math.Round(Punjac.Automobil.BaterijaAuta.TrenutniKapacitet, 4); } else { Punjac.Automobil.BaterijaAuta.TrenutniKapacitet = Punjac.Automobil.BaterijaAuta.Kapacitet; } } } foreach (SolarniPanel s in SolarniPaneli) { solarniPaneli -= ((s.MaksimalnaSnaga / 3600) / 100) * SnagaSunca; potrosnja -= ((s.MaksimalnaSnaga / 3600) / 100) * SnagaSunca; } cenovnik += (distribucija.Cena * (potrosnja * (-1))); distribucija.SnagaRazmene += (potrosnja * (-1)); distribucijaSat += potrosnja; pozoviBaterije++; if (podaciZaGraf.Count != 0) { foreach (PodaciZaGraf pzg in podaciZaGraf.ToList()) { if (pzg.Datum.Date == trenutnoVreme.Date) { if (pzg.Sat == trenutnoVreme.Hour) { pzg.Baterije = baterije * (-1); pzg.Distribucija = distribucijaSat * (-1); pzg.SolarniPaneli = solarniPaneli * (-1); pzg.Potrosaci = potrosaci * (-1); } else { podaciZaGraf.Add(new PodaciZaGraf(trenutnoVreme.Hour, trenutnoVreme.Date, baterije * (-1), distribucijaSat * (-1), solarniPaneli * (-1), potrosaci * (-1))); } } else { podaciZaGraf.Add(new PodaciZaGraf(trenutnoVreme.Hour, trenutnoVreme.Date, baterije * (-1), distribucijaSat * (-1), solarniPaneli * (-1), potrosaci * (-1))); } } } else { podaciZaGraf.Add(new PodaciZaGraf(trenutnoVreme.Hour, trenutnoVreme.Date, baterije * (-1), distribucijaSat * (-1), solarniPaneli * (-1), potrosaci * (-1))); if (stariDatum.Date != trenutnoVreme.Date) { stariDatum = trenutnoVreme.Date; prosaoDan = true; } } //ZapamtiVreme(); if (staraSekunda.Second != DateTime.Now.Second) { brSekunda = 0; metode.ZapamtiZaGraf(baterije * (-1), solarniPaneli * (-1), distribucijaSat * (-1), potrosaci * (-1)); if (prosaoDan == true) { metode.UcitajDatume(); prosaoDan = false; } staraSekunda = DateTime.Now; } if (stariSat != trenutnoVreme.Hour) { stariSat = trenutnoVreme.Hour; baterije = 0; solarniPaneli = 0; distribucijaSat = 0; potrosaci = 0; } Thread.Sleep(1000 / jednaSekundaJe); } }