using System; using System.Collections.Generic; using System.Linq; namespace IStation.Model { /// /// 曲线计算辅助类 /// public class CurveCalcuHelper { #region 计算效率 /// /// 计算效率 /// /// 瞬时流量 m³/h /// 扬程 m /// 功率 kw /// 密度 kg/m^3 /// 重力加速度 m/s^2 /// 百分数 public static double CalculateE(double q, double h, double p, double ρ, double g) { q = q / 3600; p = p * 1000; double e = 0; if (p < 0.1) return e; e = ρ * g * q * h / p; return Math.Round(e * 100, 2); } /// /// 计算效率 /// /// 瞬时流量 m³/h /// 扬程 m /// 功率 kw /// 百分数 public static double CalculateE(double q, double h, double p) { return CalculateE(q, h, p, ConstantParas.WaterDensity, ConstantParas.g); } /// /// 计算效率 /// /// 瞬时流量 m³/h /// 扬程 m /// 功率 kw /// 密度 kg/m^3 /// 百分数 public static double CalculateE(double q, double h, double p, double ρ) { return CalculateE(q, h, p, ρ, ConstantParas.g); } #endregion #region 计算功率 /// /// 计算功率 /// /// 瞬时流量 m³/h /// 扬程 m /// 效率 百分数 /// 密度kg/m³ /// 重力加速度 m/s² /// kw public static double CalculateP(double q, double h, double e, double ρ, double g) { q = q / 3600; e = e / 100; double p = 0; if (e < 0.01) return p; p = ρ * g * q * h / e; p = p / 1000;//换算成kw if (p < 2) return Math.Round(p, 4); if (p < 30) return Math.Round(p, 3); if (p < 100) return Math.Round(p, 2); return Math.Round(p, 1); } /// /// 计算功率 /// /// 瞬时流量 m³/h /// 扬程 m /// 效率 百分数 /// 密度kg/m³ /// kw public static double CalculateP(double q, double h, double e, double ρ) { return CalculateP(q, h, e, ρ, ConstantParas.g); } /// /// 计算功率 /// /// 瞬时流量 m³/h /// 扬程 m /// 效率 百分数 /// kw public static double CalculateP(double q, double h, double e) { return CalculateP(q, h, e, ConstantParas.WaterDensity, ConstantParas.g); } #endregion #region Mpa<=>m /// /// Mpa=>m /// public static double Mpa2M(double mpa) { return mpa * ConstantParas.WaterDensity / ConstantParas.g; } /// /// m=>Mpa /// public static double M2Mpa(double m) { return m * ConstantParas.g / ConstantParas.WaterDensity; } #endregion #region 计算用电量 /// /// 计算用电量 /// /// 功率kw /// 时间h /// kw*h public static double CalculateD(double p, double t) { return p * t; } #endregion #region 计算累积流量 /// /// 计算累积流量 /// /// 瞬时流量m³/h /// 时间h /// public static double CalculateQt(double q, double t) { return q * t; } #endregion #region 计算能耗 /// /// 计算千吨能耗 /// /// 功率kW /// 瞬时流量m³/h /// kW·h/km³ public static double CalculateWP(double p, double q) { if (q < 0.1) return 0; return p / q * 1000; } /// /// 计算单位能耗 /// /// 功率kW /// 瞬时流量m³/h /// 扬程m /// kW·h/km³ public static double CalculateUWP(double p, double q, double h) { if (q < 0.1) return default; if (h < 0.1) return default; return p / q / h * 1000; } #endregion #region 计算其他压力 nsx 20220504 /// /// 计算其他压力 /// /// 流量 m³/h /// 进口管径 mm /// 出口管径 mm /// 进口标高 m /// 出口标高 m /// public static double CalculateOtherPress(double? q, double? inletPipeDia, double? outletPipeDia, double? inletElevation, double? outletElevation) { if (q == null || q.Value < 0.05) { if (outletElevation == null || inletElevation == null) return 0; return outletElevation.Value - inletElevation.Value; } double flow = q.Value; double inPipeV = 0; if (inletPipeDia != null && inletPipeDia.Value > 0.1) { // 流速计算 pipeD =mm,pumpFlow=m3/p inPipeV = ConstantParas.OtherPressCoeff * flow / inletPipeDia.Value / inletPipeDia.Value; } double outPipeV = 0; if (outletPipeDia != null && outletPipeDia.Value > 0.1) { // 流速计算 rPipeD =mm,rPumpFlow=m3/p outPipeV = ConstantParas.OtherPressCoeff * flow / outletPipeDia.Value / outletPipeDia.Value; } double differV = (outPipeV * outPipeV - inPipeV * inPipeV) / ConstantParas.g / 2.0; if (outletElevation == null || inletElevation == null) return differV; return differV + outletElevation.Value - inletElevation.Value; } #endregion #region 计算50Hz时的值 /// /// 根据频率计算 50hz流量 /// /// 瞬时流量 m³/h /// 频率 kw /// public static double Calculate50QByHz(double q, double hz) { if (hz < 10 || hz > 49.9) return q; double f_ratio = 50 / hz; return q * f_ratio; } /// /// 根据频率计算 50hz扬程 /// /// 扬程 m /// 频率 kw /// public static double Calculate50HByHz(double h, double hz) { if (hz < 10 || hz > 49.9) return h; double f_ratio = 50 / hz; return h * f_ratio * f_ratio; } /// /// 根据频率计算 50hz功率 /// /// 功率 kw /// 频率 kw /// public static double CalculatePByHz(double p, double hz) { if (hz < 10 || hz > 49.9) return p; double f_ratio = 50 / hz; return p * f_ratio * f_ratio * f_ratio; } #endregion #region 相似换算 /// /// 计算相似流量扬程曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateSimilarQH(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量功率曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateSimilarQP(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio * ratio; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量效率曲线 /// /// 表达式 /// 原始频率 /// 换算频率 /// 拟合点数量 /// public static CurveExpress CalculateSimilarQE(CurveExpress express, double originHz, double changeHz, int pointNumber = 12) { if (express == null) return null; if (changeHz < 1) return null; List fitPoints = null; if (express.DefinePoints != null && express.DefinePoints.Any()) fitPoints = express.DefinePoints; else fitPoints = FitCurveHelper.GetFitPoints(express, pointNumber); var ratio = changeHz / originHz; var similarPoints = new List(); foreach (CurvePoint fitPoint in fitPoints) { var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y; similarPoints.Add(similarPoint); } return new CurveExpress(similarPoints, express.FitType); } /// /// 计算相似流量扬程点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateSimilarQH(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio; return similarPoint; } /// /// 计算相似流量功率点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateSimilarQP(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y * ratio * ratio * ratio; return similarPoint; } /// /// 计算相似流量效率点 /// /// 点 /// 原始频率 /// 换算频率 /// public static CurvePoint CalculateSimilarQE(CurvePoint fitPoint, double originHz, double changeHz) { if (fitPoint == null) return null; if (changeHz < 1) return null; var ratio = changeHz / originHz; var similarPoint = new CurvePoint(); similarPoint.X = fitPoint.X * ratio; similarPoint.Y = fitPoint.Y; return similarPoint; } #endregion } }