This is topic выборка данных из СПАД и запись их в БД in forum SIAD/SQL. Архивирование в TRACE MODE / SIAD/SQL. Data Logging in TRACE MODE at Форум TRACE MODE: техническая поддержка.
Уважаемая поддержка! С Наступающим Вас Новым Годом! У меня такой вопрос: в моём проекте происходит выборка с ОРС HDA сервера и сохранение данных в локальный СПАД архив, всё работает, данные СПАД архива отображаются на тренде, но теперь встала задача хранить эти данные в другой БД (Оракл). Подскажите какими методами возможно это сделать? если есть простой пример с любой БД хоть Акцесс, пришлите пожалуйста. Спасибо.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Готовых примеров решения таких задач нет. Задача для Trace Mode 6 в некотором смысле экзотическая - использование в качестве шлюза между OPC-сервером и БД. Возможные варианты. 1. Считывать из OPC HDA сервера данные с помощью каналов ChGroupReq и передавать эти данные SQL-запросами с групповой записью в БД. 2. Делать выборки из СПАД (с обработкой или без) с помощью каналов CALL и передавать эти данные SQL-запросами с групповой записью в БД. 3. Экспортировать данные из СПАД в файлы (txt, xml или html) с последующим импортом их в БД.
Posted by Катя (Участник № / Member № 5756) on :
Здравствуйте! Не знаю как решить такую задачу: данные нескольких каналов пишутся в спад, а потом, например раз в сутки данные из этого спада полностью переписываются в Базу данных. Если я правильно понимаю, то я могу прочитать данные из архива спад при помощи переменной Data_from_SIAD и канала CALL? А потом эти прочитанные данные записать в БД? Прочитать данные из архива у меня не получается, хотя архив пишется. Таким ли способом вообще надо решать эту задачу? Объясните пожалуйста. Тоже самое мне нужно сделать с архивом тревог, то есть через определенные промежутки времени переписывать архив тревог в Базу данных. Спасибо
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Экспортировать в БД все архивированные в СПАД данные по каким-то каналам - задача очень ресурсоемкая. И по производительности ODBC-драйвера, возможно, трудно реализуемая. Целесообразнее передавать данные в БД "на лету", а не из архива. Возможно, есть смысл более детально обсдить решаемую задачу в рабочем порядке по hotline@adastra.ru. Опишите задачу, характеристики потоков данных. Если есть попытки решения, пришлите соответствующие проекты, тесты, примеры.
Отчет тревог представляет собой текстовый файл с разделителями. Экспорт из этого файл не предусмотрен. Можно штатными средствами Trace Mode 6 делать в реальном времени копии ОТ и их импортировать в БД с соответствующими фильтрами системными средствами или дополнительными приложениями.
Posted by Алексей Шелепов (Участник № / Member № 6361) on :
Здравствуйте! Разъясните, пожалуйста. На данный момент производится запись одного канала в СПАД с последуюшей выборкой по времени и записью в БД Access SQL запросом. Для выборки из СПАД используется канал CALL с типом вызова LocalStatistic. Необходимо произвести выборку из СПАД двух каналов по одному времени с последующей записью в БД. Как наиболее рационально это реализоать?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Канал LocalStatistic может делать выборку только по одному каналу. Групповую выборку с усреднением может делать канал LocalList. Выборки осуществляются асинхронно, поэтому надо осуществлять запись в БД только после завершения выборки (см. описание канала LocalList).
Posted by Алексей Шелепов (Участник № / Member № 6361) on :
Если можно поподробней. 1. Каждый канал из СПАД привязывается к отдельному ChGroupReq? 2. Временной диапазон в ARG000 и ARG001 канала LocalList? 3. Какие аргументы в ChGroupReq и LocalList связывать? 4. Какие значения записывать в параметр каналов? 5. Какие каналы "активировать" входным значением. Извиняюсь за возможно банальные вопросы, но информация в справке очень скудна.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Ответы на все поставленные вопросы содержатся в разделе справочной системы "Архивирование/Архивы СПАД/Выборка и обработка.../Выборка данных из локального архива по каналу". Там же имеется ссылка на описание системы задания временного диапазона и свойства ПАРАМЕТР.
Posted by Алексей Шелепов (Участник № / Member № 6361) on :
Если информация в справочной системе не совсем понятна ПОКУПАТЕЛЮ Trace Mode, то кому, как не тех. поддержке поддержать свой продукт и разъяснить в доступной для восприятия форме ответы на поставленные вопросы. Всвязи с этим прошу ответить на предыдущие вопросы, тем более что часть вопросов в справке не раскрывается.
Posted by Nico (Участник № / Member № 5342) on :
1 да 2 да t_from / t_to (астроном время) 3 привязка D&D 4 LocalList: (0x10 ver <6.09) мл 4 бита рериод усреднения 5 только LocalList
Posted by Алексей Шелепов (Участник № / Member № 6361) on :
Спасибо, Nico.
Posted by BUJH (Участник № / Member № 6737) on :
Добрый день! Подскажите как можно организовать запись данных в БД "на лету" без использования СПАД.
Сделал проект по видео примеру Перенаправление данных в БД. Данные записываются по изменению реального значения, но не успевают записываться все.Примерно 3 значения из 14 попадают в БД. Скорость изменения значений довольно медленная для того чтобы успевали записываться данные в БД.
Если использовать вместо реальных переменных значения генераторов с целым типом данных, то данные записываются в достаточном объеме, как и обновляются, каждую секунду.
Вообщем посоветуйте что-нибудь
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
А если вместо "реальных переменных" использовать значения генераторов с типом данных FLOAT, запись будет осуществляться в нужном темпе?
Как Вы получаете значения "реальных переменных"? Где Вы увидели, что значение "реальной переменной" изменилось именно 14 раз?
Posted by BUJH (Участник № / Member № 6737) on :
Да, если использовать значения генераторов с типом данных FLOAT то значения переменных изменяются согласно периоду пересчета 1 сек, как настроено.
Значение реальных переменных получаю из ОРС сервера, слежу за их изменением на МРВ и записываю приблизительно сколько раз значение изменилось за данный промежуток времени. Потом делаю выборку из БД за этот промежуток и смотрю что число изменений сильно не соответствует.
Posted by Nico (Участник № / Member № 5342) on :
.при перенаправлении данных из архива в базу данных ничего не надо записывать !!!!!!!!!! TM это делает автоматически по изменению реального значения ..посмотрите i2(92 атрибут) -> среднее число строк ожидающих записи
Posted by BUJH (Участник № / Member № 6737) on :
Хорошо, посмотрел атрибут 92 канала по изменению которого записываются данные в БД. Там значение равно 65535(ffff), т.е. среднее число строк ожидающих записи равно 65535? Почему тогда реальное количество строк, записанных в БД, гораздо меньше этого значения? Я скорее всего что то не так понимаю, объясните.
Nico, что Вы имели ввиду, когда написали что : "при перенаправлении данных из архива в базу данных ничего не надо записывать!" ... TM делает это автоматически по изменению реального значения. Вы думали как и куда я записываю эти изменения?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Имеется в виду атрибут 92 канала CALL.SQL, который осуществляет перенаправление архивируемых параметров в БД. Этим каналом не надо управлять.
Пришлите, пожалуйста, Ваш проект, в котором реализовано "перенаправление архива" и укажите "генераторы", которые архивируются в БД корректно некорректно архивируемые "реальные переменные".
Posted by Nico (Участник № / Member № 5342) on :
"слежу за их изменением на МРВ и записываю" CALL.SQL не надо управлять
Posted by BUJH (Участник № / Member № 6737) on :
Уже сообразил что имеется ввиду Call.SQL. Значение атрибута 92 = 0. Вроде все работает нормально. Не знаю что было когда в первый раз тестировал.
Как теперь значения, записанные в БД представлять на МРВ в виде графика?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Надо считать из базы нужный массив данных из БД вместе с временными метками в аргументы канала CALL.TVC и вывести на тренд. См. разделы документации "Выполнение SQL-запросов в реальном времени" и "Канал CALL.TVC".
Можно ли записывать в БД не по изменению, а по времени, скажем каждую минуту? Либо контролировать значение изменения и если оно (изменение) превысило определенное dT, установленное пользователем, только тогда записывать контролируемую переменную в БД?
Иначе получается слишком частое изменение (на 0.1) переменных и большое количество значений.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Смысл "перенаправления" архива в БД состоит в том, чтобы получить архив в БД без потерь информации. Если Вас такой режим не устраивает, Вам надо пользоваться штатным механизмом SQL-запросов. В этом случае можно запрограммировать (Вашей пользовательской программой) любой регламент записи данных в БД.
Posted by BUJH (Участник № / Member № 6737) on :
Уважаемая техподдержка, подскажите, у меня по одной переменной сбой записи в БД, как и где посмотреть почему значение по данному каналу не записывается в БД? Все настроено аналогично как и для остальных каналов, изменение по данной переменной есть, достоверность по каналу _T, должно записываться, но , значений в БД нет. Помогите разобраться.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Если речь идет о перенаправлении архива в БД и все другие подобные переменные записываются в БД, а одна переменная не записывается, надо посмотреть, установлен ли у этой переменной флажок архивирования именно в тот архив, который задан для перенаправления.
Posted by BUJH (Участник № / Member № 6737) on :
Да, речь идет о перенаправлении в БД, у переменной установлен в редакторе, во вкладке архивирование номер архива 3, как и у остальных. Записи нет.
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Все записываемые в БД переменные относятся к одному типу каналов - FLOAT/HEX? Как заданы привязки у аргументов канала CALL.SQL?
Создайте копию используемого SQL-шаблона и организуйте с его помощью штатную (не перенаправлением архива!) запись именно этой переменной в ту же таблицу БД. При этом контролируйте SQL-обмен с помощью трассировщика ODBC-драйвера.
Posted by BUJH (Участник № / Member № 6737) on :
1.Все переменные FLOAT. 2.Не понял про привязки SQL 3.Как контролировать SQL-обмен с помощью трассировщика ODBC-драйвера?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
1. Типы данных и привязки аргументов канала CALL.SQL можно увидеть, если открыть СВОЙСТВА этого канала (именно канала, а не шаблона!) и вкладку АРГУМЕНТЫ. 2. Файл трассировщика ODBC-драйвера задается и запускается в "Администраторе источников данных ODBC".
Posted by BUJH (Участник № / Member № 6737) on :
Файл трассировщика создал и запустил. Подскажите как мне контролировать обмен?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
Читайте файл и ищите в нем сообщения об ошибках.
Posted by BUJH (Участник № / Member № 6737) on :
Здравствуйте! У меня настроен механизм перенаправления данных в БД. Данные приходят по Com порту (через конвертер USB/rs485), через ОРС сервер. В какой то момент обнаружил что за определенный период данные в БД отсутствуют.
Как определить что произошло: ошибка в TM6 при передаче данных или зависание драйвера преобразователя USB/RS485? Может в каком нибудь из конфигурационных файлов можно посмотреть? Проверял каждый день реальные значения данных, опрос был. Не понятно только запись шла или нет.
Posted by BUJH (Участник № / Member № 6737) on :
Уважаемая техподдержка, могли бы Вы ответить на мой вопрос, который я задавал выше
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
В разделе "Перенаправление архива в базу данных" указаны средства диагностики процесса записи архива в БД через атрибуты канала соответствующего канала CALL.SQL и вкладку "Диагностика" "Панели МРВ".
Posted by Andrey Limonchenko (Участник № / Member № 7318) on :
Здравствуйте! Не могли бы вы выслать пример выборки данных из СПАД с помощью CALL.LocalList?
Posted by AdAstra Technical Support (Участник № / Member № 4) on :