Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.03.2011, 17:47
serega8623 serega8623 вне форума
Прохожий
 
Регистрация: 19.03.2011
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Самописец (осциллограф)

Здравствуйте господа!
Прошу вашего совета по следующей проблеме. Имеется измерительное оборудование, подключенное к ПК через com порт, есть функции обращения к нему (с Delphi). Необходимо написать программку-самописец, которая будет показывать изменения параметров во времени, причем скорость опроса должна быть не менее 30 опросов в секунду.
Я пробовал писать через таймер
(выглядит все примерно так
procedure TForm1.Timer1Timer(Sender: TObject);
begin
//Функция опроса
//Рисование графика
end;
, но он мерял промежутки времени достаточно не точно, причем при значении interval<50 срабатывал не более 18-20 раз в секунду. Пробовал через мультимедийный таймер, там часто вылетала ошибка доступа к памяти. Пробовал через бесконечный цикл с sleep в конце, так же более 20 опросов в сек получить не удалось(((
Каким еще образом можно решить эту задачу????

Последний раз редактировалось serega8623, 19.03.2011 в 17:52.
Ответить с цитированием
  #2  
Старый 20.03.2011, 10:04
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Может порт тормозит?
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #3  
Старый 20.03.2011, 13:01
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Что за измерительный прибор? Желательно его название и модель.

Замерьте, сколько по времени отрабатывает одно измерение используя функцию GetTickCount.

Какие настройки COM порта использует измерительный прибор, к примеру, если скорость обмена будет 1200 бит/сек, то 30 запросов в секунду вы не сделаете, для этого если имеется такая функция у прибора, ставить его на постоянную отдачу данных, и постоянно слушать порт и выводить результаты, но это зависит от прибора и от модели.
Ответить с цитированием
  #4  
Старый 20.03.2011, 14:46
serega8623 serega8623 вне форума
Прохожий
 
Регистрация: 19.03.2011
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Стоит контроллер I-8811 в нем модуль I-8017-16 аналоговых каналов. Скорость порта 115200.
Вот код опроса:
Код:
     if bComOpen then  // Reopen Com port
     begin
        Close_Com(gcPort);
        bComOpen := False;
     end;

     if Not bComOpen then
        OpenCom;
     if Not bComOpen then exit;

    gw7000[0] := Word(gcPort);         // COM Port
    gw7000[1] := StrToInt('$' + Address.Text); // Module Address
//  gw7000[2] := 65536; // Module ID

    gw7000[2] := StrToInt('$' + TypeComboBox.Text ); // Module ID

    If RadioButton1.Checked Then
        gw7000[3] := 1     // CheckSum Enable
    Else
        gw7000[3] := 0;

    gw7000[4] := 10;     // TimeOut = 0.01 second
    gw7000[5] := 0;
    gw7000[6] := 1;       // string debug
    gw7000[7] := StrToInt(Edit3.Text ); // Module ID

    wRet := AnalogIn_8K(@gw7000[0], @gf7000[0], gszSend, gszReceive);

    If wRet <> 0 Then
    Begin
        Beep;
        Application.MessageBox( PChar('The Error Code:' + IntToStr(wRet) + #13 + IGetErrorString(wRet))
                                , 'AnalogIn() error !!! ' , mb_IconExclamation );
        Close_Com (gcPort);
    end;

    If gw7000[6] = 1 Then
    Begin
        Edit1.Text := gszSend;
        Edit2.Text := gszReceive;
    End;
    Beep;
Админ: Пользуемся тегами для офрмления кода!

Функция возвращает значения в gszReceive в формате >+00.000+00.000+00.000...+00.000 так 16 каналов.

Последний раз редактировалось Admin, 20.03.2011 в 16:53.
Ответить с цитированием
  #5  
Старый 20.03.2011, 15:05
serega8623 serega8623 вне форума
Прохожий
 
Регистрация: 19.03.2011
Сообщения: 3
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Время одного опроса я измеряю и позже напишу.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:15.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter