|
김명섭 님이 쓰신 글 :
: 10 04 04 07 27 02 23 08 00 00 00 2C 8D 8F 29 70 8A 26 51 87 32 C5 94 00 00 00 88
: 20 00 04 07 27 02 23 57 2C 8D 8F 29 70 8A 00 00 00 26 51 86 32 C5 94 00 00 00 88
: 20 01 04 07 27 02 24 51 2E 4F 92 29 71 8A 00 00 00 26 51 88 32 C5 94 00 00 00 88
: 20 02 04 07 27 02 25 57 2C 8D 90 29 71 8B 00 00 00 26 51 86 32 BF 42 00 00 00 88
: 30 00 04 07 27 02 26 50 00 00 00 00 00 00 00 00 00 00 00 00 32 C5 94 00 00 00 88
: 30 01 04 07 27 02 27 09 00 00 00 00 00 00 00 00 00 00 00 00 32 BB 31 00 00 00 88
: 30 02 04 07 27 02 28 20 00 00 00 00 00 00 00 00 00 00 00 00 00 01 04 00 00 00 88
: 위 처럼 Hexa값을 시리얼로 받아야 하는데 어떻게 받아야 하는지 모르겠네요.
:
: Comdrv32를 사용했습니다.
: // 시리얼 통신에서 OnReceiveData의 DataSize는 유동적입니다.
: // 10개일수도 100개일수도 50개일수도 있습니다..
:
: void __fastcall TForm1::cpdComReceiveData(TObject *Sender, Pointer DataPtr,
: DWORD DataSize)
: {
: AnsiString strRecvData,strRecvDataAll;
: char *pBuf;
: char buffer[100];
:
: for( int i=buf;i<DataSize;i++)
: {
: buffer[i]=*pBuf;
: *pBuf++;
: }
:
: if(buffer[2]==0x04 & buffer[26]==0x88)
: {
: for(int j=2;j<26;j++)
: {
: strRecvData.sprintf("%02X",buffer[j]&0xFF);
: strRecvDataAll+=strRecvData;
: }
: }
: }
: 위와 같이 하면 중간에 데이터가 안들어올때가 있더라고요ㅠㅠ
:
: 04~88까지만 잘라서 받고 싶은데 어떻게 하면 좋을까요^^
----------------------------------------------------------
데이터 수신부는 계속 받아서 버퍼에 쌓도록 하고
일정크기를 넘는 버퍼사이즈가 되거나 헤더,테일이 오면 그때 처리하게하세요
무조건 통신오자마자 받게하면 통신이 일부만 받게되니 중간에 처리하는 동안
오는 데이타나 처리루틴중 쌓이는건 버려질수 있습니다
|