2. Análisis del protocolo ModBus

inserte la descripción de la imagen aquí

0x01 Conociendo ModBus por primera vez

Modbus es un protocolo de comunicación en serie publicado por Modicon Corporation (ahora Schneider Electric) en 1979 para la comunicación mediante controladores lógicos programables (PLC). El protocolo Modbus actual se ha convertido en el estándar de la industria para los protocolos de comunicación en el campo industrial y es un método de conexión común entre dispositivos electrónicos industriales.

El protocolo Modbus puede convertirse en el protocolo y estándar de la industria más utilizado en el ámbito industrial.Tiene las siguientes características:

  • Gratis: Esta es la premisa más importante. Es lo mismo para cualquier producto. Solo a través de la gratuidad puede obtener el máximo uso en la etapa inicial.
  • Simple: el formato de marco del protocolo Modbus es simple y compacto, fácil de entender para los usuarios y fácil de integrar para los fabricantes.
  • Interfaz: El protocolo Modbus es solo un protocolo, que pertenece al protocolo de la capa de aplicación, por lo que no solo se puede aplicar a los puertos serie (485/232/422), sino que también se puede transmitir en Ethernet, fibra óptica, Bluetooth y inalámbrico.

0x02 Análisis de paquetes ModBus

Estructura del marco:

código de dirección Código de función enviar datos Código de verificación CRC
1 byte 1 byte n byte 2 bytes

Código de dirección: El código de dirección es el primer byte que se transmite por comunicación. Este byte indica que el esclavo cuyo código de dirección establece el usuario recibirá la información enviada por el maestro. Y cada esclavo tiene un código de dirección único, y el loopback de respuesta comienza con su propio código de dirección. El código de dirección enviado por el maestro indica la dirección del esclavo a enviar, y el código de dirección enviado por el esclavo indica la dirección del esclavo a devolver. Cuando el código de dirección es 0, es una dirección de transmisión, todos los esclavos pueden reconocerlo y el esclavo no responde.

Código de función: el segundo byte transmitido por comunicación. El protocolo de comunicación ModBus define códigos de función del 1 al 127. Envíe como una solicitud de host y dígale al esclavo qué acción realizar a través del código de función. Como respuesta del esclavo, si el bit más alto del código de función enviado por el esclavo es 1 (es decir, el código de función es mayor que 127), indica que el esclavo no responde a la operación o envía un error. Si el código es el mismo, indica que el esclavo ha respondido a la operación del maestro. Por ejemplo: código de función: 00000003 (03H), si la máquina esclava se ejecuta normalmente, devolverá el mismo código de función, si es anormal, devolverá 10000003 (83H).

Área de datos : El área de datos es diferente según los diferentes códigos de función. El campo de datos puede ser un valor real, un punto de ajuste, una dirección del maestro al esclavo o del esclavo al maestro. Por ejemplo, si el código de función le dice al esclavo que lea el valor del registro , el área de datos debe contener la dirección de inicio y la longitud de lectura del registro que se va a leer. Para diferentes esclavos, la dirección y la información de datos son diferentes.

Comprobación de CRC: igual que la comprobación de CRC de TCP/IP, está configurada para garantizar que la transmisión de datos no tenga errores. El contenido a calcular y comprobar incluye todo el contenido excepto el dígito de control, a saber: código de dirección, código de función y datos.

0x03 Códigos de función común de ModBus

Es necesario comprender los códigos de función comunes de Modbus Solo después de comprender los códigos de función relevantes podemos analizar profundamente las operaciones relacionadas y las funciones específicas del protocolo Modbus.

Código de función describir Rango de direcciones del PLC Rango de direcciones de registro unidad Operativa número de operaciones
0x01 leer registro de bobina 00001-99999 0x0000-0xFFFF Operar por bit 1 o n
0x02 Leer registro de entrada discreta 10001-19999 0x0000-0xFFFF Operar por bit 1 o n
0x03 leer registro de tenencia 40001-49999 0x0000-0xFFFF Operación por byte 1 o n
0x04 leer registro de entrada 30001-39999 0x0000-0xFFFF Operación por byte 1 o n
0x05 Escribir un registro de bobina simple 00001-99999 0x0000-0xFFFF Operar por bit 1
0x06 escribir un único registro de tenencia 40001-49999 0x0000-0xFFFF Operación por byte 1
0x0F Escribir múltiples registros de bobina 00001-99999 0x0000-0xFFFF Operar por bit 1
0x10 Escribir varios registros de tenencia 40001-49999 0x0000-0xFFFF Operación por byte 1

0x04 Interpretación de registros Modbus

De los códigos de función anteriores, podemos ver que hay cuatro tipos de registros relacionados que se operan: registros de bobina, registros de entrada discreta, registros de retención y registros de entrada.

Registro de bobina: De hecho, se puede comparar con un valor de conmutación (estado de relé), y cada bit corresponde al estado de conmutación de una señal. Entonces, un byte puede controlar 8 señales al mismo tiempo. Por ejemplo, controle el nivel del io externo de 8 vías. El registro de bobina admite lectura y escritura. La escritura en el código de función se divide en escribir un registro de bobina simple y escribir registros de bobina múltiple. El código de función correspondiente anterior es: 0x01 0x05 0x0f.

Registro de entrada discreta: el registro de entrada discreta es equivalente al modo de solo lectura del registro de bobina.También representa un valor de conmutación por bit, y su valor de conmutación solo puede leer la señal de conmutación de entrada y no se puede escribir. Por ejemplo, leo si el botón externo está presionado o liberado. Entonces, el código de función es simplemente una lectura 0x02.

Registro de retención: La unidad de este registro ya no es un bit sino dos bytes, es decir, puede almacenar una cantidad específica de datos, y es legible y escribible. En general, corresponde a la configuración de parámetros. Por ejemplo, configuro la hora, el año, el mes y el día. No solo puede escribir sino también leer la hora actual. La escritura también se divide en escritura única y escritura múltiple, y hay tres códigos de función correspondientes: 0x03 0x06 0x10.

Registro de entrada: similar al registro de retención, pero solo admite lectura pero no escritura y, en general, lee varios datos en tiempo real. Un registro también ocupa dos bytes de espacio. El código de función correspondiente es: 0x04.

0x05 Análisis de ejemplo de protocolo Modbus

1. Lectura de datos de registro de retención

主机请求: 01 03 00 00 00 01 84 0A
从机回复: 01 03 02 12 34 B5 33

Análisis relacionado:

#主机请求数据解析
01:PLC地址
03:功能码,查询保持寄存器
00 00:代表查询的寄存器的起始地址
00 01:代表查询的寄存器的结束地址
84 0A:循环冗余校验码
#从机回复数据解析
01:PLC地址
03:功能码,与主机请求相同,说明执行成功
02:代表后面寄存器的数据的字节数,一个寄存器有两个字节,所以这里的字节数肯定是查询的寄存器个数的2倍
12 34:寄存器的值
B5 33: 循环冗余校验码

2. Escritura en un único registro de tenencia

主机请求: 01 06 00 00 00 01 48 0A
从机回复: 01 06 00 00 00 01 48 0A

Análisis relacionado:

# 主机请求数据解析
01:PLC地址
06:功能码,单个保持寄存器写入
00 00:要被写入发寄存器的地址
00 01:被写入的内容,也就是在寄存器00 00的位置写入数据 00 01
48 0A:循环冗余校验码
#从机回复
01:PLC地址
06:响应功能码,与请求中的相同,说明执行成功
00 00:被写入的地址
00 01:被写入的数据
48 0A:校验码

3. Escribir varios registros de tenencia

主机请求: 01 10 00 00 00 02 04 11 22 33 44 42 5A
从机回复: 01 10 00 00 00 02 41 C8

Análisis relacionado:

# 主机请求解析
01:PLC地址
10:功能码,多个保持寄存器写入
00 00:被写入的寄存器的起始地址
00 02:代表被修改的寄存器的数量
04:代表别修改的总字节数
11 22 33 44:将要修改的值
42 5A:校验码
#从机回复数据解析:
01:PLC地址
10:功能码
00 00:寄存器中被写入的地址
00 02:说明被修改的寄存器数量
41 C8:校验码

0x06 Contenido de referencia

  • https://blog.csdn.net/CAI____NIAO/article/details/124344164
  • https://xw.qq.com/cmsid/20220328A0872C00
  • https://blog.csdn.net/qq_36958104/article/details/124193794
  • https://www.163.com/dy/article/G5P36B0R0538S33I.html

Supongo que te gusta

Origin blog.csdn.net/qq_45590334/article/details/125220090
Recomendado
Clasificación