Да, наверное так и есть, придется увеличивать дискретность входящих данных, завтра проверю...
Вид для печати
Даже на 2 секунды нужна задержка Вложение 80025
У меня изменение входа 5 раз в секунду.
А может попробовать другой вариант AVG:
Вложение 80026
я делал как-то AVG который делил на количество принятых переменных. Не помню, чтобы у меня в не число улетало.
Мне кажется, в OSCAT BASIC видел реализацию на ST фильтра со скользящим средним из N отсчётов - думаю, можно или скопировать или самостоятельно написать программу с очередью на циклическом массиве (чтобы при каждом отсчёте не выполнять сдвиг элементов). Возможно, придётся доработать для пересчёта по таймеру, а не на каждом машинном цикле.
А с другой стороны, помню на Pascal строил графики реакции на ступенчатое воздействие для разных фильтров - не увидел принципиальной разницы между скользящим средним и фильтром 1-го порядка.
Т.е., на мой взгляд, нет смысла в этом AVG. Если уж и делать фильтр со скользящим окном, то весовой - у каждого отсчёта свой весовой коэффициент, убывающий по мере "устаревания".
И поэтому встаёт вопрос -чем не устраивает встроенный фильтр первого порядка?
Вот фильтр EMA, экспоненциальное скользящее среднее Вложение 80035
kondor3000, функциональный блок EMA - это фильтр 1-го порядка с неявным пересчётом Тцикла/Тфильтра, примерный эквивалент FILTER_DW из OSCAT BASIC.
В данной реализации не очень практичный, т.к. результат фильтрации будет зависеть от продолжительности машинного цикла.
Но это полдела, вкусовщина, можно не принимать во внимание...
Дело в том, что этот фильтр эквивалентен встроенному фильтру на аналоговом входе.
А значит, вопрос к Traveller остаётся актуальным - почему отказывается от встроенного фильтра?
Данный вариант не заработал!
Вложение 80037
Повторил, все заработало!
Огромное человеческое спасибо!!! :)
Вложение 80038
Всем доброго времени суток!
Подскажите пожалуйста, может есть макрос запоминания int энергонезависимый, чтобы при отключении питания ПР и последующем включении сохранялось значение int?
Вот матрица памяти на 32 ячейки:
Вложение 80613
Даже непонятно какие у вас могут быть проблемы, в смысле, у меня с этим никогда проблем не возникало!
Может ваше ПР не имеет энергонезависимой памяти, если у вас ПР110, то ничего не поделаешь, в смысле, придётся брать ПР с наличием энергонезависимой памяти, то есть любое другое, такие несколько десятилетий выпускают!
Вот несколько вариантов запоминания переменной и инициализации при включении ПР.Вложение 80619
Обычные переменные энергонезависимые
1) Простой вариант
2) Инициализация из константы
3) Инициализация сетевой переменной
Я как раз его и пытался использовать, но идет несоответствие входных и выходных значений, на скринах видно.Вложение 80624Вложение 80625Вложение 80626
Это время в мс.
Блок не запоминает, запоминает значение энергонезависимая переменная. Вложение 80627
А это скрин ячейки блока памяти, найдите отличия)))
А не запоминает у вас, потому что запись не включили.
Вы там пожалуйста без извращений, в смысле, что запишете(запись по уровню сигнала "1" на соответствующем входе) в ячейку, то там и будет, ячеек 32(0-31), два независимых выхода для чтения(вывода) данных из ячеек памяти:
Вложение 80628
Вложение 80629
И, Вы так и не написали какое у Вас ПР, название у него есть?
В смысле, может у вашего ПР нет энергонезависимой памяти, тогда программно это не поправишь!
И, Вы так и не написали какое у Вас ПР, название у него есть?
В смысле, может у вашего ПР нет энергонезависимой памяти, тогда программно это не поправишь![/QUOTE]
ПР102-230.2416.01
Может кто поможет? Имеется светодиодный светильник с драйвером, управление свечения (больше-меньше) на 12-24В. Управление происходит выключателем звонкового типа (кратковременное нажатие-включить/выключитб свет (запоминает последнее свечение), долгое нажатие - регулирует свечение больше/меньше. Проблема в том, что при отключении питания на драйвер (220В) и последующем включении, настройки пропадают. Надо сделать так, чтобы при отключении/подаче питания драйвера и ПР102 сохранялись настройки драйвера, т.е. чтобы ПР выводил свечение на на ту яркость, что была до отключения питания...
Если у вас дискретное управление яркостью от ПР102, в смысле сигналами больше-меньше, то настройки яркости находятся в драйвере, а ПР в принципе здесь не причём!
Короче для энергонезависимости нужно чтобы управление яркостью было с аналогового выхода ПР, которого, как я понимаю нет у вашего ПР!
Вот это поворот!
https://www.youtube.com/watch?v=uB-02LymtgE
Вложение 80631
Вот схема подключения.
настройки яркости находятся в драйвере, а ПР в принципе здесь не причём!
https://www.youtube.com/watch?v=uB-02LymtgE[/QUOTE]
Говорю же, при отключении питания драйвера, настройки освещения слетают. Надо сделать так, чтобы ПР запоминал последнюю настройку и делал регулировку до этой самой последней настройки.
Ранее Вы так не говорили, это уже второй поворот, в смысле, Вы говорили про энергонезависимость настройки яркости, а это совсем другое!
Короче, можно примерно так запомнить настройку яркости, в счётчике, только частоту генератора сделать максимально возможной, для точности:
Вложение 80633
А управление драйвером от выходов ПР.
Конечно, всё это будет, через одно место, через которое часто в России делают, но видимо у Вас такая цель!
И, сигнал включения драйвера(подачи напряжения питания) нужен будет или ПР запитать параллейно драйверу.
Попробуйте так и первое включение сделайте через кнопку ПР, а все остальные через "Выключатель".
TMRSet - сделайте энергонезависимой, ФБ должен запоминать время удержания кнопки BTN и повторить на выходе при сбросе питания на ПР.
Вложение 80634
Код:function_block TMRPush
var_input
BTN : bool;
RPT : bool;
TMRSet : udint;
end_var
var_output
TMRValue : udint;
Q : bool;
end_var
var
RT : SYS.RTRIG;
FT : SYS.FTRIG;
TS : time;
TMRRPT : SYS.TP;
end_var
TMRValue := TMRSet;
RT(I:=BTN); if RT.Q then TS := get_time(); end_if
FT(I:=BTN); if FT.Q then TMRValue := time_to_udint(get_time() - TS); end_if
TMRRPT(I:=RPT, T:= udint_to_time(TMRValue));
Q := BTN or TMRRPT.Q;
end_function_block
Посмотрел вашу схему, мне видится один реальный вариант, это подать сигнал(8-40В) с выхода драйвера на аналоговый вход ПР через делитель напряжения(не более 10В на выходе) и запоминать это значение, всё!
При включении ПР восстанавливать это значение с помощью дискретного выхода ПР!
Есть ПР102 с аналоговыми входами, вам придётся менять модификацию ПР102!
Вложение 80637
Другие варианты - это несерьёзно, из области фантастики, мне так кажется!
А как у вас яркость уменьшается, в смысле, насколько понял, при длительном нажатии яркость увеличивается до максимума затем уменьшается до минимума и так циклически, пока кнопка нажата или для изменения направления(с увеличения яркости на уменьшение и обратно) надо кнопку передёрнуть?
Т.е. вот так тоже было бы нормально?
Вложение 80639
Так ему же надо не на максимальную яркости включать, а на заданную, в смысле что была в момент выключения питания!
И, как я понимаю у кнопки(управляющего входа драйвера) несколько функций, в смысле, короткое нажатие, включает-выключает свет(работает как Т-триггер), а длинное нажатие увеличивает-уменьшает яркость, пока кнопка нажата, короче, я до конца ещё не разобрался как это всё работает, но и того что понял достаточно, чтобы понять, что будет очень проблематично сделать управление по времени нажатия на кнопку!
Я уже писал, как я бы сделал!
...все-таки не получилось с функц блоком(((...А можно ссылку на делитель напряжения?
У Овена есть такие готовые, но они для подключения 10 В, делят для получения 1 В. Резисторы там 2 КОм и 200 Ом, что слишком мало для 40 В.
Если их брать, то резисторы надо перепаивать.
https://owen.ru/product/rd10
Я беру трёхуровневые клеммы на DIN-рейку и ставлю резисторы или другие детали на них.
Вот пример делителя на резисторах для напряжения 230V.
Вложение 80673 Вложение 80674 Вложение 80675
Всем спасибо большое!