using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using IStation.Service.Dispatch;
|
|
namespace IStation.Service
|
{
|
/// <summary>
|
/// 长兴岛(调度)
|
/// </summary>
|
|
public class CxdDispatchHelper
|
{
|
/// <summary>
|
/// 计算流量压力
|
/// </summary>
|
public List<ViewModel.AnaPlan> CalcuByFlowAndPress(ViewModel.CalcuParas_Cxd paras,bool UseEpn=false)
|
{
|
if (paras.PipeQ2 < 10 && paras.PipeQ1 < 10)
|
{
|
return default;
|
}
|
|
var list = new List<ViewModel.AnaPlan>();
|
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<ViewModel.PumpInfo>();
|
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<ViewModel.AnaPlan> 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<long>() { 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<ViewModel.AnaPlan> 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<long>() { 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;
|
}
|
|
}
|
}
|