ningshuxia
2024-05-07 aa77e2c1fbbe222b128380f784d607c0d55d5c0f
代码
已添加1个文件
294 ■■■■■ 文件已修改
Schedule/IStation.Algorithm/Helper/CurveCalcuHelper.cs 294 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Schedule/IStation.Algorithm/Helper/CurveCalcuHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,294 @@
namespace IStation
{
    /// <summary>
    /// æ›²çº¿è®¡ç®—辅助类
    /// </summary>
    public class CurveCalcuHelper
    {
        public const double g = 9.81;//重力加速度 m/s²
        public const double WaterDensity = 1000; //水的密度 g/L kg/m³
        public const double OtherPressCoeff = 4 * 1000 / Math.PI / 3.6;//其他压力系数 nsx ScadaAnaly用,20020504
        #region è®¡ç®—效率
        /// <summary>
        /// è®¡ç®—效率
        /// </summary>
        /// <param name="q"> çž¬æ—¶æµé‡ m³/h</param>
        /// <param name="h"> æ‰¬ç¨‹ m</param>
        /// <param name="p"> åŠŸçŽ‡ kw</param>
        /// <param name="ρ"> å¯†åº¦ kg/m^3</param>
        /// <param name="g"> é‡åŠ›åŠ é€Ÿåº¦ m/s^2</param>
        /// <returns>百分数</returns>
        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);
        }
        /// <summary>
        /// è®¡ç®—效率
        /// </summary>
        /// <param name="q"> çž¬æ—¶æµé‡ m³/h</param>
        /// <param name="h"> æ‰¬ç¨‹ m</param>
        /// <param name="p"> åŠŸçŽ‡ kw</param>
        /// <returns>百分数</returns>
        public static double CalculateE(double q, double h, double p)
        {
            return CalculateE(q, h, p, WaterDensity, g);
        }
        /// <summary>
        /// è®¡ç®—效率
        /// </summary>
        /// <param name="q"> çž¬æ—¶æµé‡ m³/h</param>
        /// <param name="h"> æ‰¬ç¨‹ m</param>
        /// <param name="p"> åŠŸçŽ‡ kw</param>
        /// <param name="ρ"> å¯†åº¦ kg/m^3</param>
        /// <returns>百分数</returns>
        public static double CalculateE(double q, double h, double p, double Ï)
        {
            return CalculateE(q, h, p, Ï, g);
        }
        #endregion
        #region è®¡ç®—功率
        /// <summary>
        /// è®¡ç®—功率
        /// </summary>
        /// <param name="q">瞬时流量 m³/h</param>
        /// <param name="h">扬程 m</param>
        /// <param name="e">效率 ç™¾åˆ†æ•°</param>
        /// <param name="ρ">密度kg/m³</param>
        /// <param name="g">重力加速度 m/s²</param>
        /// <returns>kw</returns>
        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);
        }
        /// <summary>
        /// è®¡ç®—功率
        /// </summary>
        /// <param name="q">瞬时流量 m³/h</param>
        /// <param name="h">扬程 m</param>
        /// <param name="e">效率 ç™¾åˆ†æ•°</param>
        /// <param name="ρ">密度kg/m³</param>
        /// <returns>kw</returns>
        public static double CalculateP(double q, double h, double e, double Ï)
        {
            return CalculateP(q, h, e, Ï, g);
        }
        /// <summary>
        /// è®¡ç®—功率
        /// </summary>
        /// <param name="q">瞬时流量 m³/h</param>
        /// <param name="h">扬程 m</param>
        /// <param name="e">效率 ç™¾åˆ†æ•°</param>
        /// <returns>kw</returns>
        public static double CalculateP(double q, double h, double e)
        {
            return CalculateP(q, h, e, WaterDensity, g);
        }
        #endregion
        #region Mpa<=>m
        /// <summary>
        /// Mpa=>m
        /// </summary>
        public static double Mpa2M(double mpa)
        {
            return mpa * WaterDensity / g;
        }
        /// <summary>
        /// m=>Mpa
        /// </summary>
        public static double M2Mpa(double m)
        {
            return m * g / WaterDensity;
        }
        #endregion
        #region è®¡ç®—用电量
        /// <summary>
        /// è®¡ç®—用电量
        /// </summary>
        /// <param name="p">功率kw</param>
        /// <param name="t">时间h</param>
        /// <returns>kw*h</returns>
        public static double CalculateD(double p, double t)
        {
            return p * t;
        }
        #endregion
        #region è®¡ç®—累积流量
        /// <summary>
        /// è®¡ç®—累积流量
        /// </summary>
        /// <param name="q">瞬时流量m³/h</param>
        /// <param name="t">时间h</param>
        /// <returns>m³</returns>
        public static double CalculateQt(double q, double t)
        {
            return q * t;
        }
        #endregion
        #region è®¡ç®—能耗
        /// <summary>
        /// è®¡ç®—千吨能耗
        /// </summary>
        /// <param name="p">功率kW</param>
        /// <param name="q">瞬时流量m³/h</param>
        /// <returns>kW·h/km³</returns>
        public static double CalculateWP(double p, double q)
        {
            if (q < 0.1)
                return 0;
            return p / q * 1000;
        }
        /// <summary>
        /// è®¡ç®—单位能耗
        /// </summary>
        /// <param name="p">功率kW</param>
        /// <param name="q">瞬时流量m³/h</param>
        /// <param name="h">扬程m</param>
        /// <returns>kW·h/km³</returns>
        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
        /// <summary>
        /// è®¡ç®—其他压力
        /// </summary>
        /// <param name="q">流量 m³/h  </param>
        /// <param name="inletPipeDia">进口管径 mm </param>
        /// <param name="outletPipeDia">出口管径 mm </param>
        /// <param name="inletElevation">进口标高 mm </param>
        /// <param name="oulteElevation">出口标高 mm </param>
        /// <returns></returns>
        public static double CalculateOtherPress(double? q, double? inletPipeDia, double? outletPipeDia, double? inletElevation, double? oulteElevation)
        {
            if (q == null || q.Value < 0.05)
            {
                if (oulteElevation == null || inletElevation == null)
                    return 0;
                return oulteElevation.Value - inletElevation.Value;
            }
            double flow = q.Value;
            double inPipeV = 0;
            if (inletPipeDia != null && inletPipeDia.Value > 0.1)
            {
                // æµé€Ÿè®¡ç®— pipeD =mm,pumpFlow=m3/p
                inPipeV = OtherPressCoeff * flow / inletPipeDia.Value / inletPipeDia.Value;
            }
            double outPipeV = 0;
            if (outletPipeDia != null && outletPipeDia.Value > 0.1)
            {
                // æµé€Ÿè®¡ç®— rPipeD =mm,rPumpFlow=m3/p
                outPipeV = OtherPressCoeff * flow / outletPipeDia.Value / outletPipeDia.Value;
            }
            double differV = (outPipeV * outPipeV - inPipeV * inPipeV) / g / 2.0;
            if (oulteElevation == null || inletElevation == null)
                return differV;
            return differV + oulteElevation.Value - inletElevation.Value;
        }
        #endregion
        #region è®¡ç®—50Hz时的值
        /// <summary>
        /// æ ¹æ®é¢‘率计算 50hz流量
        /// </summary>
        /// <param name="q">瞬时流量 m³/h</param>
        /// <param name="hz">频率 kw</param>
        /// <returns></returns>
        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;
        }
        /// <summary>
        /// æ ¹æ®é¢‘率计算 50hz扬程
        /// </summary>
        /// <param name="h">扬程 m</param>
        /// <param name="hz">频率 kw</param>
        /// <returns></returns>
        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;
        }
        /// <summary>
        /// æ ¹æ®é¢‘率计算 50hz功率
        /// </summary>
        /// <param name="p">功率 kw</param>
        /// <param name="hz">频率 kw</param>
        /// <returns></returns>
        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
    }
}