예제 #1
0
        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;
        }
예제 #2
0
        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);
            }
        }