发表于:2006-08-11 18:16:00
楼主
由于现场干扰非常严重,从而导致PLC采集到的模拟量信号非常不稳定。其表现为数值无规律变化,而且幅度非常大。我现在自己做了个软件滤波程序,但是效果不佳(我的缓冲区长度为100个字,应该不算小),虽然比没有滤波要有所改善,但还是会经常出现错误的数值。
其基本算法为:
1.首先做个FIFO缓冲区,每次采样时将新的数据放入缓冲区,同时将最老的数据丢弃。
2.将整个缓冲区复制1份,然后对该缓冲区副本内数值按从大到小进行排序。
3.对排序结果中各数值的出现次数进行计数,将出现次数最多的数值作为滤波结果。
现在放上在某1时刻FIFO缓冲区内数值:
1448,1433,1433,1621,1621,1621,1665,1665,1500,1500,
1500,1777,1509,1509,1509,1454,1454,1437,1437,1437,
1772,1772,1815,1815,1815,1507,1507,1507,1457,1457,
1438,1438,1438,1758,1758,1758,1804,1804,1507,1507,
1507,1457,1457,1457,1436,1436,1436,1722,1722,1722,
1769,1769,1468,1422,1422,1422,1768,1768,1825,1825,
1519,1519,1519,1459,1459,1430,1430,1430,1768,1768,
1818,1818,1818,1511,1511,1511,1511,1511,1428,1428,
1428,1766,1766,1766,1813,1813,1813,1506,1506,1506,
1449,1449,1425,1425,1425,1759,1759,1759,1807,1807
经过排序后的数值:
1825,1825,1818,1818,1818,1815,1815,1815,1813,1813,
1813,1807,1804,1804,1777,1772,1772,1769,1769,1768,
1768,1768,1768,1766,1766,1766,1759,1759,1759,1758,
1758,1758,1722,1722,1722,1665,1665,1621,1621,1621,
1519,1519,1519,1511,1511,1511,1511,1511,1509,1509,
1509,1507,1507,1507,1507,1507,1507,1506,1506,1506,
1500,1500,1500,1468,1459,1459,1457,1457,1457,1457,
1457,1454,1454,1449,1449,1448,1438,1438,1438,1437,
1437,1437,1436,1436,1436,1433,1433,1430,1430,1430,
1428,1428,1428,1425,1425,1425,1422,1422,1422
这个仪表是压力式液位计,量程是0~140mm,此时串在其中的显示表显示数值是49.6mm,万用表显示的数值是9.7mA,液位计本身没有显示。PLC此时算出的最佳值是1507,换算过来就是52mm,PLC的模拟量输入模块分辨率是1/4000。液位变化非常缓慢(因为我们要求水位控制在正负3mm),超过了就要控制设备动作了,所以对信号的稳定度要求比较高。
现在的问题就是:在这种情况下,表头显示的数值一直在1mm以内变化,不知道他们是怎么做的。