无论您如何配置设备,在某些时候您可能不得不询问用户端口在哪里,或者轮询所有串行设备以获得已知响应. (虽然轮询有它的缺陷,所以请继续阅读!).与USB设备不同,当您连接普通的串行设备时,操作系统不会知道供应商/设备ID.
获得串行端口列表后,您可以询问用户是否知道使用哪个串口.如果他们这样做,问题解决了!
如果他们不这样做,您可以提供轮询所有串行设备的一些数据,您知道这些数据会从您的设备产生一定的响应.请记住,如果用户连接了其他串行设备,那么“hello”字节串实际上可能是某些其他设备的自毁序列!因此,您应该警告用户轮询可能会干扰其他设备,并且在您执行此操作之前始终提示它们.
在不了解您的代码的情况下(例如,您正在使用的是什么通信框架;如果您在控制台中执行此操作,或者您正在使用GUI工具包等),则无法说明编写此代码的最佳方法可能.在最简单的情况下,您可以遍历所有串行设备,发送问候语并检查响应. (您也可以并行执行此操作:为问候语循环一次,然后再次循环以检查缓冲区中的内容.如果您想要获得更多的花哨,请使用正确的库.)
附注:如果你有一个可以设置供应商/设备ID的内置转换器,你或许可以解决这个问题,但转换器仍会被任何现代操作系统自动检测到并枚举为串口;你不会直接把它作为USB设备.有可能找出哪个端口与哪个ID相关,但我从未尝试过这样做.但是如果你不是那个选择转换器的人(例如,如果它是用户提供的电缆),这种方法就没用了.