找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
问题
取消精华
首页精华问答
取消推荐
高端用户推荐
申请置评
已申请置评
修改
修改标签
添加标签
官方认证
取消官方认证
修改标签
添加标签
转移分类
删除
{{itemCategory}}
收藏({{answerDetail.Q_FavoriteCounts}})
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
专家建议
取消最佳答案
修改
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
JC Nc3
L P##Queue
LAR1
L W [AR1,P#0.0]
T #DBNumber
L D [AR1,P#2.0]
SLD 8
SRD 8
T #tmpAddr
OPN DB [#DBNumber]
LAR1 #tmpAddr
L P#4.0
L #EnterAcc
*D
+AR1
L #InValue
T DBD [AR1,P#0.0]
L #EnterAcc
INC 1
T #EnterAcc
L #FilterFactor
>=I
= #tmpbool
JNB Rst1
L 0
T #EnterAcc
Rst1: NOP 0
A #tmpbool
O #MovingAverage
JCN Nc1
LAR1 #tmpAddr
L DBD [AR1,P#0.0]
T #tmpMax
T #tmpMin
L 0.000000e+000
T #tmpSum
L #FilterFactor
MAF1: T #tmpIdex
LAR1 #tmpAddr
A #MovingAverage
JC Sum
L #tmpMax
L DBD [AR1,P#0.0]
<=R
JCN MAX
L DBD [AR1,P#0.0]
T #tmpMax
字数有限,剩余部分 见图片
补充:关键是去一个最大和一个最小,还是第一大的和第二大的数值,以及最小和第二小的数值,如果这样需要排序,不然只要你只要比较出最大值和最小值。
等您来回答
换一换
{{item.CoinValue}}西币
{{item.VisitNum}}人想问
本版相关问题
换一换
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!

西门子商城
算术平均滤波,中位值平均滤波(你的要求)和滑动平均滤波法 ,做到一个FC块里,根据我附件 图片上的参数设置就行