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" 的形式提供:
我遇到了和你一样的问题,但是通过更改设备驱动程序,一切都按预期工作。好像他们的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),但我没有太多祝你好运,而且我已经有了一个可行的解决方案。
我正在尝试连接到 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" 的形式提供:
我遇到了和你一样的问题,但是通过更改设备驱动程序,一切都按预期工作。好像他们的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),但我没有太多祝你好运,而且我已经有了一个可行的解决方案。