PFILTER - фильтр помех заданной длительности

Назначение.
Функциональный блок PFILTER используется для фильтрации входных аналоговых сигналов от помех с заданными параметрами.
Состав структурной переменной.
Переменная со структурным типом PFILTER будет добавлена в локальный словарь автоматически при добавлении блока в редактор.

Описание алгоритма.
-
До запуска блока (RUN=FALSE), входной сигнал X передается на выход Y без фильтрации (Y=X).
-
После запуска блока (RUN=TRUE), в каждом i-ом цикле выполнения алгоритма определяется скорость изменения входного сигнала X относительно выходного Y по формуле:
,где Xi - значение входного сигнала в текущем цикле, Yi-1 - значение выходного сигнала в предыдущем цикле, Tc - значение, приближенно равное входному параметру Cycle и кратное времени цикла контроллера, а VXi - скорость изменения Xi относительно Yi-1. -
Пока скорость изменения входного сигнала по модулю не превышает заданного ограничения (|VXi|<=V), входной сигнал передается на выход Yi=Xi, а Q=FALSE.
-
Если в каком-либо цикле 0<V<|VXi|, то входной сигнал Xi считается помехой и блокируется. При этом на выходе Y сохраняется последнее выводимое значение Yi=Yi-1, а выход Q=TRUE.
-
Значение входного сигнала Xi перестанет считаться помехой и продолжит передаваться на выход (Yi = Xi и Q=FALSE), если:
-
снизилась скорость изменения сигнала и выполняется условие |VXi|<V;
-
скорость изменения сигнала на протяжении времени TF превышала максимальную скорость изменения |VXi|>=V.
При значении Cycle=0 период работы блока равен циклу контроллера. При значении V<=0 или TF<=0 входной сигнал X не фильтруется.
|
Пример синтаксиса на языке ST.
//вызов функционального блока
Block.PFILTER(RUN, X, V, TF, Cycle);
//чтение отфильтрованного выходного сигнала
Y := Block.Y;
//Q=true, если значение входного сигнала X по отношению
//к выходному сигналу Y изменилось со скоростью, больше V
Q := Block.Q;
|
