|
금목암 님이 쓰신 글 :
: 김명섭 님이 쓰신 글 :
: : 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까지만 잘라서 받고 싶은데 어떻게 하면 좋을까요^^
: ----------------------------------------------------------
:
: 데이터 수신부는 계속 받아서 버퍼에 쌓도록 하고
: 일정크기를 넘는 버퍼사이즈가 되거나 헤더,테일이 오면 그때 처리하게하세요
: 무조건 통신오자마자 받게하면 통신이 일부만 받게되니 중간에 처리하는 동안
: 오는 데이타나 처리루틴중 쌓이는건 버려질수 있습니다
|