using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using IStation.Service.Dispatch; namespace IStation.Service { /// /// 长兴岛(调度) /// public class CxdDispatchHelper { /// /// 计算流量压力 /// public List CalcuByFlowAndPress(ViewModel.CalcuParas_Cxd paras,bool UseEpn=false) { if (paras.PipeQ2 < 10 && paras.PipeQ1 < 10) { return default; } var list = new List(); double H = 0; double Elevation = 0; var inletLevel = paras.MonitorPointInfoList.Find(x =>x.SignalType == IStation.SignalType.水位); Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0; if (UseEpn) { } else { if (paras.ValveStatus == 1) { GeneralHelper pipe_helper = new GeneralHelper(); var vm = paras.GetSum(); if (paras.PipeQ1 < 10) { var M = MPaToM(paras.PipePr2); if (inletLevel != null) H = M - (inletLevel.Value + Elevation); else H = M; } if (paras.PipeQ2 < 10) { var M = MPaToM(paras.PipePr1); if (inletLevel != null) H = M - (inletLevel.Value + Elevation); else H = M; } if (H==0) { var M = MPaToM((paras.PipePr1 + paras.PipePr2) / 2); if (inletLevel != null) H = M - (inletLevel.Value + Elevation); else H = M; } vm.TargetH = H; list = pipe_helper.CalcuByFlowAndPress(vm); } else { if (paras.PipeQ2 < 10) { return Pipe1(paras); } else if (paras.PipeQ1 < 10) { return Pipe2(paras); } var pipe1_result = Pipe1(paras); var pipe2_result = Pipe2(paras); if (pipe1_result == null || pipe2_result == null) return default; var result_1 = pipe1_result.OrderByDescending(x => x.E).First(); var result_2 = pipe2_result.OrderByDescending(x => x.E).First(); var plan = new ViewModel.AnaPlan(); plan.Q = result_1.Q + result_2.Q; plan.H = result_1.H + result_2.H; plan.P = result_1.P + result_2.P; plan.E = Model.CurveCalcuHelper.CalculateE(plan.Q, plan.H, plan.P); plan.UWP = Model.CurveCalcuHelper.CalculateUWP(plan.P, plan.Q, plan.H); plan.WP = Model.CurveCalcuHelper.CalculateWP(plan.P, plan.Q); plan.PumpInfoList = new List(); if (result_1.PumpInfoList != null && result_1.PumpInfoList.Count > 0) plan.PumpInfoList.AddRange(result_1.PumpInfoList); if (result_2.PumpInfoList != null && result_2.PumpInfoList.Count > 0) plan.PumpInfoList.AddRange(result_2.PumpInfoList); plan.RunNumber = plan.PumpInfoList.Count; list.Add(plan); } } return list; } private List Pipe1(ViewModel.CalcuParas_Cxd paras) { double H = 0; double Elevation = 0; var inletLevel = paras.MonitorPointInfoList.Find(x => x.SignalType == IStation.SignalType.水位); Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0; GeneralHelper pipe_helper = new GeneralHelper(); var pipe1_machineIds = new List() { 19, 22 };//1号泵,2号泵 var vm1 = paras.GetPipe1(pipe1_machineIds); var M1 = MPaToM(paras.PipePr1); if (inletLevel != null) H = M1 - (inletLevel.Value + Elevation); else H = M1; vm1.TargetH = H; pipe_helper.SetDefaultAnaMachineIds(pipe1_machineIds); var pipe1_result = pipe_helper.CalcuByFlowAndPress(vm1); if (pipe1_result == null || pipe1_result.Count < 1) return default; return pipe1_result; } private List Pipe2(ViewModel.CalcuParas_Cxd paras) { double H = 0; double Elevation = 0; var inletLevel = paras.MonitorPointInfoList.Find(x => x.SignalType == IStation.SignalType.水位); Elevation = inletLevel?.Elevation != null ? inletLevel.Elevation.Value : 0; GeneralHelper pipe_helper = new GeneralHelper(); var pipe2_machineIds = new List() { 25, 28 };//3号泵,4号泵 var vm2 = paras.GetPipe2(pipe2_machineIds); var M2 = MPaToM(paras.PipePr2); if (inletLevel != null) H = M2 - (inletLevel.Value + Elevation); else H = M2; vm2.TargetH = H; pipe_helper.SetDefaultAnaMachineIds(pipe2_machineIds); var pipe2_result = pipe_helper.CalcuByFlowAndPress(vm2); if (pipe2_result == null || pipe2_result.Count < 1) return default; return pipe2_result; } //转换 private double MPaToM(double Press) { return Press * 102; } } }