Anuncio TOP B1 Mensaje

Colapsar

Anuncio TOP B4 Mensaje (Mobile)

Colapsar

Anuncio

Colapsar
No hay anuncio todavía.

Ayuda con Modbus RTU con Max 485 Master

Colapsar
X
 
  • Filtrar
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes

  • Ayuda con Modbus RTU con Max 485 Master

    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 ATV 12 Schneider con comunicación Modbus RTU.
    Algo creo que le falta a mi código o librería equivocada.

    Código:
    #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 ninguna comunicación, pero el variador no da error de comunicación.

    Gracias,
    Archivos Adjuntos

  • #2
    Resuelto, terminado lo básico que era la comunicación.

    Código:
    #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);
      node.setTransmitBuffer(00, 0x0E); //Ready
      node.writeMultipleRegisters(0x2199,1);
      }
    
    void loop()
    {
     
      delay(500);
      node.setTransmitBuffer(00, 0x0F); //run
      node.setTransmitBuffer(01, 1500); //rpm 
      node.writeMultipleRegisters(0x2199,2);
    
      int Mdelay = 30;   // microdelay
      node.readHoldingRegisters(0x2199, 4); 
      Serial.println(" ");
      Serial.print("[2199] ");
      Serial.println(node.getResponseBuffer(00));
      delay(Mdelay);
      Serial.print("[219A] ");
      Serial.println(node.getResponseBuffer(01));
      delay(Mdelay);
      Serial.print("[219B] ");
      Serial.println(node.getResponseBuffer(02));
      delay(Mdelay);
      Serial.print("[219C] ");
      Serial.println(node.getResponseBuffer(03));
      delay(Mdelay);
      node.readHoldingRegisters(0x0C84,1); //corriente motor
      Serial.print("[0C84] ");
      Serial.println(node.getResponseBuffer(00));
      delay(500);
      
    }

    Comentario

    Anuncio Footer B3 Mensaje

    Colapsar

    Anuncio Footer B5 Mensaje (Mobile) 300x600

    Colapsar
    Trabajando...
    X