重启后 Pyserial 的串行连接问题
Serial connection problem with Pyserial after reboot
我有一个 Python 脚本可以通过 RS232 串行端口与测量仪器通信。
一切正常,但每次我打开 PC (Windows 10) 时,开始时通信都无法正常工作。我必须打开一个串行终端(例如 hterm)按 "connect" 和 "disconnect" 按钮。之后 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。
我尝试了硬件握手和很长的睡眠时间的所有可能性。我猜 Windows 和 Pyserial 之间有问题。 Python 端口打开,但 Windows 不发送数据。你知道我能做什么吗?
感谢您的帮助。
此致
编辑解决方案:
代替或补充“Serial.flushInput()”和“Serial.flushOutput()”你需要“Serial.reset_input_buffer()”和“Serial.reset_output_buffer()”。
如果您使用的是 third-party 工具并且脚本运行正常,那么我认为两侧的缓冲区中存在一些垃圾数据,刷新了硬件设备上的串行端口和python 脚本也可能工作并验证在硬件设备上接收到的数据可能是命令上附加了垃圾,也尝试使用一些 header 位来防止这种错误通讯.
使用一些串行端口嗅探器来验证正在发送的内容,例如 this
看看https://github.com/pyserial/pyserial/issues/329
https://github.com/pyserial/pyserial/issues/329#issuecomment-400852426
https://github.com/pyserial/pyserial/issues/329#issuecomment-503059537
你看到了吗?
另一个可能相关的问题:
https://github.com/pyserial/pyserial/issues/485
您可以尝试的另一件事是先打开和关闭端口。
这与您对
的 hterm 所做的相同
ser = serial.Serial()
time.sleep(1)
print(ser.isOpen()) #output: true
ser.close()
ser = serial.Serial()
time.sleep(1)
print(ser.isOpen()) #output: true
...
这个有用吗?
我有一个 Python 脚本可以通过 RS232 串行端口与测量仪器通信。 一切正常,但每次我打开 PC (Windows 10) 时,开始时通信都无法正常工作。我必须打开一个串行终端(例如 hterm)按 "connect" 和 "disconnect" 按钮。之后 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。 我尝试了硬件握手和很长的睡眠时间的所有可能性。我猜 Windows 和 Pyserial 之间有问题。 Python 端口打开,但 Windows 不发送数据。你知道我能做什么吗? 感谢您的帮助。
此致
编辑解决方案:
代替或补充“Serial.flushInput()”和“Serial.flushOutput()”你需要“Serial.reset_input_buffer()”和“Serial.reset_output_buffer()”。
如果您使用的是 third-party 工具并且脚本运行正常,那么我认为两侧的缓冲区中存在一些垃圾数据,刷新了硬件设备上的串行端口和python 脚本也可能工作并验证在硬件设备上接收到的数据可能是命令上附加了垃圾,也尝试使用一些 header 位来防止这种错误通讯.
使用一些串行端口嗅探器来验证正在发送的内容,例如 this
看看https://github.com/pyserial/pyserial/issues/329
https://github.com/pyserial/pyserial/issues/329#issuecomment-400852426
https://github.com/pyserial/pyserial/issues/329#issuecomment-503059537
你看到了吗?
另一个可能相关的问题:
https://github.com/pyserial/pyserial/issues/485
您可以尝试的另一件事是先打开和关闭端口。
这与您对
的 hterm 所做的相同ser = serial.Serial()
time.sleep(1)
print(ser.isOpen()) #output: true
ser.close()
ser = serial.Serial()
time.sleep(1)
print(ser.isOpen()) #output: true
...
这个有用吗?