Почему со временем происходит сбой последовательной связи 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()
Система будет работать нормально в течение нескольких недель, а затем иногда возникает вышеуказанное исключение. Нет особого рисунка, поэтому воспроизвести проблему практически невозможно. Я могу легко исправить это, отключив USB-провод Arduino, а затем снова подключив его через несколько секунд.
Однако я использую этот Arduino как часть автоматического ночного теста, поэтому, когда он выходит из строя, я обычно не сижу там, готовый отключить и снова подключить его.
Я заменил USB-концентратор, который я использую, на 2 других концентратора с питанием и заменил USB-провод на более качественный. Похоже, что это снизило частоту сбоев, но иногда все же срабатывает.
Я использую подделку ардуино, а не оригинал. Это проблема? Будет ли у меня меньше проблем, если я буду использовать Arduino Uno или Mega вместо Nano?
Я думаю, что Windows 10 может иногда просто путаться с COM-портами и терять соединение.
Есть ли способ программно указать окнам на выключение и перезагрузку COM-порта? Мое приложение написано на C#.
0 ответов
Не могу сказать, в чем именно заключается ваша проблема, но это действительно распространенная проблема с простыми устройствами последовательной связи, когда они иногда теряют соединение.
Вы должны установить соединение таким образом, чтобы оно подключалось повторно, если это произойдет в любом случае, если вы специально не хотите оставить его отключенным.