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

RS-485 Modbus RTU通信无响应求助:Particle Argon+THVD1429调试

RS-485 Modbus RTU半双工通信调试求助

我正在尝试通过RS-485 Modbus RTU半双工通信与电池充电控制器建立连接,硬件使用Particle Argon开发板和THVD1429 RS-485收发器。目前已确认Tx数据包发送正常,但始终收不到充电控制器的响应。充电控制器采用单独供电,仅连接A、B及GND线。

电路原理图

#include "Particle.h"

SYSTEM_MODE(SEMI_AUTOMATIC);
SYSTEM_THREAD(ENABLED);

//实例化ModbusMaster对象,从机ID为1
ModbusMaster node(1);
unsigned long interval = 0;
unsigned long base_T = 1000;
const int addr = 0x30A0;

void idle() {
  delay(10); // 适配部分从机10ms延迟响应的情况
}

void setup() {
  // 初始化Modbus通信波特率
  node.begin(9600);
  node.enableTXpin(D4); //D4用于控制RS485驱动芯片的TX使能引脚
  node.enableDebug(); //在Serial打印TX和RX帧,但注意这会打乱RS485通信时序导致失败
  node.idle(idle); //在发送数据和等待从机响应的空闲时间调用此函数

  Serial.begin(9600);
  // while(!Serial.available()) Particle.process();
  Serial.println("Starting Modbus Transaction:");
}

void loop() {
  uint8_t j, result;
  uint16_t data[10];

  if (millis() - interval > base_T) {
    interval = millis();
    result = node.readInputRegisters(addr, 1);

    // 读取成功则处理数据
    if (result == node.ku8MBSuccess) {
      Serial.print("Success, Received data: ");
      for (j = 0; j < 2; j++) {
        data[j] = node.getResponseBuffer(j);
        Serial.print(data[j], HEX);
        Serial.print(" ");
      }
      Serial.println("");
      base_T = 1000;
    } else {
      Serial.print("Failed, Response Code: ");
      Serial.print(result);
      Serial.print(" - ");
      Serial.print(result, HEX);
      Serial.println("");
      base_T = 5000; //失败后延长重试间隔
    }
  }
}

已通过逻辑分析仪确认微控制器发出的数据包符合预期,但不清楚THVD1429收发器的A、B线应呈现何种状态,寻求有THVD1429使用经验或RS-485总线调试经验的人士协助。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 20:25:20