SIEMENS, DF&PD

Предыдущее посещение: Вс июл 10, 2016 17:31 Текущее время: Вс июл 10, 2016 17:31

Часовой пояс: UTC + 3 часа




 [ Сообщений: 24 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Фильтр аналоговых сигналов
СообщениеДобавлено: Вт ноя 08, 2011 18:55 
Не в сети
Новый писатель

Зарегистрирован: Чт окт 07, 2010 9:59
Сообщения: 49
есть ли у сименса стандартный блок-фильтр - для отфильтровки высокочастотной составляющей, желательно с возможностью настройки частоты фильтрации


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 19:39 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
Если не ошибаюсь, нет.

Но его несложно написать самому, алгоритм там очень простой.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 19:50 
Не в сети
Известный Писатель

Зарегистрирован: Чт окт 20, 2011 19:16
Сообщения: 184
Откуда: Украина, Харьков
Derik, речь идет о "программном" или "железном" фильтре ВЧ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 20:45 
Не в сети
Новый писатель

Зарегистрирован: Чт окт 07, 2010 9:59
Сообщения: 49
имеется ввиду именно "программный" с возможностью подстройки частоты среза. поделитесь у кого есть o_student@mail.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт ноя 08, 2011 22:22 
Не в сети
Известный Писатель

Зарегистрирован: Чт окт 20, 2011 19:16
Сообщения: 184
Откуда: Украина, Харьков
Если Вам необходимо отфильтровать амплитудные скачки аналогового сигнала, вызванные ВЧ-наводками в кабеле между датчиком и аналоговым входом (обычное дело при использовании сигнала по напряжению или термосопротивления), то обычный таймер с задержкой в помощь (отсекание кратковременных скачков в зависимости от их продолжительности и запись на выход предыдущего аналогового значения).
Если что-то другое, то опишите конкретный случай, для чего Вам необходим этот самый "ВЧ-фильтр с изменяемой частотой среза"?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 0:16 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
Если речь об аналоговой величине, то самый простой алгоритм:

1. На каждом цикле находите разницу между измеренным значением величины и сохраненным значением с прошлого цикла.
2. Умножаете эту разницу на коэффициент сглаживания (он больше нуля, но меньше или равен единице). Чем меньше коэффициент, тем сильнее сглаживание.
3. Прибавляете результат к значению, полученному на прошлом цикле.
4. Вот ваша сглаженная величина, которую вы можете использовать далее в вычислениях.
5. Сохраняете ее для использования в следующем цикле.

Если речь о дискретной, см. сообщение от AlexBocman.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 1:29 
Не в сети
Известный Писатель

Зарегистрирован: Чт окт 20, 2011 19:16
Сообщения: 184
Откуда: Украина, Харьков
Alexey_Spb_82 писал(а):
Если речь о дискретной, см. сообщение от AlexBocman.

Почему же, мое сообщение тоже касается аналоговой величины:)

А реализация идеи, которую описал ув. Alexey_Spb_82 :
Цитата:
1. На каждом цикле находите разницу между измеренным значением величины и сохраненным значением с прошлого цикла.
2. Умножаете эту разницу на коэффициент сглаживания (он больше нуля, но меньше или равен единице). Чем меньше коэффициент, тем сильнее сглаживание.
3. Прибавляете результат к значению, полученному на прошлом цикле.
4. Вот ваша сглаженная величина, которую вы можете использовать далее в вычислениях.
5. Сохраняете ее для использования в следующем цикле.


на SCL на практике выглядит так:

Код:
FUNCTION FC???: VOID

TITLE = 'rFilter'
// FILTER for Analog Signals
// Date: ???
VERSION: '???'
AUTHOR: ???   
NAME:   ???
FAMILY: ???

//##############################################
// Block Parameters
VAR_INPUT
    Input:  REAL;   // Value that needed filter
    Filter: REAL;   // Filter quotient
END_VAR

VAR_IN_OUT
    Output: REAL;   // Value that after filter
END_VAR
//##############################################

BEGIN
//Output = Filter*Input + (1-Filter)*Output
IF (Filter >= 0.0) AND (Filter <= 1.0) THEN
  Output :=     Filter  * Input
         + (1 - Filter) * Output;
ELSIF Filter > 1.0 THEN
  Output := Input;
ELSE
  Output := 0.0;
END_IF;

END_FUNCTION


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 8:21 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс фев 26, 2006 21:44
Сообщения: 1688
Откуда: Липецк, ОАО "НЛМК"
А просто среднее арифметическое по последним 20-30 значениям(считываемым в наибыстрейшем цикле ) сигнала не проще будет?(это не сарказм, это вопрос)
А этак можно и цифровой фильтр энного порядка соорудить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 10:21 
Не в сети
Известный Писатель

Зарегистрирован: Ср фев 16, 2011 14:23
Сообщения: 434
Откуда: Санкт-Петербург, Москва
Негатив, имхо не проще так как в таком случае либо памяти много потребуется, либо сигнал будет менять раз в 20-30 периодов.

А в данном случае - всего 2 значения и величина плавно меняется. Кроме того, такой алгоритм лучше сглаживает 'всплески' величины.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 10:23 
Не в сети
Известный Писатель

Зарегистрирован: Ср сен 17, 2008 9:13
Сообщения: 253
Откуда: Тула
Может, подойдет скользящее среднее?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 14:06 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс фев 26, 2006 21:44
Сообщения: 1688
Откуда: Липецк, ОАО "НЛМК"
Alexey_Spb_82 писал(а):
сигнал будет менять раз в 20-30 периодов.

Почему это? Каждый цикл считается среднее арифметические от последних 20 значений. Единичный "всплеск" таким способом фильтруется, а медленное повышение уровня сигнала будет происходить с задержкой на 10 значений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср ноя 09, 2011 18:40 
Не в сети
Это точно не человек

Зарегистрирован: Чт фев 16, 2006 12:27
Сообщения: 7515
Откуда: Украина
Alexey_Spb_82 писал(а):
Если не ошибаюсь, нет.

Ошибаетесь, есть.
В стандартной библиотеке STEP7 есть блок FB80 (LEAD_LAG), реализующий фильтрацию сигнала.
Блоки PID-регулятора FB1 (PID_CP) и FB2 (PID_ES) из библиотеки Standard PID Control (приобретается отдельно) опционально позволяют нормализовать и сгладить сигнал регулируемой величины.
В библиотеке Modular PID Control (приобретается отдельно) есть блоки FB9 (LAG1ST) и FB10 (LAG2ND), реализующие алгоритм фильтрации.

P.S. Зачем изобретать велосипед?
P.P.S. Подобные темы обсуждались на форуме не один раз.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт ноя 10, 2011 9:18 
Не в сети
Известный Писатель

Зарегистрирован: Пт июл 06, 2007 6:41
Сообщения: 325
Откуда: г. Тюмень, Россия
Негатив писал(а):
А просто среднее арифметическое по последним 20-30 значениям(считываемым в наибыстрейшем цикле ) сигнала не проще будет?(это не сарказм, это вопрос)
А этак можно и цифровой фильтр энного порядка соорудить.


Можно и так, но:

1. Много требует памяти

2. Большая вычислительная нагрузка.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 7:01 
Не в сети
Новый писатель

Зарегистрирован: Пн ноя 19, 2007 10:37
Сообщения: 48
Eugene1974
А не подскажете, как пользоваться блоком FB80 (LEAD_LAG)?
Что-то я простого человеческого описания не нашел. Как и на что влияют коэффициенты.
У меня задача, грубо говоря, из ШИМ-сигнала получить плавный график. Подойдет ли этот блок для моих целей? Если да, то как надо выставить коэффициенты?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 7:18 
Не в сети
Написал больше чем Вы читали

Зарегистрирован: Вс янв 25, 2009 22:05
Сообщения: 1915
Откуда: Киров
Пользуйтесь кодом приведенным в сообщении №7 этой ветки - проверено неоднократно: эффективно и стабильно работающая функция.

ЗЫ: кстати почему не присваиваются номера постам, на движке этого форума? Вопрос модерам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 7:59 
Не в сети
Известный Писатель

Зарегистрирован: Вт янв 20, 2009 13:44
Сообщения: 343
zhariks писал(а):
... как пользоваться блоком FB80 (LEAD_LAG)?
Что-то я простого человеческого описания не нашел. Как и на что влияют коэффициенты....
Вот есть описание фильтра и его коэффициентов http://iadt.siemens.ru/forum/viewtopic.php?p=62571#62571


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 9:23 
Не в сети
Новый писатель

Зарегистрирован: Сб авг 12, 2006 15:29
Сообщения: 34
Когда то давно,на этом форуме:
L MD1000 //Отфильтрованное значение REAL
L 49.0 //Временная константа-1 (50-1) : сглаживание в течение 50 циклов
*R
L MD1004 // Входной аналоговый сигнал REAL
+R
L 50.0 //Временная константа (50) : сглаживание в течение 50 циклов
/R
T MD1000 //Отфильтрованное значение REAL

Отфильтрованный сигнал не является средним арифметическим


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 10:17 
Не в сети
Новый писатель

Зарегистрирован: Пн ноя 19, 2007 10:37
Сообщения: 48
ProFan
нет там описания блока FB80. Хотелось бы использовать его, как стандартный блок. Седня попробовал его на стенде - ну вроде бы как работает только коэффициент интегральной составляющей в тысячах надо задавать, чтоб эффект был. Зачем нужно время, которое подается на "ножку" блока вообще не понял :(
canada
Спасибо, если не получится со стандартным блоком, попробую этот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 11:12 
Не в сети
Известный Писатель

Зарегистрирован: Вт янв 20, 2009 13:44
Сообщения: 343
zhariks писал(а):
ProFan
нет там описания блока FB80. Хотелось бы использовать его, как стандартный блок. Седня попробовал его на стенде - ну вроде бы как работает только коэффициент интегральной составляющей в тысячах надо задавать, чтоб эффект был. Зачем нужно время, которое подается на "ножку" блока вообще не понял :(...

В ссылке приведено подробное описание и более простые варианты реализации апериодического фильтра. Я не писал того, что там расписан фильтр именно «Lead/Lag Algorithm»(FB80). Описание на данный блок приведено хелпе степа. То, что блок имеет кучу мало понятных с первого раза коэффициентов и их задание через одно место, это вопрос надо задавать автору сего творения.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 20, 2011 15:24 
Не в сети
Известный Писатель

Зарегистрирован: Чт мар 08, 2007 17:11
Сообщения: 336
Откуда: Киров - - Вятка - - Хлынов
akcount писал(а):
Негатив писал(а):
А просто среднее арифметическое по последним 20-30 значениям(считываемым в наибыстрейшем цикле ) сигнала не проще будет?(это не сарказм, это вопрос)
А этак можно и цифровой фильтр энного порядка соорудить.


Можно и так, но:

1. Много требует памяти

2. Большая вычислительная нагрузка.


Ну памяти-то требуется не так и много.... Как-то так:
КОД писал(а):
FUNCTION_BLOCK FB4
VAR_INPUT
in_wrd : real; // входная величина
point_num: INT; // число точек усреднения 2...20
END_VAR
VAR_output
out_wrd : real; // выходная величина
END_VAR
VAR
num: ARRAY [0..19] OF real;
a_Summ: real; // сумма элементов массива
step:INT; // номер шага
i: INT; // счетчик для FOR
END_VAR;


point_num:=point_num-1; // начало счета с ноля

// проверка числа точек усреднения
IF (point_num)<(1) THEN point_num:=1;
END_IF;
IF (point_num)>(19) THEN point_num:=19;
END_IF;

// запись массива значений
num[step]:= in_wrd; // запись значения в ячейку
step:=step+1; // увеличение счетчика ячеек
IF step>=point_num+1 THEN step:=0;
END_IF;

// суммирование элементов массива
a_summ:=0; // обнуление перед началом подсчета
FOR i:=0 TO point_num DO
a_Summ:=a_Summ+num[i];
END_FOR;

// вычисление выходного значения
out_wrd:=a_Summ/(point_num+1);

END_FUNCTION_BLOCK



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
 [ Сообщений: 24 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения

Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group