【问题标题】:Serial Port WriteLine sometimes fails串行端口 WriteLine 有时会失败
【发布时间】:2013-02-10 15:55:50
【问题描述】:

我写了一个简单的程序,通过串口发送一个 AT 命令。 我按照指示 MSDN EXAMPLE

串口 (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) 失败?

【问题讨论】:

  • 你的代码是什么?命令有多大,你的波特率是多少。
  • 您是否尝试处理ErrorReceived event
  • 这是您的实际代码吗?你似乎没有设置任何东西,甚至没有初始化 SerialPort。

标签: c# serial-port


【解决方案1】:

您所描述的内容有几个原因,并且 MSDN 文章有一些...有趣的...代码。从您的代码 sn-p 我可以看到您没有正确设置串行端口,所以我将发布一个工作示例,使用您提供的设置,希望对您有所帮助。

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();

这是一种非常简单的方法,不包括错误处理,但它适用于具有您给定设置的串行设备。除非握手是错误的,考虑到高波特率,这是很有可能的,你应该研究一下。

【讨论】:

  • 您好,感谢您的回复;问题不在于设置串行端口。端口的所有配置都在属性窗口中完成。我也试过你的代码,但问题还是一样,有时数据包没有传输到串口
  • 你的握手方式正确吗?您确定没有传输数据包吗,也许设备当时不期望数据并丢弃它。要进行测试,您应该混合使用 sourceforge.net/projects/com0computty 来查看流是否真的在发送数据。
猜你喜欢
  • 2014-06-21
  • 1970-01-01
  • 2014-05-01
  • 2020-06-07
  • 1970-01-01
  • 2018-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多