Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
День добрый! Объясните, пожалуйста, следующую ситуацию: Win-приложением (Delphi) раз в 5 сек. осуществляется DDE-опрос трех каналов (в режиме Request) при этом суммарное время опроса достигает 1.5 сек. (Время опроса увеличивается с увеличением кол-ва каналов, например, для пяти составляет 2.5 сек.) В то же время, если опрос осуществлять по схеме RTM - Excel - Delphi, он происходит мгновенно независимо от кол-ва опрашиваемых каналов. В чем тут дело?
Сообщения / Posts 144 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
А как Вы реализовали опрос по DDE в приложении на Delphi?
Естественно, через DdeClientConv: SetLink('RTM1','GET') и RequestData(Chanel.Text) (по событию OnTimer с частотой 5 сек.).
Сообщения / Posts 144 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
И он каждый раз инициализирует указатель на сервер и топик через SetLink('RTM1','GET')? Попробуйте делать это один раз, а в цикле таймера только опрашивать сервер по RequestData(Chanel.Text).
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
И он каждый раз инициализирует указатель на сервер и топик через SetLink('RTM1','GET')? Попробуйте делать это один раз, а в цикле таймера только опрашивать сервер по RequestData(Chanel.Text).
отправлено / posted
### Нам необходимо время на проверку данной ситуации. Ответ мы сообщим позже в форум и на Ваш E-mail.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
Нам необходимо время на проверку данной ситуации. Ответ мы сообщим позже в форум и на Ваш E-mail.
отправлено / posted
Срок к сожалению уточнить пока нельзя - у нас нет специалистов на Delphi для быстрой проверки данной ситуации. Если это возможно - не могли бы Вы прислать нам код Вашего приложения для проверки данной ситуации? А также сообщить - какую версию Delphi вы используете?
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
Почтой отправить не удалось. (Не пропускает прокси сервер) Высылаю фрагмент кода... Обработчик нажатия кнопки "Связь": 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 |
отправлено / posted
1) Вы указали, что опрос ведется раз в 5 секунд по таймеру и в то же время в листинге Вашей программы сказано, что таймер обрабатывается 1 раз в секунду. Какой все же период обработки 5 или 1 сек.? 2) Что передается в идентификаторах "Chanel.Text", "Edit1.Text" и "Edit2.Text"?
Относительно oddsetup.exe - теперь регистрация драйвера ODBC производится в утилите регистрации tmreg.exe - в соответствующем разделе.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Попробуйте следующий код заключить в процедуру и выполнить без использования таймера (например, по нажатию кнопки), и засечь время на входе и выходе из данной процедуры. Есть предположение, что проблема в таймере 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;
отправлено / posted
Попробуйте выключать таймер во время обмена по 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;
Y.Filippov
Forum Haunter / Завсегдатай форума
Участник № / Member № 479
отправлено / posted
Здравствуйте! 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 |
отправлено / posted
Что касается цикличности - вполне объяснимо, дело в том, что обработкой запросов DDE сервер ТМ занимается по циклам пересчета базы узла. У Вас наверно для МРВ стоят стандартные 550 мс - это видно, из Ваших результатов - не один таймаут не превышает значение 550 мс. Попробуйте увеличить скорость пересчета в ТМ.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |