首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Arduino串行通信会随着时间的推移而失败?

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

Stack Overflow用户
提问于 2020-01-28 03:16:48
回答 1查看 218关注 0票数 1

我在电路中使用了Arduino-Nano (仿制),它允许我通过编程来关闭和打开继电器。我一次连接了几天甚至几个星期。有时,Arduino-Nano和我的电脑之间的串行通信会失败。

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

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

代码语言:javascript
复制
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;
}

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

代码语言:javascript
复制
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集线器,并用一个质量好的替换了USB线。这似乎减少了失败的频率,但它仍然偶尔会出现问题。

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

我在想,Windows10有时可能会与COM端口混淆,从而失去连接。

有没有一种方法可以通过编程告诉windows重新启动或重新编程重置com端口?我的应用程序是C#版的。

EN

回答 1

Stack Overflow用户

发布于 2020-09-23 19:58:43

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

你必须建立连接,如果在任何情况下发生这种情况,它将重新连接,除非你特别想让它断开连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59937508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档