Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Есть ли стандартный ЭУ для решения проблемы

   
Автор / Author Тема / Topic: Есть ли стандартный ЭУ для решения проблемы
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Есть емкость с нефтью и расходомер на выходе. Нужно вести архив с записью значений расходомера каждую секунду. Нужны данные всех расходов по 5 последним дням (нужна табличка, в столбцах которой даты за 5 последних дней, а в строке "Расход нефти за день" будут отображаться общий расход нефти за день). То есть нужно делать что-то типа выборки всех показаний из архива за определенный день, суммировать их и выдать результат в таблицу.
Вопрос: есть ли стандартные средства для этого (может какой-нибудь ActiveX)?
Если нет такого компонента, то подскажите каким архивом лучше воспользоваться и как сделать из него выборку всех показателей за определенный день и суммировать их.
Также не очень понятно как можно вывести не текущую дату, а скажем вчерашнюю. Есть "Календарь", но он может отображать только текущую дату. Можно его привязать например к каналу типа "Time", но как тогда записать в него вчерашнюю дату? Была идея написать маленькую FBD-программку, в которой использовать блок DATE из раздела генераторов, но он подает на выход отдельно число, номер месяца и год. Как из этого потому получить дату "на день раньше" также не понятно.

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1) Для этого есть штатные механизмы архивации данных в СПАД, выборка статистики из архива, отображение данных на экранах операторской станции или документирование в отчеты. Смотрите электронную документацию по вышеуказанным функциям, а также описание функциональности продуктов ТМ6 у нас на сайте.

2) В канале этого класса время и дату можно задавать напрямую через специальные его атрибуты: Год, Месяц, День, Час, Минуты, Секунды.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
С первым пунктом вроде разобрался, спасибо.
Со вторым еше маленький вопрос: В FBD программе создал один единственный блок - DATE, соответственно у программы будет три выхода: число, месяц, год. Я привязал эти параметры к соответствующим атрибудам канала TIME. И получил дату, например 25.07.2005, но как получить дату, например 24.07.2005?
Поддерживается ли в языке Техно ST арифметическая операция - для объекта DATE? То есть, если например из текущей даты вычесть 1, то получу ли я вчерашнюю дату, или это делается как-то по-другому?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
А можете прояснить один момент по первому пункту. Я прочитал в документации: "Канал, чьи архивные значения должны быть обработаны, задается с помощью его привязки к нулевому аргументу канала CALL или собственно к каналу CALL.".
Канал, архивные данные которого нужно обработать называется "Расход нефти". Он уже привязан к источнику данных, для получения данных от расходомера. И как теперь его привязать к каналу типа CALL (ведь он уже привязан к источнику)?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1) Над типом данных Date можно производить арифметические операции как и над другими типами данных, только нужно правильно задавать константы в формате МЭК - смотрите описание числовых констант в разделе "Программирование алгоритмов"-"Описание языка Техно ST"-"Переменные и константы"-"Числовые константы Техно ST".

2) Не путайте привязку канала к источнику данных и привязку его к Аргументу! Смотрите описание канала CALL в справочной системе - там есть примеры использования этого класса каналов с его аргументами.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
2) Вроде получилось. Я только не использовал дополнительные каналы для связи с аргументами канала типа CALL. Привязку динамического текста производил к соответсвующему аргументу канала типа CALL (ARG_005).
Но тут возникла проблема с обновлением информации (эта же проблема остается при связывании аргумента канала типа CALL (ARG_005) с другим каналом).
Для канала класса CALL я задал тип INPUT, тип вызова LocalStatistic, глубина выборки - текуший день. Первый аргумент (IN) этого канала класса CALL связан с реальным значением канала, который принимает данные от расходомера. Насколько я понял при каждом пересчете базы каналов должно формироваться обновленное значение для аргумента канала типа CALL (ARG_005). Этот аргумент содержит сумму всех значений. Но постоянного обновления не происходит. Динамическое текстовое поле, отображаюшее значение ARG_005 канала класса CALL, обновляется только если в профайлере войти в режим "Просмотр компонентов" и послать каналу типа CALL какое-нибудь значение. Но автоматически обновление не происходит. В чем может быть причина?
И еще есть маленький вопрос по дискретизации данных, записанный в архив СПАД. В ARG_005 содержится сумма всех значений (показаний расходомера), записанных в архив за сутки. Расходомер показывает текущий расход в "метрах кубических в час". Данные в архив записываются при изменении параметра. Но мне нужно, чтобы суммирование велось с учетом времени. То есть, если в архив было записано, что в 22:22:22 расходомер показывал 5 метров кубических, затем в 22:22:32 - 4 метра кубических, то в общую сумма должно записать значение (5/3600) * 10 секунд. Как это можно реализовать? Может помогут аргументы с 34 по 65, но в документации как-то плохо описано что в них заносится.

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1) Сам канал Call у Вас Input или Output?
2) Из статистики как сумму значений расхода Вам лучше использовать Arg_009 – интеграл.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пробовал и Input, и Output. Но особой разницы не заметил. Какой из них лучше использовать в моем случае?
ARG_009 немного не подходит, так как на промежуток времени умножается не абсолютное значение параметра, а его прирост по сравнению с предыдущим состоянием. Например, в 12:00 расход нефти был 5 кубометров в час, в 13:00 расход составил 10 кубометров в час. То есть за 2 часа расход 15 кубометров. Если посчитать по этой формуле, то получается (после небольшого масштабирования), чтоза первый час посчитается правильное значение (5-0), но вот за второй час выдастся значение (10-5=5). Итого в сумме получится 10 кубометров, а это неправильно. Так как же быть? Наверное, ARG_009 можно использовать, но нужен еще какой-нибудь аргумент. В конечном итоге формула должна быть такой же как для ARG_009, за исключением вычета значения предыдущего параметра в числителе.
Можно ли как-то описать нужную мне формулу и просто сделать запрос к СПАД-у?
Еще один маленький вопрос: в формуле для ARG_009 присутствует разница времени (t(i)-t(i-1)). В каких единицах считается эта разница: в секундах? Или может в милисекундах?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
В Вашем случае это должен быть Input. Автоматически данные не должны обновляться. Достаточно разовых выборок управляемых посылкой значения в канал Call. Если необходимо постоянно обновлять данные по статистике, то посылка реализуется через программу, например на ST или FBD.
Тогда придется брать значение ARG_005 и в программе приводить его к диапазону по времени.
Время вычисляется в секундах.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вот как раз таки и не понятно как можно привести ARG_005 или ARG_009 к тому что мне нужно.
В ARG_005 заносится сумма всех значений, что мне не подходит, так как не учитываеся время (сколько работал расходомер при определенном значении расхода. Соответственно невозможно точно определить сколько реально ушло нефти).
ARG_009 похож на то что мне нужно, но не совсем (описывал выше). Так можно ли средствами TM решить эту задачу? Есть какой-нибудь способ создания запросов к СПАД-у для выборки значений?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Сейчас посмотрели внимательнее - в справочной системе у нас ошибка в описании формулы для Arg_009: на самом деле там нет деления на 2. МРВ работает правильно - без деления на 2, это просто ошибка в документации.

В Вашем случае при выборке статистики из СПАД Вам надо использовать значение именно 9-го аргумента. Однако результат необходимо еще привести к единицам времени секунды, потому как значения у Вас сохраняется в размерности м3/час, а в расчете метки времени в секундах, поэтому корректный результат будет = Arg_009/3600.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вот конкретная ситуация:
данные по расходу (так полагаю, что в СПАД будут записаны только ниже перечисленные данные, так как в СПАД данны попадают по изменении данных):
12:00:00 - 5 м3/час
13:00:00 - 7 м3/час
Смотрим состояние общего расхода на 14:00:00. Должно получиться 12 м/3. По Вашей формуле для ARG_009 получается:
((5-0)*3600)/3600 + ((7-5)*3600)/3600 = 7 м3/час. А должно получиться 12. Все дело в том, что по формуле для ARG_9 расчитывается сумма приращений, а не общая сумма. В моем случае формула должна быть такой:
Расход за период = Сумма (VAL(i-1)*(t(i)-t(i-1)).
Вот я и пытаюсь двумя топиками выяснить как можно считать эти данные из архива. Может можно как-то на Техно ST проходить по всем записям в СПАД-е, определять промежуток времени, перемножать и накапливать все это дело в глобальной переменной?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Неправильно, в таком случае Вам надо уже будет не интегрировать, а просто суммировать, потому как период совпадает с единицами измерения.
Насчет деления на 2 - я был не прав, перепроверили еще раз - ошибка в знаке, то есть формула - это сумма полусумм текущего и предыдущего значений умноженная на интервал времени.

I=E((VALi+VALi-1)/2)*(Ti-Ti-1)

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Но ведь в СПАД заносятся значения только по изменении данных. Если бы данные заносились в архив каждую секунду, например, (вне зависимости от того, изменилось ли значение расхода или нет), тосогласен, можно было бы просто суммировать, но так как данные заносятся в СПАД только по их изменении, то нужно учитывать время, в течении которого расходмер показывал определенное значение.
Например, а СПАД будет записано:
12:00:00 - 5 м3/час
12:01:00 - 7 м3/час
13:59:59 - 6 м3/час

И что получится, если я сложу 5+7+6? По-моему что угодно, но не реальный расход за 2 часа. Нужную мне формулу а написал в прошлом посте. Или может, можно как-то заствить записывать данные в СПАД через определенные промежутки времени (например каждую секунду)?

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Вы же сами привели целые времена:

12:00:00 - 5 м3/час
13:00:00 - 7 м3/час

В этом случае, если дискретность именно 1 час, то суммировать. А если так:

12:00:00 - 5 м3/час
12:01:00 - 7 м3/час
13:59:59 - 6 м3/час

То интегрировать!
Сделайте пробный проект - сразу будет понятно.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Да, но как я могу заставить расходмер изменять значения только каждый час? Возможно расход и будет меняться только каждый час, но скорее всего нет [Улыбка / Smile] .
Я так и не могу до конца понять: можно ли в СПАД записывать значения каждую секунду (вне зависимости от того, изменен ли был параметр, или нет)?
Возьмем старый пример:
12:00:00 - 5 м3/час
12:01:00 - 7 м3/час
14:00:00 - (в данном контексте не важно) м3/час
Думаю, понятно, что должно получиться (по состоянию на 14:00):
5*60/3600+7*3540/3600 = 0.08333+6.88333 = 6.96666
Теперь если считать по Вашей формуле:
(5-0)*60/3600 + (7-5)*3540/3600 = 0.08333+1.96666 = 2.04999.
Чувствуете разницу?
Так как мне быть? На самом деле варианта 2:
1) Если в СПАД можно как-то записывать значения каждую секунду (вне зависимости от того, изменился параметр или нет), то можно просто суммировать лействительные значения и масштабировать результат.
2) Если в СПАД значения записываются только по изменении параметра, то нужна формула типа той, что для интеграла, но толь БЕЗ ВЫЧИТАНИЯ предыдущего значения параметра.

Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Выше было указано, что в документации содержится ошибка - вместо полуразности следует читать полусумму. Это классика (метод трапеций).
Если по этой формуле проверить Ваш последний пример, то получится ((7+5)/2)*60/3600 + ((7+7)/2)*60/3600 = 0.1 + 6.88333 = 6.98333.
Погрешность относительно невелика и связана с очень малым количество отсчетов.

2. В СПАД записываются значения только по изменениям значения параметра.
Если Вы не примете специальных мер, то у Вас всегда будет некоторая девиация процесса, которая даст в СПАДе достаточно данных для интегрирования без существенной ошибки.
Если же Вы будете принимать специальные меры по существенному разреживанию записей параметра в архив, то будьте добры осуществлять интегрирование самостоятельно, в реальном времени, учитывая формируемые Вами метки времени.
Возможно, для этого может подойти канал CALL с типом вызова (17) RT_Statistics.

Сообщения / Posts 17105 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
DreamWeaver
Forum Haunter / Завсегдатай форума
Участник № / Member № 1485


Icon 1 отправлено / posted      Профиль для / Profile for DreamWeaver           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Большое спасибо за подробное разяъснение, теперь понятно.
Сообщения / Posts 150 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2