//该程序修改可实现各种数学查表,可添加数组维度来实现。
//#################################################################################
//用于单室平衡容器液位计算(查表法)
//EBC LW
//#################################################################################
FUNCTION_BLOCK LTDS
TITLE ='LTDS'
AUTHOR: EBC_LW
NAME: LTDS
VERSION: '0.01'
FAMILY: EBC
KNOW_HOW_PROTECT
VAR_INPUT
DifPre
: STRUCT
Value: REAL;
ST : BYTE:=16#80;
END_STRUCT;//差压
Pre
: STRUCT
Value: REAL;
ST : BYTE:=16#80;
END_STRUCT;//补偿压力
H:REAL;//水气管中心距离
A: REAL;//平衡容器正常水位“0”的距离
END_VAR
// Block Parameters
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR
TB:ARRAY[0..10,0..2] OF REAL:=
0.1,0.0292,1.043602,
1.0,0.1001,1.132699,
2.0,0.1369,1.188710,
2.5,0.1514,1.213106,
3.0,0.1644,1.236277,
3.5,0.1764,1.258796,
4.0,0.1876,1.280902,
4.5,0.1982,1.302847,
5.0,0.2083,1.324749,
5.5,0.2181,1.346965,
6.0,0.2275,1.369263;//表格
F1X:REAL;
F2X:REAL;
I:INT;
AP:REAL; //绝对压力
END_VAR
VAR_OUTPUT
OUT
: STRUCT
Value: REAL;
ST : BYTE:=16#80;
END_STRUCT;//水位
END_VAR
//#######################################################################
//通过压力查表获得相应的值
//#######################################################################
//计算绝对压力
AP:=Pre.Value + 0.1013;
FOR I:= 1 TO 10 BY 1 DO
//通过绝对压力查询
IF (AP <=TB[I,0]) & (AP >=TB[I-1,0]) THEN
//Y=Y0+(X-X0)/(X1-X0)*(Y1-Y0) 线性插值算法
F1X:=TB[I-1,1] +(AP - TB[I-1,0])/(TB[I,0]-TB[I-1,0])*(TB[I,1]-TB[I-1,1]);
F2X:=TB[I-1,2] +(AP - TB[I-1,0])/(TB[I,0]-TB[I-1,0])*(TB[I,2]-TB[I-1,2]);
END_IF;
END_FOR;
//####################################################################
//差压计算液位
//####################################################################
//OUT.VALUE:=F1X;
OUT.VALUE:=A-((DifPre.VALUE /0.980655 - H * F1X)/F2X);
END_FUNCTION_BLOCK
//原创程序请多交流 QQ 275578306