无法使用 Seeed Xiao nRF52840 和 ModbusMaster 库通过 Modbus 与 SEN0491 激光测距传感器通信

问题描述 投票:0回答:1

我在尝试通过 Modbus 与 DFRobot(产品页面)的 SEN0491 激光测距传感器进行通信时遇到困难。我使用 Seeed Xiao nRF52840 来执行任务,并使用 ModbusMaster 库来促进通信。

我的设置:

看到Xiao nRF52840通过Serial1连接到SEN0491激光测距传感器。 激光器的 TX RX 线连接到 nRF 板上的 TX RX 线。 利用 Arduino 的 ModbusMaster 库。尝试过不同的波特率:9600、19200、38400、115200 不确定从设备的 Modbus 地址,但尝试过 0,1,2。

代码:

#include <ModbusMaster.h>
#include <Adafruit_TinyUSB.h>

ModbusMaster node;

void setup() {
  Serial.begin(115200);
  while (!Serial) {
    delay(100);
  }
  Serial.println("Starting Modbus Master test");

  Serial1.begin(115200);  // Initialize Serial1 for Seeed Xiao nRF52840
  node.begin(2, Serial1);
}

void loop() {
  uint8_t result = node.writeSingleRegister(0, 0x1234);
  if (result != node.ku8MBSuccess) {
    Serial.println("Write failed!");
  }

  result = node.readHoldingRegisters(0, 1);
  if (result != node.ku8MBSuccess) {
    Serial.println("Read failed!");
    Serial.print("Modbus error code: ");
    Serial.println(result);
  }

  delay(500);
}

问题: 我不断收到失败消息(“写入失败!”和“读取失败!”)以及错误代码 224。 我不确定从设备的 Modbus 地址和波特率,并尝试扫描通用地址和速率但没有成功。

如果有人遇到类似的问题或有任何调试建议,我将非常感激。

我理想地想要发送的modbus命令是“系统恢复”命令,即MODADDR 06 00 00 00 01 CRCH CRCL。

当我使用简单的 Serial1.read() 时,我能够读取激光以 ascii 打印的字符,但我需要修改激光的设置,这就是我需要使用 modbus 的原因。

arduino modbus nrf52
1个回答
0
投票

根据库的文档,错误 224 (0xE0) 表示您的 Modbus 网络上没有设备与您尝试的地址(0、1 和 2)相匹配。

如果您相信这个论坛帖子

模块地址为0x50(默认)

这似乎是一致的。因此,请尝试将查询中的 MODADDR 更改为 0x50。

最后看评论这里,默认波特率应该是115200。

© www.soinside.com 2019 - 2024. All rights reserved.