Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » Работа с рецептами через БД

   
Автор / Author Тема / Topic: Работа с рецептами через БД
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Добрый день.
Необходимо реализовать управление рецептами. Планирую использовать БД MSSQL Express 2008.
Сторонняя программа периодически будет класть в таблицу Orders заявки на приготовление бетона. Эта заявка содержит массу и марку бетона.
Для каждой марки существует несколько рецептов, который хранятся в таблице Recipes.

Хотелось бы на экране разместить таблицу, в которой были бы показаны текущие заявки (выборка из таблицы Orders).
При выборе в таблице нужной строки, должен выполниться другой запрос (выборка из таблице Recipes c подстановкой выбранной марки), в результате заполняется другая таблица с перечислением подходящих для данной марки бетона

рецептов.
Далее следует выбор нужного рецепта.


Изучил "Пример работы с рецептами из БД".
Я сделал компонент Связь_с_СУБД, запрос SELECT выбирает из БД актуальные заявки. Привязал аргумент экрана к аргументу канала CALL.SQLQuery. При передачи в атрибут "Входное значение" CALL.SQLQuery значения 1 запрос выполняется и

в атрибут экрана записывается текстовая строка из БД. Пока все хорошо.

Посмотрев видеурок "Обмен данными между SCADA TRACE MODE и СУБД по ODBC" решил повторить.
Создаю канал Call.ChGroupReq у него 10 аргументов типа STRING направление IN. Привязываю Реальное значение этого канала к аргументу канала CALL.SQLQuery.По идее в эти аргументы должны записываться результаты запроса. Но ничего не пишется, более того, перестало работать то что описал в предыдущем абзаце.


Вопросы
1. Правильно ли я описал механизм работы с запросами типа (SELECT table_name.title, table_name.value FROM table_name WHERE table_name.status = 0), если да то в чем может быть проблема почему не заполняются аргументы канала Call.ChGroupReq значениями из БД?
2. Есть ли возможность посмотреть значения аргументов канала, кроме как привязав к ним аргументы экрана?
3. Ув. техподдержка, не могли бы вы выслать проект из видеоурока "Обмен данными между SCADA TRACE MODE и СУБД по ODBC". Может я что-то упустил при просмотре.
4. С помощью каких ГЭ можно реализовать табличное представление данных об актуальных заявках и соответствующих им рецептам. Насколько я понял нечто похожее делает ГЭ "База данных". Может можно как-то сделать произвольную таблицу, заполняя ее из скрипта?

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/52/t/000003.html/Пример работы с рецептами из БД/

Посмотрите, пожалуйста, этот пример.

Значения аргументов любого канала CALL можно в реальном времени увидеть через окно "Просмотр компонентов", если раскрыть его атрибут 124.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/52/t/000003.html/Пример работы с рецептами из БД/

Посмотрите, пожалуйста, этот пример.

Этот пример я первым делом посмотрел. С ним все понятно.

Мой вопрос в том, что пока не понятно каким образом вывести на экран все или хотябы штук 10 рецептов, чтобы оператор смог выбрать необходимый.

Пробовал ГЭ База данных. Вроде бы рецепты показывает. Но есть 2 проблемы:
1. Как заставить таблицу периодически автоматиически обновляться (раз в 10 сек например)
2. Как изменить названия колонок. Колонка с названием table.title как-то некрасиво.
И вообще хотелось бы убрать все эелементы из шапки ГЭ База данных кроме названия колонок.


По прежнему открыт вопрос с таблицей произвольной структуры, которую можно заполнять произвольными данными. И просьбы выслать (если конечно есть такой) проект из видеоурока Обмен данными между SCADA TRACE MODE и СУБД по ODBC".

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Убрать из имен полей в ГЭ “База данных” слово table можно, если его не задавать в самом шаблоне запроса, например,

SELECT
Param1 #ARG_000#,
Param2 #ARG_001#,
Param3 #ARG_002#

FROM
Table1

вместо

SELECT
Table1.Param1 #ARG_000#,
Table1.Param2 #ARG_001#,
Table1.Param3 #ARG_002#

FROM
Table1

Других изменений в этот ГЭ внести нельзя.

Возможно, следует обратить внимание на групповое считывание строк в аргументы каналов ChGroupReq (см.описание SQL-запросов) и создание для этих аргументов собственной таблицы.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:

Возможно, следует обратить внимание на групповое считывание строк в аргументы каналов ChGroupReq (см.описание SQL-запросов)

Я писал выше, что не получается по непонятным причинам и просил вылать пример из видеурока "Обмен данными между SCADA TRACE MODE и СУБД по ODBC".
Где-то на форуме прочитал, что если запрос возвращает кол-во строк отличное от кол-ва аргументов канала ChGroupReq, то аргументы канала не заполняются. Это так?

quote:
Отправитель / Originally posted by AdAstra Technical Support:

и создание для этих аргументов собственной таблицы.

Как понять собственной таблицы? Я не нашел ГЭ, способного делать произвольную таблицу.

Читал, что есть некий ГЭ "Текст из файла", но так и не понял где его взять.

Могу ли с помощью ГЭ "Текст из файла" нарисовать таблицу, обновляющуюся раз в несолько секунд, данными из атрибутов SQLQuery?

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Пример к видео-уроку Вам отправлен.

"Собственную таблицу" можно создать из набора ГЭ "Текст", привязанных к аргументам канала групповой выборки.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Пример к видео-уроку Вам отправлен.

"Собственную таблицу" можно создать из набора ГЭ "Текст", привязанных к аргументам канала групповой выборки.

Спасибо, почему то об этом я даже и не подумал.
Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
И снова, здравствуйте.
Проблема с выводом данных из БД на экран.
Запрос типа "SELECT * FROM table".

Сделал канал CALL.SQLQuery, к аргументу привязал канал CALL.ChGroupReq, аргументы Экрана привязал к CALL.ChGroupReq. Передаю в атрибут "Входное значение" канала БД 0xFFFF.

В результате если кол-во аргументов в CALL.ChGroupReq равно или меньше кол-ву записей в таблице БД, то все ОК.

В противном случае на экране данные не появляются. Запустил профайлер, вызвал окно компоненты, смотрю атрибут 124 экрана, там нужные данные появились.
Т.е. запрос выполнился, данные пришли, но на экране не отобразились.

Кто виноват и что делать?

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Количество аргументов в канале CALL.ChGroupReq автоматически задается равным количеству считанных строк.
Жесткие привязки аргументов экрана к аргументам CALL.ChGroupReq не даст результата.

Можно вывести данные из CALL.ChGroupReq следующим образом.
Задать на экране ГЭ "Текст из файла" (группа "Ресурсы").
Привязать этот ГЭ через аргумент экрана к РЕАЛЬНОМУ значению CALL.ChGroupReq.
В привязке ГЭ выбрать номер атрибута 522.
На экран будет выводиться таблица предустановленного формата со значениями аргументов CALL.ChGroupReq.

Обновляться таблица будет при любом (принудительном) изменении РЕАЛЬНОГО значения CALL.ChGroupReq.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Количество аргументов в канале CALL.ChGroupReq автоматически задается равным количеству считанных строк.
Жесткие привязки аргументов экрана к аргументам CALL.ChGroupReq не даст результата.

Я же самолично создаю аргументы CALL.ChGroupReq. Что значит автоматически создаются? Вы же мне нечто подобное в посте №13346 советовали.

Ну да ладно. Попытался реализовать через ГЭ "Текст из файла".
quote:
Отправитель / Originally posted by AdAstra Technical Support:
В привязке ГЭ выбрать номер атрибута 522.

В этом месте не понятно. Я же привязываю ГЭ к реальному значению CALL.ChGroupReq. Где я должен выбрать атрибут 522?
Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
При привязке свойства ГЭ к аргументу открывается таблица аргументов экрана.
Работа с этой таблицей описана в разделе "Разработка графического интерфейса/Задание типовых свойств ГЭ/Динамизация атрибута ГЭ".

" выбрать аргумент, сбросить флаг "Использовать привязанный атрибут" и выбрать атрибут (0,R по умолчанию) или задать номер атрибута в поле "Атрибут", если конфигурируемое динамическое свойство должно быть привязано к атрибуту канала, отличному от того, который привязан (будет привязан) к выбранному аргументу. После привязки в поле "Значение" атрибута "Привязка" отображается порядковый номер и имя аргумента, а также короткое имя атрибута (например, "<1> ARG_000 (In)"). Если короткое имя атрибута не существует, отображается номер атрибута ("<1> ARG_000 (452)"). "

В Вашем случае надо выбрать атрибут с номером 522.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Доброй ночи.
Попробовал Ваш совет последний совет. Эффект прежний, в ГЭ "Текст из файла" ничего.

Но обнаружилось несколько деталей.

1.
В файле fm2_0.txt (fm2 - название проекта) вот такое
code:
 
(2:57:14) WRN_RTM:wrong entry out -140(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -139(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -138(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -137(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -136(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -135(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -134(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -133(9,2) id=7
(2:57:14) WRN_RTM:wrong entry out -132(9,2) id=7

ID 7 это как раз канал CALL.SQLQuery, который я пытаюсь показать на экране.
После передачи -1 на вход канала CALL.SQLQuery еще добавляется строка

code:
 
(2:58:19) WRN_RTM:wrong entry(g)

2.
После передачи -1 на вход канала CALL.SQLQuery перестают обновляться данные на экране. В окошке Вид-Компоненты видно, что аргументы экрана обновляются.

3.
При переходе на другой экран и возвращении обратно в табличке появляются данные из БД.

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Сообщения говорят о некорректности привязок аргументов (например, отсутствие привязанных аргументов в реальном времени.

2. Вы действительно передаете на вход канала CALL.SQLQuery число "-1" (отрицательное)? Номер запроса "1" - положительное число.
О каких аргументах идет речь? Как они связаны с SQL-запросом? Какими ГЭ они должны отображаться?

3. Выше было указано
"Обновляться таблица будет при любом (принудительном) изменении РЕАЛЬНОГО значения CALL.ChGroupReq." Или при возвращении на этот экран.
Судя по всему, запрос реализуется и в аргументах канала CALL.ChGroupReq имеются данные из БД.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. А поточнее узнать, что означают цифры? Где искать неправильные привязки. У канала CALL.SQLQuery всего 6 аргументов, а записей в логе 9.

2. На вход CALL.SQLQuery я передаю -1 (отрицательное), передаю 65535, передаю 0xFFFF. Эффект один. В документации написано, чтобы записать результат запроса БД в аргументы CALL.ChGroupReq, нужно на вход передать 0xFFFF.
Я так и делаю. При этом атрибут 124 CALL.ChGroupReq заполняются даннымми из БД. Так же заполняются аргументы экрана которые привязаны к аргументам CALL.ChGroupReq тоже меняются. Но при этом на экране остается как было. Также перестаются обновлятся на экране другие данные.

Данные из БД пытаюсь показать двумя способами: через ГЭ "Текст из файла" и привязывая аргументы экрана к аргументам CALL.ChGroupReq.

3. Пробовал менять Реальное значение CALL.ChGroupReq, чтобы обновить ГЭ "Текст из файла", эффекта нет.


Мне кажется если как-то заставить обновиться экран, то данные из БД там должны появиться.

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Нельзя выводить на экран непосредственно аргументы канала CALL.ChGroupReq, у которого аргументы создаются на лету по количеству считанных строк.
Если в какой-то момент времени количество реальных аргументов канала CALL.ChGroupReq меньше, чем число аргументов этого канала, к которым привязаны аргументы экрана, экран выключится и сам не включится.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо за быстрый ответ.

quote:
Если в какой-то момент времени количество реальных аргументов канала CALL.ChGroupReq меньше, чем число аргументов этого канала, к которым привязаны аргументы экрана, экран выключится и сам не включится.
Это так и задумано или это баг такой? Планируете ли исправить?

Удалил все аргументы у CALL.ChGroupReq, вариант с "Текст из файла" заработал. Но есть один момент. После передачи на вход CALL.SQLQuery значения 65535 (через окно компоненты или по кнопке) в течении 2-5 секунд экран не обновляется. Можно ли от этого избавиться?

Могу ли я в скрипте обратиться к аргументам CALL.ChGroupReq созданным на лету, чтобы заполнить аргументы экрана? Вариант с "Текст из файла" мне не нравиться. Не вижу возможности выделить произвольную строку в таблице и обратиться к ее данным.

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. "Это" так и задумано.

2. У канала CALL.ChGroupReq надо оставить хотя-бы 1 аргумент.

3. В атрибуте 124 канала CALL.ChGroupReq указывается, сколько аргументов у него создано.
С учетом этого параметра и используя специальные ST-функции
"DINT getAttributeI(UDINT ch_id, UINT attr_id)

//чтение атрибута канала (вещественное, 4 байта)

REAL getAttributeF(UDINT ch_id, UINT attr_id)

//установка атрибута канала (целое со знаком,4 байта)"
можно считать из CALL.ChGroupReq его аргументы в программу и переписать в выходные аргументы программы, к которым привязываются соответствующие аргументы экрана.

Номер атрибута равен 1000+<номер аргумента>.

Количество выходных аргументов программы (и соответствующих аргументов экрана) должно быть согласовано с возможным количеством строк в выборке из БД.
Если при этом количество реально считанных строк меньше количества заложенных ГЭ, то придется в "лишние" аргументы программы писать нечто, позволяющее сделать соответствующие ГЭ невидимыми.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
У канала CALL.ChGroupReq надо оставить хотя-бы 1 аргумент.

Попробовал добавить по одному аргументу в каждый канал CALL.ChGroupReq. Разницы не увидел.

Как справиться с тем, что данные на экране не обновляются несколько секунд после передачи 65535 в CALL.SQLQuery?

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Задайте каналу CALL.SQLQuery период обработки
1*"цикл IDLE".

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
Задайте каналу CALL.SQLQuery период обработки
1*"цикл IDLE".

Изменил, проблема осталась
Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Какие именно "данные на экране не обновляются несколько секунд после передачи 65535 в CALL.SQLQuery"?

Связь с БД осуществляется локально или по сети?

Надо провести дополнительную диагностику.
В файле конфигурирования запуска узла TMcom_<ordinal>.cnf (см."Приложения/Задание параметров работы мониторов") надо задать ключ
DEBUGON=70044410

В профайлерном протоколе в папке узла должна быть информация об ошибках SQL-обмена, потоках (в частности, о потоке IDELE).
Следует также просмотреть протокол трассировщика ODBC-драйвера.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Сделал тестовый проект. Имеется:
- канал CALL.SQLQuery, период 1*цикл IDLE
- 2 канала CALL.ChGroupReq, привязанных к аргументам CALL.SQLQuery
- скрипт посылающий на вход CALL.SQLQuery 65535, меняющий реальное значение CALL.ChGroupReq
- скрипт увеличивающий аргумент экрана counter на 1
- Экран, на нем значение counter, 2 ГЭ "Текст из файла" с привязанными CALL.ChGroupReq.

В результате
1. counter увеличивается.
2. когда CALL.SQLQuery получает на вход 65535 counter перестает увеличиваться.
3. через 10 сек. в ГЭ "Текст из файла" появляются данные из БД, counter продолжает увеличиваться.

Кусок лога:
code:
 

(11:5:22) INF_GRAPH:scr:1:popup=0 scrref=0 trend=0,0 update=1
(11:5:24) INF_RTM:Thread Enable
(11:5:24) INF_RTM:Idle period = 1100
(11:5:27) INF_RTM:SQL: connect База_данных#1:1
(11:5:27) INF_RTM:SQL : exec prepare R=0xffff for next fetch all row База_данных#1:1
(11:5:35) INF_RTM:SQL: select 2 row База_данных#1:1
(11:5:35) INF_RTM:SQL: fetch row from 0 to 2 База_данных#1:1
(11:5:35) INF_RTM:SQL: disconnect after select База_данных#1:1
(11:5:43) INF_RTM:stoping...
(11:5:43) INF_RTM:mode=5(Stop) e15=00 e18=00 e20=00 [src0]
(11:5:43) INF_RTM:stop CALC[8444] ku=0 workT=0 Sleep=12
(11:5:43) INF_RTM:stop Ext Graph[9248] ku=0 workT=21 Sleep=0
(11:5:43) INF_RTM:stop Main[9404] ku=0 workT=0 Sleep=22
(11:5:43) INF_RTM:stop IDLE[1752] ku=0 workT=0 Sleep=14
(11:5:44) INF_RTM:stop GRAPH[7392] ku=0 workT=22 Sleep=19
(11:5:44) INF_RTM:stop ACT[9552] ku=0 workT=21 Sleep=21
(11:5:44) INF_RTM:stop SDDE[9816] ku=0 workT=0 Sleep=0
(11:5:44) INF_RTM:stop time is 1.387 s
(11:5:44) INF_RTM:number of calculation = 21
(11:5:44) INF_RTM:END OF WORK


В логе виден момент когда все "подвисает" 11:5:27-11:5:35. Как раз чтение из БД. Впечатление, что все выполняется в одном потоке и пока БД не получит ответ на запрос все "стоит".

quote:
протокол трассировщика ODBC-драйвера.
как посмотреть?

БД на том же компьютере, что и ТМ6.

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Call.sql перевести в поток idle
Сообщения / Posts 807 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by Nico:
Call.sql перевести в поток idle

В настройках канала CALL.SQLQuery пункте Системные-Основные Период указал 1, Единица измерения IDLE. Вы это имели ввиду?
Не помогает

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Nico
Forum Professor / Завсегдатай форума
Участник № / Member № 5342


Icon 1 отправлено / posted      Профиль для / Profile for Nico           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Call.math анализирует завeршение
выпoлнения call.sql?
Если выборка большая то запрос выполняется долго в таком случае лучше использовать
autoresize аргументов call.chgr

Сообщения / Posts 807 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
В тестовом примере запрос возвращает 2 записи по 6 полей. В любом случае каким бы тяжелым запрос не был, это не должно влиять на остальную систему.
Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Уважаемая техподдержка, помогите пожалуйста с моей проблемой.
Может я вам тестовый пример пришлю?

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
У Вас трассировщик ODBC-драйвера включен?
Надо его выключить.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
dzukpp
Junior Member / Новичок
Участник № / Member № 6383


Icon 1 отправлено / posted      Профиль для / Profile for dzukpp           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
quote:
Отправитель / Originally posted by AdAstra Technical Support:
У Вас трассировщик ODBC-драйвера включен?
Надо его выключить.

Включил трасировку.
Запустил профайлер.
Передал на вход канала CALL.SQLQuery 65535.
Дождался, когда данные снова начнут обновляться (10 сек)
Посмотрел лог. Выложил по ссылке http://pastebin.com/Z9qnp0jh

Ни чего не понял.

Этот же самый запрос в среде MS SQL Server Management Studio выполняется 0.000 секунд. Я бы и не против, пусть хоть минуту выполняется. Проблема в том, что в это время не обновляется экран.

Сообщения / Posts 30 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Присылайте Ваш проект на hotline3@adastra.ru вместе с Базой данных.
Опишите последовательность действий и контроля для воспроизведения ситуации.

Сообщения / Posts 17112 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


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



Powered by Infopop Corporation
UBB.classic™ 6.7.2