2013-03-29 2 views
2

Я использую класс SerialPort класса C# для связи через USB-порт USB. SerialPort отлично работает и отлично работает до тех пор, пока не произойдет исключение. После исключения, когда я пытаюсь использовать порт через мое приложение, я получаю другое исключение: «Порт« COM6 »не существует». Я продолжаю получать исключение после закрытия приложения, перезапуска Visual Studio и т. Д. Единственный способ вернуть порт - перезагрузить компьютер.SerialPort не существует после исключения

Кто-нибудь видел эту проблему и знал об этом? Мне нужно, чтобы это было более долговечным.

+0

вопроса: почему вы получите исключение? Что происходит в вашем коде? – Marco

+0

Тайм-аут связи. Я также программирую серийное устройство, и я его отлаживаю. Таймаут связи вызван ошибкой программирования в последовательном устройстве, но плохие сообщения не должны вызывать сбой порт. Мой винт действительно создает хороший тестовый пример для компромиссов. – zam664

+0

Я определенно видел эту проблему при использовании USB как COM-устройства, подобного этому. На низком уровне все еще должен быть дескриптор порта, поэтому, когда у вас есть необработанное исключение, ОС не вернет устройство до перезапуска. Невозможно ли поймать исключение и закрыть порт в блоке finally? Кроме того, возможно, что он переназначает USB-устройство на новый COM-порт, поэтому вам, возможно, придется обнаружить его на более высоком. –

ответ

0

Обычно эта проблема возникает из-за того, что ваш USB-драйвер последовательного интерфейса неправильно написан для обработки исключений.

Вместо перезагрузки машины попробуйте отсоединить его и снова подключить (через несколько секунд). Делая это, предыдущий экземпляр может выгрузить, а при подключении он снова загрузит соответствующий драйвер.

Это будет перечислять номер com (в вашем случае Com6) в диспетчере устройств.

Существует способ перезапуска USB-соединения с помощью «devcon.exe», как указано в следующей ссылке.

http://digital.ni.com/public.nsf/allkb/1D120A90884C25AF862573A700602459

Вы можете интегрировать его в консоль приложения и подключите USBTOSerial без перезагрузки вашей машины

Смежные вопросы