Python串口无法正常发数据但Termite终端可行,求排查方案
串口命令发送异常排查:Python发送无效但Termite正常
作为大型应用的一部分,我需要从PC向设备发送串口命令,但Python始终无法正确发送数据,相同命令用Termite终端发送却完全正常,已经排查多日仍没找到原因。
已排除的问题点
- 串口配置错误:已确认波特率、数据位、奇偶校验、停止位与Termite完全一致(这些也是串口默认设置)
- 命令正确性与终止符:Termite中需追加CRLF作为终止符,Python里也在命令末尾添加了
\r\n;经示波器和串口监视器验证,两者发送的命令(包括终止符)完全一致,无丢位情况 - 首次发送干扰问题:尝试在每条命令前添加
\r\n(设备要求的命令终止符),认为可能存在垃圾数据干扰,但无效 - 输入缓冲区问题:考虑到不读取响应可能引发异常,即使设备无有效反馈,每次发送前都会读取所有可用字节清空缓冲区,无效果
- 端口状态问题:确认Windows未关闭端口,当前无报错,且串口监视器显示端口可正常读写
代码片段
以下是串口配置与命令发送的代码片段:
try: self.SPC = serial.Serial(port=connectionData.get("spc_com"), baudrate=115200, timeout=1) except serial.SerialException as err: print(f'SPC Serial Error: {err.strerror}') return False def SPCCommand(self, command: str): if not command: return try: self.readAndClearBuffer() self.SPC.write(command.encode()) except serial.SerialException as err: print(f'SPC Serial Error: {err.strerror}') return def readAndClearBuffer(self): data = '' while True: try: data = self.SPC.read(1024) if not data: return print(data) except serial.SerialException as err: return self.SPCCommand("\r\n8000011200000000")
示波器和串口监视器都显示发送的命令完全一致,我已经没有其他排查思路了,请问还存在哪些可能的问题?有什么其他排查方向?
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

