Aplicación de escritorio escrita en Python y Tkinter para probar dispositivos Modbus. Permite leer coils y registros de forma continua, además de escribir coils y holding registers mediante conexiones TCP o serie.
Este proyecto comenzó hace aproximadamente 15 años como una pequeña utilidad para probar dispositivos Modbus. Desde entonces ha evolucionado mediante su uso práctico con equipos reales, incorporando nuevas funciones y compatibilidad con distintos tipos de conexión.
- Conexión mediante Modbus TCP, RTU sobre TCP y Modbus RTU.
- Lectura continua de:
- Coils (
01). - Entradas discretas (
02). - Holding registers (
03). - Input registers (
04).
- Coils (
- Escritura de coils y holding registers.
- Direcciones de escritura en formato decimal o hexadecimal.
- Visualización de registros en decimal, binario y número de bits activos.
- Opción para mostrar las direcciones con desplazamiento
+1, sin modificar la consulta Modbus. - Conversión opcional de valores a temperatura para una sonda NTC 10K 103AT-11 de AKO.
- Guardado automático de la última configuración en
config_mbus.json.
- Python 3.8 o posterior.
- Tkinter.
- Un dispositivo Modbus accesible por red o puerto serie.
También hay ejecutables disponibles para Linux y Windows, por lo que no es necesario instalar Python ni las dependencias si utilizas una de estas versiones.
En Debian, Ubuntu y derivados, Tkinter se puede instalar con:
sudo apt install python3-tkEn Windows, Tkinter normalmente viene incluido con la instalación oficial de Python.
En la sección de archivos o versiones publicadas del repositorio puedes descargar el ejecutable correspondiente a tu sistema operativo:
-
Linux: descarga el ejecutable para Linux, concédele permisos de ejecución si es necesario y ábrelo.
chmod +x testmodbus ./testmodbus
-
Windows: descarga el archivo
.exey ejecútalo directamente.
Los ejecutables incluyen las dependencias necesarias. El resto de esta documentación explica también cómo instalar y ejecutar la aplicación desde el código fuente.
Clona el repositorio y entra en su directorio:
git clone <URL-DEL-REPOSITORIO>
cd testModbusCrea un entorno virtual e instala las dependencias:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txtEn Windows, activa el entorno con:
.venv\Scripts\activatepython testmodbus1.pySelecciona uno de los modos disponibles:
- Modbus_TCP: indica la dirección IP y el puerto del dispositivo. El puerto habitual es
502. - RTU_OVER_TCP: indica la IP y el puerto de la pasarela RTU/TCP.
- Modbus_RTU: indica el puerto serie y sus parámetros, por ejemplo
/dev/ttyUSB0y9600,8,N,1. En Windows el puerto puede serCOM3,COM4, etc.
El campo Read delay establece la pausa entre consultas Modbus, de 0 a 999 milisegundos. Algunos dispositivos necesitan esta pausa para responder correctamente. Timeout representa el tiempo máximo de espera de la comunicación y Slave es el identificador de la unidad Modbus.
- Escribe la primera dirección en Init address.
- Indica en Inc cuántas direcciones quieres recorrer, entre 1 y 20.
- Selecciona el tipo de dato que quieres leer.
- Pulsa Start para iniciar el barrido continuo.
- Pulsa Stop para detenerlo y cerrar la conexión.
La lista muestra la dirección, el tipo de lectura, el valor recibido y, para los registros, su representación binaria y el número de bits activos.
Las direcciones usadas internamente son base 0. La opción +1 output address cambia únicamente la dirección mostrada en pantalla.
En la sección de escritura:
- Indica la dirección en Address.
- Activa Hex si quieres introducirla en hexadecimal.
- Selecciona WRITE_COIL o WRITE_REGISTER.
- Introduce el estado del coil (
0o1) o el valor del registro. - Pulsa Write.
Los valores de registro admitidos están entre -65535 y 65535. Antes de escribir, comprueba siempre el mapa de registros y los límites indicados por el fabricante del equipo.
La aplicación carga y actualiza automáticamente config_mbus.json. El archivo contiene valores como:
{
"ip": "192.168.1.100",
"port": "502",
"slave": "1",
"inc": "20",
"delay": "1000",
"read_delay": "10",
"address": "1",
"modbusTcp": 1,
"com_port": "/dev/ttyUSB0",
"baudrate": "9600,8,N,1",
"addressPlusOne": 0,
"hex": 0
}El valor modbusTcp identifica el modo de conexión: 1 para Modbus TCP, 2 para RTU sobre TCP y 3 para Modbus RTU.
Si aparece un error de permisos al abrir /dev/ttyUSB0, añade tu usuario al grupo que controla los puertos serie (normalmente dialout):
sudo usermod -aG dialout "$USER"Después, cierra la sesión y vuelve a entrar para aplicar el cambio.
La escritura de coils o registros puede cambiar el estado de una instalación real. Utiliza esta herramienta únicamente si conoces el mapa Modbus del dispositivo y puedes operar el equipo de forma segura.
Si esta herramienta te resulta útil, me alegrará saberlo. Puedes dejar un mensaje, abrir una issue o compartir cualquier sugerencia que ayude a mejorar el proyecto.


