//计算代码,0-60℃ 0-100%
/*
 *说明:已知室外温度、湿度计算湿焓值
 *输入:Td 室外湿球温度
 *输出:湿球温度
 */
double CalHZ_S(double Tw)
{
    //double hw=0;
    double mm0,mm1=0,mm2;
    mm0=Tw/234.5;
    mm1=Tw*(18.678-mm0)/(Tw+257.14);
    mm2=exp(mm1);
    double hw=1.01*Tw+0.6219*(2500+1.84*Tw)*611.2*mm2/(101326-611.2*mm2);
    return hw;
}

/*
 *说明:已知室外温度、湿度计算焓值(简化算法)
 *输入:Td 室外干球温度
 *      Hr 室外湿度
 *输出:湿球温度
 */
double CalHZ(double Td,double Hr)
{
    double t1,Pv,d,h;
    t1=(18.678-Td/234.5)*Td/(Td+257.14);
    Pv=611.2*exp(t1);//水蒸汽饱和压力

    d=0.6219*(0.01*Hr*Pv/(101326-0.01*Hr*Pv));//kg/kg
    h=1.01*Td+(2500+1.84*Td)*d;

    return h;
}

/*
 *说明:已知室外温度、湿度求湿球温度
 *输入:Td 室外干球温度
 *      Hr 室外湿度
 *输出:湿球温度
 */
double  CalTw(double Td,double Hr)
{
    int kk=0;//迭代次数
    double val=0;//迭代的湿球温度初值
    double e=0;
    double e_1=0,e_2=0;
    double ee_1=0,ee_2=0;
    double II=0;

    if (Td<60&&Td>=0)
    {
        e=CalHZ_S(val)-CalHZ(Td,Hr);
        e=abs(e);
        while (e>0.02)
        {
            e=CalHZ_S(val)-CalHZ(Td,Hr);//比例
            e_2=e_1;
            e_1=e;

            II+=e;

            ee_2=ee_1;
            ee_1=e_1-e_2;//微分


            if (e>0)//大于目标值
            {
                val-=0.1*abs(e)+0.001*II+0.01*ee_1;//修正输入值
            }
            else
            {
                //小于目标值
                val+=0.1*abs(e);
            }

            if (e_1-e_2<0)
            {
                val+=0.005;
            }
            else
            {
                val-=0.005;
            }

            e=CalHZ_S(val)-CalHZ(Td,Hr);
            e=abs(e);
            kk++;

            if (kk>2000)//迭代超过1000,跳出
            {
                if (e>3)
                {
                    e=CalHZ_S(val)-CalHZ(Td,Hr);
                    if (e<0)//继续+
                    {
                        val+=-0.1*e;
                        if (val>Td)
                        {
                            val=Td*0.99;//
                        }
                    }
                }
                cout<<"e="<<e<<'\t';        
                cout<<"val="<<val<<'\t';
                return val;
            }
        }
    }
    cout<<"e="<<e<<'\t';        
    cout<<"val="<<val<<'\t';
    return val;
}

版权声明:本文为LWLGZY原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/LWLGZY/article/details/77469664