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

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

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

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

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

Сообщение magnuz »

Используется пакет PascalSCADA. По таймеру в modbus-узел посылаются время и дата ежесекундно. Но прога становится сильно неповоротливой, вкладки не откликаются. Сделал таймер enabled=false стало нормально откликаться и пр. Как решить проблему. Поможет ли многопоточность?
Аватара пользователя
qivi
энтузиаст
Сообщения: 703
Зарегистрирован: 19.01.2009 12:45:54
Откуда: Россия

Сообщение qivi »

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

Сообщение magnuz »

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

Ежесекундно и ежестасекундно
mig-31
постоялец
Сообщения: 224
Зарегистрирован: 14.07.2011 13:46:48

Сообщение mig-31 »

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.
serg_iv
постоялец
Сообщения: 276
Зарегистрирован: 15.10.2005 18:45:46
Откуда: Миасс

Сообщение serg_iv »

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

у меня лично работа с модбасом вынесено в отдельный поток.
Ответить