2013-11-06 5 views
0

В настоящее время я работаю над проектом с использованием класса SerialPort в C# для связи с устройствами калибровки на основе RS232, используемыми в компании, в которой я работаю. В классе SerialPort существует статический метод с именем GetPortNames().GetPortNames() возвращает устаревшие данные/Удалить устаревшие записи компоновки в Windows?

К сожалению, у Windows возникла ужасная проблема с сохранением записей простоя в порту. Если я позвоню GetPortNames() от моей машины, он возвращает следующие порты:

COM3
COM4
COM1

Из этих портов, только один физически существует прямо сейчас. У меня есть карта PCIe RS232 на задней панели моего компьютера. Это обозначается COM1.

Другие два порта (COM3 и COM4) были созданы кабелями USB-to-Null Modem. Эти записи все еще существуют в реестре, хотя кабели уже давно отсоединены (COM8 существует некоторое время, но был удален после обычного подключения и отсоединения USB-кабелей несколько раз).

Это нормально для меня. Я всегда могу открыть Putty или TeraTerm и проверить доступные COM-порты, пока не найду правильный. Это не подходит для техников, которые будут использовать эту программу. Я не знаю, что COM-порт всегда будет таким же, как и обычные кабели USB.

Есть ли какой-либо способ (желательно программно в C#) Я могу удалить эти устаревшие записи или, по крайней мере, проверить, какие из них активны?

Примечания:

Из SerialPort.GetPortNames() MSDN документация:

Замечания

  • Порядок имен портов вернулся из GetPortNames не указан.

  • Используйте метод GetPortNames для запроса текущего компьютера для списка допустимых имен последовательных портов. Например, вы можете использовать этот метод, чтобы определить, являются ли COM1 и COM2 допустимыми последовательными портами для текущего компьютера.

  • Имена портов получены из системного реестра (например, HKEY_LOCAL_MACHINE \ HARDWARE \ DEVICEMAP \ SERIALCOMM). Если реестр содержит устаревшие или некорректные данные, метод GetPortNames возвращает неверные данные.

следующий вопрос: Removing COM Ports in Windows programmatically (Setup API ?) два года и неудовлетворительными. Единственный ответ (существенный «Взгляните на исходный код программы X и попытайтесь сделать что-то подобное») бесполезен для меня.

+0

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

+1

Windows вообще не участвует, драйвер устройства должен записывать эти записи в реестре. В противном случае стандартная потеря, тип драйверов устройств, которые эмулируют последовательный порт, очень огорчен. Лучший способ справиться с капризными - удалить их. –

ответ

1

Не беспокойтесь о попытке сделать компьютер правильным. Беспокойство о том, чтобы убедиться, что вы подключаетесь к правильному устройству. Перечислите порты, затем попытайтесь открыть и установить связь с каждым из них.У вас должна быть команда handshake/ident type, которую вы можете отправить на последовательное устройство, к которому вы пытаетесь подключиться. Если вы получите успешное рукопожатие, вы знаете, что у вас есть устройство.

+1

Не всегда возможно. Многие устройства NMEA являются только говорящими. –

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