¿Qué es el direccionamiento Modbus base cero vs base uno?
Una de las cosas más confusas de Modbus es que el mismísimo registro puede llamarse con dos números distintos según quién cuente, y un valor que se lee perfecto en un maestro puede salir corrido un registro en otro exactamente por esta razón. La causa es que Modbus tiene una dirección de protocolo base cero que va en el cable y un número de modelo de datos base uno que aparece en la documentación y las herramientas, y difieren por uno. Esta página explica la diferencia entre el direccionamiento base cero y base uno, por qué produce el clásico corrimiento por uno y cómo el ajuste de base por dispositivo del driver termina con las adivinanzas para siempre.
Direccionamiento Modbus base cero vs base uno en una línea: El direccionamiento Modbus base cero contra base uno es la brecha entre la dirección realmente colocada en el cable, que es base cero y corre de 0 a 65535, y la manera en que la documentación y las herramientas suelen numerar los mismos registros empezando desde 1. Como difieren por uno, un registro descrito como número 1 en un manual es la dirección de protocolo 0 en el cable, así que un driver que asume la base equivocada lee un registro al lado del que usted quería. Fijar la base del driver, base cero o base uno, según cómo esté documentado cada dispositivo resuelve el corrimiento.
Dos maneras de contar el mismo registro
Modbus separa la dirección que viaja en el cable de la manera en que la gente se refiere a los registros. En la trama real del protocolo, el campo de dirección es base cero: el primer registro de una tabla es la dirección de protocolo 0, el siguiente es 1, y así hasta un máximo de 65535. Este es el número que el maestro literalmente pone en la solicitud y que el esclavo usa para buscar el registro. Es un offset puro dentro de la tabla, empezando desde cero, sin huecos y sin supuestos sobre qué tabla se refiere más allá del código de función enviado.
El problema es que las personas y muchas herramientas cuentan desde uno. La documentación, las pantallas de configuración y la conversación cotidiana numeran con frecuencia los registros empezando en 1, así que el primer registro se llama registro 1, el segundo registro 2, y así sucesivamente. Esta numeración base uno es una conveniencia del modelo de datos, más fácil de leer y de comentar, pero está corrida por uno respecto a la dirección base cero del cable. Así, el registro que un manual llama número 1 es la dirección de protocolo 0, el número 2 es la dirección 1, y toda la numeración queda desplazada por uno respecto a lo que realmente entra en la solicitud Modbus.
Ese desplazamiento de un registro es todo el problema en pocas palabras. Al leer un valor, usted y el dispositivo tienen que acordar qué esquema de conteo representa el número que usted tecleó. Si mete un número de registro base uno en un campo que espera una dirección de cable base cero, o al revés, cada registro que toque aterriza una posición al lado del que quería. Como el desplazamiento es consistente, el síntoma es limpio y repetible: todo está corrido exactamente un registro, que es la huella de un desajuste de base y no de una falla aleatoria de cableado o de datos.
Por qué el mismo valor se lee corrido por uno entre maestros
Por esto una configuración que funciona perfecta en un maestro puede quedar corrida por uno al reconstruirla en otro. Distintos maestros, drivers y herramientas Modbus asumen cosas distintas sobre lo que significa la dirección que usted teclea. Una herramienta puede esperar que usted ingrese directamente la dirección de cable base cero, así que teclea 0 para el primer registro. Otra puede esperar el número base uno del modelo de datos y restar uno en silencio antes de ponerlo en el cable, así que teclea 1 para ese mismo primer registro. Si traslada los mismos números tecleados de una herramienta a la otra sin considerar sus supuestos distintos, corre el mapa completo por uno y lee el registro vecino en todas partes.
La confusión empeora porque ambas lecturas suelen verse plausibles. Leer un registro al lado no suele arrojar un error; simplemente devuelve el valor del registro adyacente, que puede ser otra medición real, así que usted obtiene un número creíble pero equivocado en lugar de una falla obvia. La señal delatora es que un valor que puede verificar de forma independiente, en la pantalla del propio dispositivo o por un estado conocido, aparece exactamente un registro más allá de donde lo pidió. Cuando todo un conjunto de tags está consistentemente corrido un registro y los datos por lo demás se ven sensatos, un desajuste de base entre cómo cuentan los dos maestros es casi siempre la causa.
Vale la pena aclarar que este es un problema distinto del prefijo de tipo de registro en números como 40001. Ese prefijo, el 4 inicial, le dice la tabla de registros, y quitarlo es un paso separado que cubre el tema del offset de direccionamiento de registros. Base cero contra base uno es puramente si el conteo dentro de una tabla empieza en 0 o en 1, independiente de en qué tabla esté. Una configuración puede acertar la tabla y aun así quedar corrida por uno solo porque la base no coincide, y por eso conviene mantener los dos asuntos separados al diagnosticar.
El ajuste de base por dispositivo en el SCADA
La cura práctica es dejar de adivinar y fijar la base explícitamente. Los buenos drivers Modbus permiten elegir, a menudo por dispositivo, si las direcciones que usted ingresa son base cero o base uno, de modo que una vez que sabe cómo numera sus registros la documentación de un dispositivo particular, configura el driver para que coincida e ingresa las direcciones exactamente como las da el manual. Ese ajuste de base por dispositivo es lo que termina con el corrimiento por uno, porque hace explícita y consistente la traducción entre lo que usted teclea y lo que va en el cable, en lugar de depender de un supuesto que tiene que recordar por cada herramienta.
Fijarlo por dispositivo importa porque un solo sistema SCADA suele hablar con equipo de muchos fabricantes, y esos fabricantes no documentan sus registros igual. El manual de un dispositivo puede listar números base uno mientras otro lista offsets base cero crudos, y un ajuste de base correcto para uno puede ser incorrecto para otro. Configurar la base junto a cada dispositivo, y verificarla contra un valor de referencia conocido en la puesta en marcha, significa que cada dispositivo se lee con el esquema de conteo que usa su propia documentación, así que una flota de equipo mixto queda alineada correctamente.
Para el SCADA en la nube esta es una disciplina de puesta en marcha que paga permanentemente, porque un desajuste de base es determinista: afecta cada lectura de cada tag de ese dispositivo exactamente de la misma manera, para siempre, hasta corregirse. Una plataforma SCADA en la nube como Merobix devolverá fielmente lo que la base configurada produzca, así que la salvaguarda es confirmar la base de cada dispositivo contra un valor verificable de forma independiente antes de que el sitio entre en servicio. Fije bien la base una vez por dispositivo y el corrimiento por uno no vuelve a aparecer para ese dispositivo, mucho más barato que perseguir lecturas consistentemente equivocadas cuando los operadores ya dependen de ellas.
Preguntas frecuentes
¿Cuál es la diferencia entre el direccionamiento Modbus base cero y base uno?
El direccionamiento base cero es la dirección realmente colocada en el cable, donde el primer registro de una tabla es la dirección de protocolo 0 y el rango llega a 65535. La numeración base uno es como la documentación y las herramientas suelen referirse a los mismos registros, empezando el conteo en 1. Como difieren por uno, el registro que un manual llama número 1 es la dirección de protocolo 0, así que los dos esquemas describen el mismo registro con números corridos por uno.
¿Por qué un valor Modbus se lee bien en un maestro pero corrido por uno en otro?
Distintos maestros asumen cosas distintas sobre la dirección que usted teclea. Uno puede esperar la dirección de cable base cero directamente, mientras otro espera el número base uno del modelo de datos y resta uno antes de ponerlo en el cable. Trasladar los mismos números tecleados entre ellos sin considerar ese supuesto corre el mapa completo por uno, así que cada tag lee el registro vecino y entrega un valor creíble pero equivocado.
¿Cómo corrige el corrimiento por uno el ajuste de base del driver?
Los buenos drivers permiten elegir, a menudo por dispositivo, si las direcciones ingresadas son base cero o base uno. Una vez que sabe cómo numera los registros la documentación del propio dispositivo, fija la base del driver para que coincida e ingresa las direcciones tal como las da el manual, haciendo explícita y consistente la traducción a la dirección de cable. Verifique la base contra un valor de referencia conocido en la puesta en marcha y el corrimiento desaparece para ese dispositivo.
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.