FUNCTION_BLOCK GetPercent // 获得百分比 ,FB 功能块;
VAR_INPUT
InPV:DINT;
InMin:DINT;
InStart:DINT;
InEnd:DINT;
InBasePercent:DINT;
END_VAR
VAR_IN_OUT
iDiff:INT;
dDiff:DINT;
fDiff:REAL;
END_VAR
VAR_OUTPUT
ENO:BOOL;
OutdPercent:DINT;
OutfPercent:REAL;
END_VAR
VAR
dArea:DINT;
fRatio:REAL;
fPV:REAL;
fResult:REAL;
dtDiff:DINT;
END_VAR
// ------------------------------------ code segment ----------------------
dArea:=InEnd-InMin;
fRatio:=(DINT_TO_REAL(InBasePercent))/(DINT_TO_REAL(dArea));
IF InPV<=InStart THEN
fPV:=DINT_TO_REAL(InStart)*fRatio;
OutfPercent:=fPV;
OutdPercent:=REAL_TO_DINT(fPV);
iDiff:=0;
dDiff:=0;
fDiff:=0;
ELSIF InPV>=InEnd THEN
fPV:=DINT_TO_REAL(InEnd)*fRatio;
OutfPercent:=fPV;
OutdPercent:=REAL_TO_DINT(fPV);
iDiff:=DINT_TO_INT(dArea);
dDiff:=dArea;
fDiff:=DINT_TO_REAL(dArea);
ELSE
fPV:=DINT_TO_REAL(InPV);
fResult:=fPV*fRatio;
OutdPercent:=REAL_TO_DINT(fResult);
OutfPercent:=fResult;
dtDiff:=InPV-InStart;
iDiff:=DINT_TO_INT(dtDiff);
dDiff:=dtDiff;
fDiff:=DINT_TO_REAL(dtDiff);
END_IF
(******************************************* 调用实例 ××××××××××××××××××)
fbPerTest(InPV:=100,InMin:=0,InStart:=0,InEnd:=1000,InBasePercent:=100,iDiff:=fbp_In_OutiNum,
dDiff:=fbp_In_OutdNum,fDiff:=fbp_In_OutfNum,ENO=>fbp_OutENO,OutdPercent=>fbp_Outdpercent,OutfPercent=>fbp_Outfpercent);