Control de biorreactoresM-DuinoModbus RTUAdquisición
Lectura de totales de caudalimetro de 32 bits con reset remoto
Controlar el agua de proceso que entra y sale de un biorreactor implica leer un totalizador que crece mas alla de lo que caben 16 bits. Este ejemplo, procedente de un despliegue real de control de biorreactores, muestra la lectura de un contador de caudalimetro de 32 bits Modbus en un PLC M-Duino sobre RS485, con un reset remoto expuesto como coil Modbus TCP. Dos caudalimetros estan en las direcciones 5 y 6 del bus 9600 8N1, y el SCADA pone a cero un contador con solo conmutar un coil.
Un total de 32 bits repartido en dos registros
Los litros acumulados viven en el registro 0x100 como dos registros de 16 bits. El lector obtiene ambos, valida la respuesta y los combina en un total de 32 bits. Ese total se vuelve a dividir en dos input registers del lado TCP, de modo que el SCADA reconstruye el conteo exacto de litros que reporto el dispositivo de campo.
Reset remoto como coil
El comando de reset en el registro RTU 0x200 se ofrece al SCADA como coil. Cuando un operario activa el coil, el loop envia el reset al caudalimetro y, una vez confirmado, vuelve a borrar el coil. Este handshake hace que un reset ocurra exactamente una vez por peticion en lugar de dispararse en cada scan mientras el coil sigue activo.
TCP y RTU en un solo loop
Llamar a update() atiende al SCADA mientras un temporizador de 500 ms interroga ambos caudalimetros por RTU. La misma pasada comprueba primero los coils de reset y luego refresca los totales, de modo que un contador recien puesto a cero se lee a cero en el ciclo siguiente sin ninguna condicion de carrera entre el reset y la lectura.
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el M-Duino — cópialo libremente:
void setup() {
Serial.begin(115200);
master.begin(9600);
master.setTimeout(300);
modbus.addInputRegisters(0, inputRegs, 12);
modbus.addCoils(0, coils, 18);
modbus.begin();
}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 almacenar el total en dos registros?
Un totalizador de caudal cuenta muy por encima de 65535 litros, lo que desborda un unico registro de 16 bits. Dos registros dan un valor de 32 bits con margen de sobra antes de dar la vuelta.
Como resetea el SCADA un contador?
Activa el coil de reset de ese caudalimetro. El PLC ve el coil, envia el comando de reset RTU y borra el coil una vez que el caudalimetro confirma, de modo que el reset se dispara exactamente una vez.
Se pueden resetear ambos caudalimetros de forma independiente?
Si. Cada caudalimetro tiene su propio coil y direccion RTU, asi que el SCADA resetea el caudalimetro 5 o el 6 sin tocar el otro.