Marina
Junior Member / Новичок
Участник № / Member № 2971
отправлено / posted
Здравствуйте! Помогите разобраться в следующей ситуации. Есть компьютер, где работает PI-Server. Мы берем данные по ODBC с PI-Server в Trace Mode. На компьютере, где работает МРВ, установлен драйвер PI-ODBC и создан источник данных. Данные в Trace Mode приходят, но иногда данные «повисают» - не обновляются. При нормальной работе ODBC профайлер формирует в файле следующее сообщение: SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1010/AI/OUT.CV') AND (time=DATE('*')) SQL:columns is 1 VALUE SQL:execute: SELECT Value FROM PIcomp WHERE (tag='L1010/AI/OUT.CV') AND (time=DATE('*')) ODBC Read SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1011/AI/OUT.CV') AND (time=DATE('*')) SQL:columns is 1 VALUE SQL:execute: SELECT Value FROM PIcomp WHERE (tag='L1011/AI/OUT.CV') AND (time=DATE('*')) ODBC Read SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1012/AI/OUT.CV') AND (time=DATE('*')) SQL:columns is 1 VALUE SQL:execute: SELECT Value FROM PIcomp WHERE (tag='L1012/AI/OUT.CV') AND (time=DATE('*')) ODBC Read
При прекращении обновления: SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1010/AI/OUT.CV') AND (time=DATE('*')) SQL:error in Prepare:24000 SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1011/AI/OUT.CV') AND (time=DATE('*')) SQL:error in Prepare:24000 SQL:operator is: SELECT Value FROM PIcomp WHERE (tag='L1012/AI/OUT.CV') AND (time=DATE('*')) SQL:error in Prepare:2400
отправлено / posted
Сообщение об ошибке выдается в протоколе драйвером PI-ODBC. Текст SQL-запроса, формируемого МРВ Trace Mode, во всех случаях один и тот же. Ошибка возникает на этапе организации драйвером выборки из БД, до передачи данных в МРВ. Видимо, следует обратиться к документации на драйвер PI-ODBC и найти в ней расшифровку указанного сообщения об ошибке.
Сообщения / Posts 17335 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Marina
Junior Member / Новичок
Участник № / Member № 2971
отправлено / posted
А как влияет временное пропадание сети на обмен по ODBC? Восстанавливается ли связь МРВ с драйвером ODBC?
Сообщения / Posts 13 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
С драйвером ODBC МРВ связь и не теряет. Теряется связь между драйвером ODBC и базой данных.
Каждый запрос сопровождается операцией соединения с БД и отключения от нее. Если же связь пропала, то выход из процедуры происходит по истечению таймаута.
Сообщения / Posts 17335 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Marina
Junior Member / Новичок
Участник № / Member № 2971
отправлено / posted
Если теряется связь между драйвером ODBC и базой данных, а МРВ не теряет связи с драйвером ODBC, то почему после перезапуска МРВ данные начинают обновляться, т.е. восстанавливается связь между драйвером ODBC и базой данных. Каким образом перезапуск МРВ влияет на связь между драйвером ODBC и базой данных?
Сообщения / Posts 13 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Видимо, после потери связи между драйвером ODBC и базой данных драйвер "забывает" о подключенных к нему клиентах. Это особенность драйвера. Чтобы восстановить взаимодействие МРВ с драйвером ODBC, надо произвести реинициализацию обмена по ODBC. В разделе "Каналы для обмена по ODBC/Управление формированием SQL-запросов" указано, что такую операцию производит канал "SQL-выполнить" с соответствующими настройками: "Если 5-й бит настройки С3 канала SQL-выполнить равен 1, то при выполнении команды сначала будет проведена реинициализация обмена по ODBC ..." Надо создать канал с такой настройкой и при возникновении опасения, что связь с БД потеряна, надо этот канал заставить отработать.
Сообщения / Posts 17335 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Marina
Junior Member / Новичок
Участник № / Member № 2971