技术论坛

 一阶低通滤波SCL编程

返回主题列表
作者 主题
宁超
至圣

经验值:11563
发帖数:1009
精华帖:39
楼主    2022-10-08 16:37:18
主题:一阶低通滤波SCL编程 精华帖 

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 * ”不知道是怎么来的。恳请能看懂的大神能帮忙解释一下。

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