回复:分享一段小程序30秒平均值

v_wind

  • 帖子

    287
  • 精华

    3
  • 被关注

    36

论坛等级:侠圣

注册时间:2013-03-08

普通 普通 如何晋级?

发布于 2017-10-16 08:34:09

26楼

FUNCTION_BLOCK "DW_Mean30Seconds"

{ S7_Optimized_Access := 'TRUE' }

VERSION : 0.1

   VAR_INPUT 

      IN : Real;

   END_VAR


   VAR_OUTPUT 

      OUT : Real;

   END_VAR


   VAR 

      i : Int := 1;

      k : Int := 1;

      iArrayMean30Seconds : Array[1..30] of DInt;

      iSumArrayMean30Seconds : DInt;

      FB_TON_1Second {OriginalPartName := 'IEC_TIMER'; LibVersion := '1.0'} : TON_TIME;

   END_VAR



BEGIN

(*Zeitintervall mit dem die Werte eingelesen werden*)

#FB_TON_1Second(IN := TRUE,

               PT := t#1s);(*定时器开始计时*)

If #FB_TON_1Second.Q = TRUE Then

   #FB_TON_1Second.IN := FALSE;

   

   (*Mittelwertbildung*)

   #iSumArrayMean30Seconds := #iSumArrayMean30Seconds - #iArrayMean30Seconds[#i];

   #iArrayMean30Seconds[#i] := REAL_TO_DINT(#IN * 100);

   #iSumArrayMean30Seconds := #iSumArrayMean30Seconds + #iArrayMean30Seconds[#i];

   #OUT := DINT_TO_REAL(#iSumArrayMean30Seconds) / (#k * 100);

   

   (*inkrementieren des Array-Index*)

   If #i < 30 Then

       #i := #i + 1;

   Else

       #i := 1;

   End_If;

   

   (*Anzahl der Werte im Array*)

   If #k < 30 Then

       #k := #k + 1;

   Else

       #k := 30;

   End_If;

   

End_If;

#FB_TON_1Second.IN:=TRUE;

(*----------END FUNKTIONBLOCK----------*)

END_FUNCTION_BLOCK


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10588条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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