Busca en nuestro Blog. Encontrarás múltiples aplicaciones, soluciones, ejemplos de código. Navega utilizando la nube de etiquetas o busca utilizando criterios específicos

Cómo configurar el Puerto Serie en Arduino IDE industrial

Ejemplo utilizando el puerto serie RS-485

Sinamics V20 Converter


Introducción

En este post, verás cómo es el protocolo RS-485, la relación maestro-esclavo y profundizarás en cómo configurar esta comunicación de la mejor manera posible.


RS-485

RS-485 es un estándar que define las características eléctricas de los conductores y receptores para su uso en sistemas de comunicación en serie. De acuerdo con la señalización eléctrica, está equilibrado y soporta todo tipo de sistemas multipunto. Implementando el estándar, las redes de comunicaciones digitales pueden utilizarse efectivamente a largas distancias y también en ambientes electrónicamente ruidosos. Se pueden conectar varios receptores a una red en un bus lineal multipunto.

Este protocolo es común en los sistemas de control industrial y en este tipo de aplicaciones. Se utiliza en PLCs (Controladores Lógicos Programables) y en fábricas entre otras aplicaciones. Se aplica como la capa física que subyace a muchos protocolos de automatización estándar y patentados que se utilizan para implementar sistemas de control industrial como el Modbus.

Para ampliar información sobre sobre RS-485 y Modbus, visita las siguientes entradas de nuestro blog:

Guía de solución de problemas RS485


Maestro-Esclavo

Normalmente, cuando hablamos de una red maestro-esclavo, el dispositivo maestro inicia toda la actividad de comunicación. Hay muchas comunicaciones diferentes pero, en esta, el maestro está típicamente ubicado en el centro a lo largo del conjunto de cables RS-485 y dos esclavos están ubicados en el extremo físico de los cables, haciendo las terminaciones.

Hay tres tipos de relaciones entre el maestro y el esclavo desde el punto de vista de la Tx y Rx (Transmisor y Receptor); el Simplex, el Full Duplex y el Half Duplex..

  • El Simplex es un tipo de transmisión unidireccional en el que el Rx no puede responder al Rx.

  • El Half Duplex permite la transmisión en ambas direcciones. Aunque Tx y Rx comparten la misma frecuencia, Tx sólo puede ocurrir de manera simultánea.

  • El Full Duplex permite la transmisión en ambas direcciones y para el mismo canal de forma simultánea, utilizando dos frecuencias diferentes; una para Tx y otra para Rx.


Simplex, Half Duplex, Full Duplex

Configuración

Para explicar la configuración del RS-485, tomaremos un ejemplo: el Sinamics V20 Converter de Siemens.

Un PLC maestro puede conectar un máximo de 31 convertidores (esclavos) a través de una interfaz serie y controlarlos con el protocolo de bus serie USS. Un esclavo no puede transmitir si no ha sido iniciado por el maestro antes, por lo que la transmisión directa de información entre los diferentes esclavos no es posible.

Sinamics V20 Converter

En el caso de la comunicación Half-Duplex, los mensajes se envían siempre en el mismo formato:

Half duplex communication

Y, en la configuración de Arduino IDE para Serial, puedes ver que tienes que seguir la siguiente Sintaxis y Parámetros (la configuración tiene que ser establecida en la sección de configuración y puedes inicializar tantos puertos seriales como tenga su dispositivo de trabajo): 

Sintaxis y parámetros

Si se juntan ambas imágenes, en primer lugar, puedes ver que hay que establecer la velocidad de baudios, que es la velocidad de comunicación del puerto, y tiene que ser la misma en el Tx y Rx si tienen que comunicarse a través del mismo canal de frecuencia. Después de eso, tienes que establecer los parámetros de configuración:

  • 8 bits de datos: aquí tienes que establecer con cuántos bits de datos tienes que trabajar.

  • 1 Bit de Paridad: aquí tienes que escribir e (para par), o (para impar) o n (para nada). Es importante establecer esto correctamente porque el bit de paridad es un bit binario que indica si el número de bits con el valor 1 en un grupo de bits es par, impar o ninguno. Este es un importante método de detección de errores (compara los 1 con el bit de paridad para comprobar si la transmisión tiene éxito).

  • 1/2 Bits de Parada: es importante establecer 1 o 2 bits de parada. Es importante saber que con 1 bit, la eficiencia es del 80%, y con 2 bits baja a 72,7%; pero, a veces, este bit extra puede ser una forma útil de añadir un poco de tiempo extra, especialmente a altas velocidades de baudios y/o usando UART suave, donde se requiere tiempo para procesar el byte recibido.


Si no se establecen los parámetros de configuración del Serial aparte de la velocidad de la tasa de baudios que siempre se requiere, se establecerá la configuración de los parámetros por defecto, que es SERIAL_8N1 (8 -> bits de datos, N -> ninguno, sin paridad, 1 -> bit de parada). En lo que respecta a la velocidad en baudios, es importante ajustar siempre la velocidad correcta según el dispositivo de trabajo (puede consultar las velocidades en baudios soportadas por cada pantalla o dispositivo en sus propias hojas de datos). 


Ejemplo de código

/*
   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/>.
*/

// Arduino Mega using all four of its Serial ports
// (Serial, Serial1, Serial2, Serial3),
// with different baud rates and configurations:

void setup() {
  Serial.begin(9600,SERIAL_8N1); //the default configuration
  Serial1.begin(38400,SERIAL_5E1); //even parity
  Serial2.begin(19200, SERIAL_5O1); //odd parity
  Serial3.begin(4800);

  Serial.println("This is Serial");
  Serial1.println("This is Serial 1");
  Serial2.println("This is Serial 2");
  Serial3.println("This is Serial 3");
}

void loop() {
  // put your main code here, to run repeatedly:
}


Mira la Sección Serial de la web oficial de Arduino para ampliar la información. 

 

¿Quieres más información?

Con la tecnología Open Source, puedes ejecutar tus propias instalaciones.

Rellena el formulario y contactaremos contigo lo más pronto posible.

Enviar  Por favor, completa el formulario correctamente.