Ir al contenido

← Todas las funcionalidades

Control de biorreactoresM-DuinoModbus TCPModbus RTURS485Comunicación

Gateway Modbus TCP a RTU para una planta de biorreactores

Un gateway Modbus TCP a RTU permite que un SCADA hable con toda una planta a traves de una unica direccion IP mientras el PLC gestiona el bus serie por detras. Este ejemplo, tomado de un despliegue real de control de biorreactores, convierte un M-Duino en esclavo Modbus TCP en el puerto 502 y en maestro Modbus RTU sobre RS485, gobernando seis esclavos: dos enfriadoras, dos variadores de frecuencia y dos caudalimetros. El truco esta en mantener el lado TCP con buena respuesta mientras el lado RTU interroga sin bloquear nunca el loop.

Una IP por delante, seis esclavos RS485 por detras

El SCADA ve un unico dispositivo Modbus TCP en el puerto 502 con coils, holding registers e input registers. Por detras, el M-Duino es el maestro RTU en un bus RS485 9600 8N1 compartido por seis esclavos. El gateway mapea cada registro TCP al esclavo y funcion correctos, de modo que la sala de control nunca necesita saber que hay un bus serie de por medio.

Interrogacion round-robin sin bloqueos

Llamar a update() mantiene viva la imagen TCP en cada pasada del loop. Un temporizador de 200 ms avanza un puntero round-robin por los seis esclavos, ejecutando una transaccion RTU por paso. Con un timeout de maestro corto, un esclavo silencioso o lento solo retrasa su propio turno en lugar de congelar todo el gateway, asi que el SCADA siempre recibe una respuesta fresca.

Consignas hacia abajo, medidas hacia arriba

Los holding registers llevan las consignas y ordenes de marcha que escribe el SCADA; los input registers llevan temperatura, pH, litros acumulados y RPM reales que lee el gateway. Dos registros de 16 bits se combinan en valores de 32 bits para los totales de caudal y la velocidad del motor, de modo que una lectura de 250 rpm sobrevive intacta al viaje de RS485 a Ethernet.

Un fragmento de la implementación

Tal cual del ejemplo desplegado en el M-Duino — cópialo libremente:

void setup() {
  Serial.begin(115200);

  // RTU master at 9600 8N1 (short timeout: we do not want to block the TCP)
  master.begin(9600);
  master.setTimeout(200);

  // TCP slave: publish the three memory blocks
  modbus.addCoils(0, coils, 18);
  modbus.addHoldingRegisters(0, holdingRegs, 10);
  modbus.addInputRegisters(0, inputRegs, 12);
  modbus.begin();             // listen on port 502
}

El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.

Preguntas frecuentes

Por que usar un gateway en vez de conectar el SCADA directamente a RS485?

La mayoria de SCADA y salas de control hablan Modbus TCP sobre Ethernet, mientras que los dispositivos de campo como enfriadoras y variadores hablan Modbus RTU sobre RS485. El M-Duino une ambos mundos con un solo dispositivo y una sola direccion IP.

Cuantos esclavos RTU pueden compartir el bus?

Este despliegue usa seis en un unico segmento RS485 a 9600 baudios. La interrogacion round-robin escala a mas, pero vigila el tiempo total de ciclo para que cada esclavo se siga refrescando con suficiente frecuencia.

Un esclavo lento bloquea a los demas?

No. El maestro usa un timeout corto y el loop interroga un esclavo por paso de 200 ms, asi que un dispositivo que no responde solo cuesta su propio turno y nunca congela el lado TCP.

Funcionalidades relacionadas