RS232 收 Code 會漏資料 !! |
答題得分者是:李國維
|
carloyan
一般會員 發表:35 回覆:14 積分:9 註冊:2004-05-26 發送簡訊給我 |
有嘗試著放在 Timer 或是 Thread 之下收資料,可是依然會漏掉一些 Code,而且還很頻繁柳 ! 氣西郎 ~~~
小弟的 Code 如下 : void __fastcall TForm1::Button1Click(TObject *Sender) { char *ComNo; DCB dcb; String Temp; //取得欲開啟的通訊埠 Temp = "\\\\.\\COM" IntToStr(RzSpinEdit1->IntValue); //轉換至指標型態 Char ComNo = Temp.c_str(); hComm = CreateFile(ComNo,GENERIC_READ | GENERIC_WRITE, 0,NULL, OPEN_EXISTING, 0, NULL); if (hComm == INVALID_HANDLE_VALUE) // 如果COM 未開啟 { MessageBox(0, "Open COM Port Error !!!","Comm Error",MB_OK); return; } ZeroMemory(&dcb, sizeof(dcb)); dcb.DCBlength = sizeof(dcb); //將dcb位址傳入,以取得通訊參數 GetCommState(hComm,&dcb); // 得知目前COM 的狀態 dcb.BaudRate = CBR_9600; // 設定鮑率為9600 dcb.ByteSize = 8; // 位元組為 8 bit dcb.Parity = NOPARITY; // Parity 為 None dcb.StopBits = ONESTOPBIT; // 1 個Stop bit //通訊埠設定 if (!SetCommState(hComm, &dcb)) // 設定COM 的狀態 { MessageBox (0, "Comport Set Error !!!","Set Error",MB_OK); CloseHandle(hComm); return; } } //// 收CODE 判別資料區 String Temp; char inbuff[1]; DWORD nBytesRead, dwEvent, dwError; COMSTAT cs; int cVKDown = 0, cVKUp = 0; if (hComm == INVALID_HANDLE_VALUE) return; //取得狀態 ClearCommError(hComm,&dwError,&cs); // 資料是否大於我們所準備的Buffer if (cs.cbInQue > sizeof(inbuff)) { PurgeComm(hComm, PURGE_RXCLEAR); // 清除COM 資料 return; } ReadFile(hComm, inbuff,cs.cbInQue,&nBytesRead,NULL); // 接收COM 的資料 //轉移資料到變數中 inbuff[cs.cbInQue]= '\0'; switch (inbuff[0]) { case ScanCode_1: //1 { ..... } case ScanCode_2: //2 { ..... } default: { break; } } |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
carloyan
一般會員 發表:35 回覆:14 積分:9 註冊:2004-05-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |