找答案的高端用户(找答案钻石及双钻级别的用户)将尽可能从此问题下的所有回
答中,为您推荐最佳答案。届时您可以根据推荐数采纳答案。
如果自提问时间起7天内您仍无法选出最佳答案,您可以选择“无满意答案”关闭此问题。
小程序查看
手机扫码追踪该问题
手机扫码追踪该问题,
觉得实用,立即去分享!
点击复制链接
数据的获取,可以用循环中断,也可以用定时器去实现5秒的脉冲,当定时时间到,调用一次 FC,FC中就是滤波的代码。
主要的代码分两块,一块是 OB100 中的初始化,另一块就是滤波,循环求50 个的平均值。
数据定义一定时如图的。
第一部分
//OB100 上电初始化部分,在OB100中
"滤波".计数 := 0;
"滤波".累加和 := 0;
"滤波".平均值 := 0;
FOR "滤波".原数据下标 := 0 TO 59 BY 1 DO
"滤波".原数据["滤波".原数据下标] := 0;
END_FOR;
"滤波".原数据下标 := 0;
第二部分
//滤波代码,放在FC中,复制即可,数据定义在数据块中
"滤波".累加和 := "滤波".累加和 - "滤波".原数据["滤波".原数据下标]; //累加和减掉最先进循环队列的数据
"滤波".原数据["滤波".原数据下标] :="滤波".新原始值; //向数组中添加新的原始值
"滤波".累加和 := "滤波".累加和 + "滤波".新原始值; //新的累加和
"滤波".计数 := "滤波".计数 + 1; //对循环队列中的有效数据计数
IF "滤波".计数>59 THEN //当有效数等于100个时就计算平均值
"滤波".平均值:=DINT_TO_INT("滤波".累加和/60);
"滤波".计数 := 59;
END_IF;
"滤波".原数据下标 := "滤波".原数据下标 + 1;
IF "滤波".原数据下标 > 59 THEN //当数据下标到了末尾,下标回到0,实现循环存储。
"滤波".原数据下标 := 0;
END_IF;
本程序在 TIA V15.1 调试通过。
L MD 500 //实际的温度值
L MD 504
+R
T MD 504 //累加的温度值
L MW 512
L 1
+I
T MW 512 //用于60次的计数
A001: L 60
>I
JCN A002
L MD 504
L 60
/R
T MD 508 //计算平均值
L 0
T MD 504
T MW 512 //计算结束后清零
A002: AN M 100.0
L S5T#5S
SD T 120
A T 120
= M 100.0 //5秒脉冲程序
希望能这个程序能帮到你,
首次回答问题,获得
双倍西币积分!
立即成为技术知识分享的一员!
找答案微信小程序
提问
搜索
欢迎您访问支持中心!
丰富的视频,全方位的文档,大量的网友交流精华……
为了更好的完善这些内容,我们诚邀您在浏览结束后,花20秒左右的时间,完成一个用户在线调查!
感谢您的支持!