PDA

Просмотр полной версии : Среднее арифметическое значение параметров



sertol64
08.07.2022, 04:47
Здравствуйте, Уважаемые Волшебники! Я что то не нашёл, или может пропустил...Вот создаю макрос (может он есть где-нить?): поступают параметры на логический вход AI (или float, или int), через определённое время, циклически они фиксируются и сразу вычисляется среднее арифметическое значение на основании предыдущих показаний в онлайн режиме, в итоге получается некая таблица (или график) таких средних значений. я что то сотворил подобное, но как то криво получилось (аж как то стыдно "светить")...остатки и прочее. Короче "упёрся в стенку" Подскажите, мож есть где похожий макрос. Задачка вроде как стандартная...!?

sertol64
08.07.2022, 06:40
Вот что я сваял... Макрос =Save= нашёл в онлайн базе, аналоговых преобразований...

Сергей0308
08.07.2022, 09:32
Здравствуйте, Уважаемые Волшебники! Я что то не нашёл, или может пропустил...Вот создаю макрос (может он есть где-нить?): поступают параметры на логический вход AI (или float, или int), через определённое время, циклически они фиксируются и сразу вычисляется среднее арифметическое значение на основании предыдущих показаний в онлайн режиме, в итоге получается некая таблица (или график) таких средних значений. я что то сотворил подобное, но как то криво получилось (аж как то стыдно "светить")...остатки и прочее. Короче "упёрся в стенку" Подскажите, мож есть где похожий макрос. Задачка вроде как стандартная...!?

И вроде как многократно обсуждалась на просторах форума! В общем виде если решать, можно писать значения в стек необходимой Вам длины(ширины окна), с неким периодом(зависит от скорости изменения параметра и др.) затем сложить все значения окна и разделить на количество разрядов стека(окна), всё! Ровки любит находить среднее арифметическое скользящим окном и макросы выкладывал. Но если подобным методом решать в общем виде - то "замучаетесь пыль глотать", в смысле придётся через цикл писать в стек и стек получится огромной длины! Тогда Вам лучше определится с конкретным параметром измерения и другими его характеристиками или у Вас удивительная способность усложнять себе(и людям) жизнь(решение задачи)?
Я, обычно, проще делаю: суммирую каждый цикл значения параметра(макрос суммирования много лет назад выкладывал) и делю на количество циклов(значений), макрос циклов тоже многократно выкладывал, короче, если "скрестить" эти два макроса, то получится среднее арифметическое за период.
Максимальный период при минимальном цикле(1 мс) 49,7 суток, всё!

https://owen.ru/forum/showthread.php?t=13106&page=2

https://owen.ru/forum/showthread.php?t=36466&page=2

sertol64
08.07.2022, 10:00
...да я наверное всё что выкладывалось не найду. Всего то мне надо будет в среднем 600 цикло. Замеры будут каждые 10 мин в течении 50 часов.
...вот что то получилось с параметрами float, надо на железе проверить. Сомнительно как то....

Сергей0308
08.07.2022, 10:25
Я так понимаю, что процесс достаточно инерционный(медленно меняющийся). Можно так сделать: постоянную времени фильтра сделать равной 60 секунд(в свойствах входа), каждую минуту писать в стек из десяти разрядов, на выходе получаем среднее за 10 минут скользящим окном с периодом обновления 1 минута! Затем это значение суммировать каждые 10 минут с помощью сумматора и делить на количество измерение, всё! Сможете найти среднее за практически любой период, может быть много вариантов.
Если процесс быстродействующий(быстро меняющийся) я бы каждый цикл программы суммировал значения, находил среднее за минуту и писал в стек из десяти разрядов - находил среднее скользящим окном за 10 минут, короче, это и далее как в преведущем варианте!

sertol64
08.07.2022, 10:36
Я так понимаю, что процесс достаточно инерционный(медленно меняющийся). Можно так сделать: постоянную времени фильтра сделать равной 60 секунд(в свойствах входа), каждую минуту писать в стек из десяти разрядов, на выходе получаем среднее за 10 минут скользящим окном с периодом обновления 1 минута! Затем это значение суммировать каждые 10 минут с помощью сумматора и делить на количество измерение, всё! Сможете найти среднее за практически любой период, может быть много вариантов.
Если процесс быстродействующий(быстроменяющийся) я бы каждый цикл программы суммировал значения, находил среднее за минуту и писал в стек из десяти разрядов - находил среднее за 10 минут, короче это и далее как в преведущем варианте!

буду пробовать на железе (он лайн). Ещё "поковыряюсь..."

Сергей0308
08.07.2022, 10:49
буду пробовать на железе (он лайн). Ещё "поковыряюсь..."

Тогда лучше по второму варианту делайте(универсальному), в принципе подойдёт для практически любого процесса!
Пока вижу Вы как обычно в своём репертуаре, в смысле, всё по-своему делаете, зачем тогда спрашивать?

Короче, если не надо промежуточных результатов, можно сделать примерно как-то так:

61583

Результаты на втором дополнительном(нижнем) выходе.
Значение параметра подаёте на вход "D+";
На входе разрешения "En" - логическая единица;
Если надо вычислить среднее арифметическое значение за какой-то период - подаёте на вход "T" импульс в начале и в конце периода, всё!
Короче, высчитывается среднее арифметическое значение за период между фронтами импульсов на входе "Т".
Про максимальный период измерения и его зависимости от времени цикла программы уже писал, Вам точно хватит!

sertol64
08.07.2022, 12:52
Пока вижу Вы как обычно в своём репертуаре, в смысле, всё по-своему делаете, зачем тогда спрашивать?

Сергей, конечно в моём возрасте стыдно признаться в своей туповатости, из того, что Вы написали я понял процентов... 10 - общий смысл! Я не знаю, что такое стек из 10 разрядов, не знаю что такое скользящее окно с периодом обновления, и не знаю для чего в OL фильтр постоянного времени... .Но общий смысл я понял - каждое значение запоминается, потом суммируется и делится на количество циклов измерений...! Уж простите!

sertol64
08.07.2022, 13:15
Короче, если не надо промежуточных результатов, можно сделать примерно как-то так:

61583

Результаты на втором дополнительном(нижнем) выходе.
Значение параметра подаёте на вход "D+";
На входе разрешения "En" - логическая единица;
Если надо вычислить среднее арифметическое значение за какой-то период - подаёте на вход "T" импульс в начале и в конце периода, всё!
Короче высчитывается среднее арифметическое значение за период между фронтами импульсов на входе "Т".
Про максимальный период измерения и его зависимости от времени цикла программы уже писал, Вам точно хватит!
Ооо, это требует отдельного изучения. Поизучаю - отпишусь...!

Сергей0308
08.07.2022, 13:33
Ооо, это требует отдельного изучения. Поизучаю - отпишусь...!

Изначально это делал совсем для других целей(для теплосчётчика), потом добавил(вывел) дополнительную функцию определения среднего арифметического значения за период, вот эта дополнительная функция вам и требуется!