| | |
| | | private readonly decimal _frequency_def = 50m; |
| | | private readonly decimal _frequency_min = 25m; |
| | | private readonly decimal _frequency_max = 50m; |
| | | private readonly decimal _frequency_space = 0.1m;//频率间隔 |
| | | private readonly decimal _frequency_space = 0.2m;//频率间隔 |
| | | private readonly decimal _head_space = 0.1m;//扬程间隔 |
| | | |
| | | private readonly DAL.SQLite.AnalysisPump _dal_analysis_pump = new(); |
| | |
| | | /// <param name="pumps"></param> |
| | | /// <param name="analysis_factor_list"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void AnalysisPump(List<Model.Pump> pumps, List<Model.AnalysisFactor> analysis_factor_list=null) |
| | | public void AnalysisPump(List<Model.Pump> pumps, List<Model.AnalysisFactor> analysis_factor_list = null) |
| | | { |
| | | InsertLog("开始分析泵组合"); |
| | | if (pumps == null || pumps.Count < 1) |
| | |
| | | } |
| | | else |
| | | { |
| | | var hz_head_dev_dict = analysis_factor_list?.Where(x=>x.Flag==pump.Flag)?.ToDictionary(x => x.Hz, y => y.HeadDeviation); |
| | | var hz_head_dev_dict = analysis_factor_list?.Where(x => x.Flag == pump.Flag)?.ToDictionary(x => x.Hz, y => y.HeadDeviation); |
| | | ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_min, _frequency_max, _frequency_space, pump, hz_head_dev_dict); |
| | | } |
| | | |
| | |
| | | decimal fre_max, |
| | | decimal fre_space, |
| | | Model.Pump pump, |
| | | Dictionary<double,double?> hz_head_dev_dict=null) |
| | | Dictionary<double, double?> hz_head_dev_dict = null) |
| | | { |
| | | if (pump == null) |
| | | { |
| | |
| | | var list = new List<AnaPumpFreItem>(); |
| | | for (decimal fre = fre_max; fre >= fre_min; fre -= fre_space) |
| | | { |
| | | var hz= (double)Math.Round(fre, 1); |
| | | var hz0=Math.Round(hz, 0); |
| | | |
| | | Curve.CurveExpress qh = pump.CurveQH, qp= pump.CurveQP; |
| | | var hz = (double)Math.Round(fre, 1); |
| | | var hz0 = Math.Round(hz, 0); |
| | | |
| | | Curve.CurveExpress qh = pump.CurveQH, qp = pump.CurveQP; |
| | | if (exist_dict) |
| | | { |
| | | if (hz_head_dev_dict.ContainsKey(hz0)) |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 分析泵 |
| | | /// </summary> |
| | | /// <param name="pumps"></param> |
| | | /// <param name="analysis_factor_list"></param> |
| | | /// <exception cref="Exception"></exception> |
| | | public void AnalysisNew(List<Model.Pump> pumps, Dictionary<int, Dictionary<int, List<CurvePoint>>> flagHzCurveDict) |
| | | { |
| | | InsertLog("开始分析泵"); |
| | | if (pumps == null || pumps.Count < 1) |
| | | { |
| | | InsertLog("分析失败:没有泵数据!"); |
| | | return; |
| | | } |
| | | |
| | | var ana_pump_list = new List<AnaPump>(); |
| | | foreach (var pump in pumps) |
| | | { |
| | | var ana_pump = new AnaPump(pump); |
| | | if (!ana_pump.AllowCalc) |
| | | { |
| | | throw new Exception("曲线数据异常!"); |
| | | } |
| | | |
| | | var hzCurveDict = flagHzCurveDict[pump.Flag]; |
| | | var ana_pump_fre_item_list = new List<AnaPumpFreItem>(); |
| | | if (!pump.IsBp) |
| | | { |
| | | ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_def, _frequency_def, _frequency_space, pump, hzCurveDict); |
| | | } |
| | | else |
| | | { |
| | | ana_pump_fre_item_list = GetAnaPumpFreItems(_frequency_def, _frequency_min, _frequency_max, _frequency_space, pump, hzCurveDict); |
| | | } |
| | | |
| | | ana_pump.AnaPumpFreItems = ana_pump_fre_item_list; |
| | | ana_pump_list.Add(ana_pump); |
| | | } |
| | | |
| | | if (!ana_pump_list.Any()) |
| | | { |
| | | InsertLog($"分析进度:没有泵可分析"); |
| | | return; |
| | | } |
| | | for (int i = 0; i < ana_pump_list.Count; i++) |
| | | { |
| | | var pump = ana_pump_list[i]; |
| | | var ana_pump_fre_items = pump.AnaPumpFreItems; |
| | | if (ana_pump_fre_items == null || !ana_pump_fre_items.Any()) |
| | | continue; |
| | | |
| | | var run_flag = RunFlagHelper.Get(pump.Flag, pump.IsBp); |
| | | InsertLog($"分析进度:第{i + 1}台泵"); |
| | | |
| | | var list = new List<Entity.AnalysisPump>(pump.AnaPumpFreItems.Count); |
| | | foreach (var freItem in ana_pump_fre_items) |
| | | { |
| | | var analysis_pump = new Entity.AnalysisPump(); |
| | | analysis_pump.ID = Yw.YitIdHelper.NextId(); |
| | | analysis_pump.Flag = pump.Flag; |
| | | analysis_pump.Hz = freItem.Frequency; |
| | | analysis_pump.CurveQH = freItem.CurveQH.ToJson(); |
| | | analysis_pump.CurveQP = freItem.CurveQP.ToJson(); |
| | | |
| | | freItem.CurveQH.GetMinMaxPointY(out double maxHead, out double minHead); |
| | | analysis_pump.MinFlow = Math.Round(freItem.CurveQH.Min, 4); |
| | | analysis_pump.MaxFlow = Math.Round(freItem.CurveQH.Max, 4); |
| | | analysis_pump.MaxHead = Math.Round(maxHead, 4); |
| | | analysis_pump.MinHead = Math.Round(minHead, 4); |
| | | list.Add(analysis_pump); |
| | | } |
| | | Inserts(i + 1, run_flag, list); |
| | | } |
| | | |
| | | InsertLog($"分析进度:{pumps.Count}台泵,分析完毕!"); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 获取分析泵变频项 |
| | | /// </summary> |
| | | private static List<AnaPumpFreItem> GetAnaPumpFreItems( |
| | | decimal fre_def, |
| | | decimal fre_min, |
| | | decimal fre_max, |
| | | decimal fre_space, |
| | | Model.Pump pump, |
| | | Dictionary<int,List<CurvePoint>> hzCurveDict) |
| | | { |
| | | if (pump == null) |
| | | { |
| | | return default; |
| | | } |
| | | if (pump.CurveQH == null || pump.CurveQP == null) |
| | | { |
| | | return default; |
| | | } |
| | | var list = new List<AnaPumpFreItem>(); |
| | | for (int i = (int)fre_max; i >= fre_min; i--) |
| | | { |
| | | var hz = i; |
| | | if (!hzCurveDict.ContainsKey(hz)) |
| | | { |
| | | continue; |
| | | } |
| | | var qhHzCurve = hzCurveDict[hz]; |
| | | for (decimal j = 1; j >= 0; j -= fre_space) |
| | | { |
| | | var fre = hz - j; |
| | | var qh = IStation.Curve.FitHelper.BuildCurveExpress(qhHzCurve); |
| | | var qp = pump.CurveQP; |
| | | |
| | | var freItem = new AnaPumpFreItem(); |
| | | freItem.Frequency = (double)fre; |
| | | freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(qh, (double)hz, (double)fre); |
| | | freItem.CurveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(qp, (double)fre_def, (double)fre); |
| | | list.Add(freItem); |
| | | } |
| | | |
| | | } |
| | | |
| | | return list; |
| | | |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region AnalysisParameter |