大家好,小弟最近遇到一个问题,现场需求,但本人水平太低,不够,说的是一个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