本程序适合博图的300/400/1200/1500 计算焓湿度的计算 通过查表方式来进行计算的,只有露点温度查表方式出来的差异叫大故采用公式方式计算出露点,若有什么好的计算方式及程序BUG请告知
FUNCTION_BLOCK "焓湿图计算"
TITLE = DP&H
{ S7_Optimized_Access := 'FALSE' }
AUTHOR : EBC_LW
FAMILY : EBC
NAME : DPH
VERSION : 0.1
//焓湿图的计算
VAR_INPUT
TE : Real := 23.0; // 温度℃
RH : Real := 55.0; // 湿度%
B : Real := 1013.0; // 大气压力hPa(百帕)
END_VAR
VAR_OUTPUT
Dp : Real; // 露点温度℃
H : Real; // 空气焓值Kj/KgDA
Ps : Real; // 空气的水蒸气分压力hPa(百帕)
d : Real; // 空气的含湿量g/KgDA
Rb : Real; // 饱和空气密度Kg/M2
Pb : Real; // 饱和空气压力hPa(百帕)
Cd : Real; // 湿空气的比热Kj/(KgDA*K)
ERR : Int; // 错误代码
END_VAR
VAR
TB : Array[0..80, 0..2] of Real := -20.0, 1.395, 1.02, -19.0, 1.393, 1.13, -18.0, 1.384, 1.25, -17.0, 1.387, 1.37, -16.0, 1.373, 1.5, -15.0, 1.367, 1.65, -14.0, 1.362, 1.81, -13.0, 1.357, 1.98, -12.0, 1.352, 2.17, -11.0, 1.347, 2.37, -10.0, 1.341, 2.59, -9.0, 1.336, 2.83, -8.0, 1.331, 3.09, -7.0, 1.325, 3.36, -6.0, 1.32, 3.67, -5.0, 1.315, 4.0, -4.0, 1.31, 4.36, -3.0, 1.306, 4.75, -2.0, 1.301, 5.16, -1.0, 1.295, 5.61, 0.0, 1.29, 6.09, 1.0, 1.285, 6.65, 2.0, 1.281, 7.04, 3.0, 1.275, 7.57, 4.0, 1.271, 8.11, 5.0, 1.266, 8.7, 6.0, 1.261, 9.32, 7.0, 1.256, 9.99, 8.0, 1.251, 10.7, 9.0, 1.247, 11.46, 10.0, 1.242, 12.25, 11.0, 1.237, 13.09, 12.0, 1.232, 13.99, 13.0, 1.228, 14.94, 14.0, 1.223, 15.95, 15.0, 1.218, 17.01, 16.0, 1.214, 18.13, 17.0, 1.208, 19.32, 18.0, 1.204, 20.59, 19.0, 1.2, 21.92, 20.0, 1.195, 23.31, 21.0, 1.19, 24.8, 22.0, 1.185, 26.37, 23.0, 1.181, 28.02, 24.0, 1.176, 29.77, 25.0, 1.171, 31.6, 26.0, 1.166, 33.53, 27.0, 1.161, 35.56, 28.0, 1.156, 37.71, 29.0, 1.151, 39.95, 30.0, 1.146, 42.32, 31.0, 1.141, 44.82, 32.0, 1.136, 47.43, 33.0, 1.131, 50.18, 34.0, 1.126, 53.07, 35.0, 1.121, 56.1, 36.0, 1.116, 59.26, 37.0, 1.111, 62.6, 38.0, 1.107, 66.09, 39.0, 1.102, 69.75, 40.0, 1.097, 73.58, 41.0, 1.091, 77.59, 42.0, 1.086, 81.8, 43.0, 1.081, 86.18, 44.0, 1.076, 90.79, 45.0, 1.07, 95.6, 46.0, 1.065, 100.61, 47.0, 1.059, 105.87, 48.0, 1.054, 111.33, 49.0, 1.048, 117.07, 50.0, 1.043, 123.04, 55.0, 1.013, 156.94, 60.0, 0.981, 198.7, 65.0, 0.946, 249.38, 70.0, 0.909, 310.82, 75.0, 0.868, 384.5, 80.0, 0.823, 472.28, 85.0, 0.773, 576.69, 90.0, 0.718, 699.31, 95.0, 0.656, 843.09, 100.0, 0.589, 1013.0; // 表格 温度/饱和空气密度/饱和空气水蒸汽分压
END_VAR
VAR_TEMP
I : Int; // 循环变量
LogEW : Real;
Pb_Temp : Real;
Rb_Temp : Real;
END_VAR
BEGIN
//湿度转换为百分比
//RH_TEMP:=RH/100;
//通过温度查询参数采用线性插值算法,以后再研究哈平滑预测算法,这样更精确
#Pb_Temp := 0;
#Rb_Temp := 0;
FOR #I := 1 TO 80 BY 1 DO
IF (#TE <= #TB[#I, 0]) & (#TE >= #TB[#I - 1, 0]) THEN//检查值是否在两个温度值之间,若两个温度值之间则进行线性插值运算
//Y=Y0+(X-X0)/(X1-X0)*(Y1-Y0) 线性插值算法
#Rb_Temp := #TB[#I - 1, 1] + (#TE - #TB[#I - 1, 0]) / (#TB[#I, 0] - #TB[#I - 1, 0]) * (#TB[#I, 1] - #TB[#I - 1, 1]);
#Pb_Temp := #TB[#I - 1, 2] + (#TE - #TB[#I - 1, 0]) / (#TB[#I, 0] - #TB[#I - 1, 0]) * (#TB[#I, 2] - #TB[#I - 1, 2]);
#ERR := 0;//无错误
ELSE
#ERR := 1;//温度不在查询范围
END_IF;
END_FOR;
#Pb := #Pb_Temp;
#Rb := #Rb_Temp;
#Ps := #RH / 100.0 * #Pb;//求出空气的水蒸汽分压力hPa
#d := 622 * (#Ps / (#B - #Ps));//求出空气含湿量g/kg干空气
#H := 1.01 * #TE + 0.001 * #d * (2500 + 1.84 * #TE);//求出空气焓kJ/kg干空气
#Cd := 1.01 + 1.85 * #d * 0.001;//湿空气的比热
//通过水蒸汽分压力去查询饱和水蒸汽分压力的温度得出露点温度(当前不饱和分压去查询饱和分压下的温度) 误差较大这里不采用
(*
FOR J:= 1 TO 80 BY 1 DO
IF (Ps <=TB[J,2]) & (Ps >=TB[J-1,2]) THEN//检查值是否在两个温度值之间,若两个温度值之间则进行线性插值运算
//Y=Y0+(X-X0)/(X1-X0)*(Y1-Y0) 线性插值算法
DP:=TB[J-2,0] +(Ps - TB[J-1,2])/(TB[J,2]-TB[J-1,2])*(TB[J,0]-TB[J-1,0]);
ERR:=0;//无错误
ELSE
ERR:=2;//分压不在查询范围
END_IF;
END_FOR;
*)
//**************************************************************************************
//温度湿度计算露点温度采用通用公式
//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 * #TE / (237.3 + #TE) + ((LN(#RH) / LN(10)) - 2);
#Dp := ((0.66077 - #LogEW) * 237.3) / (#LogEW - 8.16077);
END_FUNCTION_BLOCK
编于2017年 QQ275578306 欢迎交流学习
焓湿图.rar