2013-02-10 36 views
-1

我寫了一個簡單的程序,它通過串口發送一個AT命令。 我跟着指令 MSDN EXAMPLE串口WriteLine有時會失敗

串行端口(38400,N,8,1)

serialPort1.PortName = "COM" + "5";// textBox1.Text; 
     try 
     { 
      if (!(serialPort1.IsOpen)) 
       serialPort1.Open(); 


      // if (listBox1.SelectedIndex == 0 || listBox1.SelectedIndex == 1) 
       serialPort1.WriteLine("atrst"); 
      // else 
      //  serialPort1.WriteLine("araprst"); 

      serialPort1.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!"); 
      Application.Exit(); 
     } 

當我使用WriteLine命令有時AT命令不被髮送到的端口。 任何想法爲什麼?, 有沒有辦法知道WriteLine(String)失敗?

+0

雖然你的代碼是什麼?命令有多大,你的波特率是多少。 – Serdalis 2013-02-10 15:58:35

+0

您是否嘗試處理[ErrorReceived事件](http://msdn.microsoft.com/zh-cn/library/system.io.ports.serialport.errorreceived.aspx)? – 2013-02-10 16:28:08

+0

這是你的實際碼嗎?你似乎沒有設置任何東西,甚至不初始化SerialPort。 – Serdalis 2013-02-10 21:23:47

回答

0

對於您所描述的內容有一些原因,並且MSDN文章中有一些有趣的代碼。從你的代碼片段中,我可以看到你沒有正確設置串口,所以我會發佈一個工作示例,並提供給你的設置,並希望它有幫助。

serialPort = new SerialPort(
       "COM5",  // port name 
       38400,  // baud rate 
       Parity.None, // parity 
       8,   // bits 
       StopBits.One // stop bits 
      ); 

serialPort.Handshake = Handshake.None; 
serialPort.WriteTimeout = 500; 

serialPort.Open(); 
serialPort.Write("atrst"); 
serialPort.Close(); 

這是一個非常裸機的方式,不包括錯誤處理,但它會與你給的設置串行設備的工作。除非握手是錯誤的,在高波特率的情況下,這是很有可能的,你應該看看。

+0

嗨 感謝您的回覆;問題不在於設置串口。 端口的所有配置都是在屬性窗口中完成的。 我也試過你的代碼,但問題依然存在,有時數據包沒有傳輸到串口 – user951538 2013-02-11 05:07:07

+0

你有沒有正確的握手?你確定這個數據包沒有被傳輸,也許這個設備在那個時候並沒有期待數據並丟棄它。要測試你應該混合使用http://sourceforge.net/projects/com0com/和'putty'來查看流是否實際發送數據。 – Serdalis 2013-02-11 21:36:37