Arduino 基于MODBUS协议的多数据位串口代码
时间: 2023-08-16 08:07:44 浏览: 47
以下是一个简单的 Arduino 基于 MODBUS 协议的多数据位串口代码示例:
```
#include <ModbusMaster.h>
// 定义 MODBUS 通信参数
#define MODBUS_SLAVE_ID 1
#define MODBUS_BAUD_RATE 9600
#define MODBUS_SERIAL_CONFIG SERIAL_8N1
// 实例化 ModbusMaster 对象
ModbusMaster node;
void setup() {
Serial.begin(MODBUS_BAUD_RATE, MODBUS_SERIAL_CONFIG); // 初始化串口通信
node.begin(MODBUS_SLAVE_ID, Serial); // 开始 MODBUS 通信
}
void loop() {
uint16_t data[2]; // 定义一个包含两个 uint16_t 类型数据的数组
uint8_t result; // 定义 MODBUS 读取结果
// 读取 2 个寄存器的值
result = node.readHoldingRegisters(0, 2);
if (result == node.ku8MBSuccess) { // 如果读取成功
data[0] = node.getResponseBuffer(0); // 获取第 1 个寄存器的值
data[1] = node.getResponseBuffer(1); // 获取第 2 个寄存器的值
Serial.print("Received data: ");
Serial.print(data[0]);
Serial.print(", ");
Serial.println(data[1]); // 打印接收到的数据
} else { // 如果读取失败
Serial.print("MODBUS read error: ");
Serial.println(result); // 打印错误代码
}
delay(1000); // 读取间隔时间为1秒
}
```
在代码中,首先定义了 MODBUS 通信的参数,包括从机地址、波特率和串口配置。然后实例化了一个 `ModbusMaster` 对象,用于进行 MODBUS 通信。
在 `loop()` 函数中,先定义了一个包含两个 `uint16_t` 类型数据的数组,用于存储读取到的数据。然后使用 `node.readHoldingRegisters()` 函数读取 2 个寄存器的值,返回值为读取结果。如果读取成功,就通过 `node.getResponseBuffer()` 函数获取第 1 个和第 2 个寄存器的值,并打印接收到的数据。如果读取失败,就打印错误代码。
最后通过 `delay()` 函数设置读取间隔时间为 1 秒。