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); } }
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); }