python - 重新启动后Pyserial的串行连接问题

标签 python python-3.x windows serial-port pyserial

我有一个Python脚本,可以通过RS232串行端口与测量仪器通信。
一切正常,但是每次我打开PC(Windows 10)时,通信一开始都不起作用。我必须打开一个串行终端(例如hterm),然后按“连接”和“断开连接”按钮。之后,Python脚本将按预期工作,对仪器进行读写操作就没问题了。
这是代码的简短示例:

import serial, time
ser = serial.Serial(port='COM6', baudrate=19200, bytesize=8, parity=serial.PARITY_NONE, stopbits=1, timeout=0, xonxoff=False, rtscts=False, dsrdtr=False)
time.sleep(1)
print(ser.isOpen()) #output: true
ser.write(b'READ:CH1\r\n')
time.sleep(1)
print("read:" + ser.read(18).decode('utf-8'))
ser.close()
print(ser.isOpen()) #output: false

仪器未接收到数据“READ:CH1”或任何其他命令。因此,没有任何通过ser.read()传输到PC的数据。
我尝试了硬件握手和很长的 sleep 时间的所有可能性。我猜Windows和Pyserial之间存在问题。在Python中,端口是开放的,但Windows不会发送数据。你有什么想法我能做什么?
谢谢你的帮助。

最好的祝福

使用解决方案进行编辑:

除了“Serial.flushInput()”和“Serial.flushOutput()”以外,还需要“Serial.reset_input_buffer()”和“Serial.reset_output_buffer()”。

最佳答案

如果您使用的是第三方工具,那么脚本可以正常工作,那么我认为任一侧的缓冲区中都存在一些垃圾数据,刷新硬件设备和python脚本上的串行端口也可能有效并进行验证如果在硬件设备上接收到数据,则可能会将垃圾附加在命令上,还尝试使用一些 header 位,以防止此类通信出错。

使用一些串口嗅探器来验证正在发送的内容,例如this

关于python - 重新启动后Pyserial的串行连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61824768/

相关文章:

c++ - 如何在动态加载的 DLL 中正确实现 (C++) 线程本地存储?

c# - 有没有办法检测 Windows 是否正在安装设备驱动程序?

python-3.x - 为什么这段代码在 Python 和 Pypy3 中给出不同的结果?

python - 如何修复 "' pandas.compat' has no attribute 'string_types' “python3 中的错误

python - 如果 t 是 float ,如何存储 f(t)?

c++ - 有什么工具可以为 Windows 目标编译 C++2011 代码?

python - Pandas 数据框 reshape

python - GaussianProcess 回归结果正确……达到比例因子?

python - 具有模拟和多个功能的单元测试

python - 可迭代的多处理队列不退出