请教一下,求一个模拟量输入的平均值,程序该如何写啊?

请教一下,一个实数MD0,打算从1秒前到现在,每隔100ms取一个MD0的数值,到现在就是10个,想把这10个不同时刻的MD0相加,然后再除以十,请问这在程序里该怎么编啊?就是求一个模拟量输入的平均值,用定时器太麻烦了,也不一定能完成。

最佳答案

1、每隔100ms取一个MD0的数值?
建立OB35,并设置为100ms中断一次,在OB35中编程取一个MD0的数值的出现。在程序中应用一计数器,当计算器累计10次后进行求平均值。
2、求平均值:
可以采用冒泡排序法,进行从大到小排序,然后取中间的值,即与求平均值效果相同。
转帖,冒泡排序法:
假定十个数据,放在DB1中,安放顺序如下:
MD0
MD4

MD36
下面是西门子的程序
      L     10  ////装载10到MB0中,因为有十个数据,要进行十次排序,9次也可以的
LL0:  T     MB   200
      L     P#0.0   ////装载地址指针,这是关键,不要搞错了
      LAR1  
      L     9
LL1:  T     MB    201   ////内部循环,进行9次,直到把最大值排到最后
      L     MD [AR1,P#0.0]
      L     MD [AR1,P#4.0]
      <R    
      JC    LL2          ////比较前后两个值,如果前面大于后面的,则前后数据交换
      L    MD [AR1,P#0.0]
      T     #m_temp
      L     MD [AR1,P#4.0]
      T     MD [AR1,P#0.0]
      L     #m_temp
      T    MD [AR1,P#4.0]
LL2:  +AR1  P#4.0     ////指针自动进行加4,因为是浮点数,所以要跳过4个字节
      L     MB    201
      LOOP  LL1       ///这个指令自动的将A寄存器里的值减1
      L     MB    200
LOOP  LL0

提问者对于答案的评价:
多谢回答,也谢谢艾星落尘的帮助

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月18日
下一篇 2017年11月18日

相关推荐