|
voltage 를 정수형으로 하시면 안됩니다.
키슬리 2000 모델은 응답값을 아스키형식의 더블형으로 보냅니다.
ComPort2->Read(strbuff,Count);
--> ComPort2->Read(strbuff,200);
이부분에서 Count 는 strbuff의 크기를 주세요..
Read 함수의 Count는 수신버퍼의 데이타를 메모리로 옮겨올때 메모리 버퍼의 크기를
알려 주는 파라메터 입니다.
그리고 Read 함수 다음에 sleep(1)을 필요없습니다. 에러가 난 이유는 sleep 가 아니라 Sleep를
쓰셔야 할듯
수신된 데이타가 10개인데 메모리버퍼를 5개만 하면 5개만 버퍼로 옮겨오고 5개는 옮겨오지 않습니다.
가능하면 수신된 데이타보다 큰 버퍼를 잡은 후 수신된 데이타수보다 큰 값을 써 주세요..
앱돌이 님이 쓰신 글 :
: rs232로 계측기 KEITHLY2000과 통신중입니다.
:
:
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:
:
: AnsiString result;
: FILE *fp;
: char str1[200];
: ComPort2->Open();
: sprintf(str1,"MEAS:VOLT:DC?%c",0x0a);
: ComPort2->Write(str1,StrLen(str1));
:
:
: /////////////바로 밑에 Stringgrid로 뿌려지게 만들었습니다./////////////////
: }
: void __fastcall TForm1::ComPort2RxChar(TObject *Sender, int Count)
: {
:
: char strbuff[200];
:
: memset(strbuff,0,Count);
:
: ComPort2->Read(strbuff,Count);
: sleep(1);
:
: voltage = atof(strbuff);
:
:
:
: }
: voltage는 전역으로 int형입니다.
: 이렇게 작성하였는데요
:
: StringGrid에 0이 먼저 입력되고 그다음에 button3를 한번더 눌렀을때 측정값이 입력됩니다.
:
: 혹시나 하여 rx부분에 한줄간격으로 ShowMessage를 넣었더니2바퀴도는걸 확인했습니다
:
: void __fastcall TForm1::Button3Click(TObject *Sender)
: {
:
:
: AnsiString result;
: FILE *fp;
: char str1[200];
: ComPort2->Open();
: sprintf(str1,"MEAS:VOLT:DC?%c",0x0a);
: ComPort2->Write(str1,StrLen(str1));
: <---------------------------이곳에 ShowMessage를 넣었더니 0이 사라지고 정상적으로 입력이 되었습니다.
: 질문 1: ShowMessage를 없에고 싶은대 어떻게해야할까요?
: 질문 2: sleep(1)을 넣었더니 [C++ Warning] test.cpp(163): W8053 'sleep(unsigned int)' is obsolete 이런 경고창이뜹니다.
: 문제가 무엇인가요?
: 질문 3: sleep(1)을 빼면 다시 0이 입력됩니다. 지연시간없이 해결할 수 있는 방법은 없을가요?
: 질문 4: rx호출은 어떤식으로 이뤄지는건가요?
|