RS232收資料 |
答題得分者是:andychang1690
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
這是我早期蒐集到的資料來源出處已經不可考,若有人知道請告之謝謝。 在Project1.cpp中,Edit1為輸入區,Button1(SEND)開始傳送,Button2(Receive) 則是接收資料。其餘兩個ListBox則是顯示傳送及接收資訊。Comm1我則是將它設為 DeviceName=Com1,因為我是使用Com1來傳輸,通常預設為Com2,其他設定我則沒有 用到。 ps.我之所以可以自我測試,因為在普通情況下無法自我傳輸,所以將Com1 or Com2 的2,3腳短路(因為2,3腳為傳送及接收腳),即可形成一連串的路徑。 其方法為:買一個長型jumper插在電腦後Com1 or Com2的2,3腳上,因為我是用 筆記型電腦,比較方便直接插上,若用桌上型電腦的人,可以買一個9pin的傳 傳輸線(雙母or一公一母),雙母的話,一端插在電腦後,一端則是用單心線插 上2,3腳孔內;一公一母的話,同樣做法,另一端則是用長型jumper插上2,3腳 上即可。 (面對rs232埠,直接看進去) 1 2 3 4 5 6 7 8 9 _____________________ | o o o o o | | o o o o | |_______________| 寫RS232建議使用Thread的方式,並建議完成傳送接受後 Sleep(300);停一下下。Andy Chang
------
Andy Chang |
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
|
李國維
高階會員 發表:42 回覆:287 積分:235 註冊:2003-02-07 發送簡訊給我 |
|
friendlly
高階會員 發表:22 回覆:144 積分:103 註冊:2003-04-08 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
conundrum
尊榮會員 發表:893 回覆:1272 積分:643 註冊:2004-01-06 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
kenbcb
中階會員 發表:171 回覆:129 積分:60 註冊:2003-07-15 發送簡訊給我 |
資料都會收不順,會落資料,有無參考資料
void __fastcall TFormUpgradeCOM::TimerRS232Timer(TObject *Sender) { COMSTAT cs; DWORD nBytesRead,dwEvent,dwError; unsigned char checkCRC,readCRC; ClearCommError(hComm,&dwError,&cs); memset(&Packet,0x00,sizeof(Packet)); ReadFile(hComm,&Packet,sizeof(Packet),&nBytesRead,NULL); if(Packet.Leading != Header) return; else if(Packet.Trail != Trailer) return; else { readCRC = Packet.CRC; checkCRC = CRCcheck((unsigned char *)&Packet,sizeof(Packet)-2); if(readCRC != checkCRC) return; } TimerOut->Enabled = false; if(Packet.Type == Upgrade_NCK) { PayFlag = false; free(PayloadBuffer); TimerRS232->Enabled = false; MessageBeep(MB_ICONINFORMATION); MessageBox(NULL,Msg_GUpgrade_Error,"Error",MB_ICONINFORMATION); Close(); } else if((Packet.Type == Upgrade_ACK) && PayFlag) { if(UpCount < PayloadLength) { unsigned short UpLen = (PayloadLength-UpCount > Max_Payload)?Max_Payload:PayloadLength-UpCount; unsigned short tLen = 16 UpLen; unsigned char Buffer[1024],CRC; memset(Buffer,0x00,1024); memmove(Buffer,Payload_Head,sizeof(Payload_Head)); memmove(Buffer 2,&tLen,2); memmove(Buffer sizeof(Start_Head),GDTBuffer.ID,Max_ID); memmove(Buffer sizeof(Payload_Head) 10,&UpCount,4); memmove(Buffer sizeof(Payload_Head) 14,&UpLen,2); memmove(Buffer sizeof(Payload_Head) 16,PayloadBuffer UpCount,UpLen); CRC = CRCcheck(Buffer,sizeof(Payload_Head) 16 UpLen); Buffer[sizeof(Payload_Head) 16 UpLen] = CRC; Buffer[sizeof(Payload_Head) 16 UpLen 1] = 0x03; WriteFile(hComm,Buffer,sizeof(Payload_Head) 16 UpLen 2,&lrc,NULL); TimerOut->Enabled = true; ProgressBar1->Position = UpCount; UpCount = UpLen; } else { PayFlag = false; unsigned char Buffer[1024],CRC; memset(Buffer,0x00,1024); memmove(Buffer,Complete_Head,sizeof(Complete_Head)); memmove(Buffer sizeof(Complete_Head),GDTBuffer.ID,Max_ID); CRC = CRCcheck(Buffer,sizeof(Complete_Head) 10); Buffer[sizeof(Complete_Head) 10] = CRC; Buffer[sizeof(Complete_Head) 11] = 0x03; WriteFile(hComm,Buffer,sizeof(Complete_Head) 12,&lrc,NULL); TimerOut->Enabled = true; } } else if((Packet.Type == Upgrade_ACK) && !PayFlag) { PayFlag = false; free(PayloadBuffer); TimerRS232->Enabled = false; ProgressBar1->Position = UpCount; MessageBeep(MB_ICONINFORMATION); MessageBox(NULL,Msg_GUpgrade_OK,"Information",MB_ICONINFORMATION); Close(); } } //--------------------------------------------------------------------------- |
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
處理RS232我建議你使用Thread方式請參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=52603 http://delphi.ktop.com.tw/topic.php?topic_id=49151 http://delphi.ktop.com.tw/topic.php?topic_id=45572 http://delphi.ktop.com.tw/topic.php?topic_id=42426 不要使用Timer方式處理 請參考Andy Chang
------
Andy Chang |
Boy
一般會員 發表:5 回覆:10 積分:3 註冊:2002-11-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |