当前位置: 主页 > PLC控制

求平均值问题 STL

我这边要采集数据量是不固定的,但都大于5个,所以我希望这个是个变量
然后我这边是要去除2个最大的和2个最小的值,然后取平均数。不知道哪位大神能帮帮忙

问题补充:
如果是应用冒泡法,如何能简单的算取中间数值的平均值呢,而且我如何知道我已经排序好了呢?

最佳答案

1:首先,你需要新建个数组比如64个REAL类型的。
2:采样次数必须<=64.
3:编写个FC程序,做个POINTER参数,指向你新建的数组
4::你是去除一个最大值和1个最小值?还是2个最大值和2个最小值?如果是后者,需要排序算法。如果是前者,相对简单,是个标准的中位值平均滤波
参数
VAR_INPUT
FilterFactor:INT;
InValue:REAL;
Queue:POINTER;
MovingAverage:BOOL;
MedianAverage:BOOL;
ParNoFilter:BOOL;
END_VAR
VAR_IN_OUT
OutValue:REAL;
EnterAcc:INT;
END_VAR
VAR_TEMP
tmpMax:REAL;
tmpMin:REAL;
tmpSum:REAL;
tmpAddr:DWORD;
DBNumber:INT;
tmPIDex:INT;
tmpbool:BOOL;
AR1ReSTore:DWORD;
END_VAR
代码
TAR1#AR1Restore
A#ParNoFilter
JCNc3
LP##Queue
LAR1
LW[AR1,P#0.0]
T#DBNumber
LD[AR1,P#2.0]
SLD8
SRD8
T#tmpAddr
OPNDB[#DBNumber]
LAR1#tmpAddr
LP#4.0
L#EnterAcc
*D
+AR1
L#InValue
TDBD[AR1,P#0.0]
L#EnterAcc
INC1
T#EnterAcc
L#FilterFactor
>=I
=#tmpbool
JNBRst1
L0
T#EnterAcc
Rst1:NOP0
A#tmpbool
O#MovingAverage
JCNNc1
LAR1#tmpAddr
LDBD[AR1,P#0.0]
T#tmpMax
T#tmpMin
L0.000000e+000
T#tmpSum
L#FilterFactor
MAF1:T#tMPIdex
LAR1#tmpAddr
A#MovingAverage
JCSum
L#tmpMax
LDBD[AR1,P#0.0]
<=R
JCNMAX
LDBD[AR1,P#0.0]
T#tmpMax
字数有限,剩余部分见图片
补充:关键是去一个最大和一个最小,还是第一大的和第二大的数值,以及最小和第二小的数值,如果这样需要排序,不然只要你只要比较出最大值和最小值。

图片说明:

求平均值问题 STL求平均值问题 STL

提问者对于答案的评价:
谢谢~~

专家置评

已阅,最佳答案正确。

  • 关注微信
上一篇:153从站

猜你喜欢

微信公众号