namespace IStation.Algorithm { /// /// 调度分析辅助类 Model /// public partial class AnalysisHelper { /// /// 分析泵 /// public class AnaPump { /// /// /// public AnaPump() { } /// /// /// /// public AnaPump(Model.Pump rhs) { this.Flag = rhs.Flag; this.Name = rhs.Name; this.Code = rhs.Code; this.IsBp = rhs.IsBp; this.Qr = rhs.Qr; this.Hr = rhs.Hr; this.Nr = rhs.Nr; this.Pr = rhs.Pr; this.Er = rhs.Er; if (rhs.CurveQH != null && rhs.CurveQP != null) { this.CurveQH = rhs.CurveQH.Clone(); this.CurveQP = rhs.CurveQP.Clone(); this.AllowCalc = true; } this.CalcFrequencyItems(50, 50, 50, 0.1); } /// /// /// /// /// /// /// /// /// public AnaPump(Model.Pump rhs, double freDef, double freMin, double freMax, double freSpace, Dictionary fre_head_diff_avg_dict = null) : this(rhs) { this.CalcFrequencyItems(freDef, freMin, freMax, freSpace, fre_head_diff_avg_dict); } /// /// /// public int Flag { get; set; } /// /// /// public string Code { get; set; } /// /// /// public string Name { get; set; } /// /// /// public double Qr { get; set; } /// /// /// public double Hr { get; set; } /// /// /// public double Nr { get; set; } /// /// /// public double Pr { get; set; } /// /// /// public double Er { get; set; } /// /// /// public bool IsBp { get; set; } /// /// /// public Curve.CurveExpress CurveQH { get; set; } /// /// /// public Curve.CurveExpress CurveQP { get; set; } /// /// /// public List AnaFrequencyItems { get; set; } /// /// /// public bool AllowCalc { get; set; } void CalcFrequencyItems(double freDef, double fre_min, double fre_max, double fre_space, Dictionary fre_head_diff_avg_dict = null) { if (!this.AllowCalc) return; this.AnaFrequencyItems = new List(); var exist_dict = fre_head_diff_avg_dict != null && fre_head_diff_avg_dict.Any(); decimal fre_min_decimal = (decimal)fre_min; decimal fre_max_decimal = (decimal)fre_max; decimal fre_space_decimal = (decimal)fre_space; for (decimal fre_decimal = fre_max_decimal; fre_decimal >= fre_min_decimal; fre_decimal -= fre_space_decimal) { var freItem = new AnaPumpFre(); freItem.Frequency = (double)Math.Round(fre_decimal, 1); CurveExpress curve_qh = this.CurveQH; double fre_double = (double)fre_decimal; if (exist_dict) { if (fre_head_diff_avg_dict.ContainsKey(fre_double)) { var head_diff_factor = fre_head_diff_avg_dict[fre_double] ?? 0; var add_factor_points = this.CurveQH.DefinePoints .Select(x => new Curve.CurvePoint(x.X, x.Y + head_diff_factor)) .ToList(); curve_qh = Curve.FitHelper.BuildCurveExpress(add_factor_points, eFitType.FourM); } } freItem.CurveQH = Curve.PumpCalculateHelper.CalculateSimilarQH(curve_qh, freDef, fre_double); freItem.CurveQP = Curve.PumpCalculateHelper.CalculateSimilarQP(this.CurveQP, freDef, fre_double); this.AnaFrequencyItems.Add(freItem); } } } /// /// 分析泵变频项 /// public class AnaPumpFre { /// /// /// public double Frequency { get; set; } /// /// /// public Curve.CurveExpress CurveQH { get; set; } /// /// /// public Curve.CurveExpress CurveQP { get; set; } } } }