Я создаю прототип своего рода док-станции на базе Arduino для планшета, используя USB-порт в качестве разъема. Это означает, что мне нужно поддерживать возможность подключения/отсоединения USB-разъема при работе приложения на планшете.СОМ-порт исчезает при отсоединении USB
Планшет запускает приложение C# (.net 4.5 на Win7 64 бит), в котором я подключаюсь к Arduino Uno. Когда приложение запускается цикл I все доступные COM-порты с помощью:
var ports = SerialPort.GetPortNames(); // -> [COM3,COM4,COM8]
foreach (var port in ports)
{
var serial = new SerialPort(portname, baudRate);
//attempt handshake and connect to right port
}
Эта работа хорошо, но если я отключите и снова подключите кабель USB и повторить попытку повторного подключения к Arduino (в то время как приложение все еще работает), то не Arduino порт (COM8) больше не перечислены в:
SerialPort.GetPortNames(); // -> [COM3,COM4] and no COM8
Даже перезапуска приложения (с Arduino клеммного блока) приведет только [COM3, COM4] быть в списке.
Единственный способ вернуть его на работу - отключить и поменять Arduino, пока приложение не работает.
Что меня смущает, так это тот факт, что когда я подключаю Arduino Uno после запуска приложения, SerialClass распознает недавно добавленный порт и позволяет мне подключаться.
Проблема возникает только при отключении и повторном подключении устройства при запуске приложения. Кажется, что, несмотря на возможность сброса COM-порта (в коде или вручную в диспетчере устройств), SerialClass (и собственный Win32_SerialPort - я тоже это проверил) не распознал это, если я не перезапустил приложение
Что может быть причина этого? И как я могу убедиться, что мое приложение может подключиться к этому порту? Существуют ли альтернативы использованию SerialPort для работы с USB-разъемом?
Просто второй здесь, вы используете последовательный порт в качестве USB-порт или USB-порт, как последовательный порт? AFAIK, каждый раз, когда вы снова подключаете COM-порт, вам необходимо перезагрузить его. – Shark
последовательный порт, я все время подключаю к серверам с перезагрузкой. Реальные последовательные порты (rs-232) очень надежны. (Я думал) –
Когда виртуальный COM-порт уходит, поэтому все его интерфейсы и приложение, подключенные к ним, должны иметь дело с этими исключениями, а затем попытаться их снова открыть , Большинство приложений, использующих последовательные порты, являются старыми и не справляются с копированием того, что, как ожидается, являются аппаратными интерфейсами, что часто приводит к потере ресурса до перезагрузки. Я отмечаю, что Serial Monitor Arduino справляется с этим, за исключением довольно хорошо и восстанавливается. Он делает много шума на выходе на консоль. Возможно, вам захочется посмотреть, как это происходит, и перенести его на C# – mpflaga