Добрый день!
Разработал медианный фильтр, проверил его алгоритм в Matlab,
однако при переносе в ФБ C# возникает проблемы при работе - спустя несколько значений фильтр перестает работать.
Вот пример:
Код:
using System;
using MasterSCADA.Script.FB;
using MasterSCADA.Hlp;
using FB;
using FB.FBAttributes;
using System.Linq;
[FBRetain]
public partial class ФБ : ScriptBase
{
public static int count=0;//счетчик
public static int order=15;//порядок-количество чисел в окне
public static double data;
public bool flag=false;
public double temp=0;
public double[] buffer=new double[15];// size = order
public int index=8;
public int num=0;
public override void Start()
{
for(int i=0;i<order;i++)
{
buffer[i]=0;
}
}
public override void Execute()
{
if(flag==true)
{
for(int i=0;i<order-1;i++)//0 1
{
buffer[i]=buffer[i+1];
}
if(u.HasValue)
{
buffer[order-1]=Convert.ToDouble(u);
}
sort();
data=buffer[index];// buffer median val
}
if((count==order)&&(flag==false))
{
flag=true;
sort();
data=buffer[index];// buffer median val
}
if ((count<order)&&(flag==false))
{
if(u.HasValue)
{
buffer[count]=Convert.ToDouble(u);
count++;
}
}
y=data;
num++;
Параметр1=num;
}// end of execute
public void sort()
{
double temp=0;
for(int i=0;i<order-1;i++)//0 1
{
if(buffer[i]>buffer[i+1])
{
temp=buffer[i+1];
buffer[i+1]=buffer[i];
buffer[i]=temp;
}
;
}
}
} // end of FB
Кто сталкивался с такой проблемой? Опрос ФБ настроен на изменение входов.