You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 16:30:43