Формула: Разница счётчика

  • В этой теме 29 ответов, 7 участников, последнее обновление 5 лет назад сделано Mikhail.
Просмотр 15 сообщений - с 16 по 30 (из 30 всего)
  • Автор
    Сообщения
  • #9070
    Mikhail
    Модератор

    Добрый день!

    Текущее — Val(), полученное от прибора — Cnl.
    Предыдущее Вы можете получить, только если предварительно сохраните его в переменную или другой входной канал.
    Получить текущее время: DateTime.Now или DateTime.UtcNow

    #9141
    litmi
    Участник

    Mikhail! В #4698 Вы отвечали, что при чтении значения «Можно ещё моменты времени записывать в переменные для более точного расчёта». А как это сделать?
    Там же указали, что «Вариант 2 реализован только для 1 измерения. Если их много, то нужен массив вместо double prevVal». Что значит «1 измерение»?

    #9145
    Mikhail
    Модератор

    Если бы Вы привели гиперссылку на #4698, то я мог бы посмотреть ту запись и вспомнить.

    Пример переменной для работы со временем:

      DateTime t0 = DateTime.MinValue;
      // где-то в Вашей формуле
      t0 = DateTime.UtcNow;
      // посчитать сколько прошло времени
      double total = (DateTime.UtcNow - t0).TotalSeconds;
    

    Можете посмотреть справку по DateTime.

    #9154
    litmi
    Участник

    Вот ссылка

    #9155
    litmi
    Участник

    Я полагаю, что должна быть связка времени чтения канала и прочитанное в этот момент значение канала. Что-то типа Dictionary. Имея две таких пары значений можно посчитать текущую скорость изменения значения канала. Затем раннее значение пары заменить на только что считанное. При таком алгоритме будет не важно сколько времени прошло между событиями чтения канала — минута, час, 12 минут.

    #9168
    Mikhail
    Модератор

    для 1 измерения

    Имел ввиду для одной величины.

    #9169
    Mikhail
    Модератор

    должна быть связка времени чтения канала и прочитанное в этот момент значение канала. Что-то типа Dictionary

    Да, идея нормальная.

    #9176
    litmi
    Участник

    Но как ее осуществить в формулах я не представляю, к сожалению.

    #9212
    Mikhail
    Модератор

    Разработка формулы выходит за рамки бесплатной поддержки. Я могу ответить на конкретные вопросы по синтаксису. Либо можем договориться на коммерческой основе.

    Если кто-то из пользователей Rapid SCADA и данного форума сможет помочь в качестве разминки…

    #9223
    Romiros
    Участник

    Можно уточнить для ясности. Вы хотите получить на выходе расход воды в литрах в секунду, по изменению нарастающей счётчика?

    #9270
    litmi
    Участник

    так точно!

    #11463
    Valeriy
    Участник

    Добрый день!
    Mikhail, Вы писали на 1 странице в 6 сообщении:
    Чтобы получить значение за час во входном канале, потребуется сделать дополнительный входной канал (пусть №221) типа Дорасчётный ТИ. Затем нужно для канала 220 задать формулу MyFunc() примерно такую (в сообщениях я формулы не тестирую):
    А если 220 канал тоже дорасчетный с формулой CnlValSet(218,219). Можно в нем задать формулу для суммы каналов типа так CnlValSet(218,219);MyFunc() ?

    • Этот ответ был изменен 5 лет назад от Valeriy.
    #11465
    Mikhail
    Модератор

    Добрый день!
    Если формула разделена точкой с запятой, то выражение после ; рассчитывает статус.
    Если Вы хотите применить формулу к значению, то она должна стоять до ;
    В дорасчётном канале можно задать формулу для суммы. Что конкретно писать в формуле — зависит от задачи.

    #11466
    Valeriy
    Участник

    Я хотел бы сделать так-же, как в 5 сообщении, считать объем за час. Только канал не ТИ, а дорасчетный, так, как в нем сумма старшего и младшего слова со своими формулами. В дорасчетном канале формула CnlValSet(218,219) и работает. Вот и думаю, как вставить формулу MyFunc() в этот ТИ. Я только начинаю и не силен в формулах. CnlValSet тоже взял с форума. Вы писали, что лучше применить SumCnlVals , в место CnlValSet, но она и написана и работает. К сожалению, только начинаю изучать С# и не представляю, как она пишется.

    #11467
    Mikhail
    Модератор

    считать объем за час

    Самый быстрый и простой способ — использовать плагин Гибкий отчёт, который считает разности.

    Если реализовывать с помощью формул, то нужно будет использовать каналы типа «Часовой ТИ», которые рассчитываются по истечению каждого часа. В эти каналы должны сохраняться значения по итогу часа. Их формула будет просто Val(…)

Просмотр 15 сообщений - с 16 по 30 (из 30 всего)
  • Вы должны авторизироваться для ответа в этой теме.