Modbus RTU
Modbus sobre un bus serie, con la línea física modelada de forma explícita y compartida por los dispositivos direccionados por unidad.
El controlador Modbus RTU habla con dispositivos Modbus en un bus serie, RS-485 o RS-232, alcanzado por un puerto COM físico, un adaptador USB o un puerto virtual o redirigido. Como el bus se comparte físicamente, la topología es Controlador > Línea > Dispositivo > Tag: la línea es dueña de todo lo eléctrico (puerto, baudios, formato, tiempos), y cada dispositivo que hay en ella es dueño solo de su dirección de unidad, de su sondeo y de sus tags.
La línea serie
| Campo | Significado | Por defecto |
|---|---|---|
| Nombre | Nombre amistoso del bus. Editable en cualquier momento. | obligatorio |
| Puerto serie | El puerto del sistema operativo, por ejemplo COM3. El campo es de texto libre (los puertos físicos, virtuales y redirigidos funcionan todos) y la flecha que hay al lado ofrece los puertos que Windows detecta ahora mismo (con un Actualizar para la conexión en caliente de un adaptador); la lista detectada es una comodidad, nunca una lista blanca. |
COM1 |
| Baudios | Velocidad de bits compartida por todos los dispositivos del bus. | 9600 |
| Formato serie | Elección cerrada entre 8N1, 8N2, 8E1, 8E2, 8O1 y 8O2: el dígito son los bits de datos, la letra la paridad (N ninguna, E par, O impar) y el último dígito los bits de parada. No se admiten otros anchos, ni la paridad de marca y espacio, ni 1,5 bits de parada. |
8E1 |
| Tiempo de espera de respuesta (ms) | Espera máxima por la respuesta de una unidad, de 100 a 60.000. Los tiempos de espera largos acomodan a los equipos lentos, pero hacen más lento identificar las unidades ausentes, y también el descubrimiento. | 1000 |
| Intervalo mínimo entre transacciones (ms) | Cadencia de compatibilidad para toda la línea, de 0 a 1000. Cero deja solo el silencio automático del protocolo; un valor positivo lo puede subir, nunca bajar. | 0 |
El propio protocolo exige silencio entre tramas, y la línea siempre lo impone: a 19.200 baudios o menos, el silencio automático es de 3,5 tiempos de carácter calculados a partir del formato configurado; por encima de 19.200 baudios es el fijo de 1,75 ms que recomienda la especificación. El silencio efectivo es el mayor de ese suelo automático y el intervalo configurado, nunca su suma, y el panel muestra los dos valores. Subir el intervalo ralentiza a propósito todas las unidades de la línea; es una ayuda de compatibilidad, no un remedio para el cableado, la terminación, la puesta a tierra o el ruido.
Una línea nueva nace deshabilitada para poder configurar antes sus ajustes físicos. Cada puerto físico pertenece como mucho a una línea, comparado sin distinguir mayúsculas y minúsculas e incluso mientras las líneas están deshabilitadas. El nombre y el intervalo entre transacciones se pueden seguir editando con la línea en marcha (una edición de tiempos surte efecto sin ciclar el puerto); el puerto, los baudios, el formato y el tiempo de espera de respuesta quedan bloqueados mientras la línea está habilitada: deshabilítela y guárdela primero. Deshabilitar una línea detiene la comunicación de todos sus dispositivos sin cambiar sus elecciones individuales de Habilitado.
La línea informa del transporte físico aparte de sus dispositivos: Apagada, Inactiva (sin ningún dispositivo habilitado), Conectando, En línea, o Fallo del puerto con un diagnóstico. Eliminar una línea vacía quita solo la línea; eliminar una que contiene dispositivos pide una confirmación explícita y elimina también esos dispositivos y sus tags.
Dispositivo
| Campo | Significado | Por defecto |
|---|---|---|
| Línea serie | Fija: un dispositivo se crea bajo su línea y hereda la tupla física, que se muestra de solo lectura en el panel. Añada el dispositivo bajo la línea que quiera. | no procede |
| ID de unidad | La dirección Modbus del dispositivo en el bus, de 1 a 247, única dentro de la línea (dispositivos deshabilitados incluidos). | 1 |
| Intervalo de sondeo (ms) | Ritmo de sondeo por defecto para los tags que no lo sustituyen. | 1000 |
La dirección interna del runtime es modbus+rtu://<line-id>/<port>/<baud>/<format>/<timeout>/<unitId>/<interval>: lleva la identidad estable de la línea y sus ajustes físicos completos, nunca su nombre amistoso.
El comportamiento de una línea compartida
El controlador abre una sesión serie por línea y serializa todas las peticiones de todos los dispositivos a través de un único despachador, así que las lecturas y las escrituras nunca se solapan en el bus. Una escritura pendiente toma el siguiente turno libre con prioridad acotada: las escrituras se atienden pronto, pero escribir sin parar no puede dejar sin turno al sondeo. Los tiempos de espera de cada unidad están aislados con retroceso progresivo, así que un dispositivo mudo se ralentiza solo a sí mismo. Una excepción Modbus con CRC válido es un error de una petición en ese tag: la línea sigue sana. Solo una avería física de entrada y salida (el puerto que desaparece, el adaptador desenchufado) invalida la sesión compartida y arranca una única reapertura coordinada para toda la línea. El último dispositivo que se suelta cierra el puerto.
Direccionamiento del tag
El direccionamiento del tag es idéntico al de Modbus TCP: una Clase de registro (HoldingRegister, InputRegister, Coil, DiscreteInput, derivada por defecto del tipo y del acceso del tag), un Número de registro que empieza en 0, una Cantidad automática (Boolean 1 registro, Int32 y Float 2, String 4; la casilla se dibuja solo en los tags String, porque los demás anchos son fijos), y las dos casillas independientes de orden de bytes, las dos con el más significativo primero por defecto. Los tipos de valor admitidos son los mismos cuatro, Boolean, Int32, Float y String, y los códigos de función de lectura y escritura y las cuatro disposiciones del bus están documentados en la página de Modbus TCP y se aplican aquí sin cambios.
Descubrimiento
El descubrimiento sondea un rango de ID de unidad sobre una línea existente y vive en el panel de esa línea:
| Campo | Significado | Por defecto |
|---|---|---|
| ID de unidad inicial | Primer id de unidad que se va a sondear, de 1 a 247. | 1 |
| ID de unidad final | Último id de unidad, ascendente desde el inicial. | 32 |
La exploración vuelve a cargar los ajustes físicos guardados de la línea, abre el puerto una vez y sondea el rango de forma secuencial con Read Basic Device Identification (función 43/14), acompasando cada sondeo con el silencio entre tramas efectivo de la línea. Nunca prueba combinaciones de ajustes y nunca lee registros. Una excepción Modbus con CRC válido demuestra que hay una unidad presente sin declarar su identidad; un tiempo de espera agotado o una trama no válida no lo demuestran.
Una línea que está en uso no se interrumpe ni se conmuta nunca de forma automática: deshabilítela antes de explorar, y vuelva a habilitarla usted después. Cancelar cierra la sesión serie y deja los resultados ya mostrados como candidatos pasajeros hasta que se añaden de forma explícita. Un id de unidad que ya está configurado se marca como tal y abre el dispositivo existente en lugar de crear un duplicado; los resultados no llevan tags: los registros se configuran después de Añadir.
El descubrimiento y la configuración de la línea comparten una única reserva de fallo rápido por puerto físico, así que una exploración y un cambio de ajustes no pueden pelearse por el puerto: al que pierde se le dice qué operación lo tiene.
Límites que conviene conocer
- Los cuatro tipos de valor son todo el vocabulario del codificador del bus; los enteros anchos y Double no se ofrecen.
- El caudal es una propiedad del bus: todos los dispositivos de la línea comparten un solo flujo de peticiones, acompasado por el silencio entre tramas efectivo, así que muchos dispositivos o un intervalo elevado alargan todos los ciclos de sondeo.