Страница 1 из 1

Запись выборки из InSQL в теги InTouch

СообщениеДобавлено: Чт июл 05, 2007 3:58 pm
Виталий
Добрый день!
Подскажите, пожалуйста, существует ли какая-нибудь возможность записи в теги InTouch результатов выборки из базы InSQL.
Например так, чтобы указав имя тега из базы InSQL и время, можно было переписать архивное значание тега InSQL во внутренний тег InTouch.
Заранее благодарен.

Re: Запись выборки из InSQL в теги InTouch

СообщениеДобавлено: Пт июл 06, 2007 2:51 pm
Admin
Лучше всего воспользоваться для этого Quick Scripts.
Создайте BindList с помощью SQL Access Manager.
в BindList определите соответствие полей тэга столбуам таблицы.

Используйте функцию [int] SQLConnect( [int] ConnectionID, [string] "ConnectString")
для соединения с источником данных.
ConnectString имеет формат "DSN=..;UID=..;PWD=..;"
за более подробной информацией rtfm )

Используйте функцию [int] SQLSelect( [int] ConnectionID,
[string] TableName, [srting] BindList, [string] WhereExpr,
[string] OrderBy ) для создания запроса который автоматически присвоит значения тэгам, описанным в BindList.

Re: Запись выборки из InSQL в теги InTouch

СообщениеДобавлено: Пн июл 09, 2007 8:58 am
Виталий
Уважаемый Admin
Описанный Вами прием хорошо годится для Microsoft SQL, однако нам необходимо связаться именно с базой данных InSQL.
Предложенная Вами функция SQLConnect( [int] ConnectionID, [string] "ConnectString")
для соединения с источником данных имеет формат "DSN=..;UID=..;PWD=..;", так вот в качестве
DSN мы указываем ODBC драйвер для Microsoft SQL, таблицу по умолчанию (базу данных по умолчанию) можно выбирать только из баз Microsoft SQL, а как вам известно
InSQL хранит данные истории в "своей" базе и именно до нее мы не можем добраться.
Если вас не затруднит напишите более пожалуйста более подробно суть Вашей идеи для соединения с базой Circular InSQL.

СообщениеДобавлено: Пн июл 09, 2007 2:22 pm
Admin
Уважаемый Виталий! InSQL именно и является надстройкой над MSSQL
Он использует майкрософтовскую базу для хранения данных, но
и сам выступает как провайдер OLEDB. То есть реализуется так называемый связанный сервер.
InSQL осуществляет запись исторических данных в архив, сжатие данных, поддерживает язык запросов с метками времени Transact-SQL
и расширяет его. Однако фактически для доступа к данным используется интерфейс COM. Все это сделано для того чтобы
отвечать требованиям системы реального времени.

Необходимо различать доступ к реляционным таблицам (MSSQL) и к архивным данным (InSQL) поскольку это разные задачи.

Для доступа к таблицам БД используется четырехкомпонентный синтаксис для указания таблицы, в остальном почти как в SQL:
SELECT * FROM INSQL.Runtime.dbo.History
WHERE TagName = 'SysTimeSec'

InSQL - имя сервера БД
Runtime - этот каталог всегда указывается для получения текущих данных
dbo - схема в каталоге
History - имя объекта (таблицы) содержащей искомые данные
! это единственный параметр который Вам требуется менять

Для того чтобы настроить в InTouch доступ к истории зайдите в меню
Configure->Distributed Name History и на вкладке History Providers
выберите Configure InSQL Provider. (Там же Вы увидите что InTouch и сам по себе может выполнять функции архивирования данных, для этого в словаре переменных для архивной переменной требуется указать Log Data)
Вы также можете использовать клиентские приложения ActiveFactory для доступа к InSQL.

Для получения более подробной информации
качайте с нашего сайта этот документ
http://www.InTouch.ru/support/pub/InSQLConceptsRus.pdf

СообщениеДобавлено: Ср июл 11, 2007 12:04 pm
Виталий
Уважаемый Admin! Просим вас оказать нам очередное содействие! Предложенный Вами метод работоспособен, однако BindList (если мы правильно все понимаем) позволяет ссылаться на столбец базы данных InSQL только для одного тега.
Нам необходимо параллельно считывать зачения 105 тегов.
В BindList к столбцу можно привязать только один тег, а в столбце Value в INSQL.Runtime.dbo.History хранятся значения сотен тегов. Выходит необходимо 105 BindListoв?!
Так ли это, или есть какой-то другой более изящный способ?
Заранее благодарны.

СообщениеДобавлено: Ср июл 11, 2007 1:28 pm
Admin
Уважаемый Виталий!

Во-первых в директории проекта InTouch расположен файл SQL.DEF
он имееет формат .csv (Comma Separated Value) и содержит все
BindLists (используются для чтения из БД), а также
TableTemplates (используются для записи таблицы в БД)
Так что можете вручную отредактировать этот файл (скопируйте и переименуйте в sql.def.csv потом откройте Excelем), только предварительно закройте InTouch.
Это быстрый способ создать 105 BindListов.

Во-вторых Вы можете создавать свои структры данных - супертэги,
каждое поле которых (до 64 полей) является тэгом.
Делается это так - Заходите в Special->TemplateMaker
и описываете шаблон супертэга. Затем в словаре тэгов создаете
экземпляр тэга типа шаблона (он должен появиться в списке типов)

Такие есть два варианта, надеюсь Вам это поможет.

С уважением, Дмитрий