使用Python的pySerial连接PerfectPrime TC0309无数据返回问题求助
解决pySerial连接PerfectPrime TC0309无法读取返回数据的问题
先梳理代码里的核心问题和修复方案:
1. 超时设置导致无数据可读
你把ser.timeout = 0设为了非阻塞模式,发送命令后立刻查询in_waiting,设备还没来得及返回响应,自然读到0。改成带超时的阻塞模式,比如ser.timeout = 1(等待1秒),给设备足够的响应时间。
2. 属性赋值错误
代码里serial.dsrdtr = False是错误写法,应该用串口实例ser来赋值,写成ser.dsrdtr = False,否则该参数未生效,可能影响设备握手逻辑。
修改后的可运行代码
import serial import time ser = serial.Serial() ser.baudrate = 9600 ser.port = 'COM4' ser.bytesize = serial.EIGHTBITS ser.stopbits = serial.STOPBITS_ONE ser.xonxoff = False ser.dsrdtr = False # 修正为实例属性赋值 ser.rtscts = True ser.parity = serial.PARITY_NONE ser.timeout = 1 # 设置1秒超时,让串口有时间接收设备响应 ser.open() ser.write(b'K') time.sleep(0.1) # 短暂等待设备处理命令,可根据实际响应速度调整 buffer_size = ser.in_waiting if buffer_size > 0: data = ser.read(buffer_size) print(f"收到数据: {data.decode('ascii')}") else: print("未收到设备响应") ser.close()
额外排查点
- 确认Termite的命令格式:有些设备要求命令结尾加换行符(比如
b'K\r\n'),可以试试发送b'K\r'或b'K\n',匹配Termite里实际发送的命令格式。 - 对齐串口参数:确保代码里的数据流控制、奇偶校验和Termite中能正常工作的配置完全一致(你提到Termite里rtscts、parity多选项都能工作,但优先匹配当前可用的配置)。
内容的提问来源于stack exchange,提问作者JapanMethanol
相关产品推荐
相关产品推荐

