This is topic вопрос по СПАДу in forum SIAD/SQL. Архивирование в TRACE MODE / SIAD/SQL. Data Logging in TRACE MODE at Форум TRACE MODE: техническая поддержка.
У меня такие вопросы. - Можно ли архивированный канал HEX16, в котором закодировано 16 дискретных сигналов выводить на разные тренды, с разными масками (2^0, 2^1, ..., 2^15)? - Можно ли использовать для кодирования информации использовать каналы HEX32 вместо HEX16 (требуется архивировать 121 дискретный сигнал и подобный шаг позволил бы сократить расходы на дискретные каналы в 2 раза)? - Вопрос собственно по вытаскиванию данных из архива. Используем например LocalSnap1, как для него вызвать функцию INTERVAL и как ей передать TYPE, OFFSET, DELTA? В каком виде я получу ответ в канале Call? И как его прикрутить к тренду? - Существует возможность глянуть рабочие учебные примеры по архивированию и извлечению данных из архивов и др.?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Для отображения на тренде отдельных битов канала HEX16 надо на экране создать аргументы, привязанные к отдельным битам этого канала, и вывести эти аргументы на тренд.
2. Для промежуточного кодирования , архивирования, отображения и обработки можно использовать каналы HEX32. Можно ли их напрямую связать с внешними источниками/приемниками, зависит от интерфейса последних.
3. Функция INTERVAL автоматически реализуется в каналах выборки из архива. Передача ей параметров осуществляется через настройку канала ПАРАМЕТР (TYPE), АППАРАТНОЕ значение канала (OFFSET) и ARG001 (DELTA). В аргументах канала LocalSnap1 Вы получите значения заданных каналов на выбранный момент времени, по одному значению на каждый канал (СРЕЗ). Если эти аргументы привязать к каналам-приемникам, то значения этих каналов будут соответствовать выбранным из архива значениям каналов-источников, а атрибуты (45) ВРЕМЯ ИЗМЕНЕНИЯ - их меткам времени. Все это документировано. На тренд данные СРЕЗА не выводятся.
4. Готовых учебных проектов по этой теме нет.
Posted by Вяткин Н В (Участник № / Member № 1853) on :
Подскажите пожалуйста по СПАДу : 1 в проекте при описании СПАДа, декларируется его максимальный размер, фактический размер увеличивается по мере заполнения данными, как можно узнать в программе фактический размер, занимаемый на текущий момент СПАДом? 2 По заполнению СПАДа данными до максимального размера, "старые" данные из него автоматически убираются, "сколько" убирается данных? Половина? Сколько то проценов? Можно ли повлиять из программы на этот параметр? 3 Как определяется факт необходимости автоматической очистки? Можно ли её инициализировать программно? 4 Как можно программным путём инициализировать полную или неполную "очистку" СПАДа? 5 может быть есть какие-нибудь настроечные файлы для СПАДа? спасибо
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Системная переменная @q_SIAD_Q
Параметр=32…43 – приблизительный процент заполнения соответствующего архива. При старте МРВ значение этого параметра соответствует текущему уровню заполнения архива. После достижения значения 100 параметр обнуляется и затем снова растет до 100 по мере затирания старых записей новыми.
Т.е. если архив еще не перезаписывался, то этот параметр даст приблизительную оценку фактического размера архива на данный момент. Если архив уже достиг максимума и перезаписывается, то его размер равен максимальному.
2. Освобождается ровно столько блоков, сколько нужно для текущей записи.
3, 4. Никакой "очистки" архива не происходит, просто перезаписываются самые ранние блоки архива.
5. Нет, таких файлов не существует.
Posted by drooha (Участник № / Member № 3306) on :
Есть такой вопрос. Данные записываются в СПАД архив который имеет размер 128Мб.Меня интересует что происходит когда файл архива достигнет этого размера,куда будут записываться данные? Создается ли новый файл архива? Как он будет называться? И возможен ли будет доступ к предыдущему архиву? С уважением Андрей.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
При достижении максимального размера файл архива более страые записи удаляются, а на их место записываются последниие данные. Копировать архив можно либо через системную @Copy_SIAD, лиюо через меню. Доступ к копиям архива возможен. Имя копии Вы можете задавать любое.
Posted by Roman2 (Участник № / Member № 2804) on :
А можно ли, с целью уменьшения объёма сохраняемого архива и повтора данных, делать его вырезку (вместо копирования) в реальном времени (например с начала архива до настоящего момента), естесственно без потери данных и с возможностью последующего доступа к нему... ? Если да, то как сделать это наиболее эффективно? Первое ,что приходит в голову, это использовать CALL.ChGroupReq с привязкой к переменной @Data_from_SIAD. Но насколько экспортируемый архив будет соответствовать оригинальному... ?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Да, действительно это можно сделать с помощью канала CALL.ChGroupReq. Но в этот архив заносятся срезы в определенный период времени, т.е. часть данных вы можете потерять. Других способов нет.
Posted by drooha (Участник № / Member № 3306) on :
А можно ли средствами ТM отследить размер архива?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Что значит отследить размер? Можно отслеживать его заполняемость с помощью переменной @q_SIAD_Q параметр=32…43. Размер архива после заполнения всегда остается постоянным.
Posted by drooha (Участник № / Member № 3306) on :
Я имею ввиду размер файла архива. Файл архива имеет размер 128Мб,при достижении этого размера нужно скопировать файл архива.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Один раз он достигнет размера 128 МБ при полном заполнении, но потом он будет постоянным.
Для Вашей цели используйте переменную @q_SIAD_Q параметр=32…43. Когда она будет равна например 99 %, копируйте архив.
Posted by Karpelyanskiy S.V. (Участник № / Member № 2191) on :
Создали тестовый проект (ТМ6.06.2), в котором около 1000 каналов, привязанных к различным генераторам, записывались в архив. Все настройки архива - по умолчанию, изменяли только размер архива и следили за размером файла архива. Выяснилось, что файл архива не достигает заданной величины: задано 32 Мб - файл - примерно 20,9 Мб; задано 64 Мб - файл - 54 525 952 байт; задано 128 Мб - файл - 121 634 816 байт; задано 256 Мб - файл - 247 463 936 байт. Что интересно, на рабочих проектах, на пяти узлах, где были заданы размеры архивов 512 Мб, везде файлы архива перевалили за отметку 560 Мб, а на одном узле - размер файла архива уже достиг 3,6 Гб(!!!) и продолжает потихоньку расти.
Далее проводилось исследование механизма автоматического копирования архива при достижении переменной @q_SIAD_Q (параметр 32...43) различных значений (75...99 процентов). Выяснилось, что время начала и конца полученных копий архивов, не стыкуются между собой, т.е. между двумя соседними копиями появляются разрывы, исчисляемые десятками секунд. Непрерывности архивных данных в копиях архивов (а точнее, взаимного перекрытия времён начала и конца соседних копий) удалось добиться только при копировании файла архива два раза за цикл нарастания системной переменной @q_SIAD_Q (параметр 32...43)(при 25% и 75%).
Что Вы, уважаемая Техническая поддержка, можете сказать по этому поводу?
Posted by Karpelyanskiy S.V. (Участник № / Member № 2191) on :
Уважаемая техническая поддержка! Вы что-нибудь скажете по поводу моего последнего сообщения? Прошло уже две недели...
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Извините за задержку.
1) По размерам файлов в тестовом проекте: это нормальная ситуация, файлы всегда занимают чуть меньше, чем указано.
2) По поводу превышения: в релизе 6.06.2 такого быть не должно. Если размер превышает заданный, то скорее всего нарушилась его структура. Это могло произойти по различным причинам, например, нештатный выход из МРВ, нехватка ресурсов ПК и другие.
3) Строго говоря, разница между временами может быть, т.к. записи в архиве хранятся блоками и перезаписываются также блоками. Добиться непрерывности можно, копируя архив сначала в 95%, потом в 90%, потом 85% и так далее. 1 блок записи равен 8 КБ.