如何使用modbusmaster库与多个设备进行读写?-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 968|回复: 1

[未解决] 如何使用modbusmaster库与多个设备进行读写?

[复制链接]
发表于 2021-11-30 19:28 | 显示全部楼层 |阅读模式
最近在做一个机器人项目,用arduino mega2560通过modbus RTU控制多个伺服电机驱动器,找到了modbus master库的官方文档,实现了对单个伺服从站的读取与写入,但是当有多个伺服从站的时候遇到了问题。
具体问题:我的程序如下,不知道在有多个从站的情况下如何成功的访问到2号从站,每次读取和写入数据都只能访问到1号从站;我按照官方文档编程,问题就出现在了下面的红色代码,不清楚如何初始化对象和分配串口。
请知道我出现的问题的大神帮忙解决,有偿帮助,在做一个项目,比较着急。
#include <ModbusMaster.h>

ModbusMaster servo_node1;
ModbusMaster servo_node2;

// 获取当前转速值
void GetCurrentRotateSpeed(){
  int CurrentRotateSpeed;
  uint16_t RotateSpeedVal;
  uint8_t result, j;
  result = servo_node1.readHoldingRegisters(0x00E4, 1);     // 00E4地址
  if (result == servo_node1.ku8MBSuccess){
    RotateSpeedVal = servo_node1.getResponseBuffer(0);
    CurrentRotateSpeed = int(float(RotateSpeedVal) / 8192 * 3000);
  }
  Serial.print("CurrentRotateSpeed : "); Serial.print(CurrentRotateSpeed); Serial.println("rpm");
  delay(50);

  int CurrentRotateSpeed2;
  uint16_t RotateSpeedVal2;
  uint8_t result2, i;
  result2 = servo_node2.readHoldingRegisters(0x00E4, 1);
  if (result2 == servo_node2.ku8MBSuccess){
    RotateSpeedVal2 = servo_node2.getResponseBuffer(0);
    CurrentRotateSpeed2 = int(float(RotateSpeedVal) / 8192 * 3000);
  }
  Serial.print("CurrentRotateSpeed : "); Serial.print(CurrentRotateSpeed2); Serial.println("rpm");
  delay(50);
}

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600);
  servo_node1.begin(1, Serial1);     // 分配串口
  servo_node2.begin(2, Serial1);
  delay(500);
}

void loop() {
  if(digitalRead(2) == LOW){  
    GetCurrentRotateSpeed();
    delay(50);
  }
}

发表于 2022-2-25 19:22 | 显示全部楼层
本帖最后由 anglor 于 2022-2-25 19:36 编辑

没看出红色代码有啥问题啊。我的就是这样子,可以正常读出3个从站的数据。 Snipaste_2022-02-25_19-34-01.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 13:34 , Processed in 0.077112 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表