private void SendCommand(CeForecast forecastResult) { commands = new List <List <ScadaCommandingEvent> >(); var proxy = new SF.Common.Proxies.ScadaExportProxy(ConfigurationManager.AppSettings["Scada"]); var commanding = new CommandingProxy(ConfigurationManager.AppSettings["Command"]); var points = proxy.GetData().GetAwaiter().GetResult(); if (points == null) { return; } foreach (var item in forecastResult.Results.Take(24)) { var cmds = new List <ScadaCommandingEvent>(); for (int i = 0; i < item.Pumps.Count(); i++) { var onOff = item.Pumps[i]; var time = item.Times[i]; var flow = item.Flows[i]; if (points.ContainsKey($"Breaker_2{i + 1}Status")) { var breaker2 = points[$"Breaker_2{i + 1}Status"]; if (onOff != 0) { var command1 = new ScadaCommandingEvent() { Index = (uint)breaker2.Index, RegisterType = breaker2.RegisterType, Milliseconds = 0, Value = (uint)onOff }; cmds.Add(command1); } } if (points.ContainsKey($"Discrete_Tap{i + 1}") && onOff == 1) { var tap = points[$"Discrete_Tap{i + 1}"]; var command2 = new ScadaCommandingEvent() { Index = (uint)tap.Index, RegisterType = tap.RegisterType, Milliseconds = 0, Value = (uint)(flow / 100) }; cmds.Add(command2); } } commands.Add(cmds); } }
private void Calculations() { if (points > 0 && points < 4) { if (pointUpdateOccures) { ChangeStrategy(); } forecastResult = new CeForecast(); var area = GetSurfaceArea(); var weatherForecast = weatherAPI.GetForecast(); var weather = new List <double>(); weatherForecast.ForEach(x => weather.Add(x * area)); float current = GetCurrentFluidLevel(); for (int i = 0; i < weatherForecast.Count; i++) { ChangeStrategy(); for (int j = 0; j < 4; j++) { var income = ((float)weather[i]) / 4; current += income; if (skip && i == 0) { current -= income; skip = false; break; } result = algorithm.Start(current); var processedResult = ProcessResult(current, result); forecastResult.Results.AddRange(processedResult); current -= GetTotalFromResults(result.Genes); } } SendCommand(forecastResult); Update(forecastResult, weather); } }
private void Update(CeForecast forecastResult, List <double> weather) { CeUpdateEvent update = new CeUpdateEvent(); update.Income = new List <double>(); for (int i = 0; i < weather.Count; i++) { double integralIncome = 0; for (int j = 0; j < 4; j++) { integralIncome += weather[i] / 4; update.Income.Add(integralIncome); } } update.Times = GetTimes(); update.FluidLevel = new List <float>(); foreach (var item in forecastResult.Results) { update.FluidLevel.Add(item.StartFluidLevel); update.FluidLevel.Add(item.EndFluidLevel); } update.Hours = new List <PumpsHours>(); update.Flows = new List <PumpsFlows>(); graph = new CeGraphicalEvent(); graph.PumpsValues = new Core.Common.ServiceBus.Events.CeGraph(); List <List <long> > list = new List <List <long> >(); for (int i = 0; i < points; i++) { var macList = new List <long>(); long cumm = 0; var hours = new PumpsHours(); var flows = new PumpsFlows(); foreach (var item in forecastResult.Results) { if (item.Pumps[i] == 1) { hours.Hours.Add(item.Times[i]); flows.Flows.Add(item.Flows[i]); cumm += (long)(item.Times[i]); } else { hours.Hours.Add(0); flows.Flows.Add(0); } macList.Add(cumm); } update.Hours.Add(hours); update.Flows.Add(flows); list.Add(macList); } pubsub.SendMessage(new Core.Common.PubSub.PubSubMessage() { ContentType = Core.Common.PubSub.ContentType.CE_UPDATE, Content = JsonTool.Serialize <CeUpdateEvent>(update), Sender = Core.Common.PubSub.Sender.CE }).GetAwaiter().GetResult(); if (points == 1) { graph.PumpsValues.Pump1.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump1.YAxes = list[0]; } if (points == 2) { graph.PumpsValues.Pump1.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump1.YAxes = list[0]; graph.PumpsValues.Pump2.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump2.YAxes = list[1]; } if (points == 3) { graph.PumpsValues.Pump1.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump1.YAxes = list[0]; graph.PumpsValues.Pump2.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump2.YAxes = list[1]; graph.PumpsValues.Pump3.XAxes = update.Times.ConvertAll(x => DateTime.Parse(x)); graph.PumpsValues.Pump3.YAxes = list[2]; } }