我在尝试通过 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 的原因。