使用pyserial无法从AD-4407重量指示器获取数据求助
使用pyserial读取AD-4407重量指示器数据异常问题
我正在使用pyserial从AD-4407重量指示器获取数据,但程序始终返回"?"或空值。不过使用串口监视器或RSCom等其他软件时,能够正常获取该重量指示器的数据。以下是我的端口配置及代码:
import serial import codecs import binascii def weightFatcher(): serial_port = serial.Serial() serial_port.port = "COM1" serial_port.baudrate = 2400 serial_port.parity = serial.PARITY_EVEN serial_port.stopbits = serial.STOPBITS_ONE serial_port.bytesize = 7 serial_port.timeout = 10 serial_port.xonxoff = False serial_port.dsrdtr = False serial_port.rtscts = False serial_port.open() command = "RG\r\n" res = bytes(command, 'ascii') serial_port.write(res) data = serial_port.readall() print(data) serial_port.close() weightFatcher()
排查与解决步骤
- 修正命令格式:AD-4407的
RG命令可能不需要\r\n双结尾,部分设备仅要求\r或\n,甚至无换行符。先尝试将命令改为"RG\r"或"RG"测试。 - 替换读取逻辑:
readall()依赖超时触发,可能设备返回数据后未立即触发超时导致读取不完整。改用循环读取并判断结束符:import time # ...(原有串口配置代码) serial_port.write(res) time.sleep(0.1) # 给设备响应时间 data = b'' while serial_port.in_waiting > 0: data += serial_port.read(serial_port.in_waiting) print(data) - 严格对齐串口参数:对比串口监视器的配置,确认波特率、奇偶校验、数据位、停止位完全一致。部分软件会自动适配流控,手动核对
xonxoff/dsrdtr/rtscts的状态是否符合设备要求。 - 清空缓冲区:打开串口后先清空输入输出缓冲区,避免残留数据干扰:
serial_port.open() serial_port.flushInput() serial_port.flushOutput() - 调整解码方式:设备返回的数据可能不是ASCII编码,尝试用
data.decode('latin-1')解码,避免因编码不匹配显示?。
内容的提问来源于stack exchange,提问作者sourav singha
相关产品推荐
相关产品推荐

