Riego agrícola automatizadoRaspberry Pi (Docker)Modbus TCPControl
Controlar una bomba con Schneider Altivar 320 por Modbus TCP
Arrancar una bomba a través de un Schneider Altivar 320 es algo más que escribir un bit de marcha: el variador sigue la máquina de estados DriveCom (CiA402), y saltarse una transición lo deja parado sin dar error. Este ejemplo en Python para Raspberry Pi recorre la secuencia completa por Modbus TCP — Shutdown, Switch On, Enable Operation — fija la consigna de velocidad en rpm y supervisa estado, corriente y presión de tubería. Replica el control de bomba usado en un despliegue real de riego automatizado.
La secuencia DriveCom, sin misterios
El ATV320 espera las palabras de mando 0x0006, 0x0007 y 0x000F escritas en orden en el registro CMD (8501), con la referencia de velocidad cargada antes en LFRD (8602). El ejemplo lo encapsula en un helper arrancar_bomba() con una pequeña espera entre transiciones. La parada también es progresiva: escribir 0x0006 de nuevo activa la rampa de deceleración en lugar de una parada en rueda libre que castiga la tubería.
Unit ID 255 y los registros que importan
El adaptador Modbus TCP de Schneider responde por defecto en el Unit ID 255 — la razón más habitual de que el primer intento de conexión acabe en timeout. Además de CMD y LFRD, el script consulta ETA (3201) para el estado del variador y el bit de fallo, RFRD (8604) para las rpm reales y LCR (3204) para la corriente del motor, dando a Node-RED todo lo necesario para detectar una bomba bloqueada o en fallo.
La presión en la propia entrada analógica del variador
Un transductor de 4-20 mA (0-10 bar) cableado a la entrada AI3 del variador ahorra un módulo de E/S aparte: la Raspberry lee el valor de corriente por Modbus y lo escala linealmente a bar. Las lecturas fuera de rango se recortan, de modo que un cable de sensor roto aparece como 0 bar en lugar de un valor negativo, algo que la lógica de alarmas en MySQL detecta de inmediato.
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el Raspberry Pi (Docker) — cópialo libremente:
El ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Por qué mi Altivar 320 no responde por Modbus TCP?
Comprueba primero el Unit ID — el adaptador Ethernet embebido usa 255 por defecto, no 1. Confirma también que el canal de mando está configurado como Modbus en el menú de configuración del variador; si no, las escrituras en CMD se ignoran.
¿Puedo parar la bomba al instante en lugar de usar la rampa?
Sí, la palabra de mando DriveCom admite Quick Stop (0x0002). En riego preferimos la rampa de deceleración porque cerrar una bomba de golpe provoca golpe de ariete en tramos largos de tubería.
¿Cómo sé que el variador está en fallo?
Lee la palabra de estado ETA en el registro 3201 y comprueba el bit 3. El ejemplo imprime FALLO y aborta el ciclo cuando está activo; en producción el evento se registra en MySQL y se envía por Telegram.