使用PySerial连接T100-S300系列泵发送指令无响应问题咨询
T100-S300系列泵串口发送指令无响应修复方案
你的代码有三个直接导致设备不响应的问题:
- 串口核心参数漏配:pyserial初始化默认校验位为无校验,你只设置了波特率和超时,完全没配置手册要求的偶校验参数,设备收到的帧全部校验不通过,直接丢弃不会响应。虽然你记得要配8数据位、1停止位,但最好显式写在初始化参数里,避免不同版本pyserial默认值差异导致问题。
- 发送时序错误:调用
ser.write()后立刻执行ser.close(),此时串口发送缓冲区的数据可能还没完全传输到硬件链路,端口就被释放,设备根本收不到完整帧。同时你没有读取设备返回的应答,完全没法判断指令是否送达。 - 缺少设备唤醒步骤:不少USB转TTL模块默认的RTS/DTR电平会让泵处于待机锁死状态,需要手动拉低两个引脚再清空缓冲区,才能正常和设备通信。
修正后的可直接运行代码:
import serial import time # 手册标注的测试指令帧 command = b"\xE9\x01\x06\x57\x4A\x01\xF4\x01\x01\xEF" # 严格匹配手册要求补全所有串口参数 ser = serial.Serial( port="COM4", baudrate=9600, parity=serial.PARITY_EVEN, # 偶校验,为之前遗漏的核心配置 bytesize=serial.EIGHTBITS, # 8数据位 stopbits=serial.STOPBITS_ONE, # 1停止位 timeout=1, rtscts=False, dsrdtr=False ) # 唤醒设备,清空缓冲区残留的乱码数据 ser.dtr = False ser.rts = False time.sleep(0.1) ser.reset_input_buffer() ser.reset_output_buffer() # 发送指令 ser.write(command) # 等待缓冲区数据全部发送完成 ser.flush() time.sleep(0.2) # 读取设备应答,方便定位问题 response = ser.read_all() print(f"设备应答帧(十六进制): {response.hex(' ')}") ser.close()
补充排查项:如果运行上述代码仍然没有应答,先把USB转串口模块的TX和RX引脚短接,运行代码自发自收,确认串口本身收发功能正常,排除TX/RX接反、模块损坏、端口被其他程序占用的硬件/系统问题。也可以先用串口调试助手手动发送指令帧,确认指令本身的有效性。
内容的提问来源于stack exchange,提问作者Dr. Ernesto Chinchilla
相关产品推荐
相关产品推荐

