求平均值-滤波(去除最大最小值)STL程序

大家好,小弟最近遇到一个问题,现场需求,但本人水平太低,不够,说的是一个PIW--开卷机的铝卷卷径,接入PLC300,但由于PIW是一直在变化的(换算成工程量说),例如读数在不生产卷轴上不带料,卷径应该在510,但现场实际显示在508~~515之间波动,能否做一个程序(仅作程序上编程,硬件通道修改已经做了):
所以要求是:将一定时间内的(除去最大值,最小值,防止突然测不到,变到很大)的平均值算出来。STL要求。
谢谢大家帮忙,小弟真的很需要。
网上的看了,论坛里,百度,都找了,专家也给了很多,但就是没有找到我需要的,哭啊----

冒泡法什么的,我也看了,但专家都是说【稍加修改】,但我真的不知道怎么改,新手啊,所以烦请各位前辈,能不能提供一个具体的STL程序?
谢谢哦

问题补充:
我现在也有算平均值的STL程序,但是问题是,PIW是连续输入,一直在变化,如何将例如1秒内采集到的很多值放入DB中?这个我很苦恼啊(OB35内执行,设时间100ms)

最佳答案

1、采用冒泡排序(由大到小)后取中间值:
转帖:
冒泡排序(冒泡原理,学过语言的人都应该知道,如果不知道,请上网找一个吧,到处都是):
假定十个数据,放在DB1中,安放顺序如下:
DBD0
DBD4

DBD36
下面是西门子的程序
OPN   DB    1                 /////打开DB1这个数据块
      L     10  ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0:  T     MB    0
      L     P#0.0   ////装载地址指针,这是关键,不要搞错了
      LAR1  
      L     9
LL1:  T     MB    2   ////内部循环,进行9次,直到把最大值排到最后
      L     DBD [AR1,P#0.0]
      L     DBD [AR1,P#4.0]
      <R    
      JC    LL2          ////比较前后两个值,如果前面大于后面的,则前后数据交换
      L     DBD [AR1,P#0.0]
      T     #m_temp
      L     DBD [AR1,P#4.0]
      T     DBD [AR1,P#0.0]
      L     #m_temp
      T     DBD [AR1,P#4.0]
LL2:  +AR1  P#4.0     ////指针自动进行加4,因为是浮点数,所以要跳过4个字节
      L     MB    2
      LOOP  LL1       ///这个指令自动的将A寄存器里的值减1
      L     MB    0
LOOP  LL0
2、相关编程:
《模拟量信号采样滤波及STEP7语言的实现》连接:
http://wenku.baidu.com/view/8da0c4d4b9f3f90f76c61ba4.html
《有关采样滤波的编程》:
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_id=56045&cid=1029

提问者对于答案的评价:
http://www.ad.siemens.com.cn/service/answer/solution.aspx?Q_ID=105569&cid=1027
谢谢,已解决

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc237160.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2018年12月1日 下午5:06
下一篇 2018年12月1日 下午5:06

相关推荐