скоросной таймер, задержки в милисикундах delphi XP

создание собственных программ управления станком, управление LPT

Модераторы: Ruz_and, Master-VRI, al-drw, Мастак

Master-VRI
Site Admin
Site Admin
Сообщения: 929
Зарегистрирован: Пн ноя 10, 2008 00:00

скоросной таймер, задержки в милисикундах delphi XP

Сообщение Master-VRI » Вт май 24, 2011 20:00

При программировании LPT требуются задержки между импульсами менее 40 милисекунд (40 мс мин дает стандартный таймер)

я использовал скоросной "счетчик"
спросите у яндеска "QueryPerformanceCounter"

это пример.

Код: Выделить всё


 // Global Variables, Globale Variablen:

  t1, t2, Res: TLargeInteger;
   bOk: BOOL;

 implementation

 uses Windows, dialogs;

 procedure StartTimer;
 begin
   bOK := QueryPerformanceFrequency(Res);
   if bOK then
     QueryPerformanceCounter(t1);
 end;

 procedure StopTimer;
 begin
   if bOK then
     QueryPerformanceCounter(t2);
 end;

 procedure LoopRoutine;
 var
   iCounter: integer;
 begin
   StartTimer;
   // Put here some kind of loop: For, While or Repeat
  for i := 0 to iCounter do...
   { WHILE....
   repeat...until}
   { After the Loop/
   Nach Abschluss der Schleifenroutine:}
     if bOK then
       QueryPerformanceCounter(t2);
 end;

 procedure StartSchleife;
 begin
   LoopRoutine;
   if bOK then
     {$IFDEF VER80}
     // Show the elapsed time:
    MessageDlg(Der Schleifendurchlauf dauerte:  + Format(\%g Sekunden.,
       [(t2.QuadPart - t1.Quadpart) / Res.QuadPart]));
   $Else {$IFDEF VER120}
   MessageDlg(Der Schleifendurchlauf dauerte:  + Format(\%g Sekunden.,
     [(t2 - t1) / Res]));
   {$ENDIF}
 end;

gumel
Сообщения: 17
Зарегистрирован: Ср май 04, 2011 17:54

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение gumel » Пн май 30, 2011 20:29

пока не читал про QueryPerformanceCounter.

я бы делал бесконечный цикл, в цикле смотрел GetTickCount и в зависимости от натикавшего времени делал определенные действия. GetTickCount с каждой секундой вырастает на 1000.

набросал маленькую прогу для тестирования стандартного таймера через GetTickCount:

На форму кидаем таймер и две кнопки. В разделе private формы объявляем переменные:

Код: Выделить всё

  private
    ...
    { Private declarations }
    count, tickcount: Cardinal;
    stop: Boolean;
    ...


потом делаем обработчики событий:

Код: Выделить всё

procedure TForm1.FormCreate(Sender: TObject);
begin
  Timer1.Enabled := False;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Caption := IntToStr(GetTickCount - tickcount) +   + IntToStr(count);
  count := 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption := -start;
  Timer1.Enabled := True;
  tickcount := GetTickCount;
  stop := False;
  repeat
    Inc(count);
    Application.ProcessMessages;
  until stop;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Caption := -stop;
  Timer1.Enabled := False;
  stop := True;
end;


В общем при запуске, нажав на кнопку1 включается таймер и через секунду (по умолчанию Interval таймера = 1000) в заголовке окна выводится информация о натикавшем времени через GetTickCount, а также о натикавшем значении переменной count, которая растет в бесконечном цикле в течении интервала таймера.

При нажатии на кнопку2 останавливается таймер и происходит выход из бесконечного цикла.

В итоге. При значении интервала таймера 1000 мс тиканье происходит довольно стабильно. Значения GetTickCount соответствуют действительности. Если же интервал стандартного таймера уменьшить, то он "поплывет" и будет гнать. Поэтому мой вывод такой: Лучше смотреть за tickcount, если его мало, то за count (см. текст программы).
______________________________________

А сколько вообще способен LPT порт передать сигналов в секунду? Ну или как правильней спросить... Ну вы меня поняли ))) И сколько ШД может принять?

Master-VRI
Site Admin
Site Admin
Сообщения: 929
Зарегистрирован: Пн ноя 10, 2008 00:00

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение Master-VRI » Вт май 31, 2011 10:16

я делаю почти также. это тоже счетчик. надо проверять его значение.
пока отличий не обнаружил. но на днях проверю.
спасибо

gumel
Сообщения: 17
Зарегистрирован: Ср май 04, 2011 17:54

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение gumel » Ср июн 01, 2011 15:49

Буквально сейчас разговаривал на работе с электронщиками. В общем, они мне сейчас начали паять платку для управления одного ШД через LPT порт. Как будет все готово, буду проводить эксперименты в Delphi. Также они мне сказали что дадут осциллограф (ни разу им не пользовался :) ). Как будет результат, то обещаю поделиться.

Master-VRI
Site Admin
Site Admin
Сообщения: 929
Зарегистрирован: Пн ноя 10, 2008 00:00

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение Master-VRI » Ср июн 01, 2011 18:44

Просьба создать тему под ваши эксперименты, так будет интереснее следить.

ВЛАД
Сообщения: 12
Зарегистрирован: Пт июн 17, 2011 22:05

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение ВЛАД » Вс июн 26, 2011 18:36

Я прбовал на VB6, никакие таймеры не удовлетворяют. остановился на калибровке .
с помощью GetTickCount измеряю длительность ста циклов вывода в LPT порт бита данных и строба записи, задержка обычным циклом. конечное значение цикла задержки меняется пока длительность замеренная GetTickCount не станет 100 мс. Погрешность установки скорости вывода в порт при низких скоростях (< 20 Гц 2-3%) на высоких (300 Гц -1 КГц) -10-15%. Но я думаю, что выше уже и не надо. При испытаниях шаговиков ни один из них выше 300 Гц без нагрузки устойчиво не работал. Пробную программу выложил на форуме тема Управление ШД с через LPT на VB6

Аватара пользователя
Horeen
Сообщения: 1905
Зарегистрирован: Сб янв 16, 2010 00:00

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение Horeen » Вс июн 26, 2011 19:33

При испытаниях шаговиков ни один из них выше 300 Гц без нагрузки устойчиво не работал.
Ничего удивительного. Можно сказать, что результат - ниже плохого. Нагружение вала частично сглаживает неравномерность. Всё это стало следствием:
Погрешность установки скорости вывода в порт ......... на высоких (300 Гц -1 КГц) -10-15%
По-хорошему, следует над этим ещё поработать, если желание не прошло.

ВЛАД
Сообщения: 12
Зарегистрирован: Пт июн 17, 2011 22:05

Re: скоросной таймер, задержки в милисикундах delphi XP

Сообщение ВЛАД » Вс июн 26, 2011 19:57

В принципе я эту программку делал, чтобы собрать и поэкспериментировать над контроллером. Все что нужно для настройки контроллера и проверки шаговика она делает. Если на следующей неделе опять будут дожди, то наверное что-то добавлю. Проблема еще в том, что последний раз писал программы восемь лет назад и немного подзабыл все.


Вернуться в «програмирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость

cron