300plc滤波程序问题

现在测一个角度传感器,数据跳动过大,在12度–20度范围内频繁跳动,现在用的314c2pn/dp自带的ai模块不带滤波,求一个滤波程序。

问题补充:
用的博途,程序scl熟悉点

最佳答案

从下面多方面根本上解决问题。
1、传感器的质量
2、系统接地是否良好,线用的是屏蔽线吗?屏蔽层单端接地,并且远离强电,如果接地不好,可以将接地与构筑物钢筋骨架连接。
3、信号负与 M 短接;
未连接的电流/电压模拟输出通道的 3 个输入不应连接信号,而是连接到 MANA(前连接器
的针脚 20)。 这样可确保最大程度地抑制这些模拟量输入的干扰
接线部分参考
4、电源部分加隔离变压器
5、通道加信号隔离器
SIMATIC S7-300 CPU 31xC 和 CPU 31x:技术规范
https://support.industry.siemens.com/cs/document/12996906
如果确实要做滤波程序。参考
计算读入的任意数量的数值的平均值
http://support.automation.siemens.com/CN/view/zh/28027081
或者将测量值放在队列中,再求平均值
功能和样例:缓存测量值的“FIFO”
https://support.industry.siemens.com/cs/document/8685494
根据FIFO原则在环形缓冲器临时存储接收到的数据并传给用户接口
https://support.industry.siemens.com/cs/document/16825843
不知编程用的是TIA还是经典STEP7,是用 STL 还是 SCL 较熟呢?
补允:
数据定义如图
代码如下,复制即可
//OB100中写上电初始化部分
"滤波".计数 := 0;
"滤波".累加和 := 0;
"滤波".平均值 := 0;
FOR "滤波".原数据下标 := 0 TO 99 BY 1 DO
    "滤波".原数据["滤波".原数据下标] := 0;
END_FOR;
"滤波".原数据下标 := 0;

//
//滤波代码,可在FC中也可在OB100中,复制即可,数据定义在数据块中
"滤波".累加和 := "滤波".累加和 – "滤波".原数据["滤波".原数据下标];   //累加和减掉最先进循环队列的数据
"滤波".原数据["滤波".原数据下标] :="滤波".新原始值;                         //向数组中添加新的原始值
"滤波".累加和 := "滤波".累加和 + "滤波".新原始值;                             //新的累加和
"滤波".计数 := "滤波".计数 + 1;                                                           //对循环队列中的有效数据计数
IF "滤波".计数>99 THEN                                             //当有效数等于100个时就计算平均值
    "滤波".平均值:=DINT_TO_INT("滤波".累加和/100);
    "滤波".计数 := 99;
END_IF;

"滤波".原数据下标 := "滤波".原数据下标 + 1;
IF "滤波".原数据下标 > 99 THEN                   //当数据下标到了末尾,下标回到0,实现循环存储。
    "滤波".原数据下标 := 0;
END_IF;

图片说明:

300plc滤波程序问题  

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

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2020年10月30日 下午10:08
下一篇 2020年10月30日 下午10:08

相关推荐