This is topic Не корректное отображение из БД in forum Мониторы Реального Времени / Real Time Monitors at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/35/t/000343.html

Posted by arkos (Участник № / Member № 6144) on :
 
Здравствуйте!
В нашем проекте требуется отображать значения только из БД. Сейчас примерно 2000 шаблонов Баз данных и 4900 каналов (возможно будет больше). База данных находится на сервере. Работаем по сети Ethernet (TCP/IP). При работе проекта в реальном времени и генерации сигналов с периодом 1с отображение значения параметров меняется через 5-6 с (интервал не постоянен). Это очень много. Уменьшение периода и цикла CALC, изменение потоков результатов не дало. Подскажите, пожалуйста, что нужно сделать, чтобы отображались значения 1 раз в секунду.

МРВ+(32000 ch) TM 6.08
My SQL Workbench 5.2 CE
MySQL ODBC 5.2 Unicode Driver
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Trace Mode 6 позиционируется как средство программной поддержки АСУ ТП.
SQL-интерфейс является вспомогательным. Он использует для обмена с БД ODBC-драйвер, который имеет существенные ограничения по производительности. Поток SQL-запросов имеет пониженный приоритет.
При таком объеме SQL-запросов полученные динамические характеристики, скорее всего, являются предельными.
Существенным фактором является также структура и функции обработки и хранения полученной информации.

Возможно, несколько ускорить обмен позволит использование группового считывания столбцов и строк (см. документацию).
 
Posted by arkos (Участник № / Member № 6144) on :
 
Спасибо за ответ!
Структура БД, с которой мы работаем такова, что использование группового считывания столбцов не возможно. Поэтому хотели бы применить оператор UNION или TRANSACTION, но, судя по всему, SQL-интерфейс ТМ не поддерживает эти операторы.
Пример запроса которые по отдельности работают, но вместе не работают:

START TRANSACTION;
SELECT codapardd1f.KKS #ARG_000#, valuesadd1f.CurrentTime #ARG_001#, valuesadd1f.Status #ARG_002#, valuesadd1f.Value #ARG_003#
FROM codapardd1f, valuesadd1f
WHERE codapardd1f.Id = valuesadd1f.IdParameter AND codapardd1f.KKS = '0PEB10CT001' Order by CurrentTime desc limit 1;
SELECT codapardd1f.KKS #ARG_004#, valuesadd1f.CurrentTime #ARG_005#, valuesadd1f.Status #ARG_005#, valuesadd1f.Value #ARG_007#
FROM codapardd1f, valuesadd1f
WHERE codapardd1f.Id = valuesadd1f.IdParameter AND codapardd1f.KKS = '0PEB10CT005' Order by CurrentTime desc limit 1;
COMMIT;
Правильно ли я понимаю, что эти операторы в ТМ не работают?
 
Posted by arkos (Участник № / Member № 6144) on :
 
Можно ли в ТМ использовать другой коннектор?
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Trace Mode 6 в штатных SQL-запросах работает только через ODBC-драйвер соответствующей БД.

Тrace Mode 6 знает ключевые слова UNION и TRANSACTION и передает их в запросе ODBC-драйверу. Как воспринимает этот запрос в соответствующем синтаксисе, можно посмотреть в трассировщике ODBC-драйвера.

Модуль связи с СУБД в Trace Mode 6 выполняет следующее:
- связывает каналы с полями таблиц БД;
- с учетом этого готовит/разбирает текст запросов только на уровне, необходимом для связи с аргументами;
- посылает запрос в ODBC-драйвер на исполнение, принимает результат и код завершения.
 
Posted by arkos (Участник № / Member № 6144) on :
 
В нашем проекте нужно отслеживать примерно 2000 параметров, приходящих из БД.
Мы пользуемся несколькими каналами CALL MOVE для посылки 1 во входные значения каналов CALL SQLQuery (примерно по 200 аргументов в каналах MOVE). Может быть, для улучшения быстродействия нужно использовать какой-нибудь другой способ посылки 1 в БД (например, программу). Подскажите, пожалуйста.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Trace Mode 6 не управляет очередью SQL-запросов.
Если Вы одновременно генерируете много запросов, то очередность их реализации определяется ODBC-драйвером и его производительностью.
Если ODBC-драйвер не справляется с тем потоком запросов, который Вы пытаетесь организовать, Ваши запросы будут теряться, интенсивность запросов будет уменьшаться.
М.б., улучшит ситуацию ключ
" SQLMANY – отмена режима выполнения только одного SQL запроса одновременно (режим по умолчанию). "
в файле конфигурирования запуска узла.
 
Posted by arkos (Участник № / Member № 6144) on :
 
Вся описанная ситуация происходит при установленом ключе SQLMANY. В любом случае спасибо за ответ!
 
Posted by Garrison (Участник № / Member № 5981) on :
 
Извиняюсь но я так и не уловил браузер sql запросов TM все же поддерживает оператор UNION или нет? Вот смотрите, выполняем простой запрос:
SELECT
members.temp_to #ARG_001#
FROM
members
WHERE
members.id = 1
прямо в браузере нажимаем "выполнить запрос" получаем "задать ARG_001=8" все у нас отлично значение правильное и записано в аргумент, далее строим запрос с оператором UNION

SELECT
members.temp_to #ARG_000#
FROM
members
WHERE
members.id = 1

UNION

SELECT
members.temp_to #ARG_001#
FROM
members
WHERE
members.id = 6

и при выполнении запроса получаем:

получить ARG_000=
задать ARG_001=8
задать ARG_001=14

это что за бред?
что значит получить ARG_000=?
почему два раза записать
задать ARG_001=8
задать ARG_001=14 ???
Значения то полученные из бд верные а вот что с запросом делает TM я чего то никак не пойму (кстати при этом в аргумент №1 реально вообще ничего не записывается)... Драйвер ODBС по моему не причем, трассировку не смотрел но два других приложения через него аналогичный запрос выполняют корректно. Любопытно что если значение WHERE делать в обоих запросах одинаковым то уже получаем:
задать ARG_000=14
получить ARG_001=
задать ARG_000=8
тоже бред но уже иначе выглядящий )))... В TM точно ошибок нет? а то вроде и нужно получить всего 28 значений из базы но не городить же для каждого условия where 28 разных запросов к бд!
Использую релиз 6.09
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
SQL-браузер Trace Mode 6 не поддерживает оператор UNION. В запросе не может быть 2 слова SELECT.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2