示例#1
0
        private void Refresh()
        {
            while (true)
            {
                var gs = dbg.ReadAllForLC(Data.Code);

                foreach (var gen in gs)
                {
                    int id = gen.Id;

                    if (generators.FirstOrDefault(g => g.Id == gen.Id) == null)
                    {
                        //Zato sto se ObservableCollection ne moze menjati u drugom threadu
                        //
                        App.Current.Dispatcher.Invoke((Action) delegate
                        {
                            generators.Add(gen);
                        });
                    }
                    else
                    {
                        App.Current.Dispatcher.Invoke((Action) delegate
                        {
                            generators.FirstOrDefault(g => g.Id == id).CurrentPower = gen.CurrentPower;
                            generators.FirstOrDefault(g => g.Id == id).Control      = gen.Control;
                        });
                    }
                }

                Thread.Sleep(500);
            }
        }
示例#2
0
        public Dictionary <int, double> GetGroupCalculations(string groupCode, DateTime fromDate, DateTime toDate)
        {
            List <Generator> generators = dbg.ReadAllForLC(Data.Code).Where(g => g.GroupName == groupCode).ToList(); //svi generatori za ovaj lokalni kontroler

            List <DateTime> dates = new List <DateTime>();                                                           //lista svih mogucih trenutaka kada su merenja belezena

            foreach (Generator g in generators)
            {
                foreach (Measurement m in g.MeasurementHistory)
                {
                    if (m.Date.Date >= fromDate.Date && m.Date.Date <= toDate.Date)
                    {
                        if (!dates.Contains(m.Date.AddTicks(-m.Date.Ticks % TimeSpan.TicksPerSecond))) // dodajemo trenutak u listu ukoliko vec ne postoji i ako ispunjava prosledjen datum
                        {
                            dates.Add(m.Date.AddTicks(-m.Date.Ticks % TimeSpan.TicksPerSecond));
                        }
                    }
                }
            }

            int numOfdates = dates.Count;
            Dictionary <int, double> keyValuePairs = new Dictionary <int, double>();   //int - redni broj trenutka iz dates, double - ukupna vrednost merenja svih gen za taj trenutak

            for (int i = 0; i < dates.Count; i++)
            {
                keyValuePairs.Add(i, 0);                     //inicijalizujemo vrednost merenja za svkai trenutak na 0
            }


            for (int i = 0; i < numOfdates; i++)
            {
                foreach (Generator g in generators)
                {
                    foreach (Measurement m in g.MeasurementHistory)
                    {
                        if (m.Date.Date >= fromDate.Date && m.Date.Date <= toDate.Date)
                        {
                            if (m.Date.AddTicks(-m.Date.Ticks % TimeSpan.TicksPerSecond) == dates[i]) //ako je ovo merenje bas u i-tom trenutku
                            {
                                keyValuePairs[i] += m.Value;
                            }
                        }
                    }
                }
            }

            //dobili smo zbir svih merenja za svaki trenutak koji postoji <vremenski_trenutak, ukupna_snage>, u funkcijama dalje izvlacimo min, max, average

            return(keyValuePairs);
        }