Показано с 1 по 8 из 8

Тема: Расчёт данных, полученных с расходомера СИ 30

  1. #1

    По умолчанию Расчёт данных, полученных с расходомера СИ 30

    здравствуйте.
    I.
    просмотрев форум ответ на следующий вопрос найти не смог:
    есть расходомер (СИ 30), данные с которого прилежно архивитруются. название счётчика "Значение_счетчика_в_физических_величинах". необходимо выводить расчётные данные на основании данных архива, а именно:
    1. текущее значение
    2. количество прокачанной жидкости за последний час (60 минут), с начала часа
    3. количество прокачанной жидкости за сутки: (последние 24 часа), с начала суток, за предыдущий день
    4. количество прокачанной жидкости за месяц: с начала текущего, за предыдущий месяц
    5. количество прокачанной жидкости за год: с начала текущего года, за предыдущий год

    приступив к решению вышел на такое:
    1
    Код:
    AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)
    при просмотре графика симуляции бросается в глаза, что данные со счётчика и данные из архива смещены по фазе на 1 шаг (не критично) и что важнее формульное значение "скачет", хотя должно быть ровным - чем вызвано разобраться не смог.
    2.1.
    Код:
    AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime ()-3600, 1)
    2.2.
    Код:
    AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, CurHour(), 1)
    3.1
    Код:
    AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime ()-86400, 1)
    3.2
    Код:
    AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, CurDay(), 1)
    3.3, 4.1, 4.2, 5.1, 5.2 -пока не придумал

    II.
    отдельно встаёт вопрос про цикл счётчика 0-999999. возникают следующие вопросы:
    1. определение периода прохождение цикла, затем его усреднение и выявление минимального периода, за который цикл не успеет пройти (возможно экспорт данных со временем или отображение на графике).
    2. учёт этого события при расчёте. например на текущий момент значение 8, а час назад значение было 999994. т.е. учитывая вышесказанное если нам необходимо рассчитать разницу между текущим значением и значением, которое было час назад то я вывышел следующим образом:
    Код:
    ЕСЛИ(AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)>=AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime ()-3600, 1), AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime ()-3600, 1), 1000000+AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime (), 1)-AbsArchMomentValue (Значение_счетчика_в_физических_величинах, DateTime ()-3600, 1))
    логика такая: Если(v1>=v0, v1-v0,1000000+v1-v0)
    замечание что данный метод применим если если за период проходит не больше одного цикла. как быть в противном случае не знаю. (вернее в голове есть соображения по утяжелению вычислений с разбивкой на сегменты пропорциональные циклу и анализ логикой ЕСЛИ, но хочу спросить есть ли альтернатива с простым решением ко всему второму блоку вопроса)

    спасибо за все советы и предложения.

  2. #2

    По умолчанию

    Цитата Сообщение от test25874 Посмотреть сообщение
    3. количество прокачанной жидкости за сутки: (последние 24 часа), с начала суток, за предыдущий день
    Также - функция CurDay( ), для получения начала текущих суток.

    Цитата Сообщение от test25874 Посмотреть сообщение
    4. количество прокачанной жидкости за месяц: с начала текущего, за предыдущий месяц
    5. количество прокачанной жидкости за год: с начала текущего года, за предыдущий год
    С этим в текущей версии есть проблемы - нет возможности прибававлять-убавлять месяцы. В версии 3.8 мы добавили функцию AddMonths.

    Цитата Сообщение от test25874 Посмотреть сообщение
    отдельно встаёт вопрос про цикл счётчика 0-999999. возникают следующие вопросы:
    Правильно - сделать переменную которая не сбрасывается. То есть счетчик перешел значение 0, а эта переменная продолжает рост - продолжает прибавлять растущее значение.

    Еще замечания по работе с данными функциями. Нужно понимать, что работа с архивами - это ресурсоемкая операция, поэтому крайне не желательно выполнять ее постоянно. Либо сделайте цикл опроса у расчета побольше (например 10 тактов) или, еще лучше - опрашивайте при возникновении необходимости. Открыл оператор мнемосхему - данные посчитались. Для этого можно положить такие расчеты в отдельный объект, а затем включать опрос этого объекта используя поле "Условие выполнения" на закладке "Опрос" объекта
    Спасибо.

  3. #3

    По умолчанию

    Цитата Сообщение от SCADAMaster Посмотреть сообщение
    Правильно - сделать переменную которая не сбрасывается. То есть счетчик перешел значение 0, а эта переменная продолжает рост - продолжает прибавлять растущее значение.

    Еще замечания по работе с данными функциями. Нужно понимать, что работа с архивами - это ресурсоемкая операция, поэтому крайне не желательно выполнять ее постоянно. Либо сделайте цикл опроса у расчета побольше (например 10 тактов) или, еще лучше - опрашивайте при возникновении необходимости. Открыл оператор мнемосхему - данные посчитались. Для этого можно положить такие расчеты в отдельный объект, а затем включать опрос этого объекта используя поле "Условие выполнения" на закладке "Опрос" объекта
    расскажите подробнее как это сделать или пример куда можно посмотреть.

    ещё вопрос по поводу "скачков" значений - почему происходит при расчёте с шагом в 1 такт, хотя текущее значение, взятое из архива не должно скакать

    если правильно понял вместе с функциями оперирования месяцами будут добавлены функции по работе с годами?
    спасибо за ответ

  4. #4

    По умолчанию

    Цитата Сообщение от test25874 Посмотреть сообщение
    расскажите подробнее как это сделать или пример куда можно посмотреть.
    В приложении пример с двумя скриптами. Один как раз для решения задачи переполнения счетчика.

    Цитата Сообщение от test25874 Посмотреть сообщение
    ещё вопрос по поводу "скачков" значений - почему происходит при расчёте с шагом в 1 такт, хотя текущее значение, взятое из архива не должно скакать
    Время у вас смещается, по поиск попадают разные данные, от этого и прыжки.
    Смотрите у переменное какие есть данные в каждый момент времени и сравнивайте.

    Цитата Сообщение от test25874 Посмотреть сообщение
    если правильно понял вместе с функциями оперирования месяцами будут добавлены функции по работе с годами?
    Нет. Только месяцы.
    Вложения Вложения
    Спасибо.

  5. #5

    По умолчанию

    поставил скрипт (второй) работает отлично.

    спасибо.

    появился следующий вопрос (возможно лучше создать новый топик?): можно ли при первом запуске (или каждом) перетянуть архивные данные показателя счётчика в архив расчётных данных скрипта (для удобства дальнейших расчётов)?

    возможно уже есть готовые решения. алгоритм вижу приблизительно таким:
    1 сравнение количества записей архивов (с учётом погрешности в несколько строк - 100 например) или даты первого значения
    2 пересчёт и архивирование данных из архива счётчика в архив скрипта с учётом цикла и записи увеличивающегося значения

  6. #6

    По умолчанию

    Вообще приложенный скрипт сохраняет накопленное значение между перезапусками.
    А так можно, примеры есть в блоге:
    http://blog.insat.ru/search/label/Скрипты
    Спасибо.

  7. #7

    По умолчанию

    я имею ввиду значения, которые записаны в архив счётчика - обработать их и полученные данные записать в архив скрипта. в дальнейшем расчёты будут опираться на них.
    т.к. значение счётчика находится в пределах 0-1000000 и изменятеся циклически (в виде пилы) - для простых расчётов не пригодно. архив "выровненных" значений удобнее для расчётов. на данном этапе трудность - узнать например количество перекачанной жидкости с начала года (при том что значения счётчика с начала года есть, а скрипт выравнивания запущен только сейчас) - для этого нужно привести к общему знаменателю значения.

    спасибо за скрипт и за ссылку на решения. посмотрю в готовые решения - возможно смогу найти нужное )

  8. #8

    По умолчанию

    Стоит похожая задача, не сбросите пример что у вас получилось?

Похожие темы

  1. Ответов: 5
    Последнее сообщение: 29.03.2016, 13:54
  2. Расчёт ЗАРПЛАТЫ
    от Вентсервис в разделе Трёп (Курилка)
    Ответов: 0
    Последнее сообщение: 20.04.2015, 13:32
  3. Расчёт CRC16-CCITT
    от Андрей007 в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 07.11.2014, 11:16
  4. Подбор расходомера
    от Fix_m в разделе Трёп (Курилка)
    Ответов: 6
    Последнее сообщение: 21.05.2014, 21:17
  5. СИ8 в качестве расходомера
    от Slazonger в разделе Эксплуатация
    Ответов: 2
    Последнее сообщение: 06.04.2012, 13:44

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •