Arduino conexion Modbus PLC DELTA

Hola, buen día o tarde! hace algún tiempo estuve intentando comunicar un Arduino y un plc delta SS2 con el fin de crear una especie de ampliación de pines especialmente los análogos, pero debido a la falta de conocimiento y varios errores deje el proyecto, es por eso que me gustaría ver si alguno de ustedes sabe como trabajar en esta modalidad y me podría orientar un poco.

Aquí les dejo parte de lo que hice, que probablemente este malo, pero bueno algo se intentó:

#include <modbus.h>
#include <modbusDevice.h>
#include <modbusRegBank.h>
#include <modbusSlave.h>

#define RS485TxEnablePin 2
#define RS485Baud 9600
#define RS485Format SERIAL_8E1

modbusDevice regBank;
modbusSlave slave;

void setup() {
  slave._device = &regBank;
  slave.setBaud(&Serial1, RS485Baud, RS485Format, RS485TxEnablePin);
  regBank.setId(1);

  // Configurar pines digitales como entradas
  for (int i = 2; i <= 13; i++) {
    pinMode(i, INPUT);
    regBank.add(40000 + i - 2); // Agregar registro para cada pin digital
  }

  // Configurar pines analógicos como entradas
  for (int i = 0; i <= 5; i++) {
    pinMode(A0 + i, INPUT);
    regBank.add(40012 + i); // Agregar registro para cada pin analógico
  }
}

void loop() {
  // Leer valores de pines digitales y actualizar registros Modbus
  for (int i = 2; i <= 13; i++) {
    regBank.set(40000 + i - 2, digitalRead(i));
  }

  // Leer valores de pines analógicos y actualizar registros Modbus
  for (int i = 0; i <= 5; i++) {
    regBank.set(40012 + i, analogRead(A0 + i) / 4); // Dividir por 4 para ajustar al rango de 0-1023 a 0-255
  }

  // Ejecutar el esclavo Modbus
  slave.run();

  // Retardo para el loop
  delay(2000);
}

La conexión del PLC y el Arduino fue mediante un Conversor TTL a RS485 MAX485CSA

En fin, el gran problema que tuve fue que nunca supe si realmente tuve comunicación entre el SS2- Delta y el Arduino, ya que se supone que las marcas M del PLC están en las direcciones 002049~003584 modbus y las Word o D estaban en las direcciones 404097~405376 pero por mucho que cambiara y cambiara valores nunca encontré algún cambio, si alguno tuviera algún dato o información adicional de como trabajar en esta modalidad me ayudaría muchísimo.

De ante mano muchas gracias!

Porque 4 librerías Modbus? Puedes poner link al repositorio para poder responderte.
Sin ver como trabaja la librería no se puede opinar libremente.
Que Arduino usas?

slave._device = &regBank;
  slave.setBaud(&Serial1, RS485Baud, RS485Format, RS485TxEnablePin);

Esto podria indicar que usas un MEGA. Pero hay otros Arduinos que poseen Serial1.
Cuando plantees algo siempre da toda la información para que opinemos.
No estamos a tu lado, no podemos leer tu mente.
Si quieres ayuda, debes ayudarnos con toda la información.
Entonces uno lee, comprende y responde.

Te esperamos a que completes en un nuevo post por favor.

No entiendo ¿Tienes programado un cliente modbus en el PLC?
El Delta es (sin programar nada ) es un servidor modbus (esclavo), por lo tanto el arduino tiene que ser un maestro ( Cliente), a menos que hayas programado un cliente en el PLC
Saludos.

Honestamente, este es un código q se me encomendó revisar así que podrás entender que ni yo sabia que era necesario el uso de un Arduino mega o de un Arduino que cuente con un serial1.

La libreria te la dejo aqui: arduino-modbus-slave/examples/MODBUSslave/MODBUSslave.pde at master · FlyingLotus1983/arduino-modbus-slave · GitHub

En ese caso o bueno la idea es que el Arduino debe ser programado como un esclavo Modbus, mientras que el PLC Delta SS2 actúa como el maestro Modbus. El Arduino responderá a las solicitudes del PLC proporcionando los datos solicitados. No se si estara bien mi enfoque.
Saludos.

Si solo va a ser un arduino es muchoooo mas fácil hacerlo maestro ( el delta ya es un esclavo). Ademas el foro es de Arduino y la parte complicada es hacer al Delta maestro.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.