一阶低通滤波SCL编程

已锁定

宁超

  • 帖子

    1009
  • 精华

    39
  • 被关注

    370

论坛等级:至圣

注册时间:2012-12-11

普通 普通 如何晋级?

一阶低通滤波SCL编程

4083

27

2022-10-08 16:37:18

star star star star

VAR_INPUT

  INV: REAL; // input variable

  TM_LAG: TIME: = T # 25S; //delay time

  DF_OUTV: REAL; // exit by default

  TRACK: BOOL; // track enable OUTV = INV

  DFOUT_ON: BOOL; // enable default output

  COM_RST: BOOL; // complete restart

  CYCLE: TIME: = T # 1S; //lead time

END_VAR

VAR_OUTPUT

  OUTV: REAL; // output variable

END_VAR

VAR

  sRueck: REAL;

  sRest: REAL;

END_VAR

VAR_TEMP

  rTmLag: REAL; // delay time in real

  rCycle: REAL; // runtime in real

  OutvNew: REAL; // new exit value

  RueckAlt: REAL; // Old feedback value

  Hvar: REAL; // auxiliary variable

  RueckDiff: REAL; // feedback difference

END_VAR

BEGIN

IF COM_RST

THEN                

    sRest:=0.0;

    IF DFOUT_ON

    THEN       

        OutvNew:=DF_OUTV;

        sRueck:=DF_OUTV;

    ELSE          -

        OutvNew:=0.0;

        sRueck:=0.0;

    END_IF;  

ELSE

    IF DFOUT_ON

    THEN                -

        OutvNew:=DF_OUTV;

        sRueck:=DF_OUTV;

    ELSE

        IF TRACK

        THEN      -

            OutvNew:=INV;

            sRueck:=INV;

            sRest:=0.0;

        ELSE        -

            rCycle:=DINT_TO_REAL(TIME_TO_DINT(CYCLE));

-

            rTmLag:=DINT_TO_REAL(TIME_TO_DINT(TM_LAG));

-

     // -----------------------------------------------

            IF rTmLag < rCycle * 0.5 THEN rTmLag:=rCycle * 0.5; END_IF;

            RueckAlt:=sRueck;

            Hvar:=rCycle /( 2.0 * rTmLag);

            Hvar:= (INV - RueckAlt) * Hvar / (1.0 + Hvar);

            OutvNew:=Hvar+RueckAlt;

            RueckDiff:=2.0 * Hvar + sRest;

            sRueck:=RueckDiff + RueckAlt;

            sRest:=RueckAlt - sRueck + RueckDiff;

        END_IF;

    END_IF;

END_IF;

OUTV:=OutvNew;

END_FUNCTION_BLOCK


想请教下大咖们,为什么SCL这段表达图片中那个公式竟然如此复杂:

            RueckAlt:=sRueck;

            Hvar:=rCycle /( 2.0 * rTmLag);

            Hvar:= (INV - RueckAlt) * Hvar / (1.0 + Hvar);

            OutvNew:=Hvar+RueckAlt;

            RueckDiff:=2.0 * Hvar + sRest;

            sRueck:=RueckDiff + RueckAlt;

            sRest:=RueckAlt - sRueck + RueckDiff;

特别是这里面的两处“ 2.0 * ”不知道是怎么来的。恳请能看懂的大神能帮忙解释一下。

一阶低通滤波SCL编程 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10581条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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