全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3282
推到 Plurk!
推到 Facebook!

RS232收資料

答題得分者是:andychang1690
kenbcb
中階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-07-24 17:35:40 IP:220.130.xxx.xxx 未訂閱
請問各位大大,,, 可有收資料範例...我都不是收不到, 就是會停頓, 資料不是固定送出, 但有固定模式(開頭0x03,結尾0x02),,,各位幫幫忙..給個範例
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-07-26 21:18:31 IP:218.167.xxx.xxx 未訂閱
收不到有幾各原因: 1.baud,Parity,startbit,stopbit設定錯誤. 2.ComPort線錯誤(Pin 2,3)    或是參考: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=51633
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-07-27 09:40:37 IP:219.132.xxx.xxx 未訂閱
這是我早期蒐集到的資料來源出處已經不可考,若有人知道請告之謝謝。    在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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-07-27 11:49:23 IP:61.64.xxx.xxx 未訂閱
看到上面說明將2,3短路的自我測試方法 我有個問題請教一下 如果在本機有兩個程式A,B 可否利用此方式互相傳送接收?
李國維
高階會員


發表:42
回覆:287
積分:235
註冊:2003-02-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-07-27 12:56:33 IP:219.84.xxx.xxx 未訂閱
引言: 看到上面說明將2,3短路的自我測試方法 我有個問題請教一下 如果在本機有兩個程式A,B 可否利用此方式互相傳送接收?
friendlly
高階會員


發表:22
回覆:144
積分:103
註冊:2003-04-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-07-27 16:32:01 IP:61.64.xxx.xxx 未訂閱
引言:
引言: 看到上面說明將2,3短路的自我測試方法 我有個問題請教一下 如果在本機有兩個程式A,B 可否利用此方式互相傳送接收?
有問題耶...這自我測試指用同一個com port 當A執行時已開啟Com1, 而B一執行就出現com Port open error. Q:能兩個程式同時控制一個Com Port嗎
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-07-27 18:02:38 IP:219.132.xxx.xxx 未訂閱
就經驗是可以的! 因為以前經常需要一個接收, 另一個程式是有狀況時發送處理。 Andy Chang
------
Andy Chang
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-07-27 19:20:44 IP:61.221.xxx.xxx 未訂閱
http://input.cpatch.org/txt/hard/0031.txt RS232 及 NULL-MODEM
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-07-28 22:10:02 IP:219.130.xxx.xxx 未訂閱
有時候我想檢查程式是最快的方式 kenbcb你方便顯示你的程式片斷嗎? Andy Chang
------
Andy Chang
kenbcb
中階會員


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-01 14:03:03 IP:61.229.xxx.xxx 未訂閱
資料都會收不順,會落資料,有無參考資料  
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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-08-01 14:56:28 IP:219.132.xxx.xxx 未訂閱
處理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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2004-08-24 23:35:01 IP:211.75.xxx.xxx 未訂閱
請問先進,那裡可以找到用thread技術 施作的RS-232 接收傳送範例程式呢? Jeffrey Chang
------
Jeffrey Chang
系統時間:2024-04-30 4:25:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!