Почему последовательная связь Arduino прерывается со временем? - PullRequest
0 голосов
/ 27 января 2020

Я использую 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()

Система будет работать нормально в течение нескольких недель, а затем иногда я получаю вышеуказанное исключение. Конкретного шаблона нет, поэтому воспроизвести проблему практически невозможно. Я могу легко это исправить, отключив USB-кабель Arduino, а затем снова подключив его через несколько секунд.

Однако я использую этот Arduino как часть автоматического ночного теста, поэтому, когда он не проходит, я обычно он не готов к отключению и повторному подключению.

Я заменил USB-концентратор, которым я пользуюсь, на 2 других концентратора с питанием и заменил USB-провод хорошего качества. Похоже, это уменьшило частоту сбоя, но иногда оно срабатывает.

Я использую Arduino, а не оригинал. Это проблема? У меня было бы меньше проблем, если бы я использовал Arduino Uno или Mega вместо Nano?

Я думаю, что Windows 10 может иногда путаться с COM-портами и терять соединение.

Есть ли способ программно сказать windows о выключении или программном сбросе com-порта? Мое приложение в C#.

...