¿Por qué una lectura Modbus solo devuelve 125 registros?
Pídale a un dispositivo Modbus que lea 200 registros en una sola solicitud y se negará, porque una sola lectura llega a un tope de 125 registros de retención o de entrada. Este no es un ajuste arbitrario; sale directamente de un límite duro de tamaño horneado en el propio protocolo Modbus. Esta guía explica de dónde viene el techo de 125 registros, por qué las bobinas se topan en 2000 de la misma forma, por qué los drivers de sondeo parten automáticamente un mapa de registros grande en varias solicitudes, y cómo la disposición de un mapa de registros afecta con qué eficiencia puede sondearse.
Límite de 125 registros en una línea: Una sola lectura Modbus se topa en 125 registros de retención o de entrada porque el protocolo limita la unidad de datos de un mensaje a 253 bytes, y 125 registros de dieciséis bits es lo máximo que cabe dentro de ese techo junto con los bytes de encabezado requeridos. El mismo límite topa una sola lectura de bobinas en 2000 bobinas, ya que las bobinas son de un bit cada una. Para leer más que eso, un driver de sondeo tiene que partir la solicitud en varias lecturas, cada una dentro del límite.
El techo de 253 bytes de la PDU
La causa raíz es un límite de tamaño construido en Modbus desde sus orígenes. El protocolo define un tamaño máximo para su unidad de datos de mensaje - la unidad de datos de protocolo, o PDU - de 253 bytes. Este techo viene de la trama serial Modbus original, cuyo mensaje total estaba limitado a 256 bytes; después de contar los campos de dirección y de verificación de errores que envuelven la PDU en la línea serial, quedan 253 bytes para la PDU misma. Modbus TCP heredó el mismo límite de 253 bytes de PDU por compatibilidad, aunque su transporte técnicamente podría llevar más, así que la restricción aplica tanto si se está en RS-485 como en Ethernet.
Dentro de esa PDU de 253 bytes, una respuesta de lectura tiene que caber su propia sobrecarga más los datos de registro reales. Para una respuesta de lectura de registros de retención, la PDU lleva el código de función y un campo de conteo de bytes antes de los datos, lo que deja 250 bytes para valores de registro. Cada registro de retención es de 16 bits, así que ocupa dos bytes, y 250 dividido entre 2 es exactamente 125. De ahí viene el número - es simplemente la mayor cantidad de registros de dos bytes cuyos datos caben en el espacio que la PDU de 253 bytes deja después de su encabezado. No hay nada mágico en 125; es aritmética dictada por el presupuesto de bytes del protocolo.
Por qué las bobinas se topan en 2000
El mismo techo de PDU produce un número distinto para bobinas y entradas discretas, y entender por qué refuerza de dónde vino el 125. Las bobinas y entradas discretas son bits individuales, no registros de 16 bits, así que una lectura empaca ocho de ellas en cada byte de la respuesta. La respuesta todavía tiene que caber dentro de la PDU de 253 bytes después de su código de función y su sobrecarga de conteo de bytes, pero como ocho bits viajan en cada byte de datos, caben muchas más. Recorriendo el mismo presupuesto de bytes con ocho bobinas por byte se llega a un máximo de 2000 bobinas o entradas discretas en una sola lectura.
Así que los dos límites familiares de lectura Modbus - 125 registros y 2000 bits - son dos expresiones de la misma regla subyacente aplicada a dos anchos de datos distintos. Los registros son de dos bytes cada uno, así que caben relativamente pocos; las bobinas son un octavo de byte cada una, así que caben muchas más; pero en ambos casos el total es lo que sea que la PDU de 253 bytes pueda contener después de su encabezado. Verlos como consecuencias de una restricción en lugar de dos números arbitrarios separados vuelve todo el límite más fácil de razonar, y explica por qué las escrituras tienen sus propios topes relacionados por la misma razón: cada mensaje Modbus tiene que vivir dentro de ese mismo presupuesto de bytes.
Cómo los drivers parten mapas grandes, y la disposición para la eficiencia de sondeo
Los dispositivos reales rutinariamente exponen mucho más de 125 registros, así que un driver de sondeo no puede leer todo un mapa en una sola solicitud. Automáticamente parte el mapa en varias lecturas, cada una manteniéndose dentro del límite de 125 registros, y ensambla los resultados. Un driver bien construido es astuto en esto: en lugar de leer cada punto individualmente, agrupa registros contiguos en los bloques legales más grandes y emite una solicitud por bloque, porque leer una corrida de registros juntos es dramáticamente más eficiente que leerlos uno por uno. Cada solicitud carga sobrecarga de protocolo y, en enlaces seriales especialmente, un retraso de ida y vuelta, así que menos lecturas grandes vencen a muchas pequeñas.
Por esto la disposición física de un mapa de registros afecta la eficiencia de sondeo, y por qué importa al integrar un dispositivo con una plataforma SCADA de nube como Merobix. Si los puntos que le importan están empacados en un tramo contiguo de registros, el sondeador puede reunirlos en una o unas pocas lecturas de bloque grandes. Si los mismos puntos están dispersos por un espacio de direcciones escaso con grandes huecos sin usar entre ellos, el sondeador o malgasta ancho de banda leyendo registros inútiles en los huecos para mantener los bloques contiguos, o parte la lectura en muchas solicitudes pequeñas para saltarse los huecos - y ambas cosas dañan el rendimiento. Cuando un sondeador de nube está alcanzando muchos dispositivos de campo sobre enlaces celulares o compartidos donde cada ida y vuelta cuesta latencia y datos, los mapas de registros contiguos y densamente empacados se traducen directamente en un sondeo más rápido y barato. No se puede cambiar el límite de 125 registros, pero sí se puede disponer o seleccionar los rangos de registros para que el driver gaste su presupuesto de solicitudes en datos que realmente se necesitan.
Preguntas frecuentes
¿Por qué una lectura Modbus está limitada a exactamente 125 registros?
Porque el protocolo Modbus topa su unidad de datos de mensaje en 253 bytes, y una respuesta de lectura de registros usa parte de eso para su código de función y su encabezado de conteo de bytes, dejando 250 bytes para datos. Cada registro es de dos bytes, así que 250 dividido entre 2 da exactamente 125 registros como lo máximo que cabe en una sola respuesta. El número es pura aritmética del presupuesto de bytes del protocolo, no un ajuste configurable, y aplica tanto a registros de retención como de entrada.
¿Por qué una lectura Modbus puede devolver 2000 bobinas pero solo 125 registros?
Ambos límites vienen del mismo techo de 253 bytes de la unidad de datos, pero las bobinas y los registros se empacan de forma distinta. Una bobina es un solo bit, así que ocho de ellas caben en cada byte de datos, mientras que un registro es de dos bytes completos. Como caben muchos más bits individuales que registros de dos bytes en el mismo espacio, la lectura de bobinas se topa en 2000 mientras la de registros se topa en 125. Son dos expresiones de una restricción de tamaño subyacente aplicada a distintos anchos de datos.
¿Cómo lee un driver más de 125 registros de un dispositivo?
Automáticamente parte la solicitud en varias lecturas, cada una manteniéndose dentro del límite de 125 registros, y reensambla los resultados. Un buen driver agrupa registros contiguos en los bloques legales más grandes y emite una solicitud por bloque, porque leer una corrida de registros juntos es mucho más eficiente que leerlos uno por uno. Por esto los mapas de registros contiguos y densamente empacados se sondean más rápido - el driver puede reunir los puntos necesarios en menos lecturas grandes en lugar de muchas pequeñas.
Servicios de automatización
¿Necesita convertir esta información en un sistema que funcione?
Merobix integra SCADA, programa PLC Allen-Bradley y Siemens, y diseña y fabrica tableros de control industrial.
Las solicitudes de reunión se revisan antes de confirmarse.