【问题标题】:Why does Arduino serial communication fail over time?为什么 Arduino 串行通信会随着时间的推移而失败?
【发布时间】:2020-09-23 19:58:43
【问题描述】:

我在电路中使用 Arduino-Nano(仿制),允许我以编程方式关闭和打开继电器。我一次连接了几天和几周。有时,Arduino-Nano 和我的电脑之间的串行通信会失败。

在我的程序中,我打开端口,发送一个简单的命令,从设备接收确认,然后关闭端口。我不会让它打开。

这是我用来向 arduino 发送命令的函数:

public static string SendCommandToArduino(string port, string command)
{
    try
    {
        using (var serialPort = new SerialPort(port, 115200, Parity.None, 8, StopBits.One))
        {
            serialPort.ReadTimeout = 100;
            serialPort.WriteTimeout = 100;
            serialPort.Open();
            serialPort.WriteLine(command);
            return serialPort.ReadLine().Replace("\r", "");
        }
    }
    catch (Exception e)
    {
        Log.Write(e);
    }

    return string.Empty;
}

当它失败并且我尝试连接它时,我得到以下异常:

A device attached to the system is not functioning.

   at System.IO.Ports.InternalResources.WinIOError(Int32 errorCode, String str)
   at System.IO.Ports.InternalResources.WinIOError()
   at System.IO.Ports.SerialStream.InitializeDCB(Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Boolean discardNull)
   at System.IO.Ports.SerialStream..ctor(String portName, Int32 baudRate, Parity parity, Int32 dataBits, StopBits stopBits, Int32 readTimeout, Int32 writeTimeout, Handshake handshake, Boolean dtrEnable, Boolean rtsEnable, Boolean discardNull, Byte parityReplace)
   at System.IO.Ports.SerialPort.Open()

系统可以正常工作数周,然后有时我会遇到上述异常。没有特定的模式,因此几乎不可能重现该问题。我可以通过拔下 Arduino 的 USB 线并在几秒钟后将其重新插入来轻松修复它。

但是,我将此 Arduino 用作自动夜间测试的一部分,因此当它失败时,我通常不会坐在那里准备拔掉电源并重新插入。

我已将我正在使用的 USB 集线器更换为 2 个其他有源集线器,并已将 USB 线更换为优质的 USB 线。这似乎降低了失败的频率,但有时还是会发生。

我使用的是仿制的 arduino,而不是原版。这是问题吗?如果我使用 Arduino Uno 或 Mega 而不是 Nano,问题会更少吗?

我认为 Windows 10 有时可能会与 COM 端口混淆并失去连接。

有没有办法以编程方式告诉 Windows 以编程方式重启或重置 com 端口?我的应用程序是 C#。

【问题讨论】:

    标签: c# arduino serial-port arduino-nano com-port


    【解决方案1】:

    无法说出您的确切问题是什么,但对于简单的串行通信设备来说,它们偶尔会断开连接确实很常见。

    您必须以一种在任何情况下都会重新连接的方式建立连接,除非您特别想让它断开连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      相关资源
      最近更新 更多