Вопрос по usbserial, c#, serial-port, usb, semaphore – «Время ожидания семафора истекло» для USB-соединения

31

Я получаю эту ошибку ...

Период ожидания семафора истек.

На этой линии ...

ThePorts.ActivePort1.Open ();

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

Последовательный порт - это USB с подключенным BlueTooth.

Я думаю, что у этого парня была очень похожая проблема, но не в C #

Заморозить на SerialPort.Open / DeviceIoControl / GetcommState с помощью usbser.sys

Насколько я могу судить, я прочитал всю его проблему, и полученные комментарии, и ответ, но я действительно не могу понять, какой из них решил его проблему, или если C # значительно отличается от того, что он испытывал.

Спасибо за любую помощь для невежественных. Это фактический код, где это происходит.

public static void Open_ActivePortWeWillUse(String Drone_StringNameFromUser)
{
    SerialPort TempSerialPort = new SerialPort(Drone_StringNameFromUser, (int) SerialPortSpeed);

    ThePorts.ActivePort1 = TempSerialPort;

    ThePorts.ActivePort1.DataBits = 8;
    ThePorts.ActivePort1.Parity = Parity.None;
    ThePorts.ActivePort1.StopBits = StopBits.One;

    ThePorts.ActivePort1.DataReceived += new SerialDataReceivedEventHandler(OurBackGroundSerialPortReceiver);

    ThePorts.ActivePort1.Open();  // "Sometimes" Error hits here
}
Спасибо, Ганс и Алекс. Понятия не имею, если я нашел ответ, но яДУМАТЬ эта страница((Страница eHow о неправильной работе USB-концентраторов)) объясняет что делать Хотя это не мой фаворит во всем Интернете, если он получил ответ, тогда хорошо; без разницы. User.1
Все еще хорошо через 3 часа. Должен ли я опубликовать ответ? User.1
Это низкоуровневая ошибка Windows, ERROR_SEM_TIMEOUT, код ошибки 121. Очень специфичная для кода, который использует семафор. Классы .NET SerialPort нигде не используют семафор. Драйвер Bluetooth, который вы используете, который эмулирует последовательный порт, безусловно, использует его, это обычный объект синхронизации, используемый в собственном коде. Подобные проблемы с глючными драйверами не являются чем-то необычным. Hans Passant
В дополнение к предыдущему комментарию: на уровне, на котором вы работаете (клиент .NET), вы ничего не можете сделать с ошибочным драйвером последовательного порта. В посте по вашей ссылке реальный ответ в комментариях: «Проблема возникла из-за неисправной прошивки устройства». Alex F

Ваш Ответ

3   ответа
5

Если кто-то читает когда-либо сталкивается с тем же, я надеюсь, что эта процедура работает для вас; но никаких обещаний; эй, это окна.

В моем случае это была Windows 7

Я получил небольшую подсказку отЭта страница на eHow; не уверен, может ли это кому-нибудь помочь или нет.

Так или иначе, это была простая двадцать три шага процедуры, которые работали для меня

Нажмите на кнопку Пуск

Выберите Панель управления

На панели управления выберите «Диспетчер устройств».

В диспетчере устройств выберите контроллеры универсальной последовательной шины

В контроллерах универсальной последовательной шины щелкните маленький боковой треугольник

Я не могу предсказать, что вы увидите на вашем компьютере, но на моем я получил длинный выпадающий список

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

На каждом члене раскрывающегося списка щелкните правой кнопкой мыши на имени

Откроется список, выберите Свойства

Время догадки: используя различные вкладки в верхней части открывшегося окна, угадайте, является ли это драйвером USB-адаптера, который душит ваши вещи с таймаутами семафоров

После того, как вы правильно сделали предположение, закройте окно свойств USB Root Hub Properties (но оставьте окно диспетчера устройств открытым).

Физически отключите все и вся от этого USB-концентратора.

Отключите его.

Верните указатель мыши на тот USB Root Hub в списке, который вы определили ранее.

Щелкните правой кнопкой мыши еще раз

Выберите Удалить

Пусть Windows сделает свое дело

Подожди немного

Выключите весь компьютер, если у вас есть время; некоторые говорят, что это требуется. Я думаю, что я ушел без этого.

Подключите концентратор USB обратно к разъему USB на ПК

Если список в диспетчере устройств мигает и делает несколько вспышек, это нормально.

Подключите разъем BlueTooth обратно к USB-концентратору

Пусть окна делают свое дело еще

В течение двух минут у меня снова был рабочий COM-порт, никаких таймаутов семафора.

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

Это сработало один раз, но не дважды User.1
я отключил свою мышь, и я не могу продолжать делать последние пункты, которые вы упомянули? :) Christo
Нет, исправлено снова. Кто-нибудь может подсказать, что происходит? User.1
Эта ошибка иногда возникает при использовании устройства с последовательным интерфейсом Bluetooth (Microchip / Roving RN42 eval. Kit) со стороны Bluetooth (поэтому удаленная сторона USB не используется). После одной-двух попыток COM-порт обычно открывается и данные могут быть отправлены. Это на Windows 10 1809, со встроенными драйверами MS Bluetooth. Так что это похоже на артефакт эмуляции Bluetooth COM-порта. ddbug
Я получил это, когда тайм-аут моего VPN-соединения. Я просто должен был восстановить соединение. adam0101
6

если у вас возникли задержки в сети или проблемы с Интернетом или локальной сетью. Мостовые соединения, которые имеют неисправный аналог, также могут быть виновниками.

2

и общении с Arduino Leonardo. Надежное решение было:

Найдите COM-порт в диспетчере устройств и откройте свойства устройства.Откройте вкладку «Настройки порта» и нажмите кнопку «Дополнительно».Там снимите флажок «Использовать буферы FIFO (требуется 16550 совместимый UART) и нажмите OK.

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

Похожие вопросы