Таймер замедляет работу программы

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Таймер замедляет работу программы

Сообщение magnuz » 25.10.2013 15:19:31

Используется пакет PascalSCADA. По таймеру в modbus-узел посылаются время и дата ежесекундно. Но прога становится сильно неповоротливой, вкладки не откликаются. Сделал таймер enabled=false стало нормально откликаться и пр. Как решить проблему. Поможет ли многопоточность?
magnuz
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.10.2013 10:19:10

Re: Таймер замедляет работу программы

Сообщение qivi » 25.10.2013 16:23:20

Ежесекундно или ежемилисикундно?
Аватара пользователя
qivi
энтузиаст
 
Сообщения: 703
Зарегистрирован: 19.01.2009 13:45:54
Откуда: Россия

Re: Таймер замедляет работу программы

Сообщение magnuz » 25.10.2013 16:33:21

qivi писал(а):Ежесекундно или ежемилисикундно?

Ежесекундно и ежестасекундно
magnuz
незнакомец
 
Сообщения: 4
Зарегистрирован: 13.10.2013 10:19:10

Re: Таймер замедляет работу программы

Сообщение mig-31 » 25.10.2013 20:36:38

Application.ProcessMessages; добавить.
Но если у вас несколько устройств на линии RS-485, так время отклика может быть до 250 мс на одно устройство (зависит от пропускной способности линии). Так, что вполне может быть, что за одну секунду таймер не выполниься.

Если у вас у PLCTag свойства AutoRead, AutoWrite настроены на True, тогда создаеться поток, который атоматически обрабатывает запросы. HMIEdit или HMILabel подключаете к PLCTag и данные читаються или записываться автоматически.
Для обработки в таймере вам необходим такой код:
Код: Выделить всё
i:=0;
repeat
  PLCTagNumber1.Read;
  inc(i);
  if i=<кол. попыток> then begin
    //обработка таймаута
    break;
  end;
  Application.ProcessMessages; //обеспечит реакцию приложения на действия пользователя //используеться когда быстродействие не так важно, иначе поток
until PLCTagNumber1.LastAsyncStatusRead=ioOk;


в Thread.Execute:
Код: Выделить всё
i:=0;
repeat
  PLCTagNumber1.Read;
  inc(i);
  if i=<кол. попыток> then begin
    //обработка таймаута
    break;
  end;
until PLCTagNumber1.LastAsyncStatusRead=ioOk;


В случае с таймером нельзя забывать, что он не гарантирует обработку за Time.
mig-31
постоялец
 
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Re: Таймер замедляет работу программы

Сообщение serg_iv » 26.10.2013 13:43:25

magnuz писал(а):Используется пакет PascalSCADA. По таймеру в modbus-узел посылаются время и дата ежесекундно. Но прога становится сильно неповоротливой, вкладки не откликаются. Сделал таймер enabled=false стало нормально откликаться и пр. Как решить проблему. Поможет ли многопоточность?

у меня лично работа с модбасом вынесено в отдельный поток.
serg_iv
постоялец
 
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс


Вернуться в Lazarus

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

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

Рейтинг@Mail.ru