Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 15:54   #1
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию Delphi: перегружается TChart

Здравтсвуйте!
При большых значениях данных и скоростях опроса TChart программа закрывается или, если запущена в Delphi, выдает ошибку:
Цитата:
Проект viR.exe вызвал исключение класса Е Access Violation с сообщением 'Access violation at address 0046E8D7 In module 'VIR.exe'. Write of address 009A4000'. Процесс остановлен. Используйте Шаг или Запуск для продолжения.
Причем, если прорисовываемое значение примерно 5000,000, то все нормально, но при приближении к 10000,000 получается та ошибка.
Все это получается при периоде опроса АЦП и соответственно прорисовке на графике, равном 1-10мс.
Может кто подскажет как разгрузить процедуру TChart, чтобы она не глюкала?
Вот код:
Код:
{Преобразование полученных данных}
procedure TForm1.ReadTimerTimer(Sender: TObject);
var
KP:real;
B:Byte; CurrentState:TComStat;
AvaibleBytes, ErrCode: Cardinal;

begin
 {Получаем состояние порта }
 CurrentState:= FPort.GetState(ErrCode);
 {Отображаем число полученных, но еще не прочитанных байт}
 AvaibleBytes:= CurrentState.cbInQue;
 {Получаем значение множителя}
 KP:=StrToFloat(KPEdit.Text);
  If AvaibleBytes > 0 then begin
   If FPort.ReadByte(B) then begin { получение байта }
     if (B and 64)=0 then begin
       if (B and 128)=0 then
         begin
           dta1:=(B and 63);
           flag:=1;
         end

       else if flag=1 then
              begin
                dta2:=(B and 63);
                dta:=dta1+dta2*64;
                flag:=0;
                U:=KP*dta;  //Пересчёт весового кода с учётом коэф. поправки

                {Прорисовка значений}
                Form1.Memo1.Lines[k]:=FloatToStrF(U,ffFixed,7,3);
                Memo1.Lines.Add('');
                {Прорисовка графика}
                Form1.Series1.AddXY(k*dTme,U);
                k:=k+1;
              end
     end
   else   if (B and 4)=4 then begin  //Успешное окончание измерения
                           FPort.StateRTS(1);
                           SwitchLed1.ledState:=ledOn;
                           Play.Enabled := Active;
                           Edit1.Enabled := Active;
                           Edit2.Enabled := Active;
                           Edit3.Enabled := Active;
                           Stop.Enabled := not Active;
                           Init.Enabled := Active;
                           GroupBox3.Enabled := Active;
                           end
  else SwitchLed2.ledState:=ledOff;

  //else   if (B and 8)=8 then Label2.Caption:='АЦП не отвечает'
  //else  Label2.Caption:='Неизвестная ошибка';



  End;
 End;
end;
WandererX вне форума Ответить с цитированием
Старый 06.06.2010, 16:28   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

есть такой fix... побороть можно двумя путями:
1- уйти от tchart к другим, к примеру GraphicsM (но тоже меру нужно знать )
2- не перегружать и подчищать старые данные, ограничив кол-во точек 5000

p.s.: та же проблема и в трендах SCADA, там при "большом" кол-ве точек идут тормоза и там вовсе не tchart ...решается проблема созданием плавающего окна и ограничением-прореживанием количества выводимых точек, если идет весь период просмотра
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 06.06.2010, 17:58   #3
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию

Я немного с выводами поспешил - частота опроса вроде и не причем. Имеют значение только прорисовываемые значения).
К другому компоненту переходить уже поздно - скоро защита.
Пришлось ограничить значение множителя в программе.
WandererX вне форума Ответить с цитированием
Старый 06.06.2010, 18:51   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

- удалить -
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 06.06.2010 в 19:07.
raxp вне форума Ответить с цитированием
Старый 06.06.2010, 18:51   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

если вы не заметили, речь и шла о количестве отображаемых точек
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi.TCHART.Не могу построить диаграмму Mazyrik Помощь студентам 0 23.05.2010 22:01
Объединение двух Tchart в один (Delphi) Николай ПН Помощь студентам 5 18.03.2010 22:57
TChart nataly60 Помощь студентам 1 06.06.2008 19:13
Tchart Droid Общие вопросы Delphi 9 27.05.2008 20:38