Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Формула: Разница счётчика
- В этой теме 29 ответов, 7 участников, последнее обновление 5 лет назад сделано Mikhail.
-
АвторСообщения
-
25.05.2017 в 14:39 #5933baurУчастник
Как можно высчитывать разницу счётчика для получения переработки конвейера, чтобы было видно: 00:00 = 52 тонн, 01:00 = 45 тонн … 23:00 = 60 тонн.
и еще нарастающий за сутки
и нарастающий за 08:00-16:00 (1 смена), 16:00-00:00 (2-смена), 00:00-00:08 (3-смена)- Эта тема была изменена 6 лет, 11 месяцев назад от baur.
25.05.2017 в 16:27 #5935manjey73Участникдля нарастающего использовать формулы начала дня DayBeg и часа HourBeg например.
так же для расчета разницы от предыдущего часа использовать HourBegА вот с указанием смен надо будет формулу еще создавать, чтобы можно было там указать со скольки до скольки и так же расчет разницы выполнять
25.05.2017 в 17:36 #5946MikhailМодераторСогласен с предыдущем советом. Ещё удобен для этого плагин Гибкий отчёт.
25.05.2017 в 19:02 #594815.08.2017 в 13:51 #7018oleg777УчастникДобрый день Господа. Прошу прощения, никак не могу разобраться. Есть входной канал номер 220, телеизмерение — счётчик воды, постоянно с нарастающим насчитывает кубы. Необходимо в таблице отображать количество кубов, прошедшее за час. Как использовать HourBeg?
Спасибо большое.16.08.2017 в 08:26 #7028MikhailМодераторДобрый день!
Самый понятный вариант — использовать плагин Гибкий отчёт. Плагин будет сам считать разницу.Чтобы получить значение за час во входном канале, потребуется сделать дополнительный входной канал (пусть №221) типа Дорасчётный ТИ. Затем нужно для канала 220 задать формулу MyFunc() примерно такую (в сообщениях я формулы не тестирую):
double MyFunc() { double delta = Cnl - Val(); SetVal(221, Val(221) + delta); return Cnl; }
Формула для канала 221: HourBeg()?0:Val()
HourBeg нужен, чтобы сбросить значение в начале часа.16.08.2017 в 14:32 #7036oleg777УчастникОгромное спасибо, всё заработало.
10.04.2018 в 13:43 #8876litmiУчастникЗдравствуйте! Задачка очень похожая на обсуждаемую в теме и на #4689. Есть входной канал 1004, телеизмерение — счётчик воды, постоянно с нарастающим итогом насчитывает литры. Необходимо на схеме отображать количество литров прошедшее от последнего измерения. Канал 1004 постоянно опрашивается.
Пытался осуществить https://forum.rapidscada.ru/?topic=%d0%bf%d0%b0%d0%bc%d1%8f%d1%82%d1%8c-%d0%bf%d1%80%d0%b5%d0%b4%d1%8b%d0%b4%d1%83%d1%89%d0%b5%d0%b3%d0%be-%d0%b7%d0%bd%d0%b0%d1%87%d0%b5%d0%bd%d0%b8%d1%8f Вариант 1. Создал два Дорасчетных ТИ канала 1005 и 1010. В канале 1005 задействовал формулу Val(1004)-Val(1010). Канал 1010 должен хранить предыдущее значение входного канала Val(1004).
Получаю 0, т.е. данные из входного канала и данные из Дорасчетного ТИ 1010 всегда равны.
Как использовать «Минутный ТИ» (если сделать опрос не постоянным, а раз в минуту) — не понятно. Подскажите как решить задачку.- Этот ответ был изменен 6 лет назад от litmi.
10.04.2018 в 15:22 #8881MikhailМодераторСо своей стороны могу объяснить, если что-то непонятно по вычислениям в Rapid SCADA. С самой задакой, надеюсь, помогут наши пользователи. Также могу предложить помощь на платной основе.
12.04.2018 в 11:31 #8891litmiУчастникЗдравствуйте! В документации в разделе «Использование формул» предлагается использовать тип канала «Минутный» для реализации счетчиков. Мне нужно посчитать разность между двумя последовательно считанными данными по каналу типа «Телеизмерение». Видимо алгоритм должен быть такой: считать данные, запомнить их, а через минуту из вновь считанных данных вычесть запомненное значение. Но как это реализовать практически для меня не ясно. Подскажите в какую сторону думать.
13.04.2018 в 14:56 #8913MikhailМодераторДобрый день!
В документации скорее имеется ввиду, что если Вы измеряете мощность, то складывая значения мощности раз в минуту Вы можете получить потребление с некоторой погрешностью.Для Вашей задачи нужно что-то другое. Чтобы посчитать во входном канале разницу между новым значением и предыдущем, можно использовать: Cnl — Val()
Cnl — то, что пришло, Val() — то что было в канале.
Но что дальше Вы планировали сделать с полученной разностью?13.04.2018 в 14:57 #8914MikhailМодераторМинусы движок форума превращает в тире, так что при копировании формул нужно поправить.
14.04.2018 в 23:08 #8929litmiУчастникПро минусы и тире я уже читал на форуме. Спасибо за предупреждение.
Исходное значение данных по каналу типа «Телеизмерение» у меня это литры. Это значение постоянно увеличивается. Если я буду считывать данные раз в минуту и подсчитывать разность между текущим и предыдущим значением, то получу скорость литры в минуту. ЕЕ и надо отобразить на экране оператора.17.04.2018 в 08:40 #8936MikhailМодераторВам нужно использовать таблицу Формулы. Завести там переменную для хранения предыдущего значения. И создать формулу для минутного канала, которая будет использовать это значение. Примерно так:
double prevVal = -1; double CalcCons() { if (prevVal > 0) { double x = Cnl - prevVal; prevVal = Cnl; return x; } else { return 0; } }
01.05.2018 в 22:45 #9062litmiУчастникЗдравствуйте! Хотелось бы изменить подход к решению задачи. Иногда проскакивает сообщение о несчитанных данных по каналу и поэтому расчетные значения получаются не корректные.
Необходимо считывать последовательно данные из одного канала с привязкой ко времени (максимально точно). Имея текущее и предыдущее значение канала и соответственно времени его чтения можно вычислить скорость изменения величины в канале по формуле, которая, полагаю, должна выглядеть примерно так: (Cnl-Val(CnlNum))/(T2-T1), где T2 – текущее время чтения значения канала, Т1 – предыдущее время чтения значения канала. Каким образом получить текущее и предыдущее время считывания канала? -
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.