This is topic Cвой поток и Связь_с_СУБД in forum Работа с приложениями (ODBC-SQL/OPC/DDE) at Форум TRACE MODE: техническая поддержка.


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

Posted by Eman1982 (Участник № / Member № 5619) on :
 
Добрый день! У меня в программе есть проблема- при считывании данных из БД MS SQL подвисает вся программа, пока считывание данных не закончится.
Проведя поиск по форуму я увидел, что эта проблема давняя и рекомендовалось решать ее переводом выполнения связи с субд в "свой поток"(Единица измерения- "свой поток", период= номеру потока).

Я перевел канал SQLQuery, привязанный к запросу СУБД в "свой поток", но это не помогло- в таком режиме запрос никогда не останавливается и на входе(In) канала SQLQuery постоянно висит 65535.

Подскажите, как решить эту проблему? Может быть для помещения канала SQLQuery в свой поток нужно выполнить еще какие-то действия кроме выставления параметров: Единица измерения- "свой поток", период= номеру потока?
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Установлен TraceMode 6.08, ОС Windows XP SP3.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Выставьте каналу период пересчета "цикл IDLE".
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Спасибо за ответ, но все-таки, как сделать выполнение SQL-запроса в своем потоке?

Я попробовал все варианты, в т.ч. поставить "цикл IDLE", это приводит к некоторым странным глюкам.
Например, после запроса в лог-файле появляется запись:


16:14:20 0000 00000000[0] 31.05.2012
16:14:20 0000 00000000[132616] Start
16:14:31 0000 00000001[1] Calc loop is big
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
В релизе 6.08 выполнение SQL-запроса в своем потоке не работает. Ошибка будет исправлена в следующем релизе.

При появлении сообщения "Calc loop is big", приоритеты потоков в проекте были выставлены по умолчанию? Ошибка возникает после каждого выполнения SQL-запроса?
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Настройки приоритетов я не трогал.
Вы имеете в виду настройки по адресу RTM->Редактировать->Дополнительно->Приоритеты потоков? Там все Default.

Я ввел в программу переменную @Calculate_Cycle- реальное время вып-я цикла. Так вот, когда идет SQL-запрос чтения, эта переменная изменяется с 0... 2 до 17740 т.е. 17 секунд! Вот только что проверял. В SQLQuery выставлен "цикл IDLE".
К тому же, когда выставлен "цикл IDLE" пока идет чтение SQL, параметры с датчиков "зависают" на экране- отображение показаний датчиков не меняется.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Да. Имелись в виду настройки приоритетов в редакторе узла проекта.

База данных локальная? В результате выполнения SQL-запроса данные в аргументы каналов поступают?
Какие значения выставлены для циклов CALC и IDLE?

Создайте в папке узла проекта cnf-файл с ключом "DEBUGON=60054010" и воспроизведите ситуацию. После этого отправьте на hotline3@adastra.ru файл протокола профайлера, файл tm6_log.txt и prj-файл проекта.
 


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2