Introducción al protocolo Modbus

El protocolo Modbus es un lenguaje común utilizado en controladores electrónicos. A través de este protocolo, los controladores pueden comunicarse entre sí y con otros dispositivos a través de redes (por ejemplo, Ethernet). Se ha convertido en un estándar industrial común. Con él, los dispositivos de control de diferentes fabricantes se pueden conectar a una red industrial para un monitoreo centralizado.

Este protocolo define la estructura del mensaje que un controlador puede reconocer y usar, independientemente de la red a través de la cual se comunica. Describe el proceso por el cual un controlador solicita acceso a otros dispositivos, si responde a las solicitudes de otros dispositivos y cómo detectar errores y registrarlos. Establece un formato común para el patrón y el contenido del campo del mensaje.

Al comunicarse en una red Modbus, este protocolo dicta que cada controlador debe conocer la dirección de su dispositivo, identificar los mensajes enviados por dirección y decidir qué acción generar. Si se requiere una respuesta, el controlador generará retroalimentación y la enviará utilizando el protocolo Modbus. En otras redes, los mensajes que contienen el protocolo Modbus se convierten a la estructura de trama o paquete utilizada en esta red. Esta conversión también amplía los métodos de direccionamiento de direcciones de sección, rutas de enrutamiento y detección de errores según la red específica.

El protocolo utiliza una conexión de respuesta (semidúplex) en una línea de comunicación, lo que significa que las señales se transmiten en dos direcciones opuestas en una sola línea de comunicación. Primero, la señal de la computadora maestra se dirige a un dispositivo terminal único (esclavo), y luego la señal de respuesta del dispositivo terminal en la dirección opuesta se transmite al maestro. El protocolo permite el intercambio de datos solo entre la computadora maestra y el dispositivo terminal, pero no entre dispositivos independientes, que no ocupan la línea de comunicación al inicializarlos, sino que se limitan a responder a la señal de consulta que llega a la máquina.

 

1.1 Método de transmisión

Cuando se comunica en modo RTU en el bus Modbus, cada byte de 8 bits del mensaje se divide en dos caracteres hexadecimales de 4 bits, y cada mensaje debe transmitirse continuamente. Los siguientes modos de transmisión se definen como compatibles con el protocolo Modebus – modo RTU.

Sistema de código

– Binario de 8 bits, números hexadecimales 0…9, A… .9, A… .F

– Cada campo de 8 bits del mensaje se compone de uno de dos caracteres hexadecimales

Bits por byte 1-8-N-1

– 1 bit de inicio

– 8 bits de datos, el bit menos significativo se envía primero

– 1 bit de paridad, sin paridad y luego ninguna

– 1 bit de parada (con paridad), 2 bits (sin paridad)

Campo de detección de errores

– CRC (detección de redundancia cíclica)

Protocolo de 1.2

Cuando el marco de información llega al dispositivo terminal, ingresa al dispositivo direccionado a través de un simple "puerto", que elimina el "sobre" (encabezado de datos) del marco de datos, lee los datos, realiza la tarea solicitada por los datos si hay no hay errores, y luego agrega su Luego, agrega los datos generados al "sobre" obtenido y devuelve el marco de datos al remitente. Los datos de respuesta devueltos contienen los siguientes contenidos: la dirección del terminal esclavo (Dirección), el comando ejecutado (Función), los datos solicitados generados por el comando ejecutado (Datos) y un código de verificación (Comprobar). No habrá respuesta exitosa para ningún error.

1.2.1 Telegramas

 

Dirección

Función

Data

Revise

 

8 bits

8 bits

N x 8 bits

16 bits

 

Figura 1 – 1 . Formato de marco de mensaje

Nota: La longitud máxima de una trama de mensaje Modbus es de 256 bytes, es decir, N es mayor o igual a cero y menor o igual a 252 (N{0, 252}).

En otras palabras, todos los datos son 256 en total y quedan 253 datos.

1.2.2 Campo de dirección

El campo de dirección del marco de información (dirección de información) está al comienzo del marco y consta de 8 bits, el rango de direcciones válido del dispositivo esclavo es 0-247 (decimal) y el rango de direcciones de cada dispositivo esclavo es 1 -247. Cuando el esclavo responde, coloca su propia dirección en el área de direcciones del mensaje de respuesta, de modo que el host pueda identificar la dirección del esclavo que ha respondido.

La dirección 0 es la dirección de transmisión, que es reconocida por todos los esclavos. Cuando se utiliza el protocolo Modbus en redes avanzadas, no se permite la transmisión ni ninguna otra sustitución.

1.2.3 Campo de función

El código de campo de función del marco de mensaje indica qué función realiza el terminal direccionado. Los códigos válidos van del 1 al 225 (decimal), algunos códigos son aplicables a todos los controladores, algunos están adaptados a ciertos controladores y algunos están reservados para uso posterior. Consulte el Apéndice A para obtener una lista completa de los códigos de sustitución de funciones.

Cuando el host envía un mensaje a un esclavo, el código de función le indica al esclavo la acción que debe realizar. Por ejemplo, lea el estado ON/OFF de un conjunto de bobinas discretas o señales de entrada, lea los datos de un conjunto de registros, lea el estado de diagnóstico del esclavo, escriba las bobinas (o registros), permita la intercepción, registro, confirme el programa en el esclavo, etc. Cuando el esclavo responde al host, el código de función puede indicar la respuesta normal o error (es decir, respuesta anormal), cuando la respuesta normal, de la oración simplemente regresa al código de función original; respuesta anormal, el esclavo devuelve un código equivalente al código original, y el bit válido más alto se establece en "1".

Por ejemplo, cuando el host le pide al esclavo que lea un conjunto de registros de espera, el código de función del mensaje es

0000 0011 (hex 03) Si el esclavo recibe correctamente la información de acción solicitada, devuelve el mismo valor de código que una respuesta normal. Cuando se encuentra un error, se devuelve un mensaje de timbre anormal de la siguiente manera

1000 0011 (83 hexadecimal)

El esclavo es responsable de procesar la respuesta anormal, normalmente enviando una prueba y un diagnóstico del mensaje al esclavo desde el host y notificando al operador. La Tabla 1 – 1 enumera todos los códigos de función comunes para el dispositivo, su significado y su función inicial.

Tabla 1-1 Códigos de funciones comunes

 

Código

Nombre

Función

 

01

Lea el estado de la bobina

Obtener el estado actual (ON/OFF) de un conjunto de bobinas lógicas

 

02

Leer el estado de entrada

Obtener el estado actual de un conjunto de entradas de interruptor (ON/OFF)

 

03

Leer registros de tenencia

Obtenga el valor binario actual en uno o más registros de retención

 

04

Lectura de registros de entrada

Obtenga el valor binario actual en uno o más registros de entrada

 

05

Forzar bobina simple

Forzar el estado de encendido/apagado de una bobina lógica

 

06

Preselección de un solo registro

Colocar un valor binario específico en un solo registro

 

07

Lectura del estado de la excepción

Obtenga el estado de encendido/apagado de 8 bobinas internas

 

15

Forzar múltiples bobinas

Forzar el encendido y apagado de una cadena de bobinas lógicas consecutivas

 

16

Preselección de varios registros

Coloca una serie de valores binarios específicos en una serie de registros múltiples

 

17

Informe de identificación de esclavos

Permite que el host determine el tipo de esclavo direccionado y el estado del indicador de operación de ese esclavo

 

1.2.4 Campos de datos

El campo de datos contiene los datos requeridos por el terminal para realizar una función específica o los datos recopilados por el terminal en respuesta a una consulta. El contenido de estos datos puede ser valores numéricos, direcciones de referencia o valores límite. Consta de dos bits de datos hexadecimales (2 elevado a la octava potencia de 256) en el rango de datos 00-FF (hexadecimal). Por ejemplo: el código de campo de función le dice al terminal que lea un registro, mientras que el campo de datos necesita especificar desde qué registro comenzar y cuántos datos leer, con direcciones incrustadas y datos que varían según el tipo y la capacidad del esclavo. Si no ocurre ningún error, el mensaje de respuesta del esclavo al host contiene los datos solicitados, y si ocurre un error, hay un código anormal en los datos que permite al host determinar y realizar la siguiente acción. La longitud del área de datos puede ser “cero” para indicar cierto tipo de información.

1.2.5 Campo de comprobación de errores

El dominio permite que el host y la terminal verifiquen si hay errores en el proceso de transmisión. A veces, debido al ruido eléctrico y otras interferencias, un conjunto de datos en la transmisión de un dispositivo a otro dispositivo en la línea puede sufrir algunos cambios, verificación de errores para garantizar que el host o terminal no responda a esos cambios en el proceso de transmisión. de datos, lo que mejora la seguridad y eficiencia del sistema, comprobación de errores mediante un método de redundancia cíclica de 16 bits, es decir, suma de comprobación CRC.

El campo de detección de errores contiene un valor de 16 bits (implementado con dos caracteres de 8 bits). El contenido del campo de detección de errores se deriva del método de detección de redundancia cíclica para el contenido del mensaje. El campo CRC se agrega al final del mensaje y el byte bajo se agrega primero seguido del byte alto. Por lo tanto, el byte alto de CRC es el último byte del mensaje enviado.

1.2.6 Transmisión secuencial de caracteres

Cuando se transmite un mensaje en una red de la familia Modbus estándar, cada carácter o byte se envía en una secuencia de izquierda a derecha:

Bit menos significativo (LSB)…. Bit significativo máximo (MSB).

La secuencia de bits es:

con paridad

 

Poco de inicio

1

2

3

4

5

6

7

8

Bit de paridad

Bits de parada

 

Sin control de paridad

 

Poco de inicio

1

2

3

4

5

6

7

8

Bits de parada

Bits de parada

 

Figura 1 – 2 . Secuencia de bits (RTU)

1.2 Detección de errores

1. Verificación de paridad

El usuario puede configurar el controlador para que sea con paridad o incluso con paridad, o sin paridad. Esto determinará cómo se establece el bit de paridad en cada carácter.

Si se especifica paridad, el número de bits "1" se contará en el número de bits por carácter (7 bits de datos en modo ASCII, 8 bits de datos en RTU). Por ejemplo, la trama de caracteres RTU contiene los siguientes 8 bits de datos: 1 1 0 0 0 1 0 1

El número entero de "1" es 4. Si se utiliza paridad par, el bit de paridad de la trama será 0, por lo que el número de "1" seguirá siendo 4. Si se utiliza paridad impar, el bit de paridad de la trama será será 1, y el número de "1s" será 5.

Si no se especifica ningún bit de paridad, no se transmite ningún bit de paridad y no se realiza ninguna detección de paridad. En su lugar, se rellena un bit de parada adicional en la trama de caracteres que se va a transmitir.

2, detección de CRC

Método RTU, utilizando el método CRC para calcular el código de verificación de errores, CRC verifica todos los datos transmitidos. Ignora el método de verificación de paridad para datos de caracteres individuales en el mensaje.

El campo de verificación de redundancia cíclica (CRC) ocupa dos bytes y contiene un valor binario de 16 bits. el dispositivo transmisor calcula el valor CRC y luego lo agrega a la trama de datos, el dispositivo receptor vuelve a calcular el valor CRC al recibir los datos y luego lo compara con el valor en el campo CRC recibido. si los dos valores no son iguales, se ha producido un error.

El CRC comienza configurando los 16 bits del registro en "1", y luego coloca los datos de dos bytes de 8 bits adyacentes en el registro actual, solo los datos de 8 bits de cada carácter se utilizan para generar el CRC, el bit de inicio, bit de parada y bit de paridad no se agregan al CRC.

Al generar CRC, cada byte de 8 bits es iso-o con el contenido del registro, luego el resultado se desplaza al bit inferior, el bit superior se complementa con "0", el bit inferior (LSB) se desplaza y detectado, si es 1, el registro es iso-o con un valor fijo preestablecido, si el bit más bajo es 0, no se realiza ningún procesamiento.

Después de cambiar el último bit (el octavo bit), el siguiente byte de 8 bits y el valor actual del dispositivo de almacenamiento realizarán una operación iso-or, y se realizará otra operación iso-or de desplazamiento de 8 bits.

El proceso de generación de un CRC es:

1、 Preestablezca un registro de 16 bits en 0FFFFH (todos 1), llamado registro CRC.

2、 Realice una operación iso-or entre el primer byte de 8 bits en el marco de datos y el byte bajo en el registro CRC, y almacene el resultado nuevamente en el registro CRC.

3、 Mueva el registro CRC un bit a la derecha, complete el bit más alto con 0, el bit más bajo se desplaza y se detecta.

4、 Si el bit más bajo es 0: repita el paso 3 (siguiente turno).

Si el bit más bajo es 1: establezca el registro CRC en un valor fijo preestablecido (0A001H) para realizar una operación iso-or.

5. Repita los pasos 3 y 4 hasta los 8 turnos. Esto completa el procesamiento de ocho bits completos.

6、 Repita los pasos 2 a 5 para procesar el siguiente octeto hasta que se procesen todos los bytes.

7、 El valor final del registro CRC es el valor CRC.

Cuando se agrega el valor CRC al mensaje, el bit bajo viene primero y el bit alto viene después. Busque un ejemplo en el Apéndice C, que explica la suma de verificación de CRC en detalle.

Se el primero en comentar

Deje un comentario

Tu dirección de correo electrónico no será publicada.


*