【问题标题】:Assign fixed COM ports to keyspan adapters on Windows将固定 COM 端口分配给 Windows 上的键跨适配器
【发布时间】:2016-10-21 06:56:36
【问题描述】:
我有一个应用程序,它通过键跨 USB 到串行适配器从连接到 PC 的 2/3 机器读取和发送数据。发送/接收效果很好。
我的问题是,在重新启动 PC 时,COM 端口是“随机”分配的,经常交换。这使得自动处理数据变得不可能。
我尝试在设备管理器和 Keyspan 辅助软件中手动设置 COMm 端口,但没有成功。
问题:
- 如何修复 Windows 上的 COM 端口,以便重启后它们始终相同?
- 如何使用 java/c#/powershell 分配 COM 端口(获取端口设置并保存(配置后),在下次重新启动时从配置文件中设置)?
提前感谢您的任何建议。
罗马
【问题讨论】:
标签:
c#
windows
powershell
serial-port
usb
【解决方案1】:
非常感谢您的帮助。
与此同时,我对 http://syswow.blogspot.ch/2013/03/change-device-com-port-via-powershell.html 的解决方案稍作修改
不幸的是,如前所述,我当前的键跨设备 ID 不稳定(KEYSPAN*USA19HMAP\00_00 和 KEYSPAN*USA19HMAP\01_00 和 KEYSPAN*USA19HMAP\02_00)。这些 ID 可以并且经常在重启之间发生变化(我想 Windows 正在“注册”它们)。
我已经换到另一个供应商,现在我得到了稳定的 ID/COM(FTDIBUS\VID_0403+PID_6001+FTH8ZL5AA\0000 和 FTDIBUS\VID_0403+PID_6001+FTH919SZA\0000 等)。
再次感谢您的帮助。
罗马
【解决方案2】:
如果没有供应商提供的特殊 USB 驱动程序,这是不可能的。我不知道谁为您的键跨 USB 制作了 USB 驱动程序,但您可以向他们发送一封电子邮件,询问他们是否提供类似的东西。我们将 Silabs CP210X 驱动程序用于我们产品的 USB 驱动程序,他们提供了一种特殊的驱动程序,可以分配 COM 端口,并且在插入我们的设备时不会随机更改。您可以尝试看看,但不能保证将适用于您的 USB。
【解决方案3】:
根据我的经验,COM 端口名称在 Windows 中是稳定的。我怀疑您的 USB 转串口适配器的实现方式有些奇怪,或者您使用的 Windows 驱动程序有些奇怪。
但是,鉴于 COM 端口名称对您来说不稳定,我建议使用libusbp。它是一个用 C 语言编写的 USB 抽象库,可以枚举系统上的 USB 设备并告诉您它们的 COM 端口名称。你会做的是:
- 使用
libusbp_list_connected_devices获取设备列表。
- 对于每台设备,请致电
libusbp_device_get_os_id。这将返回一个类似于USB\\VID_1234&PID_DA01\6&11A23516&18&0000 的字符串。该字符串在重新启动后应该是稳定的,因此您将在软件的配置文件中列出这些字符串。
- 如果您看到设备的 ID 与您的配置文件中的内容匹配,请使用
libusbp_serial_port_create 和 libusbp_serial_port_get_name 获取 COM 端口名称。
该库是 C 语言,但它可以编译为 Win32 DLL,您可以使用 PInvoke (FFI) 从 C# 或 Java 调用其中的函数。如果您尝试在 Visual Studio 中编译该库,则该库可能会出现一些小的编译错误,因为它主要用于 MinGW/GCC/clang 环境。您应该能够修复这些错误和/或在 GitHub 上将它们报告为问题。