模拟量量程转换源码
声明FFUNCTION_BLOCK HS_ENGIN_HEX (*工程量转换成 16进制数据*)
VAR_INPUT
EN: BOOL;
IN: REAL; (*工程量数据*)
HIGH: REAL; (*工程量量程上限*)
LOW: REAL; (*工程量量程下限*)
MODE: BYTE; (*模式输入端 0:4~20mA1:0~20mA 2:0~5V/0~10V3:-10~10V*)
END_VAR
VAR_OUTPUT
ENO: BOOL;
OUT: UINT; (*输出16进制数据 *)
ERROR: BOOL;
END_VAR
VAR
END_VAR
程序
IF MODE=1 THEN (*最大量程范围是0—21mA,精度范围内量程是0—20mA*)
IF IN>HIGH THEN
OUT:=16#F3CE;
ERROR:=TRUE;
ELSIF IN<LOW THEN
OUT:=0;
ERROR:=TRUE;
ELSE
OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F3CE);
ERROR:=FALSE;
END_IF
END_IF
IF MODE=2 THEN (*最大量程范围是0—10.4V / 0—5.2V,精度范围内量程是0—10V / 0—5V*)
IF IN>HIGH THEN
OUT:=16#F626;
ERROR:=TRUE;
ELSIF IN<LOW THEN
OUT:=0;
ERROR:=TRUE;
ELSE
OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F626);
ERROR:=FALSE;
END_IF
END_IF
IF MODE=3 THEN (*最大量程范围是-10.4—10.4V,精度范围内量程是-10—10V*)
IF IN>HIGH THEN
OUT:=16#FB13;
ERROR:=TRUE;
ELSIF IN<LOW THEN
OUT:=16#04EC;
ERROR:=TRUE;
ELSE
OUT:=REAL_TO_UINT((IN-LOW)/(HIGH-LOW)*16#F627+16#04EC);
ERROR:=FALSE;
END_IF
END_IF
不错,谢谢分享
页:
[1]