|
128kbps 로 사용해도 끄떡 없습니다.
종종 데이터 수신 완료 보다 이벤트가 먼저 발생하는 경우가 있으니, 루프를 하나 더 넣어서 count가 0이 될때 까지 읽어내는 코드를 넣는게 좋습니다.
노이즈를 타는듯 한데요... 쉴드 케이블 같은걸로 바꿔 보시고, 주변에 서보모터가 코일 같은게 없는지 확인해 보세요.
노이즈를 타도 쓰레기라도 들어오기 때문에 Count가 0인 경우는 거의 없습니다.
newhuni 님이 쓰신 글 :
: CPort 3.10을 사용하고 있습니다.
: 9600에서는 잘 사용하다 이번에 38400으로 사용하려고 합니다.
:
: 그냥 수신 이벤트 함수에서 Count로 전달된 만큼 버퍼를 파일에 기록해서 보는데
: 데이타 중간 중간에 이상한 값이 나타납니다. 순서가 뒤 바뀌는 것도 같구요.
:
: 그리고 Count만큼 읽어서 보면 데이타가 실제로는 들어오지 않은 경우도 있습니다.
: 만약 수신 버퍼를 0xaa으로 초기화 한뒤 Count만큼 버퍼를 읽어 수신버퍼에 쌓고 보면
: 수신 버퍼에는 기존 초기값 0xaa만 저장되 있습니다.
:
: 혹시 같은 경우 보신분 계시면 조언 부탁드립니다.
: 소스는 아래와 같습니다.
: < Databit : 8 / Stopbit : 1 / Parity : None / 38400bps / Flow Control : None >
:
: void __fastcall TfrmMain::ComPort1RxChar(TObject *Sender, int Count)
: {
: unsigned char Buff[1024] = "";
: AnsiString s, temp;
:
: memset(Buff, 0xaa, 1024); // 버퍼 초기화
: ComPort1->Read(Buff,Count); // 버퍼에 Count만큼 읽어서 저장
:
: for(int i=0;i<Count;i++){ // temp 변수에 데이타 정리
: s.sprintf("%02x",Buff[i]);
: temp = temp + " " + s;
: }
: // 로깅
: }
:
:
|