最近在做一个机器人项目,用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);
}
}
|