Ir al contenido

Implementación para PLCs basados en Raspberry (C)

Instalación

libmodbus es una librería de C que ofrece implementaciones de cliente y servidor para Modbus RTU y TCP. Encontrarás la librería aquí; instálala ejecutando el comando: ​sudo apt install libmodbus-dev.

Maestro

Los siguientes ejemplos son implementaciones de maestro Modbus, tanto con RTU como con TCP:


Maestro Modbus RTU


Maestro Modbus TCP

Configuración

La configuración inicial de Modbus RTU y de Modbus TCP se diferencia principalmente en el tipo de comunicación que usa cada uno.

  • En Modbus RTU, la configuración consiste en fijar los parámetros de la comunicación serie. Esto incluye definir el SLAVE_ID, que identifica el dispositivo esclavo Modbus concreto, el SERIAL_PORT, que indica la interfaz serie usada para la comunicación, y parámetros de comunicación como BAUD_RATE, PARITY, DATA_BITS y STOP_BITS. Ajusta estos valores según tu instalación.
#define SLAVE_ID 1
#define SERIAL_PORT "/dev/ttySC0"
#define BAUD_RATE 38400
#define PARITY 'E'
#define DATA_BITS 8
#define STOP_BITS 1

​Para crear el contexto Modbus, Modbus RTU usa la siguiente función, que inicializa la conexión con los parámetros serie indicados.

ctx = modbus_new_rtu(SERIAL_PORT, BAUD_RATE, PARITY, DATA_BITS, STOP_BITS);
  • Modbus TCP requiere fijar los parámetros de la comunicación sobre una red IP. En lugar de la configuración del puerto serie, indicas la dirección SLAVE_IP y el número de PORT. El SLAVE_ID se sigue usando para identificar el dispositivo esclavo.
#define SLAVE_ID 1
#define SLAVE_IP "10.10.10.20"
#define PORT 502

​Para crear el contexto Modbus, Modbus TCP usa la siguiente función, que establece la conexión con la dirección IP y el puerto indicados.

ctx = modbus_new_tcp(SLAVE_IP, PORT);

Referencia de la API

Esta referencia de la API detalla las funciones Modbus esenciales para leer y escribir datos entre un maestro y un esclavo Modbus. Las funciones cubren operaciones sobre bobinas (coils), entradas discretas, registros de retención (holding registers) y registros de entrada (input registers). Estas operaciones incluyen leer el estado o los valores y escribir datos en el esclavo Modbus.

Descripción:

Lee el contenido de un número determinado de bobinas (coils) de un dispositivo esclavo (FC=01).

Sintaxis:

modbus_read_bits(ctx, addr, nb, dest);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de las bobinas.
  • nb: el número de bobinas que se leen.
  • dest: el array donde se guarda la lectura.

Devuelve:

Devuelve el número de bits leídos si la operación se realiza correctamente y -1 en caso contrario.

Descripción:

Lee el contenido de un número determinado de entradas discretas de un dispositivo esclavo (FC=02).

Sintaxis:

read_input_bits(ctx, addr, nb, dest);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de las entradas discretas.
  • nb: el número de entradas discretas que se leen.
  • dest: el array donde se guarda la lectura.

Devuelve:

Devuelve el número de estados de entrada leídos si la operación se realiza correctamente y -1 en caso contrario.

Descripción:

Lee el contenido de un número determinado de registros de retención (holding registers) de un dispositivo esclavo (FC=03).

Sintaxis:

modbus_read_registers(ctx, addr, nb, dest);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de los registros de retención.
  • nb: el número de registros de retención que se leen.
  • dest: el array donde se guarda la lectura.

Devuelve:

Devuelve el número de registros leídos si la operación se realiza correctamente y -1 en caso contrario.

Descripción:

Lee el contenido de un número determinado de registros de entrada (input registers) de un dispositivo esclavo (FC=04).

Sintaxis:

modbus_read_input_registers(ctx, addr, nb, dest);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de los registros de entrada.
  • nb: el número de registros de entrada que se leen.
  • dest: el array donde se guarda la lectura.

Devuelve:

Devuelve el número de registros de entrada leídos si la operación se realiza correctamente y -1 en caso contrario.

Descripción:

Escribe una sola bobina a 0 o a 1 en un dispositivo esclavo (FC=05).

Sintaxis:

modbus_write_bit(ctx, addr, status);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección de la bobina.
  • status: el valor que se escribe en la bobina.

Devuelve:

Devuelve 1 si la operación se ha realizado correctamente y -1 en caso contrario.

Descripción:

Escribe un valor en un solo registro de retención de un dispositivo esclavo (FC=06).

Sintaxis:

modbus_write_register(ctx, addr, value);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección del registro de retención.
  • value: el valor que se escribe en el registro de retención.

Devuelve:

Devuelve 1 si la operación se ha realizado correctamente y -1 en caso contrario.

Descripción:

Escribe valores en una secuencia de bobinas de un dispositivo esclavo (FC=15).

Sintaxis:

modbus_write_bits(ctx, addr, nb, src);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de las bobinas.
  • nb: el número de bobinas que se escriben.
  • src: el array de valores que se escriben en las bobinas.

Devuelve:

Devuelve el número de bobinas escritas si la operación se realiza correctamente y -1 en caso contrario.

Descripción:

Escribe valores en una secuencia de registros de retención de un dispositivo esclavo (FC=16).

Sintaxis:

modbus_write_registers(ctx, addr, nb, src);

Parámetros:

  • ctx: el objeto de contexto Modbus.
  • addr: la dirección inicial de los registros de retención.
  • nb: el número de registros de retención que se escriben.
  • src: el array de valores que se escriben en los registros de retención.

Devuelve:

Devuelve el número de registros escritos si la operación se realiza correctamente y -1 en caso contrario.


Calificación
0 0

No hay comentarios por ahora.

para ser el primero en comentar.