Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Формула: Разница счётчика
- В этой теме 29 ответов, 7 участников, последнее обновление 5 лет назад сделано Mikhail.
-
АвторСообщения
-
02.05.2018 в 10:17 #9070MikhailМодератор
Добрый день!
Текущее — Val(), полученное от прибора — Cnl.
Предыдущее Вы можете получить, только если предварительно сохраните его в переменную или другой входной канал.
Получить текущее время: DateTime.Now или DateTime.UtcNow07.05.2018 в 15:37 #9141litmiУчастникMikhail! В #4698 Вы отвечали, что при чтении значения «Можно ещё моменты времени записывать в переменные для более точного расчёта». А как это сделать?
Там же указали, что «Вариант 2 реализован только для 1 измерения. Если их много, то нужен массив вместо double prevVal». Что значит «1 измерение»?07.05.2018 в 18:04 #9145MikhailМодераторЕсли бы Вы привели гиперссылку на #4698, то я мог бы посмотреть ту запись и вспомнить.
Пример переменной для работы со временем:
DateTime t0 = DateTime.MinValue; // где-то в Вашей формуле t0 = DateTime.UtcNow; // посчитать сколько прошло времени double total = (DateTime.UtcNow - t0).TotalSeconds;
Можете посмотреть справку по DateTime.
07.05.2018 в 18:44 #915407.05.2018 в 19:25 #9155litmiУчастникЯ полагаю, что должна быть связка времени чтения канала и прочитанное в этот момент значение канала. Что-то типа Dictionary. Имея две таких пары значений можно посчитать текущую скорость изменения значения канала. Затем раннее значение пары заменить на только что считанное. При таком алгоритме будет не важно сколько времени прошло между событиями чтения канала — минута, час, 12 минут.
08.05.2018 в 17:48 #9168MikhailМодератордля 1 измерения
Имел ввиду для одной величины.
08.05.2018 в 17:49 #9169MikhailМодератордолжна быть связка времени чтения канала и прочитанное в этот момент значение канала. Что-то типа Dictionary
Да, идея нормальная.
09.05.2018 в 14:26 #9176litmiУчастникНо как ее осуществить в формулах я не представляю, к сожалению.
10.05.2018 в 18:54 #9212MikhailМодераторРазработка формулы выходит за рамки бесплатной поддержки. Я могу ответить на конкретные вопросы по синтаксису. Либо можем договориться на коммерческой основе.
Если кто-то из пользователей Rapid SCADA и данного форума сможет помочь в качестве разминки…
10.05.2018 в 21:42 #9223RomirosУчастникМожно уточнить для ясности. Вы хотите получить на выходе расход воды в литрах в секунду, по изменению нарастающей счётчика?
12.05.2018 в 22:23 #9270litmiУчастниктак точно!
21.04.2019 в 09:05 #11463ValeriyУчастникДобрый день!
Mikhail, Вы писали на 1 странице в 6 сообщении:
Чтобы получить значение за час во входном канале, потребуется сделать дополнительный входной канал (пусть №221) типа Дорасчётный ТИ. Затем нужно для канала 220 задать формулу MyFunc() примерно такую (в сообщениях я формулы не тестирую):
А если 220 канал тоже дорасчетный с формулой CnlValSet(218,219). Можно в нем задать формулу для суммы каналов типа так CnlValSet(218,219);MyFunc() ?- Этот ответ был изменен 5 лет назад от Valeriy.
21.04.2019 в 09:12 #11465MikhailМодераторДобрый день!
Если формула разделена точкой с запятой, то выражение после ; рассчитывает статус.
Если Вы хотите применить формулу к значению, то она должна стоять до ;
В дорасчётном канале можно задать формулу для суммы. Что конкретно писать в формуле — зависит от задачи.21.04.2019 в 18:28 #11466ValeriyУчастникЯ хотел бы сделать так-же, как в 5 сообщении, считать объем за час. Только канал не ТИ, а дорасчетный, так, как в нем сумма старшего и младшего слова со своими формулами. В дорасчетном канале формула CnlValSet(218,219) и работает. Вот и думаю, как вставить формулу MyFunc() в этот ТИ. Я только начинаю и не силен в формулах. CnlValSet тоже взял с форума. Вы писали, что лучше применить SumCnlVals , в место CnlValSet, но она и написана и работает. К сожалению, только начинаю изучать С# и не представляю, как она пишется.
22.04.2019 в 09:44 #11467MikhailМодераторсчитать объем за час
Самый быстрый и простой способ — использовать плагин Гибкий отчёт, который считает разности.
Если реализовывать с помощью формул, то нужно будет использовать каналы типа «Часовой ТИ», которые рассчитываются по истечению каждого часа. В эти каналы должны сохраняться значения по итогу часа. Их формула будет просто Val(…)
-
АвторСообщения
- Вы должны авторизироваться для ответа в этой теме.