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

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

    Как можно высчитывать разницу счётчика для получения переработки конвейера, чтобы было видно: 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.
    #5935
    manjey73
    Участник

    для нарастающего использовать формулы начала дня DayBeg и часа HourBeg например.
    так же для расчета разницы от предыдущего часа использовать HourBeg

    А вот с указанием смен надо будет формулу еще создавать, чтобы можно было там указать со скольки до скольки и так же расчет разницы выполнять

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

    Согласен с предыдущем советом. Ещё удобен для этого плагин Гибкий отчёт.

    #5948
    baur
    Участник

    Спасибо, будем пробовать …

    • Этот ответ был изменен 6 лет, 11 месяцев назад от baur.
    #7018
    oleg777
    Участник

    Добрый день Господа. Прошу прощения, никак не могу разобраться. Есть входной канал номер 220, телеизмерение — счётчик воды, постоянно с нарастающим насчитывает кубы. Необходимо в таблице отображать количество кубов, прошедшее за час. Как использовать HourBeg?
    Спасибо большое.

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

    Добрый день!
    Самый понятный вариант — использовать плагин Гибкий отчёт. Плагин будет сам считать разницу.

    Чтобы получить значение за час во входном канале, потребуется сделать дополнительный входной канал (пусть №221) типа Дорасчётный ТИ. Затем нужно для канала 220 задать формулу MyFunc() примерно такую (в сообщениях я формулы не тестирую):

    double MyFunc()
    {
      double delta = Cnl - Val();
      SetVal(221, Val(221) + delta);
      return Cnl;
    }
    

    Формула для канала 221: HourBeg()?0:Val()
    HourBeg нужен, чтобы сбросить значение в начале часа.

    #7036
    oleg777
    Участник

    Огромное спасибо, всё заработало.

    #8876
    litmi
    Участник

    Здравствуйте! Задачка очень похожая на обсуждаемую в теме и на #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.
    #8881
    Mikhail
    Модератор

    Со своей стороны могу объяснить, если что-то непонятно по вычислениям в Rapid SCADA. С самой задакой, надеюсь, помогут наши пользователи. Также могу предложить помощь на платной основе.

    #8891
    litmi
    Участник

    Здравствуйте! В документации в разделе «Использование формул» предлагается использовать тип канала «Минутный» для реализации счетчиков. Мне нужно посчитать разность между двумя последовательно считанными данными по каналу типа «Телеизмерение». Видимо алгоритм должен быть такой: считать данные, запомнить их, а через минуту из вновь считанных данных вычесть запомненное значение. Но как это реализовать практически для меня не ясно. Подскажите в какую сторону думать.

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

    Добрый день!
    В документации скорее имеется ввиду, что если Вы измеряете мощность, то складывая значения мощности раз в минуту Вы можете получить потребление с некоторой погрешностью.

    Для Вашей задачи нужно что-то другое. Чтобы посчитать во входном канале разницу между новым значением и предыдущем, можно использовать: Cnl — Val()
    Cnl — то, что пришло, Val() — то что было в канале.
    Но что дальше Вы планировали сделать с полученной разностью?

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

    Минусы движок форума превращает в тире, так что при копировании формул нужно поправить.

    #8929
    litmi
    Участник

    Про минусы и тире я уже читал на форуме. Спасибо за предупреждение.
    Исходное значение данных по каналу типа «Телеизмерение» у меня это литры. Это значение постоянно увеличивается. Если я буду считывать данные раз в минуту и подсчитывать разность между текущим и предыдущим значением, то получу скорость литры в минуту. ЕЕ и надо отобразить на экране оператора.

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

    Вам нужно использовать таблицу Формулы. Завести там переменную для хранения предыдущего значения. И создать формулу для минутного канала, которая будет использовать это значение. Примерно так:

    double prevVal = -1;
    double CalcCons()
    {
      if (prevVal > 0)
      {
        double x = Cnl - prevVal;
        prevVal = Cnl;
        return x;
      }
      else
      {
        return 0;
      }
    }
    
    #9062
    litmi
    Участник

    Здравствуйте! Хотелось бы изменить подход к решению задачи. Иногда проскакивает сообщение о несчитанных данных по каналу и поэтому расчетные значения получаются не корректные.
    Необходимо считывать последовательно данные из одного канала с привязкой ко времени (максимально точно). Имея текущее и предыдущее значение канала и соответственно времени его чтения можно вычислить скорость изменения величины в канале по формуле, которая, полагаю, должна выглядеть примерно так: (Cnl-Val(CnlNum))/(T2-T1), где T2 – текущее время чтения значения канала, Т1 – предыдущее время чтения значения канала. Каким образом получить текущее и предыдущее время считывания канала?

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