MODBUS RTU y RS485 Arduino (módulo Seneca Z-D-in)
Comunicación con RS485 Modbus RTU en controladores PLC industriales Arduino
30 enero, 2019 por
MODBUS RTU y RS485 Arduino (módulo Seneca Z-D-in)
Boot & Work Corp. S.L., Support Team

Introduction

Modbus RTU Arduino PLC

El protocolo Modbus RTU es un medio de comunicación que permite el intercambio de datos entre controladores lógicos programables (PLC) y ordenadores. Los dispositivos electrónicos pueden intercambiar información a través de líneas serial utilizando el protocolo Modbus.

Ha sido ampliamente aceptado y ampliamente utilizado en la construcción de Sistemas de Gestión de Edificios (BMS) y Sistemas de Automatización Industrial (IAS). Su adopción ha sido impulsada por su facilidad de uso, fiabilidad, y el hecho de que es de código abierto y se puede utilizar sin regalías en cualquier dispositivo o aplicación.

El protocolo Modbus fue desarrollado y publicado por Modicon® en 1979 para su uso con sus controladores lógicos programables. Está construido utilizando una arquitectura maestra / esclava y es compatible con dispositivos serial que utilizan los protocolos Arduino RS232/ RS485/ RS422. Modbus se utiliza a menudo en escenarios donde los dispositivos de control e instrumentación transmiten señales a un controlador o sistema central para recopilar y analizar datos. Los sistemas de automatización y supervisión de control y adquisición de datos (SCADA) a menudo utilizan el protocolo Modbus.


Comunicación mediante MODBUS RTU a través de una interfaz serial RS485 (módulo Seneca Z-D-in)

What does Modbus RTU mean

Modbus RTU (Remote Terminal Unit) es uno de los dos modos de transmisión definidos en la especificación Modbus original. Los dos modos son Modbus RTU y ASCII y están diseñados para ser utilizados con dispositivos serie que admiten los protocolos de Modbus Arduino RS232, RS485 y RS422. Una característica distintiva de Modbus RTU es su uso de codificación binaria y fuerte comprobación de errores CRC.

Modbus RTU es la implementación del protocolo Modbus que se utiliza con mayor frecuencia en aplicaciones industriales y en instalaciones de producción automatizadas.

Requisitos



Ethernet PLC o 20 I/Os industrial Arduino
Ethernet PLC
20 IOs PLC
Z-D-IN 5 Modbus RTU Módulo
Visit website
Placas de Industrial Shields
Mapping pins on our boards
Librería Tools40 instalada (incluidas librerías Modbus)
Tools 40 at GitHub


Description

Z-D-In 5 Modbus RTU Module 

El módulo Z-D-IN Seneca Modbus RTU se utiliza para interconectar 5 señales digitales (PUSH BUTTON, INTERRUPTOR DE LÍMITE, CONTROL REMOTO, INTERRUPTOR DE CONTROL, RELÉS, etc.) con todos los sistemas de control que son capaces de comunicarse por el protocolo MODBUS RTU a través de la interfaz serie RS485

Un contador de 16 bits está disponible en cada entrada, la entrada de frecuencia máxima es de 100 Hz y es posible configurar una entrada como contador rápido con una frecuencia máxima de 10 kHz. El módulo es un esclavo Modbus RTU Arduino y se puede acoplar con cualquier dispositivo Modbus Master. Un aislamiento galvánico de 3 vías entre los circuitos de alimentación // entrada // RS485 asegura la integridad de sus datos.








Características











Fuente de alimentación10..40 Vdc; 19..28 Vac (50-60 Hz)
 








Entradas5 CH (reed, proximidad, pnp, npn, contacto) con negativo común, autoalimentado 24 Vdc, aislado, protegido de transitorios de hasta 600 W/ms









Contadores4 a 16 bit, frecuencia máxima 100 Hz; 1 a 32 bit, frecuencia máxima 10 KHz










Filtro Anti-reboteConfigurable desde 5 a 250 ms









ComunicaciónRS485 a 2 fili, protocolo esclavo ModBUS RTU










Dimensiones17,5 x 100 x 112 [mm]










Guía de montaje35 mm guía DIN 46277




La siguiente imagen muestra las entradas y salidas del Z-D-IN:

Connections


Conexiones Modbus RTU con PLC Arduino 




Final Connection


Modbus RTU con PLC Arduino - Conexión final


Software

En este boceto, estamos controlando cada entrada (5 en total) usando interruptores digitales. La comunicación entre el PLC Arduino y el módulo ZD-in Modbus RTU es mediante RS485 en Half Duplex, por lo que es muy importante que descargue y use la biblioteca RS485.h así como la biblioteca ModbusRTUSlave.h (Librería Modbus RTU Arduino) para trabajar en este protocolo.

The Z-D-in module acts as a slave and the Arduino controller will act as the master of the system.

En este boceto, las solicitudes de lectura de las entradas se envían cada segundo y los cambios se muestran en la pantalla.Cada entrada ha asociado un contador que se incrementará para cada cambio que se puede leer en la entrada. 

The full sketch is shown below:

/*
   Copyright (c) 2019 Boot&Work Corp., S.L. All rights reserved
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU Lesser General Public License for more details.
   You should have received a copy of the GNU Lesser General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#include <ModbusRTUMaster.h>
#include <RS485.h>
const uint8_t slaveAddress = 1;
const uint32_t serialRate = 38400UL;
const int serialConfig = SERIAL_8N1;
const uint32_t requestPeriod = 1000UL; // ms
const int numInputs = 5;
ModbusRTUMaster modbus(RS485);
uint8_t inputStates[numInputs];
uint16_t inputCounters[numInputs];
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600L);
  Serial.println("seneca-z-d-in-module started");
  RS485.begin(serialRate, HALFDUPLEX, serialConfig);
  modbus.begin(serialRate);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  static uint32_t lastRequestTime = millis();
  // Send a request every 1000ms
  if (!modbus.isWaitingResponse()) {
    if (millis() - lastRequestTime > requestPeriod) {
      // Send a Read Holding Registers request to the slave with address 1
      // IMPORTANT: all read and write functions start a Modbus transmission, but they are not
      // blocking, so you can continue the program while the Modbus functions work. To check for
      // available responses, call modbus.available() function often.
      if (!modbus.readHoldingRegisters(slaveAddress, 1, 6)) {
        // TODO Failure treatment
      }
      lastRequestTime = millis();
    }
  }
  // Check available responses often
  ModbusResponse response = modbus.available();
  if (response) {
    if (response.hasError()) {
      // TODO Response failure treatment. You can use response.getErrorCode()
      // to get the error code.
    } else {
      uint16_t states = response.getRegister(0);
      for (int i = 0; i < numInputs; ++i) {
        inputStates[i] = (states >> i) & 0x01;
        inputCounters[i] = response.getRegister(i + 1);
      }
      printInputs();
    }
  }
}
////////////////////////////////////////////////////////////////////////////////////////////////////
void printInputs() {
  Serial.println();
  Serial.print("Inputs: ");
  for (int i = 0; i < numInputs; ++i) {
    Serial.print(inputStates[i] ? "HIGH" : "LOW ");
    Serial.print(' ');
  }
  Serial.println();
  Serial.print("Counters: ");
  for (int i = 0; i < numInputs; ++i) {
    Serial.print(inputCounters[i]);
    Serial.print(' ');
  }
  Serial.println();
}

Related Posts about Modbus TCP, WiFi, HTTP Server, with Arduino

Communication System between M-Duino and WiFi Module

Read the post >>>


HTTP Server in an M-Duino (Enable/Disable outputs through a website) 

Read the post >>>


How to connect Arduino based industrial controller using Modbus TCP/IP 

Read the post >>>


How to use Modbus TCP Slave library with Arduino based industrial PLC 

Read the post >>>


Soluciones Hardware - Controladores programables

Soluciones basadas en Open Source para automatización, monitoreo y control

PLC Based on Arduino, Raspberry Pi and ESP 32



MODBUS RTU y RS485 Arduino (módulo Seneca Z-D-in)
Boot & Work Corp. S.L., Support Team
30 enero, 2019
Compartir
Archivar

¿Buscas 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 PLC industrial>>>

¿Quieres más información?

¡Rellena el formulario!

¡Cuéntame más!