2010-02-24 64 views
2

的SerialPort我提出在C#,它發送數據的11字節到使用串行端口的應用程序:問題的在C#應用程序

  port = new SerialPort("COM1"); 
      port.BaudRate = 9600; 
      port.DataBits = 8; 
      port.Parity = Parity.None; 
      port.StopBits = StopBits.One; 
      port.ReadTimeout = 1000; 
      port.WriteTimeout = 1000; 
      port.Open(); 

      byte[] buffer = new byte[11]; 
      buffer[0] = 0; 
      buffer[1] = 0; 
      buffer[2] = 0; 
      buffer[3] = 3; 
      buffer[4] = 2; 
      buffer[5] = 4; 
      buffer[6] = 1; 
      buffer[7] = 20; 
      buffer[8] = 50; 
      buffer[9] = 0; 
      buffer[10] = 120; 
      port.Write(buffer, 0, 11); 

然後寫另一個應用程序來測試前一個。我想檢查這11個字節是否正確發送。在這個應用程序中,我使用:

 using (SerialPort port = new SerialPort("COM1")) 
     { 
      // configure serial port 
      port.BaudRate = 9600; 
      port.DataBits = 8; 
      port.Parity = Parity.None; 
      port.StopBits = StopBits.One; 
      port.Open(); 

      for (; ;) 
      { 
       byte[] b = new byte[11]; 
       port.Read(b, 0, 11); 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < 11; ++i) 
       { 
        sb.Append(b[i]); 
        sb.Append(" "); 
       } 
       Console.WriteLine(sb.ToString()); 
      } 
     } 

接收字節。問題是,在發送這樣的事情後:

0 0 0 3 2 4 1 20 50 0 120 

我收到:

0 0 0 0 0 0 0 0 0 0 0 
0 0 3 2 1 4 20 50 0 120 0 

它爲什麼會發生?我的代碼中有什麼樣的錯誤? 謝謝

+2

如果您使用超級終端觀看串行端口,它會看到正確的11個字節嗎? – mtrw 2010-02-24 20:31:27

+0

@mtrw我發送二進制數據和超級終端顯示他們與奇怪的字符。有沒有辦法以數字格式轉換它們? – 2010-02-25 08:22:06

+1

對不起,我錯過了你的問題。我不知道使超級終端處理二進制數據的方法,但像PortMon(http://technet.microsoft.com/en-us/sysinternals/bb896644.aspx)這樣的工具對於這種情況很有用。無論如何,我很高興你的問題似乎解決了。 – mtrw 2010-02-26 19:19:10

回答

3

您沒有檢查從port.Read()的結果。它返回字節數讀取,而不是請求的字節數。輸出循環然後需要使用這個結果作爲上限。

雖然您在發送端設置了超時,但您也需要閱讀器上的超時。

+0

我解決了我的問題。有兩種方法。首先是你所描述的。第二個是:註冊事件DataReceived的句柄,並調用Read BytesToRead字節。 – 2010-02-25 08:52:05

1

要檢查我的電腦的串行連接會發生什麼,我使用兩個工具:

  • com0com:其上可以相互通信的PC創建兩個串行端口A模擬器。我遇到的唯一缺點是你應該爲COM端口設置低於10.

  • Free Serial Port Monitor它在一個com端口上嗅探,並且可以顯示在該線上運行的每個字節。我遇到的唯一缺點是它有時會出現斷開連接的問題,並且只會在整個電腦重新啓動後纔會重新啓動。因此,如果您與它開始會話,請確保在關閉測試應用程序內的連接之前,不要斷開連接或意外關閉應用程序。

+0

非常有用的工具,非常感謝。 – 2010-02-25 08:52:31