Ir al contenido

← Todas las funcionalidades

Control de biorreactoresM-DuinoModbus TCPComunicación

Un mapa de registros Modbus TCP para toda la planta

Un mapa de registros Modbus TCP compartido es el contrato entre un PLC y el SCADA que lo lee, y acertar con el pronto ahorra un dolor de integracion interminable. Este ejemplo, procedente de un despliegue real de control de biorreactores, define el mapa que un M-Duino expone en el puerto 502: coils para reles, pilotos y resets, holding registers para consignas y ordenes de marcha, e input registers para temperatura, presion, pH, litros y RPM en vivo de toda la planta.

Coils, holding e input registers

Los coils 0 a 17 cubren ocho reles de salida, ocho pilotos indicadores y dos resets de caudalimetro. Los holding registers 0 a 9 guardan salidas analogicas, consignas de temperatura de enfriadora, consignas de RPM de variador y ordenes de marcha de enfriadora. Los input registers 0 a 11 llevan temperaturas, presiones, pH, litros acumulados y RPM reales. La intencion de lectura frente a escritura se codifica en el bloque, no en la convencion.

Indices con nombre en lugar de numeros magicos

El sketch usa enums para que el codigo se lea como el propio mapa: HR_TEMP_SP1 en vez de holding register 4, IR_RPM1 en vez de input register 10. Cuando el mapa crece, los indices con nombre mantienen cada lectura y escritura autodocumentadas y hacen evidentes en revision los errores de direccionamiento por uno.

Un contrato vivo y verificable

Como el mapa se publica con update() en marcha, cualquier cliente Modbus puede conectarse y verificar el direccionamiento antes de cablear los dispositivos de campo. Los modulos de planta para enfriadoras, variadores y caudalimetros comparten estas mismas direcciones tras el gateway, asi que el mapa sirve a la vez de documentacion y de banco de pruebas de integracion.

Un fragmento de la implementación

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

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

  // Publish the three blocks starting at address 0
  modbus.addCoils(0, coils, 18);
  modbus.addHoldingRegisters(0, holdingRegs, 10);
  modbus.addInputRegisters(0, inputRegs, 12);
  modbus.begin();   // listen on port 502

  // Consistent initial values (what a SCADA would read on connecting)
  holdingRegs[HR_TEMP_SP1] = 185;   // 18.5 C x10
  holdingRegs[HR_TEMP_SP2] = 185;
  holdingRegs[HR_RPM_SP1]  = 250;   // 250 rpm
  holdingRegs[HR_RPM_SP2]  = 250;
}

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

Preguntas frecuentes

Cual es la diferencia aqui entre coils y registers?

Los coils son valores de un solo bit on/off para reles, pilotos y resets. Los holding registers son valores de 16 bits de lectura/escritura para consignas y ordenes, y los input registers son medidas de solo lectura de 16 bits.

Por que usar enums con nombre para los indices de registro?

Hacen que el codigo se lea como el mapa de registros y evitan errores de direccionamiento por uno. HR_TEMP_SP1 es mucho mas claro que holding register 4 cuando alguien revisa el codigo mas tarde.

Puedo probar el mapa antes de que existan los dispositivos de campo?

Si. El mapa se publica en el puerto 502 con update() en marcha, asi que cualquier cliente Modbus puede conectarse y confirmar el direccionamiento mientras las enfriadoras, variadores y caudalimetros aun se estan cableando.

Funcionalidades relacionadas