| | |
| | | using IStation.Application; |
| | | |
| | | namespace IStation.Service |
| | | namespace IStation.Service |
| | | { |
| | | /// <summary> |
| | | /// 调度分析辅助类 |
| | |
| | | this.Flag = flag; |
| | | } |
| | | public int Flag { get; set; } |
| | | } |
| | | } |
| | | #endregion |
| | | |
| | | #region Private Variable |
| | |
| | | private double _sel_opt_flow_excess = 1;//可选方案的流量余量 |
| | | private readonly double _sel_opt_pump_pressure_excess = 0;//可选方案的单泵扬程默认抬升余量 |
| | | |
| | | private readonly double _sel_opt_flow_deviation_ratio = 0.05;//可选方案的流量偏差比 |
| | | private double _sel_opt_flow_deviation_ratio = 0.05;//可选方案的流量偏差比 |
| | | private readonly double _sel_opt_reasonable_flow_deviation_ratio = 0.005;//合理的方案的流量偏差比 |
| | | |
| | | private readonly Service.AnalysisParameter _service_analysis_parameter = new(); |
| | |
| | | /// </summary> |
| | | public void Initial(List<int> current_open_flag_list, Model.ScheduleConfig schedule_config, List<Model.AnalysisDeviation> analysis_deviation_list) |
| | | { |
| | | |
| | | _current_open_flag_list = current_open_flag_list; |
| | | _min_open_count = 1; |
| | | _max_open_count = 0; |
| | |
| | | |
| | | |
| | | #region OptAnaCombine |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取最优组合 |
| | | /// </summary> |
| | |
| | | return default; |
| | | |
| | | //先修正组合曲线和模型的偏差扬程 |
| | | var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine); |
| | | var combine_deviation_factor_dict = GetCombineDeviationFactorDict(target_flow, combine); |
| | | var conclusion_ex_list_list = new List<List<AnalysisConclusionViewModel>>(); |
| | | var conclusion_ex_list_dict = new Dictionary<int, List<AnalysisConclusionViewModel>>(); |
| | | double max_supply_flow = 0; |
| | |
| | | } |
| | | |
| | | if (conclusion_ex_list_list.Count != combine.Count()) |
| | | return default; |
| | | return default; |
| | | |
| | | if (max_supply_flow < target_flow * _sel_opt_flow_excess) |
| | | { |
| | | if (GlobalHelper.IsStation1(combine)) |
| | | { |
| | | _sel_opt_flow_excess= 0.995; |
| | | _sel_opt_flow_excess = 0.995; |
| | | } |
| | | else |
| | | { |
| | | //人为修正 |
| | | if (combine.Count() < 3) |
| | | { |
| | | _sel_opt_flow_excess = 0.92; |
| | | _sel_opt_flow_deviation_ratio = 0.08; |
| | | } |
| | | } |
| | | |
| | | var flow_excess = target_flow * _sel_opt_flow_excess; |
| | | if (max_supply_flow < flow_excess) |
| | | return default; |
| | |
| | | ana_combine.TotalPower += opt_cl_ex.Power; |
| | | |
| | | var ana_fre_pump = new AnaFrePump(); |
| | | ana_fre_pump.Flag = flag; |
| | | ana_fre_pump.Flag = flag; |
| | | ana_fre_pump.Flow = opt_cl_ex.Flow; |
| | | ana_fre_pump.Head = opt_cl_ex.Head; |
| | | ana_fre_pump.PressureDiff = opt_cl_ex.PressureDiff; |
| | |
| | | Yw.LogHelper.Error($"[{Yw.Untity.IntListHelper.ToString(flags)}]组合不存在偏差系数!"); |
| | | return deviation_factor_dict; |
| | | } |
| | | |
| | | |
| | | var a = flow; |
| | | var flow_dev = flow; |
| | | Model.AnalysisDeviation analysis_deviation = null; |
| | |
| | | analysis_deviation = analysis_deviation_list.Where(x => x.MinFlow <= flow_dev && flow_dev <= x.MaxFlow).FirstOrDefault(); |
| | | if (analysis_deviation != null) |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | if (analysis_deviation == null) |
| | | { |
| | | Yw.LogHelper.Error($"[{Yw.Untity.IntListHelper.ToString(flags)}]组合不存在偏差系数!"); |
| | |
| | | #endregion |
| | | |
| | | #region Expand |
| | | |
| | | |
| | | /// <summary> |
| | | /// 获取变频泵列表 根据工况计算 |
| | | /// </summary> |
| | |
| | | |
| | | |
| | | var fre_pump = new AnaFrePump(); |
| | | fre_pump.Flag = flag; |
| | | fre_pump.Flag = flag; |
| | | fre_pump.Flow = flow; |
| | | fre_pump.Head = head; |
| | | fre_pump.Power = curveQP.GetFitPointY(flow); |
| | |
| | | |
| | | var CurveQH50 = pump.CurveQH; |
| | | var CurveQP50 = pump.CurveQP; |
| | | |
| | | |
| | | |
| | | var curveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(CurveQH50, pump.Nr, rpm); |
| | | var curveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(CurveQP50, pump.Nr, rpm); |
| | |
| | | flag_curve_head_dic[flag] = curveQH.GetFitPointY(working_flow); |
| | | |
| | | var fre_pump = new AnaFrePump(); |
| | | fre_pump.Flag = flag; |
| | | fre_pump.Flag = flag; |
| | | fre_pump.Flow = flow; |
| | | fre_pump.Head = head; |
| | | fre_pump.Power = curveQP.GetFitPointY(flow); |
| | |
| | | fre_pump.Frequency = rpm / pump.Nr * 50; |
| | | fre_pump.Speed = rpm; |
| | | |
| | | ana_fre_pump_list.Add(fre_pump); |
| | | ana_fre_pump_list.Add(fre_pump); |
| | | } |
| | | |
| | | |