代码如下:
FUNCTION_BLOCK _103_01_Linear_X_Y (* 一元一次方程 *)
VAR_INPUT
EN:BOOL; (* 使能 *)
SIG:REAL; (* 输入信号 *)
ISL: REAL; (* 模拟量最低信号 *)
ISH: REAL; (* 模拟量最高信号 *)
OSL: REAL; (* 变送器最低量程 *)
OSH: REAL; (* 变送器最高量程 *)
OFFSET:REAL; (* 偏移值 *)
END_VAR
VAR_OUTPUT
Okay: BOOL; (* 运算正常 *)
Value:REAL; (* 输出值 *)
END_VAR
VAR
END_VAR
IF EN THEN
(* OV=F(D)
OV=(OSH-OSL)*(IV-ISL)/(ISH-ISL)+OSL
换算结果:= (换算结果的高限--换算结果的低限)*(换算对象--换算对象的低限)/ ( 换算对象的高限--换算对象的低限 )+ 换算结果的低限
D=F(OV)
D=(ISH-ISL)*(OV-OSL)/(OSH-OSL)+ISL
换算对象:= (换算对象的高限--换算对象的低限)*(换算结果--换算结果的低限)/ ( 换算结果的高限--换算结果的低限 )+ 换算对象的低限
*)
Value := (OSH-OSL)*(SIG-ISL)/(ISH-ISL)+OSL+OFFSET;
ELSE
Value:=0;
END_IF;
IF SIG <= ISH*1.2 AND SIG >= ISL*0.8 THEN
Okay:= TRUE;
ELSE
Okay:=FALSE;
END_IF;