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

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 5 » Работа в MS Windows (ODBC/DDE/OPC/NET) / Working under MS Windows » DDE-обмен с Delphi

   
Автор / Author Тема / Topic: DDE-обмен с Delphi
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479


Icon 9 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
День добрый!
Объясните, пожалуйста, следующую ситуацию:
Win-приложением (Delphi) раз в 5 сек. осуществляется DDE-опрос трех каналов
(в режиме Request) при этом суммарное время опроса достигает 1.5 сек.
(Время опроса увеличивается с увеличением кол-ва каналов, например, для пяти составляет 2.5 сек.)
В то же время, если опрос осуществлять по схеме RTM - Excel - Delphi, он происходит мгновенно независимо от кол-ва опрашиваемых каналов.
В чем тут дело?

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


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
А как Вы реализовали опрос по DDE в приложении на Delphi?
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479


Icon 1 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
А как Вы реализовали опрос по DDE в приложении на Delphi?

Естественно, через DdeClientConv: SetLink('RTM1','GET') и RequestData(Chanel.Text) (по событию OnTimer с частотой 5 сек.).

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


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
И он каждый раз инициализирует указатель на сервер и топик через SetLink('RTM1','GET')?
Попробуйте делать это один раз, а в цикле таймера только опрашивать сервер по RequestData(Chanel.Text).

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


Icon 1 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
И он каждый раз инициализирует указатель на сервер и топик через SetLink('RTM1','GET')?
Попробуйте делать это один раз, а в цикле таймера только опрашивать сервер по RequestData(Chanel.Text).

Так и есть.
В цикле таймера опрашивается только сервер по RequestData(Chanel.Text).

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


Icon 4 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
###
Нам необходимо время на проверку данной ситуации. Ответ мы сообщим позже в форум и на Ваш E-mail.

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


Icon 1 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
Нам необходимо время на проверку данной ситуации. Ответ мы сообщим позже в форум и на Ваш E-mail.

Я, конечно, извиняюсь, но когда же будет ответ?
Хотелось бы скорее...

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


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

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


Icon 1 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
Почтой отправить не удалось. (Не пропускает прокси сервер)
Высылаю фрагмент кода...
Обработчик нажатия кнопки "Связь":
If not Client.SetLink('RTM1','Get') or not Client.OpenLink
Then Application.MessageBox('Невозможно установить связь!', 'ОШИБКА!',MB_ICONERROR)
Else
begin
Button1.Enabled:=False; //Запрет нажатия кнопки "Связь"
AssignFile(DataFile,'Chanel.txt');
Rewrite(DataFile);//Открытие файла для записи запрашиваемых данных
Timer1.Enabled:=True;//Запуск таймера
end
Обработчик события OnTimer (цикл срабатывания 1сек.):
var
InfoKalor,InfoPr,InfoDom:PChar;
s,s1,s2:String;
begin
InfoKalor:=Client.RequestData(Chanel.Text);
InfoPr:=Client.RequestData(Edit1.Text);
InfoDom:=Client.RequestData(Edit2.Text);
s:=StrPas(InfoKalor); s1:=StrPas(InfoPr); s2:=StrPas(InfoDom);
WriteLn(DataFile,TimeToStr(Now),' ',S,' ',S1,' ',S2);
end;
P.S. Delphi 6.0 (Build 6.163); TM - 5.07 Base Editional
P.P.S. Попутно еще вопрос: отсутствует oddsetup.exe в связи с чем не устанавливается
драйвер ODBC (siadsql.dll в каталоге ТМ есть), что делать?

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


Icon 5 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
1) Вы указали, что опрос ведется раз в 5 секунд по таймеру и в то же время в листинге Вашей программы сказано, что таймер обрабатывается 1 раз в секунду. Какой все же период обработки 5 или 1 сек.?
2) Что передается в идентификаторах "Chanel.Text", "Edit1.Text" и "Edit2.Text"?

Относительно oddsetup.exe - теперь регистрация драйвера ODBC производится в утилите регистрации tmreg.exe - в соответствующем разделе.

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


Icon 3 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Попробуйте следующий код заключить в процедуру и выполнить без использования таймера (например, по нажатию кнопки), и засечь время на входе и выходе из данной процедуры. Есть предположение, что проблема в таймере Delphi.
code:
var
InfoKalor,InfoPr,InfoDom:PChar;
s,s1,s2:String;
begin
InfoKalor:=Client.RequestData(Chanel.Text);
InfoPr:=Client.RequestData(Edit1.Text);
InfoDom:=Client.RequestData(Edit2.Text);
s:=StrPas(InfoKalor); s1:=StrPas(InfoPr); s2:=StrPas(InfoDom);
WriteLn(DataFile,TimeToStr(Now),' ',S,' ',S1,' ',S2);
end;


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


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Попробуйте выключать таймер во время обмена по DDE следующим образом:
code:
 
If not Client.SetLink('RTM1','Get') or not Client.OpenLink

// НОВАЯ ПРОЦЕДУРА
Procedure RequestTMData;
var
InfoKalor,InfoPr,InfoDom:PChar;
s,s1,s2:String;
endoftimer:boolean;
begin
InfoKalor:=Client.RequestData(Chanel.Text);
InfoPr:=Client.RequestData(Edit1.Text);
InfoDom:=Client.RequestData(Edit2.Text);
s:=StrPas(InfoKalor); s1:=StrPas(InfoPr); s2:=StrPas(InfoDom);
WriteLn(DataFile,TimeToStr(Now),' ',S,' ',S1,' ',S2);
endoftimer:=true;
end;

//ОСНОВНАЯ ПРОГРАММА - ОБРАБОТКА КНОПКИ "СВЯЗЬ":
begin
Button1.Enabled:=False; //Запрет нажатия кнопки "Связь"
AssignFile(DataFile,'Chanel.txt');
Rewrite(DataFile);//Открытие файла для записи запрашиваемых данных
endoftimer:=true;
Timer1.Enabled:=True;//Запуск таймера
end


//ОБРАБОТЧИК СОБЫТИЙ OnTimer:
If endoftimer then
begin
endoftimer:=false;
RequestTMData;
end;
end;


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


Icon 1 отправлено / posted      Профиль для / Profile for Y.Filippov           Редактировать/удалить сообщение / Edit/Delete Post 
Здравствуйте!
1) Что касается периода опроса - это не принципиально, пусть будет 1 сек.;
2) В свойствах "*.Text" передаются имена каналов;
3) Попробовал на ТМ 5.10 (и по таймеру и по кнопке) ситуация следующая:
Время запроса/Длительность запроса, мс
15:31:39 110
15:31:40 210
15:31:41 310
15:31:42 411
15:31:43 511
15:31:44 60
15:31:45 161
15:31:46 260
15:31:47 361
15:31:48 460
15:31:49 10
15:31:50 110
15:31:51 210
15:31:52 311
15:31:53 410
15:31:54 511
15:31:55 60
15:31:56 160
15:31:57 260
15:31:58 361
15:31:59 460
15:32:00 10
Таким образом время запроса уменьшилось (кстати, теперь оно не зависит от количества каналов, но по-прежнему - обратите внимание! - меняется циклически), но в варианте "RTM-Excel-Delphi" оно равно 0! (изредка наблюдается 10мс)
Могу предположить, что от таймера Delphi ничего не зависит...

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


Icon 2 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post 
Что касается цикличности - вполне объяснимо, дело в том, что обработкой запросов DDE сервер ТМ занимается по циклам пересчета базы узла. У Вас наверно для МРВ стоят стандартные 550 мс - это видно, из Ваших результатов - не один таймаут не превышает значение 550 мс. Попробуйте увеличить скорость пересчета в ТМ.
Сообщения / Posts 17083 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

   Закрыть тему / 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