回复:流量累计的SCL代码

lvminhu

  • 帖子

    7
  • 精华

    1
  • 被关注

    4

论坛等级:游侠

注册时间:2015-06-23

普通 普通 如何晋级?

发布于 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

评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54620条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。