2013-02-10 34 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