ArgumentException:给定的端口名称不以 COM/com 开头或未解析为有效的串行端口

ArgumentException: The given port name does not start with COM/com or does not resolve to a valid serial port

我正在尝试连接到 u-blox GPS 设备的 driver 提供的虚拟 com 端口。

设备正常出现在设备管理器的传感器选项卡下,我真的可以使用 C# GeoCoordinateWatcher class 获取坐标数据。

但我想读取基础 NMEA 数据。 所以在这样做的过程中,我安装了 U-BLOX 提供的 Virtual Com Port driver,它在设备管理器中生成了一个 u-blox virta com 端口。

使用 Putty 连接到那个是可以的,我可以看到所有的 NMEA 线都被转储到那里。

但是当我尝试使用 C# 连接到同一个端口时(显然在 Putty 关闭之后),我得到了标题中提到的异常

The given port name does not start with COM/com or does not resolve to a valid serial port

我的代码相当简单(这不是我第一次使用 com 端口)并且所有内容都已正确定义(端口名称、停止位、奇偶校验、波特率等)。我什至尝试更改为 "wrong" com 端口名称以查看我将得到的异常,它完全不同(Com 端口没有退出异常)。

那么此时 C# 发生了什么?难道我做错了什么?这是 SerialPort class 中的错误吗? Putty 似乎在连接和流式传输数据方面工作得很好。 我的代码简单如下

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

m_port.Open();

我什至尝试对这些值进行硬编码,但仍然遇到相同的异常。 我尝试了很多建议的解决方案,发现 here、none 有帮助。 我还尝试从设备管理器高级设置更改 COM 端口号,这也没有帮助

事实证明,U-BLOX 虚拟 COM 端口驱动程序无法完全模拟导致 .Net 出现问题的 COM 端口。无论是 C#C++ 还是 .Net 上的任何其他语言 运行 唯一的解决办法是要么不使用这个设备,要么使用中间软件。

如果您没有任何特殊原因需要使用 VCP 驱动程序,请改用 CDC 驱动程序。在他们的网站上以 "u-blox GNSS Standard Driver for 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驱动和常规的串口驱动结构不完全兼容。

我设法解决了这个问题,并认为我会分享我的解决方案。

我无法使用 CDC 驱动程序,因为我的设备是具有专用 GPS 的 Rugged Windows 设备 - CDC 解决方案可能仅适用于通过 USB 的可移动 GPS 设备。必须安装传感器驱动程序,VCP 驱动程序可以与传感器一起安装以提供 COM 端口。

虽然 VCP 驱动程序不能完全模拟 COM 端口,但您可以使用另一个软件来完全模拟 uBlox 虚拟 COM 端口并填补空白。 GPS Gate 是适合我的软件 - https://gpsgate.com/。最终结果是 uBlox 传感器 -> uBlox VCP -> GPS Gate VCP。然后,我能够在我的 C# 应用程序中成功使用 GPS Gate VCP,并获得 GPS 数据。

GPS Gate 还提供了一个 Location API 插件,可以从等式中删除 uBlox VCP(uBlox 传感器 -> GPS Gate VCP 通过 Location API),但我没有太多祝你好运,而且我已经有了一个可行的解决方案。