Librer铆a Modbus RTU Master para automatizaci贸n industrial

Conoce qu茅 es Modbus RTU y sus aplicaciones
18 de marzo de 2020 por
Librer铆a Modbus RTU Master para automatizaci贸n industrial
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introduction

En el 谩rea de automatizaci贸n de Arduino, el protocolo Modbus RTU es un medio de comunicaci贸n que permite el intercambio de datos entre controladores l贸gicos programables (controlador PLC Arduino) y computadoras.

Los dispositivos electr贸nicos pueden intercambiar informaci贸n a trav茅s de l铆neas en serie utilizando el protocolo Modbus.

En este post, vas a aprender c贸mo funciona Modbus RTU.

Index

1. 驴Qu茅 es un Modbus RTU?

2. 驴C贸mo funciona un Modbus RTU?

3. Estructura general del marco Modbus

4.聽C贸digo de funci贸n Modbus

5. Tipos de objetos Modbus

6. Formato de datos Modbus

聽 聽 6.1. (0x01) Leer Coils聽

聽 聽 6.2. (0x02) Leer entradas discretas

聽 聽 6.3. (0x03) Lectura de registros de retenci贸n

聽 聽 6.4. (0x04) Leer registro de entrada

聽 聽 6.5. (0x05) Escribir 1 coil

聽 聽 6.6. (0x06) Escribir 1 registro

聽 聽 6.7. (0x0F) Escribir m煤ltiples coils

聽 聽 6.8. (0x10) Escribir m煤ltiples registros

7. Creando nuestro mensaje Modbus RTU

8. Software

1. 驴Qu茅 es un Modbus RTU?

Modbus es un protocolo de comunicaci贸n situado en los niveles 1, 2 y 7 del Modelo OSI, basado en la arquitectura maestro/esclavo, dise帽ado en 1979 por Modicon para su gama de PLCs.

Convertido en un protocolo de comunicaciones de facto en la industria, veamos algunas de sus principales caracter铆sticas:

  1. Dise帽ado pensando en su uso en aplicaciones industriales
  2. Es聽p煤blico聽y聽gratis
  3. Es f谩cil de implementar y requiere un poco de desarrollo.
  4. Maneja bloques de datos sin asumir restricciones
  5. Cada uno de los mensajes incluye informaci贸n redundante que garantiza su integridad en la recepci贸n.
  6. Los comandos b谩sicos de Modbus permiten controlar un dispositivo RTU para modificar el valor de cualquiera de sus registros o solicitar el contenido de los mismos.

2. 驴C贸mo funciona un MODBUS RTU?

Modbus RTU es la implementaci贸n m谩s com煤n disponible para Modbus.

Modbus RTU se utiliza en la comunicaci贸n en serie y hace uso de una representaci贸n compacta y binaria de los datos para la comunicaci贸n del protocolo.

Los mensajes Modbus se dividen por periodos de inactividad, como se puede ver en la siguiente imagen.

Mensaje - C贸mo funciona MODBUS RTU - Librer铆a maestra Modbus RTU para la automatizaci贸n industrial

Each device on a Modbus communication has a unique address.聽

The Modbus RTU works by RS-485 which is a single cable multi-drop network, only the node assigned as the Master may initiate a command. All the other devices are slaves and answer requests and commands.

Un comando Modbus contiene la direcci贸n Modbus del dispositivo al que va dirigido. S贸lo el dispositivo al que va dirigido responder谩 y actuar谩 sobre el comando, aunque otros dispositivos puedan recibirlo.

Adem谩s, es importante decir que todos los comandos Modbus contienen informaci贸n de suma de comprobaci贸n para que el receptor pueda detectar errores de transmisi贸n.

Pongamos un ejemplo. Imaginemos que tenemos una red serial Modbus, donde hay un maestro y hasta 31 esclavos, cada uno con una direcci贸n de esclavo 煤nica.

El maestro s贸lo quiere enviar un mensaje al esclavo n煤mero 2 solicitando el valor de 6 registros de entrada.

As铆, el maestro enviar铆a un mensaje y todos los esclavos lo recibir铆an, pero s贸lo el esclavo n煤mero 2 responder铆a y actuar铆a sobre la orden, aunque otros dispositivos podr铆an recibirla.

Con este ejemplo, vamos a crear un mensaje Modbus RTU a lo largo de este post.聽Mensaje Modbus por el momento: 02 (direcci贸n del esclavo)

Maestro y Esclavo - C贸mo funciona MODBUS RTU - Librer铆a maestra Modbus RTU para la automatizaci贸n industrial

3. Estructura general del marco Modbus

La unidad de datos de aplicaci贸n (ADU) de Modbus RTU consta de los elementos mostrados:

Estructura general del marco Modbus - Librer铆a maestra Modbus RTU para la automatizaci贸n industrial

Direcci贸n: Establecemos la direcci贸n del esclavo para el dispositivo al que queremos enviar el mensaje.
C贸digo de funci贸n: El n煤mero del c贸digo de funci贸n. Puedes ver la tabla de los c贸digos de funci贸n en la secci贸n "C贸digos de funci贸n Modbus".
Data: El mensaje en s铆. Puede variar seg煤n el c贸digo de la funci贸n.
CRC: El n煤mero de la comprobaci贸n de redundancia c铆clica. Debe ser calculado.

De ellos, el c贸digo de funci贸n y los datos constituyen la unidad de datos de protocolo (PDU)


4.C贸digo de funci贸n聽Modbus

MODBUS is a request/reply protocol and offers services specified by function codes. MODBUS function codes are elements of MODBUS request/reply PDUs.聽

The function code field of a MODBUS data unit is coded in one byte. Valid codes are in the range of 1 to 255 decimal (the range 128 鈥 255 is reserved and used for exception responses). When a message is sent from a Client to a Server device the function code field tells the server what kind of action to perform. Function code "0" is not valid. Sub-function codes are added to some function codes to define multiple actions.聽聽

A continuaci贸n puedes encontrar la lista de c贸digos de funci贸n y sus funciones:

C贸digos de funci贸n Modbus - Librer铆a maestra Modbus RTU para la automatizaci贸n industrial

5. Tipos de objetos Modbus

En Modbus, los tipos de datos se pueden dividir principalmente en dos tipos: Coils y Registros. Las Coils pueden entenderse como digitales ya que s贸lo pueden estar en ON (1) o en OFF (0). Algunas coils pueden representar entradas y otras salidas.

Los registros son de 16 bits ( 2 bytes) sin signo y por lo tanto pueden tener valores de 0 a 65535 (0 a FFFF). Aunque tiene sus limitaciones como que no puede representar n煤meros negativos , n煤meros en coma flotante o valores con representaci贸n mayor a 65535. La siguiente tabla resume los tipos de objetos.

Las cuatro tablas principales son las siguientes:

TABLAS PRINCIPALESTIPO DE OBJECTOTIPO DECOMENTARIOS
Entradas discretas.
(Entradas)
Un solo bitS贸lo lecturaEste tipo de datos ser谩 proporcionado por un sistema de E/S.
Coils
(Salidas)
Un solo bitLectura-EscrituraEste tipo de datos pueden ser alterados por un programa de aplicaci贸n.
Registros de entrada
(Entradas)
Palabra de 16 bitsS贸lo lecturaEste tipo de datos puede ser proporcionado por un sistema de E/S.
Registros de retenci贸n
(Salidas)
Palabra de 16 bitsLectura-EscrituraEste tipo de datos pueden ser alterados por un programa de aplicaci贸n.

6. Formato de datos Modbus

Descripci贸n de los c贸digos de funci贸n

Las peticiones y respuestas de Modbus contienen una Unidad de Datos de Aplicaci贸n (ADU) que contiene una Unidad de Datos de Protocolo (PDU).

Descripci贸n de los c贸digos de funci贸n - Formato de datos Modbus - Librer铆a maestra Modbus RTU para la automatizaci贸n industrial

6.1. (0x01) Leer Coils

Este c贸digo de funci贸n se utiliza para leer de 1 a 2000 estados contiguos de Coil en un dispositivo remoto.

Las Coilen el mensaje de respuesta se empaquetan como una Coil por bit del campo de datos. El estado se indica como 1: ON y 0: OFF. El LSB del primer byte de datos contiene la salida a la que se dirige la consulta. Las dem谩s coils siguen hacia el extremo de orden alto de este byte, y de orden bajo a orden alto en los bytes siguientes.

Solicitud

C贸digo de funci贸n1 Byte0x01
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de Coils2 Bytes1 a 2000 (0x7D0)

Respuesta

C贸digo de funci贸n1 Byte0x01
Cantidad de bytes1 ByteN*
Estado de la Coilsn Bytesn = N o N+1

*N =Cantidad de salidas / 8, si el resto es diferente de 0 => N = N+1


Ejemplo de solicitud de lectura de las salidas discretas 20 - 38:聽

Solicitud
Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n01Funci贸n01
Direcci贸n inicial Hi00Cantidad de bytes03
Direcci贸n inicial Lo13Estado de las salidas 27-20CD
Cantidad de salidas Hi00Estado de las salidas 35-286B
Cantidad de salidas Lo13Estados de las salidas05

*El CRC debe ser calculado.


6.2. (0x02)聽Leer Entradas Discretas

聽Este c贸digo de funci贸n se utiliza para leer de 1 a 2000 estados contiguos de entradas discretas en un dispositivo remoto.

La PDU de solicitud especifica la direcci贸n de inicio, es decir, la direcci贸n de la primera entrada especificada, y el n煤mero de entradas. En la PDU, las entradas discretas se direccionan empezando por cero. Por lo tanto, las entradas discretas numeradas de 1 a 16 se direccionan como 0 a 15.

Las entradas discretas en el mensaje de respuesta se empaquetan como una entrada por bit del campo de datos. El estado se indica como 1= ON; 0= OFF. El LSB del primer byte de datos contiene la entrada dirigida en la consulta. Las dem谩s entradas siguen hacia el final de orden alto de este byte, y de orden bajo a orden alto en los bytes siguientes.

Solicitud

C贸digo de funci贸n1 Byte0x02
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de entradas2 Bytes1 a 2000 (0x7D0)


Respuesta

C贸digo de funci贸n1 Byte0x02
Recuento de bytes1 ByteN*
Estado de las entradasN* x 1 Byte


Ejemplo de petici贸n de lectura de las entradas discretas 197 - 218:

Solicitud

Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n02Funci贸n02
Direcci贸n de salida Hi00Recuento de bytes03
Direcci贸n de salida LoC4Estado de las salidas 27-20AD
Cantidad de salidas Hi00Estado de las salidas 35-28DB
Cantidad de salidas Lo16Estado de las salidas35


6.3. (0x03)聽Leer Registros de Retenci贸n

Este c贸digo de funci贸n se utiliza para leer el contenido de un bloque contiguo de registros de retenci贸n en un dispositivo remoto. La PDU de solicitud especifica la direcci贸n de registro inicial y el n煤mero de registros. En la PDU los registros se direccionan empezando por cero. Por lo tanto, los registros numerados del 1 al 16 se direccionan como 0-15.

Los datos del registro en el mensaje de respuesta se empaquetan en dos bytes por registro, con el contenido binario justificado a la derecha dentro de cada byte. Para cada registro, el primer byte contiene los bits de orden alto y el segundo contiene los bits de orden bajo.

Solicitud

C贸digo de funci贸n1 Byte0x03
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de registros2 Bytes1 a 125 (0x7D0)

Respuesta

C贸digo de funci贸n1 Byte0x03
Recuento de bytes1 Byte2 x N*
Valor de registroN* x 2 Bytes

*N = Cantidad de registros


Ejemplo de solicitud de lectura de los registros 108 - 110:

Solicitud

Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n03Funci贸n03
Direcci贸n de salida Hi00Recuento de bytes06
Direcci贸n de salida Lo6BValor del registro Hi (108)
Valor del registro Lo (108)
02

2B
No. de Registros Hi00Valor del registro Hi (109)
Valor del registro Lo (109)
00

00
No. de Registros Lo03Valor del registro Hi (110)
Valor del registro Lo (110)
00

64



6.4. (0x04) Leer Registros de Entradas

Este c贸digo de funci贸n se utiliza para leer de 1 a 125 registros de entrada contiguos en un dispositivo remoto. La PDU de solicitud especifica la direcci贸n de registro inicial y el n煤mero de registros. En la PDU los registros se direccionan empezando por cero. Por lo tanto, los registros de entrada numerados del 1 al 16 se direccionan como 0-15.

Los datos del registro en el mensaje de respuesta se empaquetan en dos bytes por registro, con el contenido binario justificado a la derecha dentro de cada byte. Para cada registro, el primer byte contiene los bits de orden alto y el segundo contiene los bits de orden bajo.

Solicitud

C贸digo de funci贸n1 Byte0x04
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de registros de entrada2 Bytes0x0001 a 0x007D

Respuesta

C贸digo de funci贸n1 Byte0x04
Recuento de bytes1 Byte2 x N*
Registros de entradaN* x 2 Bytes

*N = Cantidad de registros de entrada

Ejemplo de solicitud de lectura del registro de entrada 9

Solicitud

Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n04Funci贸n04
Direcci贸n de salida Hi00Recuento de bytes02
Direcci贸n de salida Lo08Entrada Reg. 9 Hi00


Cantidad de registros de entrada Hi00Entrada Reg. 9 Lo
0A
Cantidad de registros de entrada Lo
01


6.5. (0x05)聽Escribir un solo coil

Este c贸digo de funci贸n se utiliza para escribir una 煤nica salida en ON u OFF en un dispositivo remoto.

El estado ON/OFF solicitado se especifica mediante una constante en el campo de datos de solicitud. Un valor de FF00 hex. solicita que la salida est茅 en ON. Un valor de 00 00 solicita que est茅 en OFF. Todos los dem谩s valores son ilegales y no afectan a la salida.

La PDU de petici贸n especifica la direcci贸n de la Coil que se va a forzar. Las Coils se direccionan empezando por el cero. Por lo tanto, la coil n煤mero 1 se direcciona como 0. El estado ON/OFF solicitado se especifica mediante una constante en el campo Valor de la Coil. Un valor de 0XFF00 solicita que la Coil est茅 en ON. Un valor de 0X0000 solicita que la coil est茅 apagada. Todos los dem谩s valores son ilegales y no afectan a la Coil.

La respuesta normal es un eco de la petici贸n, que se devuelve despu茅s de escribir el estado de la Coil.

Solicitud

C贸digo de funci贸n1 Byte0x05
Direcci贸n de salida2 Bytes0x0000 a 0xFFFF
Valor de salida2 Bytes0x0000 a 0xFF00

Respuesta

C贸digo de funci贸n1 Byte0x05
Recuento de bytes2 Byte0x0000 a 0xFFFF
Registros de entrada2 Bytes0x0000 o 0xFF00


Ejemplo de solicitud de escritura de la Coil 173 ON:

Solicitud
Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n05Funci贸n05
Direcci贸n inicial Hi00Direcci贸n de salida Hi
00
Direcci贸n inicial LoACDirecci贸n de salida Lo
AC


Cantidad de Reg. de Entrada HiFFValor de salida HiFF
Cantidad de Reg. de Entrada Lo
00Valor de salida Lo
00



6.6. (0x06)聽Escribir un solo registro

Este c贸digo de funci贸n se utiliza para escribir un 煤nico registro de retenci贸n en un dispositivo remoto.

La PDU de solicitud especifica la direcci贸n del registro que se va a escribir. Los registros se direccionan empezando por cero. Por lo tanto, el registro n煤mero 1 se direcciona como 0.

La respuesta normal es un eco de la solicitud, que se devuelve despu茅s de que se haya escrito el contenido del registro.

Solicitud

C贸digo de funci贸n1 Byte0x06
Direcci贸n de registro2 Bytes0x0000 a 0xFFFF
Valor de registro2 Bytes0x0000 a 0xFFFF

Respuesta

C贸digo de funci贸n1 Byte0x06
Direcci贸n de registro2 Byte0x0000 a 0xFFFF
Valor de registro2 Bytes0x0000 o 0xFF00


Ejemplo de solicitud de escritura del registro 2 a 00 03 hex:

Solicitud
Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n06Funci贸n06
Direcci贸n inicial Hi00Direcci贸n de salida Hi
00
Direcci贸n inicial Lo01Direcci贸n de salida Lo
01


Cantidad de Reg. de Entrada Hi00Valor de salida Hi00
Cantidad de Reg. de Entrada Lo
03Valor de salida Lo
03



6.7. (0x0F) Escribir M煤ltiples Coils

Este c贸digo de funci贸n se utiliza para forzar cada Coil de una secuencia de Coil a ON u OFF en un dispositivo remoto. La PDU de solicitud especifica las referencias de las coils que deben forzarse. Las Coils se direccionan empezando por el cero. Por lo tanto, la coil n煤mero 1 se direcciona como 0.

Los estados ON/OFF solicitados se especifican mediante el contenido del campo de datos de solicitud. Un '1' l贸gico en una posici贸n de bit del campo solicita que la salida correspondiente est茅 en ON. Un '0' l贸gico solicita que est茅 en OFF.

La respuesta normal devuelve el c贸digo de funci贸n, la direcci贸n de inicio y la cantidad de Coils forzadas.


Solicitud

C贸digo de funci贸n1 Byte0x0F
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de salidas2 Bytes0x0001 a 0x07B0
Recuento de bytes1 ByteN*
Valor de las salidasN* x 1 Byte聽

*N = Cantidad de salidas / 8, si el resto es diferente de 0 => N = N+1


Respuesta

C贸digo de funci贸n1 Byte0x0F
Direcci贸n inicial2 Byte0x0000 a 0xFFFF
Cantidad de salidas2 Bytes0x0001 o 0x07B0


Ejemplo de petici贸n de escritura del registro 2 a 00 03 hex:

Solicitud

Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n0FFunci贸n0F
Direcci贸n de salida Hi00Direcci贸n de salida Hi00
Direcci贸n de salida Lo13Direcci贸n de salida Lo13
Cantidad de salidas Hi00Cantidad de salidas Hi00
Cantidad de salidas Lo0ACantidad de salidas Lo0A
Recuento de bytes02

Valor de las salidas HiCD

Valor de las salidas Lo01



6.8. (0x10) Escribir M煤ltiples Registros

Este c贸digo de funci贸n se utiliza para escribir un bloque de registros contiguos (de 1 a 123 registros) en un dispositivo remoto.

Los valores escritos solicitados se especifican en el campo de datos de solicitud. Los datos se empaquetan en dos bytes por registro.

La respuesta normal devuelve el c贸digo de funci贸n, la direcci贸n inicial y la cantidad de registros escritos.


Solicitud

C贸digo de funci贸n1 Byte0x10
Direcci贸n inicial2 Bytes0x0000 a 0xFFFF
Cantidad de registros2 Bytes0x0001 a 0x007B
Recuento de bytes1 Byte2 x N*
Valor de los registrosN* x 2 Bytesvalor

*N = Cantidad de registros


Respuesta

C贸digo de funci贸n1 Byte0x10
Direcci贸n inicial2 Byte0x0000 a 0xFFFF
Cantidad de registros2 Bytes0x123 o (0x7B)


Ejemplo de una solicitud para escribir dos registros que comienzan en 2 a 00 0A y 01 02 hex:

Solicitud

Respuesta
Nombre del campoHexNombre del campoHex
Funci贸n10Funci贸n10
Direcci贸n de salida Hi00Direcci贸n de salida Hi00
Direcci贸n de salida Lo01Direcci贸n de salida Lo01
Cantidad de registros Hi00Cantidad de salidas Hi00
Cantidad de registros Lo
02Cantidad de salidas Lo02
Recuento de bytes04

Valor de los registros Hi00

Valor de los registros Lo
0A

Valor de los registros Hi
01

Valor de los registros Lo

02





7.聽Creando nuestro mensaje Modbus RTU

Ahora que ya sabemos un poco m谩s sobre Modbus RTU y su formato de trama, vamos a terminar nuestro mensaje Modbus del ejemplo que dimos al principio de esta entrada del post.

Quer铆amos que el maestro enviara un mensaje al esclavo n煤mero 2 solicitando el valor de 6 registros de entrada.

Nuestro mensaje Modbus RTU se ve as铆 en este momento: 0204 (02 (Direcci贸n del esclavo) + 04 (C贸digo de funci贸n))

Como nuestro c贸digo de funci贸n es el n煤mero 04: Read Input Register, los datos deben contener: Direcci贸n inicial Hi + Direcci贸n inicial Lo + Cantidad de Reg. de Entrada Hi + Cantidad de Reg. de Entrada Lo. Lo + CRC.

Por lo tanto, vamos a llenar la solicitud ADU para obtener todo el mensaje:

Solicitud ADU
Nombre del campoHEX
Direcci贸n del esclavo02
C贸digo de funci贸n04
Direcci贸n inicial Hi00
Direcci贸n inicial Lo
00
Cantidad de Reg. de Entrada Hi00
Cantidad de Reg. de entrada Lo
06
CRC-
CRC-

Para calcular el CRC, basta con escribir el mensaje Modbus 020400000006 en esta web. Selecciona el tipo de entrada HEX y obt茅n el n煤mero CRC-16 (Modbus).

Como es LSB, lo invertiremos. Si el resultado del CRC es 0x3B70, ahora ser谩: 703B.

Finalmente, as铆 es como queda nuestro mensaje Modbus:

020400000006703B

8. Software

Modbus RTU Master conArduino IDE

El m贸dulo maestro Modbus RTU implementa las capacidades del Modbus RTU Master. Vamos a trabajar con la funci贸n modbusrtumaster.h:

#include <ModbusRTUMaster.h>


Es posible utilizar cualquier secuencia de hardware Serial Arduino:

  • RS-485
#include <RS485.h>

ModbusRTUMaster聽master(RS485);


  • RS-232
#include <RS232.h>

ModbusRTUMaster聽master(RS232);


Antes de usarlo, es necesario llamar a la funci贸n de inicio en la configuraci贸n tanto para la variable serial como para la variable Modbus. Es una buena pr谩ctica establecer la velocidad de transmisi贸n (valor predeterminado: 19200 bps) tambi茅n en la variable Modbus para definir los tiempos de espera internos de Modbus.

RS485.begin(9600, HALFDUPLEX, SERIAL_8E1);
master.begin(9600);


Las funciones para leer y escribir los valores de los esclavos son:

readCoils(slave_address, address, quantity);
readDiscreteInputs(slave_address, address, quantity);
readHoldingRegisters(slave_address, address, quantity);
readInputRegisters(slave_address, address, quantity);
writeSingleCoil(slave_address, address, value);
writeSingleRegister(slave_address, address, value);
writeMultipleCoils(slave_address, address, values, quantity);
writeMultipleRegisters(slave_address, address, values, quantity);


Donde:

  • slave_address聽es la direcci贸n del esclavo Modbus RTU.
  • address聽es la coil, entrada digital, registro de retenci贸n o direcci贸n de registro de entrada. Por lo general, esta direcci贸n es la coil, la entrada digital, el registro de retenci贸n o el n煤mero de registro de entrada menos 1: el n煤mero de registro de retenci贸n40009tiene la direcci贸n8.
    quantityes el n煤mero de coils, digitales, registros de retenci贸n o registros de entrada a leer/escribir.
  • value聽es el valor dado de la coil o los registros de retenci贸n en una operaci贸n de escritura. Dependiendo de la funci贸n, el tipo de datos cambia. Una coil est谩 representada por un valor bool y un registro de retenci贸n est谩 representado por un valor
    uint16_t.

En una funci贸n de lectura/escritura m煤ltiple, el argumento deaddresses la primera direcci贸n. En una funci贸n de escritura m煤ltiple, el argumentovalueses una matriz de valores para escribir.

Es importante decir que estas funciones no son de bloqueo, por lo que no devuelven el valor le铆do. Devuelventrueofalsedependiendo del estado actual del m贸dulo. Si hay una petici贸n Modbus pendiente, devuelvenfalse.聽聽

// Read 5 holding registers from address 0x24 of slave with address 0x10
if聽(master.readHoldingRegisters(0x10,聽0x24,聽5)) {
	// OK, the request is being processed
}聽else聽{
	// ERROR, the master is not in an IDLE state
}

Existe la funci贸nvailable()para verificar las respuestas del esclavo.

ModbusResponse response = master.available();
if聽(response) {
	// Process response
}


ModbusResponseimplementa algunas funciones para obtener la informaci贸n de respuesta:

hasError();
getErrorCode();
getSlave();
getFC();
isCoilSet(offset);
isDiscreteInputSet(offset);
isDiscreteSet(offset);
getRegister(offset);
ModbusResponse response = master.available();
if聽(response) {
	if聽(response.hasError()) {
		// There is an error. You can get the error code with response.getErrorCode()
	}聽else聽{
		// Response ready: print the read holding registers
		for聽(int聽i =聽0; i <聽5; ++i) {
			Serial.println(response.getRegister(i));
		}
	}
}

Los posibles c贸digos de error son:

0x01 ILLEGAL FUNCTION
0x02 ILLEGAL DATA ADDRESS
0x03 ILLEGAL DATA VALUE
0x04 SERVER DEVICE FAILURE


Fuente

M谩s informaci贸n >>>

Buscar en nuestro blog

Librer铆a Modbus RTU Master para automatizaci贸n industrial
Boot & Work Corp. S.L., Fernandez Queralt Martinez 18 de marzo de 2020
Compartir

驴Est谩s buscando tu Controlador L贸gico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Comparaci贸n de PLCs industriales >>>