ArgumentException: данное имя порта не начинается с COM / com или не соответствует допустимому последовательному порту.

Я пытаюсь подключиться к виртуальному COM-порту, предоставленному драйверами GPS-устройства u-blox.

Устройство обычно отображается на вкладке «Датчики» в диспетчере устройств, и я действительно могу получить данные координат, используя класс GeoCoordinateWatcher из C #.

Но я хочу прочитать основные данные NMEA. Итак, в процессе этого я установил драйвер Virtual Com Port, предоставленный U-BLOX, и он сгенерировал com-порт u-blox virta в диспетчере устройств.

Подключение к нему с помощью Putty в порядке, и я вижу, что все строки NMEA сбрасываются туда.

но когда я пытаюсь подключиться к тому же порту (очевидно, после закрытия Putty) с помощью C #, я получаю исключение, указанное в заголовке

Указанное имя порта не начинается с COM / com или не соответствует допустимому последовательному порту.

Мой код довольно прост (не первый раз, когда я использую com-порты), и все правильно определено (имя порта, стоповые биты, четность, BaudRate и т. Д.). Я даже попытался изменить имя COM-порта на "неправильное", чтобы увидеть исключение, которое я получу, и оно совершенно другое (Com-порт не является исключением для выхода).

Так что же сейчас происходит с C #? Я делаю что-то неправильно? Это ошибка в классе SerialPort? Putty, кажется, отлично работает при подключении и потоковой передаче данных. Мой код такой простой, как следующий

m_port = new SerialPort
{
    PortName = m_portName,
    BaudRate = m_baudRate,
    Parity = m_parityBit,
    DataBits = m_dataBits,
    StopBits = m_stopBit
};

m_port.Open();

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


person John Demetriou    schedule 30.10.2018    source источник
comment
Вы пробовали переименовать COM-порт и использовать новое имя вместо старого?   -  person JSR    schedule 30.10.2018
comment
да. Забыл об этом упомянуть. Из дополнительных настроек   -  person John Demetriou    schedule 30.10.2018
comment
Я не работал с u-blox .. но надеюсь, что приведенное ниже будет полезно для вас .. forum.u-blox.com/index.php/9380/. Кажется, есть некоторые проблемы с подключением к последовательному порту, поскольку он не будет вести себя как точный последовательный порт.   -  person JSR    schedule 30.10.2018
comment
@JSR Ну, все говорят, что на самом деле это не работает   -  person John Demetriou    schedule 30.10.2018
comment
Мы используем модуль Ethernet под названием NetBurner. У них есть действительно хорошее приложение для настройки настоящих виртуальных COM-портов. Возможно, попробуйте, у меня нет проблем с подключением к VCOM, которые я создал с помощью своего приложения C #. netburner. ru / support / documents / sb70 / deployment-tools-9 /   -  person Baddack    schedule 31.10.2018
comment
@Baddack Я решил использовать другое устройство GPS   -  person John Demetriou    schedule 01.11.2018


Ответы (3)


Как оказалось, драйвер виртуального COM-порта U-BLOX не полностью эмулирует COM-порт, что вызывает проблемы с .Net. Независимо от того, C# или C++ или любой другой язык, работающий на .Net. Единственное решение - либо не использовать это устройство, либо использовать промежуточное программное обеспечение.

person John Demetriou    schedule 01.11.2018

Если у вас нет особых причин для использования драйвера VCP, используйте вместо него драйвер CDC. Доступен как «Стандартный драйвер u-blox GNSS для Windows» на их веб-сайте:

https://www.u-blox.com/en/product-resources/2673The/field_file_category/driver-221/field_file_products%253Afield_product_category/position-time-152

У меня была такая же проблема, как и у вас, но после смены драйвера устройства все работает как положено. Похоже, что их драйвер VCP не полностью совместим со стандартной структурой драйвера последовательного порта.

person matli    schedule 12.09.2019
comment
Возможно, вам придется перенастроить порты для драйвера CDC. Используйте инструмент u-center, чтобы включить вывод NMEA на USB. - person Der_Meister; 27.05.2021

Мне удалось решить эту проблему, и я подумал, что поделюсь своим решением.

Мне не удалось использовать драйвер CDC, так как мое устройство представляет собой защищенное устройство Windows с выделенным GPS - решение CDC может работать только для съемных устройств GPS через USB. Драйвер датчика должен быть установлен, и драйвер VCP может быть установлен рядом с датчиком для обеспечения COM-порта.

Хотя драйвер VCP не полностью эмулирует COM-порт, вы можете использовать другое программное обеспечение, чтобы полностью эмулировать виртуальный COM-порт uBlox и заполнить пробелы. Таким программным обеспечением для меня был GPS Gate - https://gpsgate.com/. Конечный результат - uBlox Sensor -> uBlox VCP -> GPS Gate VCP. Затем я смог успешно использовать GPS Gate VCP в моем приложении C # и получить данные GPS.

GPS Gate также предлагает плагин Location API, который может удалить uBlox VCP из уравнения (uBlox Sensor -> GPS Gate VCP через Location API), но мне это не очень повезло, к тому же у меня уже было рабочее решение.

person HLChucky    schedule 11.10.2019