Tutorial Modbus: Cómo obtener la temperatura con un sensor Dallas

Protocolo Modbus y PLC industrial basado en Arduino
30 de julio de 2021 por
Tutorial Modbus: Cómo obtener la temperatura con un sensor Dallas
Boot & Work Corp. S.L., Fernandez Queralt Martinez

Introducción

En el post anterior, aprendimos cómo conectar un sensor Dallas DS18B20 a un Ardbox, un PLC basado en Arduino.

En este post, vamos a aprender cómo conseguir la temperatura con Arduino IDE usando el protocólo Modbus.

Enlaces relacionados

Cómo

Read Dallas temperature sensor and data log in µSD Card with Arduino automation

Read 

Cómo

Conectar un sensor de temperatura al Raspberry PLC

Read 

Cómo

Parse the temperature with Node-RED and Raspberry Pi industrial

Read 

Cómo

Controlar la temperatura con el sensor Dallas DS18B20 y un PLC Arduino

Read 

Cómo

Conseguir la temperatura con un PLC Raspberry    

Read 

Cómo

Programar un PLC ESP32 industrial de 10 E/S  via WiFi

Read 

Explicación

Modbus

Según Wikipedia, Modbus es un protocolo de comunicaciones situado en los niveles 1, 2 y 7 del modelo OSI, basado en la arquitectura maestro/esclavo (RTU) o cliente/servidor (TCP/IP), diseñado en 1979 por Modicon para su gama de controladores lógicos programables (PLC).

Convertido en un protocolo de comunicaciones estándar de facto en la industria, es el de mayor disponibilidad para la conexión de dispositivos electrónicos industriales.

Veamos alguna información relevante sobre Modbus:

  • Cada dispositivo de la red Modbus tiene una dirección única.
  • Cualquier dispositivo puede enviar comandos Modbus, aunque normalmente sólo lo permite un dispositivo maestro.
  • Cada comando Modbus contiene la dirección del dispositivo que recibe la orden.
  • Todos los dispositivos reciben la trama, pero sólo el destinatario la ejecuta (excepto en un modo especial llamado "Broadcast").
  • Todos los dispositivos reciben la trama, pero sólo el destinatario la ejecuta (excepto en un modo especial llamado "Broadcast").
  • 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.
      Modbus - Explicación - Tutorial de Modbus: Cómo obtener la temperatura con un sensor Dallas

Librerías Arduino

Ahora que sabemos un poco más sobre Modbus, ¡vamos a programar nuestro PLC basado en Arduino!

Como sabemos, el sensor de temperatura Dallas DS18B20 trabaja con el protocolo 1-Wire, por lo que necesitaremos dos librerías para poder obtener la temperatura:

  1. Arduino-Temperatura-Control-Librería

  2. OneWire >>> 

For the Modbus protocol, we will need the library from Industrial Shields:

Código Arduino

Una vez que las librerías están instaladas en nuestro PC, vamos a hacer lo siguiente:
   · Incluir las bibliotecas que necesitamos.
   · Definir el pin con el bus One Wire. En nuestro caso, el pin 2.
   · Definir la tasa de baudios del RS485. En nuestro caso 9600UL.
   · Definir el número de entradas analógicas. En nuestro caso 1.
   · Crear un esclavo Modbus.

// Include the libraries we need
#include <OneWire.h>
#include <DallasTemperature.h>
#include <RS485.h>
#include <ModbusRTUSlave.h>
//Sensor Pin: 2
#define ONE_WIRE_BUS 2
#define RS485_RATE 9600UL
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensor(&oneWire);
#define numAnalogInputs 1
uint16_t analogInputs[numAnalogInputs];
//Slave Address: 1
ModbusRTUSlave modbus(RS485, 1);

En la función de configuración, vamos a hacer lo siguiente:

   · Iniciar el puerto serie, el RS485 y el sensor.

   · Establecer los registros de entrada a la instancia esclava.

void setup(void)
{
  // Start serial port
  Serial.begin(9600);
  // Start up the library
  sensor.begin();
  RS485.begin(RS485_RATE, HALFDUPLEX, SERIAL_8N1);
  modbus.begin(RS485_RATE);
  modbus.setInputRegisters(analogInputs, numAnalogInputs);
}

Finalmente, en la función de bucle vamos a escribir lo siguiente para solicitar la temperatura cada 10000 milisegundos mientras la instancia Modbus se actualiza constantemente para configurar los registros de entrada.

void loop(void) {
  static uint32_t lastStatusTime = millis();
  
  if (millis() - lastStatusTime > 10000) {
    sensor.requestTemperatures(); // Send the command to get temperatures
    float temp = sensor.getTempCByIndex(0);
    analogInputs[0] = temp * 100;
    Serial.println(analogInputs[0]);
    lastStatusTime = millis();
  }
  modbus.update();
}

Ahora que tu código está hecho, descarga las placas de Industrial Shields como se muestraAQUÍ >>> . A continuación, sólo tienes que seleccionar tu placa, modelo y puerto en el menú Herramientas.

En nuestro caso:

  • Placa: Placas de Industrial Shields  > Família Ardbox.
  • Modelo: Ardbox Analógico HF+ con HW RS-485.


Una vez que todo esté listo, sube tu sketch, abre el monitor de serie y comprueba la temperatura de tu sensor Dallas.


Buscar en nuestro blog

Tutorial Modbus: Cómo obtener la temperatura con un sensor Dallas
Boot & Work Corp. S.L., Fernandez Queralt Martinez 30 de julio de 2021
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.


Industrial PLC comparison >>>