- Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
- Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
- Не надо писать свой вопрос в первую попавшуюся тему - всегда лучше создать новую тему.
- За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения. Непонятно? - Читать здесь.
- Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
- Перед тем как что-то написать - читать здесь, а затем здесь и здесь.
- Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.
Фильтрация аналогового канала
Модераторы: Глоб.модераторы, специалисты по PLC
-
- эксперт
- Сообщения: 1735
- Зарегистрирован: 06 янв 2016, 19:45
- Имя: Петров В.Л.
- Страна: Россия
- город/регион: Красноярск
- Благодарил (а): 78 раз
- Поблагодарили: 235 раз
Фильтрация аналогового канала
Добрый день всем.
Тут намедни стал разбираться с 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)
Ну и как то все, может у кого есть в заначке еще что нибуть, без интегралов и Фурье ?
Тут намедни стал разбираться с 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)
Ну и как то все, может у кого есть в заначке еще что нибуть, без интегралов и Фурье ?
-
- почётный участник форума
- Сообщения: 1746
- Зарегистрирован: 18 янв 2009, 12:25
- Имя: Дмитрий
- Страна: Россия
- город/регион: Москва
- Благодарил (а): 6 раз
- Поблагодарили: 143 раза
Фильтрация аналогового канала
фильтр Баттерворта. В PCS 7 и 8 есть соответствующие блоки http://plc4good.org.ua/view_post.php?id=260
"Умные люди обсуждают идеи, средние - события, а глупые - людей" Л.Н. Толстой
-
- освоился
- Сообщения: 208
- Зарегистрирован: 16 дек 2011, 15:13
- Имя: Алексей
- Страна: Россия
- Благодарил (а): 67 раз
- Поблагодарили: 53 раза
Фильтрация аналогового канала
Поддерживаю.
Насчет линейных фильтров в комментариях на хабре в статье фильтр Калмана
Недостаток линейных фильтров — они плохо себя ведут при случайных выбросах. Если GPS вдруг скажет, что машинка находится на Луне, возвращаться на Землю ей придётся долго… Я предпочитаю медианный фильтр, когда это возможно.
-
- здесь недавно
- Сообщения: 95
- Зарегистрирован: 25 янв 2018, 10:04
- Имя: Александр
- Страна: Украина
- город/регион: южный
- Благодарил (а): 4 раза
- Поблагодарили: 26 раз
Фильтрация аналогового канала
Где-то в теории доказывается, что при условии некоррелированного с сигналом белого шума, именно скользящее среднее является наиболее оптимальным вариантом по соотношению "порча полезного сигнала" / "подавление шума". Бонус: очень высокое подавление частоты 1/tau и её гармоник. Так что если брать окно среднего кратно 20 мсек, то будет хорошо убираться наводка 50 Гц.
Лично я часто применяю вариант "Фигурист": все выборки складываются в буфер, на каждом пересчёте проходится весь буфер и откидываются максимальное и минимальное значения на данный момент, а уже оставшиеся -- усредняются. Это даёт хорошее подавление одиночных "иголок".
Лично я часто применяю вариант "Фигурист": все выборки складываются в буфер, на каждом пересчёте проходится весь буфер и откидываются максимальное и минимальное значения на данный момент, а уже оставшиеся -- усредняются. Это даёт хорошее подавление одиночных "иголок".
Gray©at.
-
- эксперт
- Сообщения: 1030
- Зарегистрирован: 27 июн 2013, 12:20
- Имя: Валерич
- Страна: СССР
- Благодарил (а): 44 раза
- Поблагодарили: 106 раз
Фильтрация аналогового канала
Я больше практик, чем теоретик, потому изложу так. На пастеризационной установке технологи требовали точности поддержания температуры ±0,1°С. В то-же время дискретность измерения тоже была 0,1. Поэтому все ухищрения с подбором параметров ПИД были напрасны. Помог следующий прием: умножение измеренного значения на 10, и сглаживание скользящим окном 10ти измерений с шириной окна 2-3 сек. Соответственно дискретность измеренного значения стала 0,01 и ступенчатые броски ±0,1°С превратились в плавные изменения периодом с величину окна. И графики температуры превратились в практически ровные ±0,1°С кривые без выбросов.
-
- частый гость
- Сообщения: 441
- Зарегистрирован: 21 июл 2013, 19:32
- Имя: Вадим
- город/регион: Северодвинск
- Благодарил (а): 15 раз
- Поблагодарили: 39 раз
Фильтрация аналогового канала
Можно вообще проинтегрировать за все время пастеризации - получится абсолютно ровная прямая, СЭС будет в восторге.
А требование технологов такой точности - это вообще
А требование технологов такой точности - это вообще
-
- почётный участник форума
- Сообщения: 1181
- Зарегистрирован: 09 фев 2011, 11:32
- Имя: Дитрих Евгений Линусович
- город/регион: Донецк
- Благодарил (а): 351 раз
- Поблагодарили: 241 раз
Фильтрация аналогового канала
С Симатиками не знаком, но если в них есть команды работы с "очередью" - "загрузка-выгрузка", тогда очень легко сделать скользящее среднее. Даже в старом SLC-5 (Allen Bradley) такие команды есть, делается без увеличения времени скана независимо от количества точек усреднения (нет обработки всего массива данных).
PS. Код для AB готов привести (LD несколько строк), сейчас не смог найти. Если кому нужно, сообщите - поищу тщательнее и выложу.
Нашел код (MicroLogix 1500), скользящее среднее по 20 значениям:
PS. Код для AB готов привести (LD несколько строк), сейчас не смог найти. Если кому нужно, сообщите - поищу тщательнее и выложу.
Нашел код (MicroLogix 1500), скользящее среднее по 20 значениям:
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 10 мар 2022, 16:21
- Имя: Антон
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 6 раз
Фильтрация аналогового канала
А получилось у кого-нибудь реализовать фильтр Калмана под 1500м?
ЗЫ: нашёл на Хабре статью об этой функции с привидением кода для матлабовского симулинка, но сломал себе всю голову как же реализовать рандомайзер с динамически изменяющимся диапазоном случайных значений, который лежит внутри цикла. В матлабе это готовая функция, а что как её написать под SCL соображалки не хватает
Собсна, "normrnd" - готовая матлабовская функция рандома для диапазона. а sigmaEta, sigmaPsi - переменные отвечающие за инерционность и ускорение характеристики измеряемого сигнала.
Мб будут у кого какие-нибудь мысли?
ЗЫ: нашёл на Хабре статью об этой функции с привидением кода для матлабовского симулинка, но сломал себе всю голову как же реализовать рандомайзер с динамически изменяющимся диапазоном случайных значений, который лежит внутри цикла. В матлабе это готовая функция, а что как её написать под SCL соображалки не хватает
Код: Выделить всё
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;
Мб будут у кого какие-нибудь мысли?
-
- эксперт
- Сообщения: 2469
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 2119 раз
- Поблагодарили: 207 раз
Фильтрация аналогового канала
Я на ST его делал, для B&R, но мне он не подошел (для тех задач - слишком сложный подбор коэффициентов). Хотя код остался. Надо?
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 10 мар 2022, 16:21
- Имя: Антон
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 6 раз
Фильтрация аналогового канала
Было бы здорово :) всё ещё не опустил рук его реализовать..
Перешлёте в личку или выложите тут?
-
- эксперт
- Сообщения: 2469
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 2119 раз
- Поблагодарили: 207 раз
Фильтрация аналогового канала
Алгоритм публичный, реализация не коммерческая. Тут - лучший вариант. Ушел искать.
Отправлено спустя 16 минут 27 секунд:
Вроде вот (2012 год, похоже по времени): Отправлено спустя 48 минут 15 секунд:
Это не измеренное, а усредненное значение у вас 0.01. Но по факту, меньше, так как округление все-равно будет. Для операций с 0.1 измеренного - надо, что бы среднее было 0.001. И округлять перед присвоением учетному значению.
Отправлено спустя 8 минут 14 секунд:
Посмотрел на код, нашел нестыковку. Функция CheckDiv - проверяет делитель. Если он =0, возвращает 1.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
-
- здесь недавно
- Сообщения: 15
- Зарегистрирован: 10 мар 2022, 16:21
- Имя: Антон
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 6 раз
-
- здесь недавно
- Сообщения: 19
- Зарегистрирован: 12 авг 2016, 13:49
- Имя: Погодин И. И.
- Поблагодарили: 8 раз
Фильтрация аналогового канала
В современных модулях аналоговых входов как правило уже есть фильтрация, причём она сделана на уровне микросхемы АЦП.
Ну и всегда нужно помнить про задержку, вносимую фильтром, тем больше, чем более он агрессивный.
Ну и всегда нужно помнить про задержку, вносимую фильтром, тем больше, чем более он агрессивный.
-
- специалист по B&R
- Сообщения: 157
- Зарегистрирован: 15 фев 2014, 23:37
- Имя: Волоснов Сергей
- Страна: Казахстан
- город/регион: Актобе
- Благодарил (а): 19 раз
- Поблагодарили: 12 раз
Фильтрация аналогового канала
Может все же на уровне операционной системы?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Автоматизация бардака порождает только автоматизированный бардак
-
- здесь недавно
- Сообщения: 19
- Зарегистрирован: 12 авг 2016, 13:49
- Имя: Погодин И. И.
- Поблагодарили: 8 раз
Фильтрация аналогового канала
Ну вот производитель так пишет - я выделил красным:
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- администратор
- Сообщения: 18749
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1852 раза
Фильтрация аналогового канала
А вот и не подерётесь!
Фильтрация делается аппаратно, но управление ей - из операционной системы
И это неважно вообще. Важно что не в прикладной программе.
По вопросам работы Форума можно обратиться по этим контактам.
-
- почётный участник форума
- Сообщения: 1181
- Зарегистрирован: 09 фев 2011, 11:32
- Имя: Дитрих Евгений Линусович
- город/регион: Донецк
- Благодарил (а): 351 раз
- Поблагодарили: 241 раз
Фильтрация аналогового канала
Драться не зачем!
Для servo85: в 1756-IF* фильтрация на уровне модуля, масштабирование в инженерные единицы - аналогично. Из прикладной программы настройки можно менять, но нужно иметь информацию о модуле для команд GSV и SSV (дефицит, найти и скачать - не реально).
Из опыта, 30+ лет назад: модуль 1771-VHSC (Very High Speed Counter) для PLC-5. Процессор в режиме Stop, а модуль продолжает отслеживать вращение инкрементального енкодера и при этом включает и выключает собственные дискретные выходы, как ему было задано.
_______________________________________________
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
Узкая специализация в широком смысле этого слова ведет к широкой идиотизации в узком смысле этого слова . (С) Бернард Шоу
-
- эксперт
- Сообщения: 2469
- Зарегистрирован: 20 дек 2018, 04:45
- Имя: Сергей
- Страна: РБ/РФ
- город/регион: РФ Сергиев Посад
- Благодарил (а): 2119 раз
- Поблагодарили: 207 раз
Фильтрация аналогового канала
На DSP. АЦП не умеет.
Отправлено спустя 17 минут 28 секунд:
Обеспечение безопасной работы установки. Такое же - процессор в стопе, а реле все равно регулируют наполнение бака расходной и приемной емкости.
В трансформаторной будке живет трансформаторная собака (с) Прозрачный гонщик.
-
- администратор
- Сообщения: 18749
- Зарегистрирован: 17 июн 2008, 16:01
- Имя: Евгений свет Брониславович
- Страна: Россия
- город/регион: Санкт-Петербург
- Благодарил (а): 973 раза
- Поблагодарили: 1852 раза
Фильтрация аналогового канала
В общем, аппаратно, а что там - уже не столь важно.
Да, у нас тоже есть контроллеры с таким. Питание всего контроллера можно обрубить, но если остаётся питание на определённом модуле - он продолжает работать и выполнять все положенные ему защиты.
По вопросам работы Форума можно обратиться по этим контактам.