菜鸟问个模拟量的问题,: ^o^ – 初级工程师 第9级 在的话请进来。

s7-300实现功能如下:对PIW256模拟量输入值进行采样,采样个数可以上位给定,并求其平均数,还得实现先入先出原则
比如:采10个数,求其平均数,采第11个数剃掉最先采的第一个数,求其平均数。不知道怎么做,请帮忙会写程序的帮忙写个我看看。

问题补充:
谢谢,我看到前面有个一样的问题,答案为”用一维数组通过指针来实现环形链表。采样个数即为数组长度,由于是环形表,所以平均值固定是这个数组各元素之和除以采样个数。“,还是不知道怎么写,麻烦老师们给写个程序我看看。

最佳答案

建议你先多看看信号处理、数据结构及其算法方面的文章,因为应用场合不同,所使用的处理方法也是不一样的。你现在所说的办法对周期性的干扰比较有效,但对偶尔的脉冲干扰效果就有可能很差。

编程思路大致为:首先定义一个n+3个字的数据块,n为上位机可能给出的采样个数的最大值,第n+3个存放上位机给定的采样个数A,第n+2个存放指针,第n+1个存放平均值,其余空间作为环形链表用(此处环形链表相对于FIFO队列来说的优点在于环形链表只需移动指针,而FIFO队列需要移动队列中的数据)。每次PLC启动后首先给数据块赋初值,可以全为0或除第n+3个字不处理外其它全为0。程序运行时,1、读取模拟量输入值到指针指示的单元,2、指针值加一,3、比较当前指针值是否大于A,是则清零,4、前A个数据求和再除以A,所得平均值存放在第n+1个单元。

需要注意的一些细节:1、数据累加时很可能超限,可根据需要在计算时转换为DI或real数据类型;2、最好在PLC程序而不是在上位机中对A进行限制,如果A大于n会导致程序错误;3、建议做成一个FB,以方便多处调用。

提问者对于答案的评价:
谢谢,但是我觉得好像不太对,你好象是10次到了在累加,我是希望读一次计算一次。要是有QQ可以给我下吗,我新手想想你学习学习。

专家置评

阿鸣提供的链接很不错,建议学习学习。

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

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

相关推荐