当前位置:首页Arduino > 正文

Arduino上通过 Modbus接收4个16 进制字节数据

作者:野牛程序员:2024-05-29 19:06:20Arduino阅读 2568
Arduino上通过 Modbus接收4个16 进制字节数据

将接收到的 4 个 16 进制字节数据存储在一个数组中,代码实现如下:

#include <ModbusMaster.h>

// 创建一个 ModbusMaster 对象
ModbusMaster node;

void setup() {
  // 初始化串口
  Serial.begin(9600);

  // 初始化 Modbus 节点,假设使用串口 1
  node.begin(1, Serial);
}

void loop() {
  // 假设从地址 0 读取 2 个寄存器(每个寄存器 2 个字节,共 4 个字节)
  uint8_t result = node.readHoldingRegisters(0, 2);

  if (result == node.ku8MBSuccess) {
    // 获取寄存器值
    uint16_t highWord = node.getResponseBuffer(0); // 高字节
    uint16_t lowWord = node.getResponseBuffer(1);  // 低字节

    // 将高字节和低字节组合成 32 位整数
    uint32_t combinedValue = (uint32_t(highWord) << 16) | lowWord;

    // 输出 10 进制表示
    Serial.print("Received 32-bit value: ");
    Serial.println(combinedValue);
    
    // 输出 16 进制表示
    Serial.print("Received 32-bit value: 0x");
    Serial.println(combinedValue, HEX);
  }

  // 短暂延时
  delay(1000);
}

字节顺序:确保高字节和低字节的顺序正确,即高字节在前,低字节在后。

读取寄存器:使用 readHoldingRegisters 函数从 Modbus 从设备读取 2 个寄存器(每个寄存器 16 位,共 32 位,即 4 个字节)。

组合高字节和低字节:将读取到的两个 16 位寄存器值组合成一个 32 位整数。

野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • Arduino
  • 最新推荐

    热门点击