在Python中同时读写同一串口

2 投票
1 回答
2250 浏览
提问于 2025-04-16 22:46

有没有办法做到这一点,而不出现“COM端口正在使用”的错误?我有一个服务,它在一个串口上监听GPS的GPRMC信息。但是我在测试电脑上没有这个设备。所以我想写一个Python脚本,在这个端口上模拟GPRMC信息,同时我的另一个Python脚本也在监听同一个端口并进行解析。

1 个回答

3

写入串口并不会在同一个设备上留下可以读取的消息。这就是串口的工作原理,绝大多数操作系统也不是这样设计的,不能像缓冲区那样使用。你真正需要的是一个虚拟串口。

你可以查看维基百科上关于COM端口重定向器的这一部分,看看里面有没有能满足你需求的内容。如果没有的话,我建议你搜索一下COM端口模拟器、串口虚拟化等,直到找到适合你使用场景和操作系统的软件。这可能会比较困难,尤其是如果你的模拟需要精确的时间控制。

补充说明:为了让这个更清楚一点,我们来聊聊pySerial库是如何与Python进行通信的。pySerial其实就是在和操作系统的串口API进行沟通。通常情况下,操作系统会把串口看作一个可以写入信息的地方和一个可以读取信息的地方(在几乎所有现代计算系统中都是这样缓冲的)。重要的是要理解,从操作系统的角度来看(串口是如何被建模的),写入的位置只能写入,而读取的位置只能读取。这可能和实际的串口硬件如何与机器连接并不完全一致,但在我接触过的大多数串口硬件和接口设计中,都是为了简单和降低成本而这样设计的。因此,你只有两个基本选择。

  1. 给操作系统一个虚拟串口,这样你就可以同时读取和写入。

  2. 可能更简单的是,在你电脑的一个串口上连接一个无调制解调器适配器,然后用串口线把两个端口连接起来。这样你就可以在一个端口上运行你的服务,在另一个端口上运行你的模拟设备脚本。

撰写回答