Форум 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 » Работа с приложениями (ODBC-SQL/OPC/DDE) » Связь с Access. Дискретный выход DDE

   
Автор / Author Тема / Topic: Связь с Access. Дискретный выход DDE
Hi-man
Junior Member / Новичок
Участник № / Member № 4154


Icon 1 отправлено / posted      Профиль для / Profile for Hi-man           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте.
Делаю свой первый проект. Вопросов возникало масса. Какие-то отпали, но два из них меня мучают особенно сильно.
1. Пытаюсь сделать архивирование путём пересылки значений в Access. Всё делаю как описаон в "Быстром Старте", даже что-то получается - подключение происходит (подключение, подключено, отключение, отключено). После запуска запроса в отчёте тоже появляется что надо (Получить _Параметр1_=[значение по умолчанию] и т.д.), а вот в таблицу базы эти значения, почему-то, не приходят. То есть я делаю запрос, потом открываю базу, а там пусто.
2. Пробуем организовать управление задвижек с рабочего места оператора. Решил организовать всё это дело по DDE, но сталкнулся с проблемой. DDE-клиентом выступает программа DSData (контроллер Direct Logic) Передаю в канал контроллера через DSData значение, значение приходит как надо, только в DSData по этому каналу начинает писаться передаваемое значение с промежутком в секунду.
Ко все тому DSData ещё и является DDE сервером для Trace Mode (если я всё правильно понимаю) т.к. через него приходят данные с контроллера.
Заранее спасибо за помощь.

Сообщения / Posts 8 | Из / 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. Зачем делать архивирование в MS Access, если в Trace Mode 6 есть свои архивы?
Для того чтобы понять, что происходит с SQL-обменом, надо перед запуском профайлера запустить трассировщик ODBC-драйвера (уж если взялись за БД, найдите) и по его протоколу выяснить, идут ли запросы и какие есть ошибки.

2. Непонятно, почему нельзя использовать для связи с контроллерами Direct Logic протокол Modbus?
Откуда "в DSData по этому каналу начинает писаться передаваемое значение с промежутком в секунду"?
Как Вы связывали Trace Mode 6 с DDE-сервером?

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


Icon 1 отправлено / posted      Профиль для / Profile for Hi-man           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
1. Делаю архивирование в Access потому что монитор у меня не плюсовый, поэтому приходится выкручиваться подручными средствами.
Сделал запрос из шаблона без трассировщика - время изменения файла изменилось на текущее, а содержимое осталось прежним. Закрыл IDE, запустил трассировщик, открыл IDE, сделал запрос из шаблона. Результат тот же.
В файле лога из всего мне понятна только эта строчка:
DIAG [22005] [Microsoft][Драйвер ODBC Microsoft Access] Несоответствие типов данных в выражении условия отбора. (-3030)
но не понятно её появление, так как аргументы шаблона у меня IN/REAL, а записи в БД в соответствии с Быстрым Стартом (что видел, то и делал). В чём несоответствие типов данных?
2. Никто не говорит, что нельзя использовать Modbus, я именно так и делал сначала, просто при таком раскладе через некоторое время (промежутки разные - от получаса до... верхнюю границу не улавливал)происходит зависание, после которого перезапуск проекта не помогает, только перезагрузка RTM. Такая же ситуация с выходом - то идёт передача, то не идёт. Если не идёт можно смело закрывать RTM и открывать заново, а это как-то неудобно, да и на объекте может всякое за это время произойти.
Если бы я знал "Откуда "в DSData по этому каналу начинает писаться передаваемое значение с промежутком в секунду"?"... Просто создал канал DDE с режимом REQ/POKE (data) направление Output и запустил. В DSData появился канал с адресом назначения и, оставаясь не отключенным, стал появляться ниже новый (адрес тот же) с промежутком в секунду и так далее.
В DSData каналы появляются в момент обращения программы, то есть при его запуске ни одного канала нет, когда запускается RTM все описанные в ИС входные каналы (касающиеся контроллера) появляются в DSData и висят, показывая передаваемое в RTM значение. А вот с выходными такие странности.

Сообщения / Posts 8 | Из / 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. Разница в стоимости между МРВ и МРВ+ 10%.
Заменяя архив МРВ на БД, тем более такую слабую и ненадежную, как MS Access, Вы обрекаете себя на значительное усложнение всех процессов обработки отображения и документирования данных реального процесса.
Кроме того, надо учитывать, что быстродействие SQL-обмена через ODBC-драйвер принципиально существенно ниже, чем реальное бастродействие при работе с архивами в МРВ.

По сообщениям трассировщика надо просмотреть соответствие настроек типов данных в полях БД типам данных, передаваемых из Trace Mode 6.
В частности, возможно, в БД установлено обозначение точки во FLOAT в виде ",". Надо "."

2. Вместо такой радикальной и довольно громоздкой замены драйвера Modbus на механизм DDE надо было бы разобраться в причинах прекращения обмена по Modbus. Возможно, необходимо посмотреть проект и протоколы перехвата трафика обмена.
Можно обсудить это в рабочем порядке непосредственно в службе техподдержки hotline@adastra.ru.

Trace Mode 6 не инспирирует процедур создания тегов в DDE-сервере.
Значение из канала DDE_OUT отправляется в DDE-сервер только при его изменении.
При получении стандартного сигнала о завершении транзакции передача завершается.
Если стандартный сигнал завершения транзакции не получен, передача повторяется.

Надо отметить, что, хотя DDE-обмен в Trace Mode-проектах используется не очень часто, за много лет внедрения Trace Mode такая проблема озвучена впервые.

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



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Чтобы не напрягать МРВ ТМ6 обменом по ODBC и быстро архивировать данные во внешние СУБД - рекомендую посмотреть здесь: http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/50/t/000017.html

В качестве СУБД может работать с MS Access.

IP / IP: IP адрес / IP address | Report this post to a Moderator
ValArg
Forum Member / Участник форума
Участник № / Member № 4245


Icon 1 отправлено / posted      Профиль для / Profile for ValArg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Здравствуйте.
По ТЗ необходимо данные заносить в БД MS Access. Все сделал как в примере"Быстрый старт". Есть подключение к бд, привязки. Но в сам файл БД ничего не записывается. В БД тип данных float, каналы ТМ также. Вот логи трассировки SQL.LOG:
Melang_2_0 110-810 ENTER SQLGetInfoW
HDBC 00D815E8
UWORD 70 <SQL_CONVERT_VARCHAR>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000

Melang_2_0 110-810 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 00D815E8
UWORD 70 <SQL_CONVERT_VARCHAR>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000

Melang_2_0 110-810 ENTER SQLGetInfoW
HDBC 00D815E8
UWORD 62 <SQL_CONVERT_LONGVARCHAR>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000

Melang_2_0 110-810 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 00D815E8
UWORD 62 <SQL_CONVERT_LONGVARCHAR>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000

Melang_2_0 110-810 ENTER SQLGetInfoW
HDBC 00D815E8
UWORD 91 <SQL_OWNER_USAGE>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000

Melang_2_0 110-810 EXIT SQLGetInfoW with return code 0 (SQL_SUCCESS)
HDBC 00D815E8
UWORD 91 <SQL_OWNER_USAGE>
PTR 06F0C944
SWORD 4
SWORD * 0x00000000
В чем может быть причина?

Сообщения / Posts 49 | Из / 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 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
ValArg
Forum Member / Участник форума
Участник № / Member № 4245


Icon 1 отправлено / posted      Профиль для / Profile for ValArg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Тестовый проект на четыре канала работает (данные записываются в БД). На 52 канала не работает. Сделано все также. Проверка проходит, тип данных аргументов-real, тип данных полей БД-float. В ОС разделитель точка В чем может быть причина?
Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Одна из вероятных причин, почему на 4 канала работает, а на 52 нет - ограничение на длинну строки SQL-запроса, который формируется к СУБД. У MS Access эта строка имеет ограничение, причем не очень большое, поэтому есть подозрение, что 52 значения канала в запрос просто не помещаются. Тут надо посмотреть документацию на эту тему самого Access.
IP / IP: IP адрес / IP address | Report this post to a Moderator
ValArg
Forum Member / Участник форума
Участник № / Member № 4245


Icon 1 отправлено / posted      Профиль для / Profile for ValArg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Спасибо за ответ. Честно говоря не врубаюсь. Вот запрос:
INSERT INTO Mel_2
(
Data,
Koncentrac_R1,
Koncentrac_R10,
Koncentrac_R11,
Koncentrac_R12,
Koncentrac_R13,
Koncentrac_R2,
Koncentrac_R3,
Koncentrac_R4,
Koncentrac_R5,
Koncentrac_R6,
Koncentrac_R7,
Koncentrac_R8,
Koncentrac_R9,
Riven'_R1,
Riven'_R10,
Riven'_R11,
Riven'_R12,
Riven'_R13,
Riven'_R2,
Riven'_R3,
Riven'_R4,
Riven'_R5,
Riven'_R6,
Riven'_R7,
Riven'_R8,
Riven'_R9,
Temperatura_R1,
Temperatura_R10,
Temperatura_R11,
Temperatura_R12,
Temperatura_R13,
Temperatura_R2,
Temperatura_R3,
Temperatura_R4,
Temperatura_R5,
Temperatura_R6,
Temperatura_R7,
Temperatura_R8,
Temperatura_R9,
Tisk_R1,
Tisk_R10,
Tisk_R11,
Tisk_R12,
Tisk_R13,
Tisk_R2,
Tisk_R3,
Tisk_R4,
Tisk_R5,
Tisk_R6,
Tisk_R7,
Tisk_R8,
Tisk_R9
)
VALUES
(
'#Временная_отметка#',
'#Концентрація_Р1#',
'#Концентрація_Р10#',
'#Концентрація_Р11#',
'#Концентрація_Р12#',
'#Концентрація_Р13#',
'#Концентрація_Р2#',
'#Концентрація_Р3#',
'#Концентрація_Р4#',
'#Концентрація_Р5#',
'#Концентрація_Р6#',
'#Концентрація_Р7#',
'#Концентрація_Р8#',
'#Концентрація_Р9#',
'#Рівень_Р1#',
'#Рівень_Р10#',
'#Рівень_Р11#',
'#Рівень_Р12#',
'#Рівень_Р13#',
'#Рівень_Р2#',
'#Рівень_Р3#',
'#Рівень_Р4#',
'#Рівень_Р5#',
'#Рівень_Р6#',
'#Рівень_Р7#',
'#Рівень_Р8#',
'#Рівень_Р9#',
'#Температура_Р1#',
'#Температура_Р10#',
'#Температура_Р11#',
'#Температура_Р12#',
'#Температура_Р13#',
'#Температура_Р2#',
'#Температура_Р3#',
'#Температура_Р4#',
'#Температура_Р5#',
'#Температура_Р6#',
'#Температура_Р7#',
'#Температура_Р8#',
'#Температура_Р9#',
'#Тиск_Р1#',
'#Тиск_Р10#',
'#Тиск_Р11#',
'#Тиск_Р12#',
'#Тиск_Р13#',
'#Тиск_Р2#',
'#Тиск_Р3#',
'#Тиск_Р4#',
'#Тиск_Р5#',
'#Тиск_Р6#',
'#Тиск_Р7#',
'#Тиск_Р8#',
'#Тиск_Р9#'
)

где эта строка?
Как я понял в моем случае лучше организовать, например, 5 запросов с записью в 5 БД. Но как это скажется на производительности МРВ?

Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Весь ваш запрос - это и есть одна большая строка, просто большинство СУБД имеют ограничения на длинну этой строки.
IP / IP: IP адрес / IP address | Report this post to a Moderator
ValArg
Forum Member / Участник форума
Участник № / Member № 4245


Icon 1 отправлено / posted      Профиль для / Profile for ValArg           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Проблема решилась. Максимальная длина инструкции SQL для MS Access составляет 255 символов. Сократил имена до 2 символов. Файл СУБД кинул в корень диска, а то в дереве папки с кириллицей ему не нравились. Все заработало. Еще раз спасибо.
Сообщения / Posts 49 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Ну вот и хорошо... Подводные камни - это всегда неприятно, когда о них не знаешь. [Пдмигивание / Wink]
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