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

PySerial连接KERN秤问题:主动获取稳定重量返回异常

解决KERN秤串口指令乱码问题

问题分析

你遇到的乱码问题核心原因有两个:

  1. 指令格式错误:你发送的S \r\n包含多余空格,设备无法正确解析该指令,因此返回乱码;而仅发送S符合设备指令规范,所以能得到正常响应。
  2. 读取逻辑与超时设置不合理:原代码使用timeout=0(非阻塞模式)配合逐字节读取,导致数据未完全接收就开始解析,最终出现乱码。

解决方案

1. 修正指令格式

根据手册要求,将指令改为S\r\n(移除S后的空格),确保与设备预期的指令格式完全匹配。

2. 优化串口读取逻辑

  • 设置合理的超时时间(如timeout=1),确保串口有足够时间接收完整响应。
  • 使用readline()读取完整的一行响应,替代逐字节读取的方式,避免数据截断。

修正后的代码

import serial

# 初始化串口,设置合理超时
ser = serial.Serial(
    port='/dev/tty.usbserial-1140',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=1  # 1秒超时,确保能获取完整响应
)

def format_cmd(cmd):
    return cmd.encode('ascii')

# 发送符合手册规范的指令(移除多余空格)
command = format_cmd('S\r\n')
ser.write(command)

# 读取并解析响应
response = ser.readline().decode('ascii').strip()
print("获取的重量数据:", response)

# 关闭串口连接
ser.close()

额外建议

  • 再次核对手册中的指令细节:确认指令是否需要特定的终止符(如\r或\n单独使用)、是否需要校验位等。
  • 如果需要循环主动获取数据,可以将读取逻辑放入循环中,并在每次发送指令前清空串口缓冲区(使用ser.flushInput()),避免残留数据干扰。

内容的提问来源于stack exchange,提问作者bernat97

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:00:38