Modbus RTU
Modbus sobre un bus serie, con la línea física modelada de forma explícita y compartida por sus dispositivos direccionados por unidad.
El driver Modbus RTU habla con dispositivos Modbus en un bus serie, RS-485 o RS-232, alcanzado por un puerto COM físico, por un adaptador USB o por un puerto virtual o redirigido. Como el bus se comparte físicamente, la topología es Driver → Línea → Dispositivo → Tag: la línea posee todo lo eléctrico (puerto, velocidad, formato, tiempos), y cada dispositivo que hay en ella posee solo su dirección de unidad, su sondeo y sus tags.
La línea serie
| Campo | Significado | Valor inicial |
|---|---|---|
| Nombre | Nombre amigable del bus. Editable en cualquier momento. | obligatorio |
| Puerto serie | El puerto del sistema operativo, por ejemplo COM3. El campo es de texto libre (funcionan los puertos físicos, los virtuales y los redirigidos) y la flecha que hay al lado ofrece los puertos que Windows detecta en ese momento (con un Actualizar para la conexión en caliente de un adaptador); la lista detectada es una comodidad, nunca una lista blanca. |
COM1 |
| Baudios | La tasa de bits que comparten todos los dispositivos del bus. | 9600 |
| Modo de transmisión | Cómo arma sus mensajes cada dispositivo del bus: RTU, tramas binarias verificadas con un CRC, o ASCII, tramas escritas como texto de dos puntos a un salto de línea y verificadas con un LRC, que hablan los equipos antiguos. Un bus habla un solo modo, por eso pertenece a la línea. | RTU |
| Formato serie | Elección cerrada entre 8N1, 8N2, 8E1, 8E2, 8O1, 8O2, y en una línea ASCII también 7N2, 7E1, 7E2, 7O1: 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. Una trama RTU necesita 8 bits de datos, así que una línea RTU solo ofrece los formatos de 8 bits; un formato de 7 bits que quedó de una línea ASCII aparece vacío y se rechaza hasta que se elija otro. No se admiten otros anchos, ni la paridad mark/space, ni 1.5 bits de parada. |
8E1 |
| Tiempo de espera de respuesta (ms) | La espera más larga por la respuesta de una unidad, de 100 a 60,000. Los tiempos de espera largos acomodan a equipos lentos, pero hacen más lento identificar 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 conserva solo el silencio automático del protocolo; un valor positivo lo puede subir, nunca bajar. | 0 |
En una línea ASCII no aplica el silencio que se describe a continuación: una trama ASCII termina en su salto de línea, así que el silencio automático marca 0 ms y el Intervalo mínimo entre transacciones (ms) es la única pausa entre tramas, como dice la tarjeta debajo: "Las tramas ASCII terminan con un salto de línea, así que la línea no agrega silencio propio: este intervalo es la única pausa entre tramas." El modo de transmisión es un ajuste físico, bloqueado junto con el puerto, los baudios, el formato y el tiempo de espera de respuesta mientras la línea está habilitada; la dirección de runtime de un dispositivo en una línea ASCII termina en /ascii.
El protocolo mismo exige silencio entre tramas, y la línea siempre lo impone: a 19,200 baudios o menos, el silencio automático son 3.5 tiempos de carácter calculados a partir del formato configurado; por encima de 19,200 baudios son los 1.75 ms fijos que recomienda la especificación. El silencio efectivo es el mayor entre ese piso automático y el intervalo configurado, nunca la suma de los dos, y el panel muestra los dos valores. Subir el intervalo hace más lentas a propósito todas las unidades de la línea; es una ayuda de compatibilidad, no un arreglo del cableado, la terminación, la puesta a tierra o el ruido.
Una línea nueva arranca desactivada para que sus ajustes físicos se puedan configurar primero. Cada puerto físico pertenece como máximo a una línea, comparado sin distinguir mayúsculas e incluso mientras las líneas están desactivadas. El nombre y el intervalo entre transacciones siguen siendo editables mientras la línea corre (una edición de tiempos surte efecto sin ciclar el puerto); el puerto, la velocidad, el formato y el tiempo de espera de respuesta quedan bloqueados mientras la línea está activada: desactívela y guárdela primero. Desactivar una línea detiene la comunicación de todos sus dispositivos sin cambiar la elección individual de Activado de ninguno.
La línea reporta el transporte físico aparte de sus dispositivos: Apagada, En reposo (sin ningún dispositivo activado), Conectando, En línea, o Falla 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.
El dispositivo
| Campo | Significado | Valor inicial |
|---|---|---|
| Línea serie | Fija: un dispositivo se crea bajo su línea y hereda la tupla física, mostrada de solo lectura en el panel. Agregue el dispositivo bajo la línea que corresponda. | la línea bajo la que se agrega |
| ID de unidad | La dirección Modbus del dispositivo en el bus, de 1 a 247, única dentro de la línea (dispositivos desactivados incluidos). | 1 |
| Intervalo de sondeo (ms) | El ritmo de sondeo predeterminado para los tags que no lo invaliden. | 1000 |
La dirección interna del runtime es
modbus+rtu://<id-de-línea>/<puerto>/<velocidad>/<formato>/<tiempo>/<idDeUnidad>/<intervalo>:
lleva la identidad estable de la línea y sus ajustes físicos completos, nunca su
nombre amigable.
El comportamiento de la línea compartida
El driver abre una sesión serie por línea y serializa todas las peticiones de todos los dispositivos a través de un solo despachador, así que las lecturas y las escrituras nunca se traslapan en el bus. Una escritura pendiente toma el siguiente turno libre con una 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 espera progresiva, así que un dispositivo callado solo se hace lento a sí mismo. Una excepción Modbus con CRC válido es un error de esa petición sobre ese tag: la línea sigue sana. Solo una falla física de entrada y salida (el puerto que desaparece, el adaptador desconectado) invalida la sesión compartida y arranca una sola reapertura coordinada para toda la línea. El último dispositivo liberado cierra el puerto.
El direccionamiento del tag
El direccionamiento del tag es idéntico al de Modbus TCP: una Clase de registro (Bobina (0xxxx), Entrada discreta (1xxxx), Registro de entrada (3xxxx), Registro de retención (4xxxx), derivada de forma predeterminada del tipo y del acceso del tag), un Número de registro desde 0, una Cantidad (registros, en blanco = automático) que se calcula sola (Boolean, Int16 y UInt16 1 registro, Int32 y Float 2, String 4; la caja se dibuja solo en los tags String, porque todos los demás anchos son fijos), y las dos cajas de orden: Byte más significativo primero (MSB first, big-endian) para el orden de los bytes y Palabra más significativa primero (palabra alta primero) para el orden de las palabras (dibujada solo en los tipos de dos registros, Int32 y Float), las dos activadas de forma predeterminada. La tarjeta Fuente termina con Dirección en el manual, la dirección del tag tal como la imprime el manual del equipo (el registro de entrada 0 es 30001). Los tipos de valor admitidos son los mismos seis (Boolean, Int16, UInt16, Int32, Float y String): Int16 y UInt16 leen un solo registro de 16 bits, con o sin signo, y solo el orden de bytes aplica a ellos (la caja del orden de palabras no se dibuja). Los códigos de función de lectura y escritura y las disposiciones del bus están documentados en la página de Modbus TCP y valen aquí sin cambios.
El 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 | Valor inicial |
|---|---|---|
| ID de unidad inicial | El primer id de unidad que se sondea, de 1 a 247. | 1 |
| ID de unidad final | El último id de unidad, ascendente desde el inicial. | 32 |
En una línea ASCII el sondeo es la misma petición en una trama ASCII y el LRC toma el lugar del CRC: una excepción con LRC válido prueba que hay una unidad presente, y una trama con LRC no válido no prueba nada.
El escaneo recarga 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), cadenciando cada sondeo con el silencio efectivo entre tramas de la línea. Nunca prueba combinaciones de ajustes y nunca lee registros. Una excepción Modbus con CRC válido prueba que hay una unidad presente sin declarar su identidad; un tiempo de espera agotado o una trama no válida no lo prueban.
Una línea que está en uso nunca se interrumpe ni se conmuta automáticamente: desactívela antes de escanear, y vuelva a activarla usted mismo después. Cancelar cierra la sesión serie y deja los resultados que ya se hayan mostrado como candidatos pasajeros hasta que usted los agregue 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 Agregar.
El descubrimiento y la configuración de la línea comparten una sola reserva de fallo inmediato por puerto físico, así que un escaneo 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 seis tipos de valor son todo el vocabulario del códec del bus; los demás anchos de entero y Double no se ofrecen.
- El rendimiento es una propiedad del bus: todos los dispositivos de la línea comparten un solo flujo de peticiones, cadenciado por el silencio efectivo entre tramas, así que muchos dispositivos o un intervalo subido alargan cada ciclo de sondeo.