|
c++왕초보자 질문좀 받아주세요
Button3를 누르면 계측기로 명령어가 입력되어 rx부분에서 수신받아 LoadGrid함수를 불러 StringGrid에 뿌려지는 소스인대요
StringGrid에 뿌려지는 걸 확인해보면 Read부분에서 아주잠깐 지연시간을 주면 정상적으로 계측기의 값이 입력됩니다.
지연시간을 없에버리면 숫자가 한개씩입력되거나 아예 입력이 안됩니다.
breakPoint를 주고 확인해보면 breakpoint때문인지 정상적으로 입력이 됩니다.
그래서 다른분들의 조언을 들어 Rx부분 Count가 충분히 되었는지 확인하기위해 buff에 E가 입력될시 함수 호출하는 식으로 수정을 했는데 이번엔 Sleep을 해주면 정상출력되고 Sleep을 제거하면 E만 출력됩니다. ㅜ.ㅜ 너무 답답해서 조언을 구합니다.
질문1: Count가 충분한지 확인하려면 어떤식으로 수정을 해야할까요?
질문2: Count로 확인하지않고 buff에 문자열이 다들어왔는지 확인하기위해선 어떤식으로 수정해야할까요?
질문3: 문자열에 ETX까지 입력되었는지 확인하기위해선 어떻게해야할까요?
전송방식은 rs232 LF입니다.
메모 부분은 그냥 확인하기 위해 만든거라 무시하셔도됩니다.
double voltage;
AnsiString ConVolt;
char strr[200];
void __fastcall TForm1::Button3Click(TObject *Sender)
{
ComPort2->Open();
sprintf(strr,"MEAS:VOLT:DC?%c",0x0a);
ComPort2->Write(strr,StrLen(strr));
}
void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
{
char buff[100];
memset(buff,0,sizeof(buff));
for(int i=0;i<Count;i++){
ComPort2->Read(buff,Count);
Memo2->Lines->Add(buff);
if(strstr(buff,"E")!= NULL){
voltage = atof(buff);
ConVolt = FloatToStr(voltage).sprintf("%.3f",voltage);
LoadGrid();
}
}
}
|