恭喜,你发布的帖子
发布于 2018-10-22 22:54:32
17楼
依Letham版主优化的 精简累计程序
FUNCTION_BLOCK Integr
TITLE = 'Integr'
//
// Block Comment...
//
VERSION: '1.0'
AUTHOR: Author
NAME: Name
FAMILY: Family
// Block Parameters
VAR_INPUT
In{S7_m_c:='true'}:REAL;// Input Parameters
OutHiLim{S7_m_c:='true'}:REAL:=999999;// Input Parameters
OutLoLim{S7_m_c:='true'}:REAL:=0;// Input Parameters
Ti{S7_m_c:='true'}:REAL:=1;// Input Parameters
SampleTime{S7_m_c:='true'}:REAL:=0.1;// Input Parameters
Hold{S7_m_c:='true'}:BOOL:=false;// Input Parameters
OutTrkOn{S7_m_c:='true'}:BOOL:=false;// Input Parameters
OutTrk{S7_m_c:='true'}:REAL;// Input Parameters
InHyst{S7_m_c:='true'}:REAL;// Input Parameters
END_VAR
VAR_IN_OUT
// I/O Parameters
END_VAR
VAR_OUTPUT
Out{S7_m_c:='true'}:REAL; // Output Parameters
OutHiAct{S7_m_c:='true'} :bool;// Output Parameters
OutLoAct{S7_m_c:='true'}:bool; // Output Parameters
END_VAR
VAR_TEMP
// Temporary Variables
END_VAR
VAR
InInteger:dint; // In integer
InPiont:REAL; //IN Piont Value
SumInteger:dint; // In integer
SumPiont:REAL; //IN Piont Value
END_VAR
BEGIN
// OutHiLim
IF Out < OutloLim - InHyst THEN
OutLoAct := true ;
ELSIF Out >= OutloLim +InHyst THEN
OutLoAct := false ;
END_IF;
// OutHiLim
IF Out >= OutHiLim + InHyst THEN
OutHiAct := true ;
ELSIF Out <= OutHiLim - InHyst THEN
OutHiAct := false ;
END_IF;
IF NOT OutHiAct THEN
IF NOT OutTrkOn THEN
SumInteger := round(Out) ;
SumPiont := Out- SumInteger;
IF NOT hold then
InInteger := ROUND(In*SampleTime/Ti) ;
InPiont := In*SampleTime/Ti-InInteger;
SumInteger := SumInteger+InInteger;
SumPiont := SumPiont+InPiont;
Out := DINT_TO_REAL(SumInteger)+SumPiont;
ELSE
;
END_IF;
ELSE
SumInteger := 0;
SumPiont := 0;
InInteger := 0;
InPiont := 0;
SumInteger := 0;
SumPiont := 0;
Out := OutTrk;
END_IF;
ELSE
;
END_IF;
END_FUNCTION_BLOCK
请填写推广理由:
分享
只看
楼主