技术论坛

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

作者 主题
游士

经验值: 284
发帖数: 73
精华帖: 0
主题:【求助】博途中如何实现数值的平均值


只看楼主 楼主 2022-08-30 08:50:05

我想实现15个采集数值的平均数,采集15次之后,第16次进来,第一次的就没有了,这样的移位计算。如何实现呢?


 
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1781496&b_id=66&s_id=0&num=5

侠圣

经验值: 3816
发帖数: 730
精华帖: 3
回复:博途中如何实现数值的平均值


只看楼主 1楼 2022-08-30 09:33:57

创建一个0...14数组A,标志位N,总值B,读取值c,采集标志位d

IF d then

  B:=B-A[n];

  B:=B+c;

  A[n]:=c;

  n:=n+1;

  If n:=15 then

    n:=0;

  End_if;

End_if;



平均值直接把B除15就可以了。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 19840
发帖数: 4383
精华帖: 2
回复:博途中如何实现数值的平均值


只看楼主 2楼 2022-08-30 10:46:56

在右侧计算里面找下,有现成的块


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4092
发帖数: 565
精华帖: 4
回复:博途中如何实现数值的平均值


只看楼主 3楼 2022-08-30 11:14:07

 用一下这个指令

MOVE_BLK:块移动



 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2312
发帖数: 428
精华帖: 0
回复:博途中如何实现数值的平均值


只看楼主 4楼 2022-08-31 09:10:22

扩展功能块,需要下载。我记得有个FIFO指令。


学无止境
以下网友喜欢您的帖子:

  
游侠

经验值: 359
发帖数: 6
精华帖: 0
回复:博途中如何实现数值的平均值


只看楼主 5楼 2022-09-08 19:36:25

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



 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
博途中如何实现数值的平均值
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。