2014-01-16 43 views
-1

我正在使用串行端口工作。 當我打開我的串口後,我將不得不發送4個請求。 SO用於發送請求我的代碼是:在特定時間後執行計時器中的確切功能

private string ByteArrayToHexString(byte[] data) 
     { 
      StringBuilder sb = new StringBuilder(data.Length * 3); 
      foreach (byte b in data) 
       sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' ')); 
      return sb.ToString().ToUpper(); 
     } 

     private void senddata1(String str) 
     { 

       // Convert the user's string of hex digits (ex: B4 CA E2) to a byte array 
       byte[] data = HexStringToByteArray(str); 

       // Send the binary data out the port 
       comport.Write(data, 0, data.Length); 



     } 

此函數將創建一個發送數據的方法。 在計時器滴答事件我要送這樣的數據:

private void timer1_Tick(object sender, EventArgs e) 
     { 
//here I'm sending my data in a timer 
senddata1(s1); 
senddata1(s2); 
senddata1(s3); 
senddata1(s4); 

} 

注:後每senddata1()函數,系統會得到迴應。

所以問題是當我發送數據我沒有得到響應,因爲系統無法讀取所有senddata。 我想以某種方式管理我的程序,以便每250秒後發送一次數據。 像這樣:

SendData1(s1); 
get response from the system 
senddata1(s2); 
get response from the system 

GET響應正在處理中是這樣的:

comport.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); 

那麼,有沒有辦法,我可以管理我的程序。 請分享你的意見。

+0

顯然不這樣做真的* *喜歡,因爲你要阻止你的代碼,直到響應DataReceived事件檢索收到。所以不要使用它,直接調用Read()。不要忘記循環,直到你得到整個迴應。 –

+0

@HansPassant,謝謝,可以幫助我,因爲我是串口編程的新手,你能告訴我一個簡短的例子嗎? –

回答

0

如果你的意思是你想調用系統響應的senddata1函數,你應該使用一個事件來了解你的響應。 然後用指示的輸入(s1,s2,...)調用senddata1,該輸入應該在每個響應中被賦予該函數。

(讓我知道,如果我不知道你問什麼。在評論告訴)

+0

我試過這個,但有一個輕微的問題,我無法跟蹤迴應。它像一個代表一樣被管理。那麼有沒有辦法來檢查我是否得到了輸出。 –

相關問題