Стартовая страница › Форумы › Понять, как работает ПО › Усреднение обрабатываемых данных
- В этой теме 5 ответов, 3 участника, последнее обновление 5 лет назад сделано Mikhail.
-
АвторСообщения
-
03.12.2017 в 02:01 #8056Danila_RazlivanovУчастник
Доброго времени суток. Возник такой вопрос, есть ли возможность посчитать среднее значение получаемого параметра, скажем, за сутки? То есть, в зависимости от изменения, к примеру, расхода, изменяется количество твердого в перекачиваемой жидкости. Т.к. в разные моменты времени, опять же в зависимости от расхода, значение расчитываемой величины (количества твердого) будем меняться, есть необходимость обсчитать это значение, к примеру, за сутки. Подскажите, есть ли такая возможность, и какие варианты её реализации? Заранее благодарен.
04.12.2017 в 10:26 #8058MikhailМодераторДобрый день!
За час и за минуту рассчитать среднее можно, поставить галочку усреднения для входного канала.Если нужно рассчитать среднее за сутки или за любой заданный интервал времени, то потребуется завести дополнительные входные каналы для суммирования данных и для подсчёта количества измерений. И ещё один канал, который будет вычислять среднее путём деления значений первых двух каналов.
Кроме того, в определённые моменты времени необходимо сбрасывать счётчики.04.12.2017 в 10:32 #8059MikhailМодераторПримеры формул для аналогичной задачи:
// Среднее значение за период double PerAvg(int sumCnlNum, int cntCnlNum) { if (Stat() == 2) // архивный { return Val(); } else { double sum = Val(sumCnlNum); double cnt = Val(cntCnlNum); return cnt < 1 ? 0 : sum / cnt; } } // Статус среднего значения за период double PerAvgStat(int cntCnlNum) { return Stat() == 2 ? 2 : (Val(cntCnlNum) < 1 ? 0 : 1); } // Обработать полученное от контроллера значение double ProcVal(double coef, params int[] sumCnlNums) { double cur = Cnl >= 0 ? Cnl * coef : 0; foreach (int sumCnlNum in sumCnlNums) { int cntCnlNum = sumCnlNum + 1; double newSum = Val(sumCnlNum) + cur; double newCnt = Val(cntCnlNum) + 1; SetVal(sumCnlNum, newSum); SetVal(cntCnlNum, newCnt); } return cur; } // Обнулить значение в начале суток double ResetOnDayBeg() { return DayBeg() ? 0 : Val(); }
19.04.2019 в 08:04 #11454baurУчастникВсем привет,
1)
как можно эту формулу переделать в счетчик который не сбрасывается2)
За час и за минуту рассчитать среднее можно, поставить галочку усреднения для входного канала.
то есть создаем 2 канала (минутный ТС, часовой ТС), формула = Val(нужный номер канала) + галочка усреднение?
19.04.2019 в 08:27 #11455baurУчастнику нас уже есть сигнал текущая переработка (т/час), мы не можем его трогать.
Надо усреднить отдельно через дорасчетный канал (минутный, часовой) а еще лучше создать отдельный счетчик (сумматор)- Этот ответ был изменен 5 лет назад от baur.
19.04.2019 в 08:53 #11459 -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.