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