This is topic Документ.Таблица архива. in forum Документирование в TRACE MODE 6 и в T-FACTORY 6 / Document generation in TRACE MODE 6 and T-FACTORY 6 at Форум TRACE MODE: техническая поддержка.
Уважаемая техподдержка! Из документации: "Если к каналу CALL.Document привязан атрибут 39, EXEC канала CALL.Program, и документ содержит архивную таблицу ... программа отрабатывается после извлечения каждого архивного среза" Вопрос1: Как передать в программу время, соответствующее текущему архивному срезу?
Вопрос2: Если для таблицы архива включена опция "обработка", как передать программе (и получить) результат обработки?
Вопрос3: Если я не хочу включать в отчет текущий архивный срез, что я должен вернуть из программы?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1-2. Передавать в программу можно только аргументы. Эти данные туда передать нельзя.
3. Такой операции тоже произвести нельзя.
Posted by stepan (Участник № / Member № 3589) on :
Доброе время суток, уважаемая служба техподдержки!
сейчас я выложу свои пожелания об улучшении архивной таблицы.
В опциях архивной таблицы есть такая фича: "Обработка". Если выбрать "всего", то в конце таблицы появится строчка с суммой всех значений каждого столбца. - очень полезная вещь, но этого не достаточно.
поясню: у меня в таблицы (да и не только у меня) есть параметр "температура", "давление", согласитесь, не имеет смысла считать сумму значений температур или давлений:
Было бы неплохо добавить опцию "Среднее", - среднее арифметическое всех значений столбца, как на этой картинке
Причем, нужно чтобы в таблице можно было выбрать обработку "Всего" и "Среднее" одновременно, то есть чтобы в таблице отображалось две строчки с результатами обработки, рис. 3
но чтобы не было глупых значений, типа суммы температур юзер при создании таблицы должен выбрать, какие столбцы должны обрабатываться (рис 4)
сейчас пытаемся решить данную задачу при помощи каналов LocalStatistic, но там возникает много накладок заметьте, если вы посчитаете среднее значение того, что есть в таблице, то оно не совпадет с тем, что написано в строчке среднее. Это связано с тем, что в SIAD архиве у канала под одной меткой времени сохранено много повторяющихся значений, в связи с этим Сумма выходила вообще астрономическая))) чтобы посчитать "правильную" сумму пришлось сначала взять среднее значение, а затем умножить его на количество строчек в таблице.... но всё равно получается весьма криво...
что Вы думаете об этом? ))
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
У Вас таблица документа, это всего лишь таблица срезов. И среднее Вы пытаетесь по считать по срезам. Это необъективная информация.
Пример.
Канал меняется раз в полчаса. 1:00 5 1:30 15 2:00 5 2:30 15 3:00 5 3:30 15 4:00 5 4:30 15 5:00 5 5:30 15
Среднее по каналу 10. Но если вы возьмете часовые срезы на 0 минут и на полчаса, то у Вас средние получатся 15 и 5.
Думаю идея ясна.
LocalStatistics дает более объективную информацию.
Posted by stepan (Участник № / Member № 3589) on :
здесь другая идея
у меня есть спад архив_1 - в нём лежат среднечасовые значения, считанные с прибора, с оригинальной меткой времени.
13:00 5 14:00 15 15:00 10 16:00 5
Для этих данных у меня специальный отчет со специальной архивной таблицей, у которой шаг равен 1 часу.
но в спад архиве с одной меткой времени несколько значений
Localstatistic при своих вычислениях берет все значения, а этого делать не нужно. нужно брать только одно значение для каждый конкретной метки времени.
значения в спад архиве дублируются по нескольким причинам: во-первых при однократном чтении архивных значений с OPC HDA в архиве получаются такие дубли типа: 13:00 15 13:00 15.83 14:00 10 14:00 10.72
во-вторых: в нашем проекте есть 22 узла, работающих на реальных объектах автоматизации, которые собирают информацию с контроллеров и есть 1 центральный узел - сервер, который собирает информацию от 22 объектов и раздает 6 операторским консолям.
связь между узлами организована по tcp/ip радио каналу prewimax. связь неустойчивая. Сервер забирает данные из спад архивов узлов посредством RemoteSIAD. Т.к. гарантии безпрерывной связи у нас нет, а возможности узнать - удалась ли последняя передача данных SIAD или нет, чтобы потом перезапросить недостающие данные, у нас нет, а если и есть то, подозреваю, это чревато большим геморроем. приходится запрашивать данные через RemoteSIAD с перекрытиями по времени, от этого некоторые данные опять же дублируются.
так что LocalStatistic конечно правильно считает, но он считает не совсем то
а что вы думаете об усовершенствовании архивной таблицы?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В Ваших таблицах нет одинаковых выборок и соответственно нет расхождений. Там где Вы говорите про выборку с помощью LocalStatistics, начальные значения не совпадают со значениями таблиц в документе.
Posted by stepan (Участник № / Member № 3589) on :
>В Ваших таблицах нет одинаковых выборок и соответственно нет расхождений.
нет каких расхождений? я эти таблицы нарисовал просто для примера, чтобы объяснить суть высказываний.
>Там где Вы говорите про выборку с помощью LocalStatistics, начальные значения не совпадают со значениями таблиц в документе.
я Вас не понимаю. какие начальные значения? как Вы определили, что они не совпадают?
я просто привожу факт, мне нужна строчка: сумма и среднее в конце архивной таблицы. Localstatistic Здесь не подходит. Если у меня будет 30 столбцов в таблице, то для того, чтобы добавить в таблице эти две строчки с помощью настройки таблицы понадобится 1 минута, а если это делать через localstatistic, то на это уйдет 1 день или больше.
уверен, что эта функция интересует не только меня. если кому то из пользователей Trace Mode тоже нужна такая опция в таблице, пусть отпишутся в этой теме.
повторю вопрос: 1. что Вы считаете насчет реализации в архивной таблице опции - тип обработки "Среднее"? 2. Как можно реализовать с помощью LocalStatisitic аналогичный алгоритм вычисления среднего по срезам?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. У Вас не могут быть разные значения в одной и той же метке через RemoteSIAD.
2. Все выборки будут брать только одно значение в одной метке времени. Поэтому сумма в LocalStatistics будет правильная.
Posted by stepan (Участник № / Member № 3589) on :
хорошо. а какое здесь может быть решение?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вывести архивную таблицу, а под ней таблицу со значениями из LocalStatistics.
Posted by stepan (Участник № / Member № 3589) on :
я сейчас так и делаю. )) задам вопрос в лоб: как с помощью локалстатистик посчитать среднее и сумму по часовым срезам?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Вам отправлен пример.
Posted by stepan (Участник № / Member № 3589) on :
спасибо, Алексей!
Posted by stepan (Участник № / Member № 3589) on :
Пример конечно крутой)либо это недокументированная возможность Trace Mode, либо я документацию не внимательно читал. )
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Все сделано с помощью этого механизма
Если к каналу CALL.Document привязан атрибут 39, EXEC канала CALL.Program, и документ содержит архивную таблицу (см. Конфигурирование таблицы архивных значений ), программа отрабатывается после извлечения каждого архивного среза. Для отображения результатов обработки срезов в столбец архивной таблицы нужно поместить выражение <arg>.R, где arg – имя аргумента документа, в который передается результат программы. Передача данных между документом и программой конфигурируется с помощью привязок соответствующих аргументов каналов CALL.Document и CALL.Program.
Posted by Michurin (Участник № / Member № 1015) on :
Можно мне выслать пример, если он соответствует версии ТМ 6.07
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Отправлено
Posted by senatorAV (Участник № / Member № 3513) on :
Можно тоже такой пример? Для 6.07. Заранее благодарен.