Buenas tardes:
Normalmente he trabajado con Modbus RTU Slave y Modbus TCP Slave sin problemas. En este proyecto quiero que el arduino UNO sea maestro de un variador de velocidad de motores Schneider ATV 12 con comunicación Modbus RTU.
Algo creo que le falta a mi código o librería equivocada.
#include <ModbusMaster.h>
#define MAX485_DE 2
// instantiate ModbusMaster object
ModbusMaster node;
void preTransmission()
{
digitalWrite(MAX485_DE, 1);
}
void postTransmission()
{
digitalWrite(MAX485_DE, 0);
}
void setup()
{
pinMode(MAX485_DE, OUTPUT);
// Init in receive mode
digitalWrite(MAX485_DE, 0);
// Modbus communication runs at 9600 baud
Serial.begin(9600);
// Modbus slave ID 1
node.begin(1, Serial);
// Callbacks allow us to configure the RS485 transceiver correctly
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
}
void loop()
{
int Mdelay = 15; // microdelay
node.readHoldingRegisters(0x2199, 1);
Serial.print("[2199] ");
Serial.print(node.getResponseBuffer(0));
delay(Mdelay);
node.clearResponseBuffer();
Serial.print(" ");
node.readHoldingRegisters(0x219A, 1);
Serial.print("[219A] ");
Serial.print(node.getResponseBuffer(0));
delay(Mdelay);
node.clearResponseBuffer();
Serial.print(" ");
node.readHoldingRegisters(0x219B, 1); // Estado variador
Serial.print("[219B] ");
Serial.print(node.getResponseBuffer(0));
delay(Mdelay);
node.clearResponseBuffer();
Serial.print(" ");
node.readHoldingRegisters(0x219C, 1); // Velocidad real variador
Serial.print("[219C] ");
Serial.print(node.getResponseBuffer(0));
delay(Mdelay);
node.clearResponseBuffer();
Serial.print(" ");
node.writeSingleRegister(0x2199, 0xE); //Poner operativo el variador
node.writeSingleRegister(0x219A, 1200); //Velocidad variador
}
La imagen como referencia de conexión del módulo MAX485
No realiza ningun envio y recepción de datos, pero el variador no da error de comunicación.
Gracias,