为什么Arduino串行通信会随着时间的推移而失败?



我在电路中使用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作为自动夜间测试的一部分,因此当它失败时,我通常不会坐在那里准备拔下并重新插入它。

我已经用其他 2 个有源集线器替换了我正在使用的 USB 集线器,并用高质量的集线器替换了 USB 线。 这似乎降低了故障的频率,但有时仍然起作用。

我使用的是仿冒的arduino,而不是原版。 这是问题所在吗? 如果我使用Arduino Uno或Mega而不是Nano,我会少一些问题吗?

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

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

不能说出您的确切问题是什么,但对于简单的串行通信设备来说,它们偶尔会失去连接,这确实是常见问题。

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

最新更新