技术论坛

启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)

作者 主题
新手

经验值: 28
发帖数: 1
精华帖: 0
主题:【求助】启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 楼主 2021-03-17 15:43:13

启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


 
以下网友喜欢您的帖子:

  
重要声明:

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

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

至圣

经验值: 72010
发帖数: 8043
精华帖: 145
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 1楼 2021-03-17 15:56:27

相当于每秒钟,这里暂时用上升沿取一个数据,存放到一个连续的数据区首地址,然后,每一个1秒脉冲上升沿到了就取一个数存放到连续数据区的第2个数据存放区,以此类推,当60个脉冲到达后,将所有的数据累加后再除60,另外清楚所有计算前的数据区。当然,你呀可以不理睬数据寄存器的数据,反正下一个60秒,旧数据会被新数据覆盖掉。


 
以下网友喜欢您的帖子:

  
侠客

经验值: 958
发帖数: 242
精华帖: 0
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 2楼 2021-03-18 15:20:31

启动信号给出后,每分钟取一个数,求60个数的平均值

是要求每分钟取一个数,60个数的平均值

1 先设置个分钟脉冲,300里就有分钟脉冲,设置下,直接用就行了,

2 设置个计数次数的值

3 触发脉冲一到,就把某个地址存到其他一个DB地址里,下个脉冲来了,再把信号与DB地址值相加后再次

    存入这个DB地址,其实就是累加。

4 计算存够60次后,(其实也就是1小时了),把累加的DB地址值除于60就是取平均值,再读出,存入你需

    要的地址。

5 完毕后把DB地址值,计数次数值复位0.准备从新开始下一轮累加。

6 从第61次开始,又重复前面的动作就是了。


VX:laoxiong988,就是老熊988全拼。 Q969465290
以下网友喜欢您的帖子:

  
至圣

经验值: 17412
发帖数: 1003
精华帖: 1
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 3楼 2021-03-18 17:47:13

     A     M    210.0                  //启动条件

      JCN   A001

      OPN   DB     4

      A     M    240.0                  //一分钟取数的脉冲

      JCN   A002

      L     MB   220

      L     16

      *D    

      T     MD   226                    //地址的数据,DBW0开始

      L     MW   230

      T     DBW [MD 226]

      L     MB   220

      INC   1

      T     MB   220


      L     MB   220

      L     59

      >I                                //取60个数据

      JCN   A003

      L     0

      T     MB   220

      T     MD   234

      LAR1  P#0.0

      L     60

A004: T     MB   222

      L     DBW [AR1,P#0.0]

      L     MW   234

      +D    

      T     MW   234

      +AR1  P#2.0

      L     MB   222

      LOOP  A004

      L     MW   234

      L     60

      /D    

      T     MW   236                    //最后的平均数

A003: NOP   0

A002: NOP   0

A001: NOP   0

      AN    M    240.0

      L     S5T#1M

      SD    T    100

      A     T    100

      =     M    240.0                  //一分钟的脉冲



一个人在战斗
以下网友喜欢您的帖子:

  
至圣

经验值: 43587
发帖数: 15780
精华帖: 61
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 4楼 2021-03-19 09:00:40

既然是滑动平均值,那么应该是用fifo队列,中断周期为1s的的中断中编程:从后向前,每一个数据都后移一个地址,当前数据放到第一个地址上,然后所有地址的数据求和除以60.0。


活到老,学到老!为了生活学习吧!
以下网友喜欢您的帖子:

  
侠客

经验值: 731
发帖数: 83
精华帖: 0
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 6楼 2021-04-10 23:41:59

https://support.industry.siemens.com/cs/document/39333120/%E5%9C%A8-step-7-(tia-portal)-%E4%B8%AD%EF%BC%8C%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97s7-1200-s7-1500%E7%9A%84%E5%A4%9A%E4%B8%AA%E6%B5%AE%E7%82%B9%E5%9E%8B%E6%95%B0%E6%8D%AE%E7%9A%84%E7%AE%97%E6%9C%AF%E5%B9%B3%E5%9D%87%E5%80%BC?dti=0&lc=zh-CN

功能块 "Floating Average" 将输入的多个浮点型数据计算出算术平均值,提供了一种平滑数据队列的方法。可周期性输入或脉冲触发的方式计算。

刚看到另一边的帖子差不多也是这个问题。你看看这个是不是适合你。


学无止境,三人行必有我师。
以下网友喜欢您的帖子:

  
侠圣

经验值: 4872
发帖数: 741
精华帖: 10
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 7楼 2021-04-22 15:53:20

这个不就是最简单的模拟量滤波处理吗?

FIFO队列、求平均值。


 
以下网友喜欢您的帖子:

  
至圣

经验值: 23742
发帖数: 3385
精华帖: 52
回复:启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)


只看楼主 8楼 2021-04-22 16:04:09
以下是引用zzm_4957在2021-03-17 15:43:13的发言 >楼主

启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)

一阶滤波了解下。 这种固定数量, 固定权重的加权平均, 理论上就是若干个一阶滤波的组合。


更何况, 求平均值不是目的, 目的是滤除杂波, 找出稳态分量。 这种情况,就用滤波就对了。


y = (1 - a) * x + a * y;


一次不行, 就滤两次; 两次还不行, 就不是干扰的问题了。


不忘初心
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
启动信号给出后,每分钟取一个数,求60个数的平均值(求模拟量滑动平均值程序示例)
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。