之前发布过一个湿球温度计算的SCL代码,主要是翻译网上的一个C语言的,但是PLC跑不动,实际关键问题在于迭代算法的优化。本程序是优化了迭代算法。采用了二分法迭代,PLC正常计算。以下供大家参考学习 最难算的莫过于是湿球温度,因为需要迭代运算。这个程序对于做楼控项目的工程师非常有用的哦。
本程序可计算 露点、湿球温度、含湿量、比焓、饱和空气压力、水蒸气分压
//####################################################
//露点焓值等公式法 采用二分法迭代计算的湿球温度
//饱和空气分压采用简便算法
//本程序可计算 露点、湿球温度、含湿量、比焓、饱和空气压力、水蒸气分压
//EBC LW 20181006
//####################################################
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;//相对湿度%
ATM:REAL:=101.325; //大气压力KPa(千帕)
END_VAR
VAR_OUTPUT
Pws:REAL;//饱和空气压力KPa(千帕)
Pw:REAL;//空气的水蒸气分压力KPa(千帕)
Tdp:REAL;//露点温度℃
Twb:REAL;//湿球温度℃
d:REAL;//空气的含湿量g/KgDA
H:REAL;//空气焓值Kj/KgDA
END_VAR
VAR_TEMP
LogEW:REAL;
TEMP_twb:REAL;//湿球温度猜测值
TEMP_pws:REAL;//猜测的湿球温度的饱和空气压力KPa(千帕)
TEMP_d:REAL; //猜测的湿球温度的空气含湿量g/Kg干空气
TEMP_dt:REAL;//用于迭代的差值
TEMP_hmid:REAL;//湿球温度猜测的焓值
TEMP_tlow:REAL;//用于迭代的下限
TEMP_thigh:REAL;//用于迭代的上限
I:INT; //迭代循环变量
END_VAR
VAR
// Static Variables
END_VAR
//=====================================================================
//露点温度计算
LogEW:= 0.66077 + 7.5 * Tdb / (237.3 + Tdb) + (LOG(RH)- 2) ;
Tdp:=((0.66077- logEW)*237.3)/(logEW - 8.16077) ;
//=====================================================================
//焓值的计算
Pws:=0.6112*EXP((18.678-Tdb/234.5)*Tdb/(Tdb+257.14));//简化算法
Pw:=RH/100*Pws;//求出空气的水蒸汽分压力KPa
//d:=621.9*(0.01*RH*Pws/(ATM-0.01*RH*Pws));
d:=621.9*(Pw/(ATM-Pw));
H:=1.01*Tdb+0.001*d*(2500+1.84*Tdb);
//=====================================================================
//湿球温度的计算
TEMP_tlow := Tdp; //露点值赋给低限
TEMP_thigh := Tdb;//干球温度赋给高限
FOR I:= 1 TO 100 BY 1 DO //迭代100次
TEMP_dt:=(TEMP_thigh-TEMP_tlow)*0.5;//二分法
TEMP_twb:=TEMP_tlow+TEMP_dt;
//----------------------------------------------------------------------- Kpa
//计算该湿球温度下的饱和空气压力KPa(千帕)
TEMP_pws := 0.6112*EXP((18.678-TEMP_twb/234.5)*TEMP_twb/(TEMP_twb+257.14));
//-----------------------------------------------------------------------g/kg(a)
//计算该湿球温度下的含湿量
TEMP_d:=621.9 * (TEMP_pws/(ATM - TEMP_pws));
//-----------------------计算焓值-------------------------------------------------kJ/kg
//计算该湿球温度下的焓值
TEMP_hmid:= 1.01 * TEMP_twb + 0.001*TEMP_d* (2501 + 1.84 * 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;//返回迭代猜测正确的湿球温度
END_FUNCTION_BLOCK
原创程序 QQ 275578306
转载请注明出处