回复:博途中如何实现数值的平均值

已锁定

欧阳牛哔

  • 帖子

    6
  • 精华

    0
  • 被关注

    0

论坛等级:游侠

注册时间:2021-03-01

普通 普通 如何晋级?

发布于 2022-09-08 19:36:25

5楼

FUNCTION_BLOCK "Avg"

VERSION : 0.1

   VAR_INPUT 

      value : Real;

      reset : Bool;

   END_VAR


   VAR_OUTPUT 

      avgValue : Real;

   END_VAR


   VAR 

      statCache : Array[0..#MAX_INDEX] of Real;

      statCacheIndex : Int;

      statIndex : Int;

      statLast : Real;

      statSum : Real;

      statAvg : Real;

   END_VAR


   VAR_TEMP 

      i : Int;

   END_VAR


   VAR CONSTANT 

      MAX_INDEX : Int := 14;

   END_VAR



BEGIN

IF #reset THEN //初始化

  FOR #i := 0 TO #MAX_INDEX DO

    #statCache[#i] := 0;

  END_FOR;

  #statCacheIndex := 0;

  #statIndex := 0;

  #statLast := 0;

  #statSum := 0;

  #statAvg := 0;

ELSIF #value <> #statLast THEN //如果值改变

  IF #statCacheIndex < #MAX_INDEX THEN //缓存未满

    #statCache[#statCacheIndex] := #value;

    #statCacheIndex += 1;

  ELSE //缓存已满

    #statCache[#statIndex] := #value;

    #statIndex += 1;

    #statIndex := #statIndex MOD #MAX_INDEX;

    #statSum := 0;

    FOR #i := 0 TO #MAX_INDEX DO

      #statSum += #statCache[#i];

    END_FOR;

    #statAvg := #statSum / #MAX_INDEX;

  END_IF;

END_IF;

#statLast := #value;

#avgValue := #statAvg;

END_FUNCTION_BLOCK


Avg.scl.zip


评论
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1500系列

共有10700条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

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

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

  • 分享

  • 只看
    楼主

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