MKS PR4000控制器RS232串口通信Python脚本无响应问题咨询
问题原因
- 缺少指令结束符:PR4000的RS232协议要求每条指令末尾必须附加回车符(
\r,ASCII 0x0D)作为结束标识。你在超级终端输入指令后按下回车时会自动发送该字符,但现有Python代码仅发送了输入的指令内容,未附加结束符,控制器无法识别完整指令,因此不会返回响应。 - 其他潜在问题:
- 读取逻辑鲁棒性不足,0.1s的等待时间可能不足以让控制器完成响应返回
- 未匹配设备的流控设置,若超级终端开启了RTS/CTS硬件流控,pySerial默认关闭流控会导致通信失败
修正后的代码
import time import serial # 串口参数与超级终端配置完全保持一致 ser = serial.Serial( port='COM7', baudrate=9600, parity=serial.PARITY_ODD, stopbits=serial.STOPBITS_ONE, bytesize=serial.SEVENBITS, # 若超级终端开启了硬件流控请取消下一行注释 # rtscts=True ) if ser.isOpen(): print('串口已打开,输入指令后按回车发送,输入exit退出') while True : data_in = input(">> ") if data_in == 'exit': ser.close() break else: # 指令末尾附加回车符,用ascii编码匹配7位数据位要求 ser.write((data_in + '\r').encode('ascii')) out = b'' # 延长等待时间,循环读取直到没有新数据 time.sleep(0.3) while ser.inWaiting() > 0: out += ser.read(ser.inWaiting()) time.sleep(0.1) if out: print(out.decode('ascii').strip())
验证步骤
- 先输入查询指令
?RT测试,正常会返回远程模式状态 - 再输入
RT,ON开启远程模式后,即可发送压力读取指令获取压力计数值
内容的提问来源于stack exchange,提问作者adrien pillet
相关产品推荐
相关产品推荐

