線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2484
推到 Plurk!
推到 Facebook!

RS232接收處理問題

缺席
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-13 09:05:12 IP:61.222.xxx.xxx 未訂閱
各位大大: 固定格式: head body trail(0x05) struct Head { char header; //0x03 short len; //指定body長度 char type; //command type }; 如何才能利用rs232正確接收到此資料格式,因其body 會因 head.len的長度有大小不一定,望大大指導或有範例教學,,
kenbcb
中階會員


發表:171
回覆:129
積分:60
註冊:2003-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-13 10:29:47 IP:61.222.xxx.xxx 未訂閱
請問各位    這個我試著寫,但收不到資料,所以向各位大大求救!! 下面程式試寫在timer元件中每5秒read一次     
   COMSTAT cs;
   DWORD dwError,nByteRead,nByteLack;
   
   unsigned int ct,len,againflag;
   unsigned char Buffer[1024],CRC;
   memset(Buffer,0x00,sizeof(Buffer));
   THeadPacket *HeadBuf = (THeadPacket*)Buffer;
   char *Body = Buffer sizeof(THeadPacket);
   
   ClearCommError(hComm,&dwError,&cs);
   if(cs.cbInQue == 0)
      return;
   else if(cs.cbInQue < sizeof(THeadPacket))
   {
      Sleep(100);
      ClearCommError(hComm,&dwError,&cs);
      if(cs.cbInQue < sizeof(THeadPacket)) return;
   }       ClearCommError(hComm,&dwError,&cs);
   for(ct=0;ctheader))
   {
      Sleep(100);
      ClearCommError(hComm,&dwError,&cs);
      if(cs.cbInQue < sizeof(THeadPacket) Trail_Size-sizeof(HeadBuf->header)) return;
   }       ReadFile(hComm,Buffer sizeof(HeadBuf->header),sizeof(THeadPacket)-sizeof(HeadBuf->header),&nByteRead,NULL);
   if(nByteRead != sizeof(THeadPacket)-sizeof(HeadBuf->header))
   {
      Sleep(100);
      nByteLack = sizeof(THeadPacket)-sizeof(HeadBuf->header)-nByteRead;
      ClearCommError(hComm,&dwError,&cs);
      if(cs.cbInQue < nByteLack)
         return;
      else
      {
         ReadFile(hComm,Buffer sizeof(HeadBuf->header) nByteRead,nByteLack,&nByteRead,NULL);
         if(nByteRead != nByteLack) return;
      }
   }       againflag = 0;
   len = HeadBuf->Length Trail_Size;
   while(1)
   {
      ClearCommError(hComm,&dwError,&cs);
      if(cs.cbInQue > (DWORD)len) break;
      if(againflag > 30) return;
      againflag  ;
      Sleep(100);
   }       ReadFile(hComm,Body,len,&nByteRead,NULL);
   if(nByteRead != len)
   {
      Sleep(100);
      nByteLack = len-nByteRead;
      ClearCommError(hComm,&dwError,&cs);
      if(cs.cbInQue < nByteLack)
         return;
      else
      {
         ReadFile(hComm,Body nByteRead,nByteLack,&nByteRead,NULL);
         if(nByteRead != nByteLack) return;
      }
   }
 
發表人 - kenbcb 於 2004/09/13 10:38:53
系統時間:2024-04-30 6:46:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!