1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Фильтрация аналогового канала

PLC, прочие контроллеры, промышленные компьютеры, операторские панели
Ответить
Аватара пользователя

Автор темы
petr2off
эксперт
эксперт
Сообщения: 1602
Зарегистрирован: 06 янв 2016, 19:45
Имя: Петров В.Л.
Страна: Россия
город/регион: Красноярск
Благодарил (а): 69 раз
Поблагодарили: 185 раз

Фильтрация аналогового канала

Сообщение petr2off »

Добрый день всем.
Тут намедни стал разбираться с S7-1200. Обнаружил, что прикладной уровень бедноват, и решил написать продвинутую обработку аналогового сигнала. И подошел плавным образом к проблеме фильтрации (или сглаживания). Для начала сунулся в сеть, и там на меня вывалилась голимая наука. От обилия интегралов, преобразований фурье, передаточных функций в глазах зарябило. Но идея интегрировать или выполнять преобразование фурье в S7-1200 меня что то не вдохновила. Порывшись я в конечном итоге пришел к следующим алгоритмам:
1) Экспоненциальное сглаживание (по 2-м измерениям) Yi= K*Xi + (1-K)Xi+1 (0 <= K <= 1)
2) Сглаживание по 3-м точкам с использованием весовых коэффициентов Yi=K1*Xi-1+K2*Xi+K3*Xi+1 (K1 = K3 = 0.25, K2 = 0.5)
3) Сглаживание скользящим среднем (сделал по 4-м и 8 точкам)
4) Фильтр МНК 2-го порядка Yi = (K1*Xi-2+K2*Xi-1+K3*Xi+K4*Xi+1+K5*XI+2) /35 (K1 = K5 = -3, K2=K4=12,K3 = 17)

Ну и как то все, может у кого есть в заначке еще что нибуть, без интегралов и Фурье ?

VaBo
частый гость
частый гость
Сообщения: 441
Зарегистрирован: 21 июл 2013, 19:32
Имя: Вадим
город/регион: Северодвинск
Благодарил (а): 12 раз
Поблагодарили: 38 раз

Фильтрация аналогового канала

Сообщение VaBo »

медианный еще сделайте
Аватара пользователя

hell_boy
почётный участник форума
почётный участник форума
Сообщения: 1746
Зарегистрирован: 18 янв 2009, 12:25
Имя: Дмитрий
Страна: Россия
город/регион: Москва
Благодарил (а): 6 раз
Поблагодарили: 132 раза

Фильтрация аналогового канала

Сообщение hell_boy »

фильтр Баттерворта. В PCS 7 и 8 есть соответствующие блоки http://plc4good.org.ua/view_post.php?id=260
"Умные люди обсуждают идеи, средние - события, а глупые - людей" Л.Н. Толстой

LexSL
осмотрелся
осмотрелся
Сообщения: 191
Зарегистрирован: 16 дек 2011, 15:13
Имя: Алексей
Страна: Россия
Благодарил (а): 59 раз
Поблагодарили: 44 раза

Фильтрация аналогового канала

Сообщение LexSL »

VaBo писал(а): 04 окт 2018, 20:17 медианный еще сделайте
Поддерживаю.
Насчет линейных фильтров в комментариях на хабре в статье фильтр Калмана
Недостаток линейных фильтров — они плохо себя ведут при случайных выбросах. Если GPS вдруг скажет, что машинка находится на Луне, возвращаться на Землю ей придётся долго… Я предпочитаю медианный фильтр, когда это возможно.
Аватара пользователя

GrayCat
здесь недавно
здесь недавно
Сообщения: 95
Зарегистрирован: 25 янв 2018, 10:04
Имя: Александр
Страна: Украина
город/регион: южный
Благодарил (а): 4 раза
Поблагодарили: 26 раз

Фильтрация аналогового канала

Сообщение GrayCat »

Где-то в теории доказывается, что при условии некоррелированного с сигналом белого шума, именно скользящее среднее является наиболее оптимальным вариантом по соотношению "порча полезного сигнала" / "подавление шума". Бонус: очень высокое подавление частоты 1/tau и её гармоник. Так что если брать окно среднего кратно 20 мсек, то будет хорошо убираться наводка 50 Гц.

Лично я часто применяю вариант "Фигурист": все выборки складываются в буфер, на каждом пересчёте проходится весь буфер и откидываются максимальное и минимальное значения на данный момент, а уже оставшиеся -- усредняются. Это даёт хорошее подавление одиночных "иголок".
Gray©at.
Аватара пользователя

Valerich
шаман
шаман
Сообщения: 973
Зарегистрирован: 27 июн 2013, 12:20
Имя: Валерич
Страна: СССР
Благодарил (а): 35 раз
Поблагодарили: 78 раз

Фильтрация аналогового канала

Сообщение Valerich »

Я больше практик, чем теоретик, потому изложу так. На пастеризационной установке технологи требовали точности поддержания температуры ±0,1°С. В то-же время дискретность измерения тоже была 0,1. Поэтому все ухищрения с подбором параметров ПИД были напрасны. Помог следующий прием: умножение измеренного значения на 10, и сглаживание скользящим окном 10ти измерений с шириной окна 2-3 сек. Соответственно дискретность измеренного значения стала 0,01 и ступенчатые броски ±0,1°С превратились в плавные изменения периодом с величину окна. И графики температуры превратились в практически ровные ±0,1°С кривые без выбросов.

VaBo
частый гость
частый гость
Сообщения: 441
Зарегистрирован: 21 июл 2013, 19:32
Имя: Вадим
город/регион: Северодвинск
Благодарил (а): 12 раз
Поблагодарили: 38 раз

Фильтрация аналогового канала

Сообщение VaBo »

Можно вообще проинтегрировать за все время пастеризации - получится абсолютно ровная прямая, СЭС будет в восторге.
А требование технологов такой точности - это вообще :ges_clap2:
Аватара пользователя

Looker
эксперт
эксперт
Сообщения: 1105
Зарегистрирован: 09 фев 2011, 11:32
Имя: Дитрих Евгений Линусович
город/регион: Донецк
Благодарил (а): 255 раз
Поблагодарили: 184 раза

Фильтрация аналогового канала

Сообщение Looker »

С Симатиками не знаком, но если в них есть команды работы с "очередью" - "загрузка-выгрузка", тогда очень легко сделать скользящее среднее. Даже в старом SLC-5 (Allen Bradley) такие команды есть, делается без увеличения времени скана независимо от количества точек усреднения (нет обработки всего массива данных).

PS. Код для AB готов привести (LD несколько строк), сейчас не смог найти. Если кому нужно, сообщите - поищу тщательнее и выложу.

Нашел код (MicroLogix 1500), скользящее среднее по 20 значениям:
Изображение
Аватара пользователя

fl4shback
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 10 мар 2022, 16:21
Имя: Антон
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 6 раз

Фильтрация аналогового канала

Сообщение fl4shback »

А получилось у кого-нибудь реализовать фильтр Калмана под 1500м?
ЗЫ: нашёл на Хабре статью об этой функции с привидением кода для матлабовского симулинка, но сломал себе всю голову как же реализовать рандомайзер с динамически изменяющимся диапазоном случайных значений, который лежит внутри цикла. В матлабе это готовая функция, а что как её написать под SCL соображалки не хватает :crazy0to:

Код: Выделить всё

for t=1:(N-1)
  x(t+1)=x(t)+a*t+normrnd(0,sigmaPsi); 
   z(t+1)=x(t+1)+normrnd(0,sigmaEta);	
end;	

for t=1:(N-1)
  eOpt(t+1)=sqrt((sigmaEta^2)*(eOpt(t)^2+sigmaPsi^2)/(sigmaEta^2+eOpt(t)^2+sigmaPsi^2))
  K(t+1)=(eOpt(t+1))^2/sigmaEta^2
 xOpt(t+1)=(xOpt(t)+a*t)*(1-K(t+1))+K(t+1)*z(t+1)
end;
Собсна, "normrnd" - готовая матлабовская функция рандома для диапазона. а sigmaEta, sigmaPsi - переменные отвечающие за инерционность и ускорение характеристики измеряемого сигнала.
Мб будут у кого какие-нибудь мысли? :ges_help:
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2319
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1645 раз
Поблагодарили: 160 раз

Фильтрация аналогового канала

Сообщение keysansa »

fl4shback писал(а): 25 апр 2023, 12:11 А получилось у кого-нибудь реализовать фильтр Калмана под 1500м?
Я на ST его делал, для B&R, но мне он не подошел (для тех задач - слишком сложный подбор коэффициентов). Хотя код остался. Надо?
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Аватара пользователя

fl4shback
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 10 мар 2022, 16:21
Имя: Антон
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 6 раз

Фильтрация аналогового канала

Сообщение fl4shback »

keysansa писал(а): 29 апр 2023, 23:43
fl4shback писал(а): 25 апр 2023, 12:11 А получилось у кого-нибудь реализовать фильтр Калмана под 1500м?
Я на ST его делал, для B&R, но мне он не подошел (для тех задач - слишком сложный подбор коэффициентов). Хотя код остался. Надо?
Было бы здорово :) всё ещё не опустил рук его реализовать..
Перешлёте в личку или выложите тут?
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2319
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1645 раз
Поблагодарили: 160 раз

Фильтрация аналогового канала

Сообщение keysansa »

fl4shback писал(а): 01 май 2023, 21:00 Перешлёте в личку или выложите тут?
Вернуться к началу
Алгоритм публичный, реализация не коммерческая. Тут - лучший вариант. Ушел искать.

Отправлено спустя 16 минут 27 секунд:
Вроде вот (2012 год, похоже по времени):
[+]
TYPE
exTZCalmanData : STRUCT (*Параметры для фильтра Калмана*)
P0 : REAL := 0.0; (*predicted covariance*)
H : REAL := 1.0; (*factor of measured value to real value*)
Covariance : REAL := 0.1;
Q : REAL := 2.0; (*measurement noise*)
State : REAL := 0.0;
pR : REAL := 15.0; (*environment noise*)
F : REAL := 1.0; (*factor of real value to previous real value*)
X0 : REAL := 0.0; (*predicted state*)
END_STRUCT;
END_TYPE


FUNCTION exTZCalmanFilter : REAL (*Фильтр Калмана (функция стабилизации показаний)*)
VAR_INPUT
Data : REAL;
END_VAR
VAR_IN_OUT
P : exTZCalmanData;
END_VAR
VAR
K : REAL;
END_VAR
END_FUNCTION


(***********************************************************************************
* Фильтр Калмана для стабилизации показаний (см. http://habrahabr.ru/post/140274/)
*
***********************************************************************************)
FUNCTION exTZCalmanFilter
P.X0 := P.F * P.State;
P.P0 := P.F * P.Covariance * P.F + P.Q;

(* measurement update - correction *)
K := P.H * P.P0/ChkDiv(P.H * P.P0 * P.H + P.pR);
P.State := P.X0 + K * (Data - P.H * P.X0);
exTZCalmanFilter := P.State;
P.Covariance := (1 - K * P.H)* P.P0;
END_FUNCTION
Отправлено спустя 48 минут 15 секунд:
Valerich писал(а): 12 окт 2018, 13:31 Помог следующий прием: умножение измеренного значения на 10, и сглаживание скользящим окном 10ти измерений с шириной окна 2-3 сек. Соответственно дискретность измеренного значения стала 0,01
Это не измеренное, а усредненное значение у вас 0.01. Но по факту, меньше, так как округление все-равно будет. Для операций с 0.1 измеренного - надо, что бы среднее было 0.001. И округлять перед присвоением учетному значению.

Отправлено спустя 8 минут 14 секунд:
keysansa писал(а): 01 май 2023, 22:10 Вроде вот (2012 год, похоже по времени):
Посмотрел на код, нашел нестыковку. Функция CheckDiv - проверяет делитель. Если он =0, возвращает 1.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Аватара пользователя

fl4shback
здесь недавно
здесь недавно
Сообщения: 14
Зарегистрирован: 10 мар 2022, 16:21
Имя: Антон
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 6 раз

Фильтрация аналогового канала

Сообщение fl4shback »

keysansa писал(а): 01 май 2023, 22:18 Алгоритм публичный, реализация не коммерческая. Тут - лучший вариант. Ушел искать.
Спасибо огромное! Буду тестить :)

ITop
здесь недавно
здесь недавно
Сообщения: 17
Зарегистрирован: 12 авг 2016, 13:49
Имя: Погодин И. И.
Поблагодарили: 8 раз

Фильтрация аналогового канала

Сообщение ITop »

В современных модулях аналоговых входов как правило уже есть фильтрация, причём она сделана на уровне микросхемы АЦП.
Ну и всегда нужно помнить про задержку, вносимую фильтром, тем больше, чем более он агрессивный.
Аватара пользователя

servo85
специалист по B&R
специалист по B&R
Сообщения: 157
Зарегистрирован: 15 фев 2014, 23:37
Имя: Волоснов Сергей
Страна: Казахстан
город/регион: Актобе
Благодарил (а): 18 раз
Поблагодарили: 11 раз

Фильтрация аналогового канала

Сообщение servo85 »

ITop писал(а): 02 авг 2023, 09:46 В современных модулях аналоговых входов как правило уже есть фильтрация, причём она сделана на уровне микросхемы АЦП
Может все же на уровне операционной системы?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Автоматизация бардака порождает только автоматизированный бардак

ITop
здесь недавно
здесь недавно
Сообщения: 17
Зарегистрирован: 12 авг 2016, 13:49
Имя: Погодин И. И.
Поблагодарили: 8 раз

Фильтрация аналогового канала

Сообщение ITop »

servo85 писал(а): 02 авг 2023, 12:47 Может все же на уровне операционной системы?
Ну вот производитель так пишет - я выделил красным:
NotchFilter.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17472
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Фильтрация аналогового канала

Сообщение Jackson »

servo85 писал(а): 02 авг 2023, 12:47 Может все же на уровне операционной системы?
А вот и не подерётесь!
Фильтрация делается аппаратно, но управление ей - из операционной системы :-P
И это неважно вообще. Важно что не в прикладной программе.
По вопросам работы Форума можно обратиться по этим контактам.
Аватара пользователя

Looker
эксперт
эксперт
Сообщения: 1105
Зарегистрирован: 09 фев 2011, 11:32
Имя: Дитрих Евгений Линусович
город/регион: Донецк
Благодарил (а): 255 раз
Поблагодарили: 184 раза

Фильтрация аналогового канала

Сообщение Looker »

Jackson писал(а): 11 авг 2023, 13:21
servo85 писал(а): 02 авг 2023, 12:47Может все же на уровне операционной системы?
А вот и не подерётесь!Фильтрация делается аппаратно, но управление ей - из операционной системы :-P И это неважно вообще. Важно что не в прикладной программе.
Драться не зачем!
Для servo85: в 1756-IF* фильтрация на уровне модуля, масштабирование в инженерные единицы - аналогично. Из прикладной программы настройки можно менять, но нужно иметь информацию о модуле для команд GSV и SSV (дефицит, найти и скачать - не реально).
Из опыта, 30+ лет назад: модуль 1771-VHSC (Very High Speed Counter) для PLC-5. Процессор в режиме Stop, а модуль продолжает отслеживать вращение инкрементального енкодера и при этом включает и выключает собственные дискретные выходы, как ему было задано.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
Аватара пользователя

keysansa
эксперт
эксперт
Сообщения: 2319
Зарегистрирован: 20 дек 2018, 04:45
Имя: Сергей
Страна: РБ/РФ
город/регион: РФ Сергиев Посад
Благодарил (а): 1645 раз
Поблагодарили: 160 раз

Фильтрация аналогового канала

Сообщение keysansa »

ITop писал(а): 02 авг 2023, 09:46 причём она сделана на уровне микросхемы АЦП.
На DSP. АЦП не умеет.

Отправлено спустя 17 минут 28 секунд:
Looker писал(а): 11 авг 2023, 16:50 Процессор в режиме Stop, а модуль продолжает отслеживать вращение инкрементального енкодера и при этом включает и выключает собственные дискретные выходы, как ему было задано.
Обеспечение безопасной работы установки. Такое же - процессор в стопе, а реле все равно регулируют наполнение бака расходной и приемной емкости.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
Аватара пользователя

Jackson
администратор
администратор
Сообщения: 17472
Зарегистрирован: 17 июн 2008, 16:01
Имя: Евгений свет Брониславович
Страна: Россия
город/регион: Санкт-Петербург
Благодарил (а): 749 раз
Поблагодарили: 1277 раз

Фильтрация аналогового канала

Сообщение Jackson »

keysansa писал(а): 05 сен 2023, 20:01 На DSP. АЦП не умеет.
В общем, аппаратно, а что там - уже не столь важно.
keysansa писал(а): 05 сен 2023, 20:01 Обеспечение безопасной работы установки.
Да, у нас тоже есть контроллеры с таким. Питание всего контроллера можно обрубить, но если остаётся питание на определённом модуле - он продолжает работать и выполнять все положенные ему защиты.
По вопросам работы Форума можно обратиться по этим контактам.
Ответить

Вернуться в «Средний уровень автоматизации (управляющий)»