|
고영문 님이 쓰신 글 :
: 홍성진 님이 쓰신 글 :
: : 고영문 님이 쓰신 글 :
: : :
: : : if( wctime <= 10)
: : : {
: : : Chart1->Series[0]-> AddXY(wctime,y[1],"",clYellow);
: : : Chart1->Series[1]-> AddXY(wctime,y[0],"",clBlue);
: : : }
: : : else
: : : {
: : : tmpX1 = Chart1->Series[0]->XValues->Value[(int)wctime] - Chart1->Series[0]->XValues->Value[(int)wctime-1];
: : : tmpX2 = Chart1->Series[1]->XValues->Value[(int)wctime] - Chart1->Series[1]->XValues->Value[(int)wctime-1];
: : :
: : : Chart1->Series[0]->Delete(0);
: : : Chart1->Series[1]->Delete(0);
: : : Chart1->Series[0]->AddXY(wctime+tmpX1, y[1], "", clYellow); // Chart1->Series[0]->XValues->Last()
: : : Chart1->Series[1]->AddXY(wctime+tmpX2, y[0], "", clBlue); // Chart1->Series[0]->XValues->Last()
: : : }
: : :
: : : 위의 코드는 제가 실험에 사용하고 있는 for문 안에서 실행되고 있고 여기에서 에러가 나타납니다. 그래프
: : :
: : : 는 잘그려지구요.,wctime = 샘플링하고 있는 현재 시간입니다. 물론 double형이구요.
: : :
: : : 그런데 어느 정도 시간이 되면 아래와 같은 error가 뜹니다. 도통 무슨 말인지 어디가 잘못되었는지 이해
: : :
: : : 가 가질 않는군요. 여기 Q&A에 TList error에 대해 있어서 봤지만 무슨 말인지 이해가 안갑니다. 어케 해결
: : :
: : : 을 해야 하는지 ...큰일임돠..급한데..고수님덜의 현명한 방법을 배우고자 합니다.
: : :
: : : "Project FineProjcet.exe raised exception class TListError with message'List index out of bounds(521)'
: : :
: : : 521은 시간( 배열일 수 도있구요..)입니다. 이 값은 300에서 발생할 수도 있고 왔다갔다 합니다.
: :
: : 안녕하세요..홍성진 입니다.
: :
: : 님께서 말씀하신 에러는 허용되지 않은 범위를 접근해서 그런겁니다.
: : 예를들면, TList의 count가 10개일때, List1->Items[10]; 이런식으로 접근하면
: : 위와같은 에러가 나겠지요...TList는 0부터 시작하니까요.
: :
: : 만약에 님께서, TList 아이템에 대해 추가, 삭제가 빈번이 일어난다면, 동기화를
: : 잘 맞춰주셔야 할겁니다.
: :
: : 그런오류를 없애는 쉬운 방법은 항상 값을 액세스 하기전에 사용하려는 인덱스가
: : TList의 count범위안에 드는지 먼저 확인하고 접근하세요...
: :
: : 다른 방법으로 예외처리도 있구요..
: :
: : 좋은결과 있으시길 바랍니다..
: : 그럼...
: :
: //////////////////////////////////
: ㅠ.ㅠ 무슨 말인지는 대충 이해는 하겠는데 해결방법은 어케 해야되는지....제가 내공이 약해서리...오늘 까지 해결해야 되는데 큰일입니다.
: 위의 코드는 10초 이후부터 그래프가 좌측으로 밀리면서 항상 10초정도의 데이터를 그래프로 그리고 있읍니다. 예외처리는 어케해야 되는지...가능하다면 코드로 표현해주셨으면 고맙구요...
///////////////////////////////////
여러분들의 성의있는 답변으로 큰 도움을 받았습니다. 결국 count()라는 함수로 배열의 수를 확인했구요.
아래 코드가 해결한 코드입니다.
if( wctime <= 10)
{
Chart1->Series[0]-> AddXY(wctime,aivolt,"",clYellow);
Chart1->Series[1]-> AddXY(wctime, u ,"",clRed);
Chart1->Series[2]-> AddXY(wctime,y[0],"",clGreen);
}
else
{
Chart1->Series[0]->Delete(0);
Chart1->Series[1]->Delete(0);
Chart1->Series[2]->Delete(0);
Chart1->Series[0]->AddXY(wctime, aivolt, "", clYellow); // Potentiometer output line
Chart1->Series[1]->AddXY(wctime, u, "", clRed); // Controller output line
Chart1->Series[2]->AddXY(wctime, y[0], "", clGreen); // Sag line
}
|