namespace IStation.Algorithm
|
{
|
/// <summary>
|
/// 调度分析辅助类 Model
|
/// </summary>
|
public partial class AnalysisHelper
|
{
|
/// <summary>
|
/// 分析泵
|
/// </summary>
|
public class AnaPump
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public AnaPump() { }
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="rhs"></param>
|
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);
|
}
|
|
|
/// <summary>
|
///
|
/// </summary>
|
/// <param name="rhs"></param>
|
/// <param name="freDef"></param>
|
/// <param name="freMin"></param>
|
/// <param name="freMax"></param>
|
/// <param name="freSpace"></param>
|
/// <param name="fre_head_diff_avg_dict"></param>
|
public AnaPump(Model.Pump rhs, double freDef, double freMin, double freMax, double freSpace, Dictionary<double,double?> fre_head_diff_avg_dict = null) : this(rhs)
|
{
|
this.CalcFrequencyItems(freDef, freMin, freMax, freSpace, fre_head_diff_avg_dict);
|
}
|
|
/// <summary>
|
///
|
/// </summary>
|
public int Flag { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public string Code { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public string Name { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public double Qr { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public double Hr { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public double Nr { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public double Pr { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public double Er { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public bool IsBp { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public Curve.CurveExpress CurveQH { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public Curve.CurveExpress CurveQP { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public List<AnaPumpFre> AnaFrequencyItems { get; set; }
|
|
/// <summary>
|
///
|
/// </summary>
|
public bool AllowCalc { get; set; }
|
|
void CalcFrequencyItems(double freDef, double fre_min, double fre_max, double fre_space, Dictionary<double, double?> fre_head_diff_avg_dict = null)
|
{
|
if (!this.AllowCalc)
|
return;
|
this.AnaFrequencyItems = new List<AnaPumpFre>();
|
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);
|
}
|
}
|
|
}
|
|
/// <summary>
|
/// 分析泵变频项
|
/// </summary>
|
public class AnaPumpFre
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public double Frequency { get; set; }
|
/// <summary>
|
///
|
/// </summary>
|
public Curve.CurveExpress CurveQH { get; set; }
|
/// <summary>
|
///
|
/// </summary>
|
public Curve.CurveExpress CurveQP { get; set; }
|
}
|
|
}
|
}
|