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.

Ver como Markdown

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
Velocidad La tasa de bits que comparten todos los dispositivos del bus. 9600
Formato serie Elección cerrada entre 8N1, 8N2, 8E1, 8E2, 8O1, 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 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

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. no aplica
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 (HoldingRegister, InputRegister, Coil, DiscreteInput, derivada de forma predeterminada del tipo y del acceso del tag), un Número de registro desde 0, una Cantidad automática (Boolean 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 independientes de orden de bytes, las dos con el más significativo primero al inicio. 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 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

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 cuatro tipos de valor son todo el vocabulario del códec del bus; los enteros anchos 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.