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

树莓派基于PySerial实现RS422通信无响应问题排查

排查RS422通信无响应问题的步骤

针对你用树莓派+Waveshare USB转RS422+PySerial和测量设备通信,发送灯亮但收不到响应的问题,从硬件、协议、代码三个层面逐一排查:

一、RS422硬件连接核心检查

RS422是差分全双工通信,硬件连接错误是最常见的问题:

  • 引脚交叉对应:Waveshare转换器的TX+(A)接设备的RX+,TX-(B)接设备的RX-;转换器的RX+(A)接设备的TX+,RX-(B)接设备的TX-,绝对不能接反(接反的话发送灯可能亮,但收不到响应)。
  • 终端电阻:如果设备和转换器距离超过2米,或者总线只有这两个节点,必须在两端(设备侧和转换器侧)接入120Ω终端电阻,部分设备有内置终端电阻开关,务必打开。
  • 设备供电:确认测量设备已正常供电,多数工业设备需要独立电源,RS422接口不提供供电。

二、串口参数严格匹配

代码中的串口参数必须和设备手册完全一致,差一个都不行:

  • 核对设备手册的波特率、奇偶校验、停止位、数据位,比如有些设备可能用19200波特率,或者偶校验;
  • 若设备要求硬件流控制(RTS/CTS),需要在Serial初始化时添加rtscts=True;
  • 树莓派串口权限:执行sudo usermod -aG dialout pi将当前用户加入dialout组,重启后避免/dev/ttyUSB0访问权限问题。

三、通信协议细节修正

工业设备的命令格式通常不是纯ASCII字符串,需严格遵循设备手册:

  • 命令格式补全:多数设备要求命令加起始/结束符,比如GETINFO\r\n或GETINFO\n,仅发送GETINFO设备可能不识别;
  • 响应等待时间:取消代码中time.sleep(1)的注释,部分设备处理命令需要时间,也可将timeout设为3秒(timeout=3);
  • 校验位要求:部分设备需要CRC校验或和校验,纯ASCII命令不符合要求的话,设备不会响应。

四、代码优化与调试

调整代码以适配RS422通信特性:

import serial
import time

# 初始化串口,按需添加流控制
ser = serial.Serial(
    port='/dev/ttyUSB0',
    baudrate=9600,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS,
    timeout=3,
    # rtscts=True  # 若设备要求硬件流控制则取消注释
)

# 清空接收缓冲区,避免旧数据干扰
ser.flushInput()

# 按设备手册要求构造命令,示例添加换行符
message = 'GETINFO\r\n'
message = message.encode('ascii')
ser.write(message)
# 等待发送缓冲区完全发送
ser.flush()
# 给设备足够的处理时间
time.sleep(1)

# 循环读取所有响应数据
print("收到响应:")
while ser.in_waiting > 0:
    response = ser.readline().decode('ascii').strip()
    print(response)

ser.close()

五、硬件回环测试验证

先排除转换器和PySerial的问题:

  • 将Waveshare转换器的TX+与RX+短接,TX-与RX-短接;
  • 运行上述代码,若能收到自己发送的命令,说明转换器和PySerial工作正常,问题出在测量设备或设备侧设置;
  • 若收不到,检查转换器驱动(树莓派一般自动识别CH340/PL2303芯片),或换一个USB端口试试。

内容的提问来源于stack exchange,提问作者Ondřej Hojný

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:45:05