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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2010, 16:44   #1
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию Почему ошибка 'List index out of bounds (0)'?

Здравствуйте!
Есть программа для опроса МК, к которому подключен АЦП. При больших значениях измерения и малых периодах между ними происходит ошибка:
Цитата:
исключение класса EListError с сообщением 'List index out of bounds (0)'
При этом измерения идут нормально на фоне окна с ошибкой и при закрытии окна с ее сообщением программа работает дальше.
Как я понял, это связано с ресурсоемкостью процесса прорисовки графика компонентом TChart, но никак не получается убрать эту ошибку.
Вызывает подозрение процедура TForm1.ReadTimerTimer и TForm1.PlayClick.
Может кто-нибудь сможет мне помочь? Помогите, пожалуйста, т.к. в программировании я новичок.
Вот файл с основным кодом:
Вложения
Тип файла: txt UNIT1.txt (10.3 Кб, 155 просмотров)

Последний раз редактировалось WandererX; 18.06.2010 в 16:52.
WandererX вне форума Ответить с цитированием
Старый 18.06.2010, 16:54   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

оч. Смешно.
На какой строке ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2010, 17:00   #3
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

В строке 171 может быть идет обращение к 0-й строке Memo1 ?
А этого не должно быть !
Код:
Form1.Memo1.Lines[k]:=FloatToStrF(U,ffFixed,7,3);
При первом проходе таймера ...
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Старый 18.06.2010, 17:03   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
может быть идет обращение к 0-й строке Memo1 ?
В Мемо есть нулевая строка Конечно если оно не пустое
Другое дело что нужно проверки ставить
if (k>=0)and(k<ЧеттамтипаTStrings.Coun t) then Form1.Memo1...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.06.2010, 17:06   #5
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
оч. Смешно.
На какой строке ошибка?
Если бы я знал в какой строке ошибка, то может и не спрашивал бы
Скорее всего в TForm1.ReadTimerTimer... Делфи выдает в отладчике код в асемблере и в нем я понять не могу Может TChart не успевает принимать данные?
Цитата:
{Преобразование полученных данных}
procedure TForm1.ReadTimerTimer(Sender: TObject);
var
B:Byte; CurrentState:TComStat;
AvaibleBytes, ErrCode: Cardinal;

begin
{Получаем состояние порта }
CurrentState:= FPort.GetState(ErrCode);
{Отображаем число полученных, но еще не прочитанных байт}
AvaibleBytes:= CurrentState.cbInQue;

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;
End;
End;
end;
WandererX вне форума Ответить с цитированием
Старый 18.06.2010, 17:20   #6
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

А точку остановки не пробовали ставить?
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 18.06.2010, 17:30   #7
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
В Мемо есть нулевая строка Конечно если оно не пустое
Другое дело что нужно проверки ставить
if (k>=0)and(k<ЧеттамтипаTStrings.Coun t) then Form1.Memo1...
А в каком смысле "пустое"? И для чего проверка? TStrings.Count - это какое значение?
Может быть ошибка из-за некорректного значения 0-ого измерения? Там же это значение может быть остатком от прошлого процесса измерения и АЦП его передает при начале нового из своего буфера...
WandererX вне форума Ответить с цитированием
Старый 20.06.2010, 11:17   #8
WandererX
Пользователь
 
Регистрация: 08.04.2010
Сообщений: 11
По умолчанию

Точку остановки пробовал ставить, но это ничего не дало... Ошибка появляется именно в процессе непрерывной работы. И проверку вставлял
Код:
if (k>=0)
и задержки в разных местах кода...
Причем ошибки нет если закомментировать
Код:
Form1.Series1.AddXY(k*dTme,U);
, т.е. Memo1 не при чем. Когда строчка работает и ошибка не выскакивает, заполнение Memo1 значениями идет с тормозами в течение первых 5-и значений где-то, а потом нормально. Выскакивает она сейчас обычно после принудительной остановки и закрытия порта (это нужно для прерывания получения данных из буфера), его открытия и повторного запуска процесса измерения.
Такое ощущение, что какое-то значение от порта некорректное приходит в начале при большой частоте опроса. Прикрепил его модуль. Уже не знаю что делать Где еще может быть проблема?
Вложения
Тип файла: txt ComPort.txt (8.5 Кб, 140 просмотров)
WandererX вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка List Index out of bounds Rapala Помощь студентам 1 03.05.2010 17:33
Ошибка List index of bounds(1) Blue Heron Помощь студентам 5 17.03.2010 00:38
ошибка:List index out of bounds tanek Помощь студентам 7 26.12.2009 20:38
Табулирование функции. Ошибка 'List index out of bounds(0)' Мэр Общие вопросы Delphi 2 03.06.2009 09:11
Ошибка List index out of bounds(0) при использовании запроса AdoQuery ArtInt БД в Delphi 14 15.04.2009 18:35