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
相关产品推荐
相关产品推荐

