湿球温度的计算 探讨 原创

已锁定

柳叶飘飘

  • 帖子

    95
  • 精华

    7
  • 被关注

    194

论坛等级:侠圣

注册时间:2016-12-08

黄金 黄金 如何晋级?

湿球温度的计算 探讨 原创

8816

19

2018-01-01 00:02:09

以下代码在PLC中跑不动 请查看我的另外一篇采用二分法迭代算法,是能正常运行的哦。。呵呵以下是地址

http://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1510127&b_id=4&s_id=23&num=1

湿球温度等计算


以下迭代确实CPU跑不动原因在于迭代算法计算量太大。本人以写出新的代码采用二分法进行迭代运算一切OK! 成功计算出湿球温度的核心代码如下



//#########################二分法迭代运算猜测湿球温度########################################################
//湿球温度是介于干球温度和湿球温度之间的故而减小运算迭代,由于等焓值故而可带入湿球温度迭代计算出的焓值相等即可得出该湿球温度
 TEMP_tlow := Tdp; //露点值赋给低限
 TEMP_thigh := Tdb;//干球温度赋给高限
// I:=1;
    FOR I:= 1 TO 10000 BY 1 DO  //迭代1000次 实际用不着
     TEMP_dt:=(TEMP_thigh-TEMP_tlow)*0.5;//二分法
       TEMP_twb:=TEMP_tlow+TEMP_dt;
       //----------------------------------------------------------------------- Kpa
       //计算该湿球温度下的饱和空气压力KPa(千帕)
       TEMP_Ta := TEMP_twb + 273.15;
       IF TEMP_twb<0.0 THEN
            TEMP_pws:=0.001*EXP(C_1/TEMP_Ta+C_2+C_3*TEMP_Ta+C_4*TEMP_Ta**2+C_5*TEMP_Ta**3+C_6*TEMP_Ta**4+C_7*LN(TEMP_Ta));
          ELSE
            TEMP_pws:= 0.001*EXP(C_8/TEMP_Ta+C_9+C_10*TEMP_Ta+C_11*TEMP_Ta**2+C_12*TEMP_Ta**3+C_13*LN(TEMP_Ta));
       END_IF;
      //-----------------------------------------------------------------------g/kg(a)
      //计算该湿球温度下的含湿量
      TEMP_d:=621.945 * (TEMP_pws/(ATM - TEMP_pws));
      //-----------------------计算焓值-------------------------------------------------kJ/kg
      //计算该湿球温度下的焓值
     
      TEMP_hmid:= 1.006 * TEMP_twb + 0.001*TEMP_d* (2501 + 1.86 * TEMP_twb);
      //--------------------------------------------------------------------
      IF (H-TEMP_hmid)>=0.0 THEN
        TEMP_tlow:=TEMP_twb;
         ELSE
        TEMP_thigh:=TEMP_twb;
      END_IF;
         IF ABS(TEMP_dt)<0.0001 THEN//设置迭代精度
            EXIT;
         END_IF;
    END_FOR;
 Twb:=TEMP_twb;//返回迭代猜测正确的湿球温度

其中CONST
C_1 :=-5.6745359E+03;
C_2 :=6.3925247E+00;
C_3 :=-9.6778430E-03;
C_4 :=6.2215701E-07;
C_5 := 2.0747825E-09;
C_6 := -9.4840240E-13;
C_7 := 4.1635019E+00;
C_8 :=-5.8002206E+03;
C_9 :=1.3914993E+00;
C_10:=-4.8640239E-02;
C_11 := 4.1764768E-05;
C_12 :=-1.4452093E-8;
C_13:= 6.5459673E+00;
(* *)
 END_CONST

以下代码保留不删贴供大家学习

湿球温度的计算,计算公式采用网上的一篇论文以及一个C语言的代码修改而来

但是程序并不能在PLC中进行正常运行 因为指数运算又迭代计算会触发CPU进入STOP(本人仅在仿真测试)

计算时间过长而触发CPU  进入STOP模式,这里不讨论该问题 仅讨论算法问题,这个也论证了一点 要实现智能制造等若算法复杂并不适合PLC来做事情 应该使用服务器来跑复杂的运算给结果给PLC就可以了


//####################################################

//露点焓值等公式法   迭代算法PLC跑不动

//EBCLW 20171225

//####################################################

FUNCTION_BLOCK FB14

TITLE =   'DP&H'

AUTHOR:   EBC_LW

NAME:     DPH

VERSION:      '0.01'

FAMILY:   EBC

KNOW_HOW_PROTECT


VAR_INPUT

 Tdb:REAL:=23.0;  //干球温度℃

 RH:REAL:=55.0;//湿度%

 B:REAL:=101326.0; //大气压力Pa(帕)


END_VAR

VAR_OUTPUT

Tdp:REAL;//露点温度℃

Twb:REAL;//湿球温度℃

H:REAL;//空气焓值Kj/KgDA

//Ps:REAL;//空气的水蒸气分压力hPa(百帕)

//d:REAL;//空气的含湿量g/KgDA

//Rb:REAL;//饱和空气密度Kg/M2

Pv:REAL;//饱和空气压力Pa(百帕)

d:REAL;//空气含湿量

//Cd:REAL;//湿空气的比热Kj/(KgDA*K)

//Tw:REAL;//湿球温度

//ERR:INT;//错误代码

END_VAR

VAR_TEMP

    I:REAL;//

    J:INT;

    LogEW:REAL;

    //Pv:REAL;

    Pw:REAL;

    Hw:REAL;

    Tw:REAL;//测试用的湿球温度

    dw:REAL;

    //TEMP1:REAL;

    E:REAL;//偏差

    E1:REAL;

    E2:REAL;

    EE1:REAL;

    EE2:REAL;

END_VAR

VAR

    // Static Variables


END_VAR

//=====================================================================

//露点温度计算

//LogEW=0.66077+7.5T/(237.3+T)+[log10(RH)-2]                 

//Dp=[(0.66077-logEW)×237.3]/(logEW-8.16077)         

//Dp--dew_point露点温度  RH--相对湿度   T--空气温度                

LogEW:= 0.66077 + 7.5 * Tdb / (237.3 + Tdb) +  (LOG(RH)- 2)  ;

Tdp:=((0.66077- logEW)*237.3)/(logEW - 8.16077) ;

//=====================================================================

//焓值的计算

  Pv:=611.2*EXP((18.678-Tdb/234.5)*Tdb/(Tdb+257.14));

  d:=0.6219*(0.01*RH*Pv/(B-0.01*RH*Pv));

  H:=1.01*Tdb+(2500+1.84*Tdb)*d;

//=====================================================================

//湿球温度的计算

//设H=Hw 湿度100% 则计算湿球温度

//通过带入数值计算Hw比较和H的大小

//  初始化


    I:=0;//迭代次数

    Tw:=Tdp;//迭代的湿球温度初值

    E:=0;

    E1:=0;

    E2:=0;

    EE1:=0;

    EE2:=0;

    J:=0;


IF Tdb>=0 & Tdb<60 THEN

Hw:=1.01*Tw+0.6219*(2500+1.84*Tw)*(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14)))/(101326-(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14))));

E:=ABS(Hw-H);

     WHILE E > 0.02 DO

         Hw:=1.01*Tw+0.6219*(2500+1.84*Tw)*(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14)))/(101326-(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14))));

         E:=Hw-H;

         E2:=E1;

         E1:=E;

         I:=I+E;

         EE2:=EE1;

         EE1:=E1-E2;//微分

         IF E>0 THEN

            Tw:=Tw-0.1*ABS(E)+0.001*I+0.01*EE1;//修正输入值

           ELSE

            Tw:=Tw+0.1*ABS(E);

        END_IF;

        IF E1-E2<0 THEN

            Tw:=Tw+0.005;

        ELSE

             Tw:=Tw-0.005;

        END_IF;

        Hw:=1.01*Tw+0.6219*(2500+1.84*Tw)*(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14)))/(101326-(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14))));

         E:=ABS(Hw-H);

         J:=J+1;

         IF J>1000 THEN//迭代超过1000,跳出

            

                IF E>3 THEN

                

                      Hw:=1.01*Tw+0.6219*(2500+1.84*Tw)*(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14)))/(101326-(611.2*EXP(Tw*(18.678-Tw/234.5)/(Tw+257.14))));

                      E:=Hw-H;

                    IF E<0 THEN//继续+

                    

                        Tw:=Tw-0.1*E;

                        IF Tw>Tdb THEN

                        

                            Tw:=Tdb*0.99;//

                        

                        END_IF;

                    

                    END_IF;

                

                END_IF;


                Twb:=Tw;

           END_IF;

         

         

         


      END_WHILE;

END_IF;


END_FUNCTION_BLOCK

//原创程序 QQ 275578306

湿球温度的计算 探讨 原创 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54624条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。