Cómo configurar el Puerto Serie en Arduino IDE industrial

Ejemplo utilizando el puerto serie RS-485
22 de julio de 2019 por
Cómo configurar el Puerto Serie en Arduino IDE industrial
Boot & Work Corp. S.L., Quesada Dani Salvans

Index

1. Introduction: Serial Communication
2. Configuration
3. Code example


1.-Puerto serie

La comunicación serie es uno de los métodos existentes que permite a dos dispositivos la posibilidad de transferir datos entre ellos, enviando los bits de información uno tras otro a través de un canal de comunicación o un enlace físico. Se utiliza a menudo en aplicaciones de comunicación a corta distancia entre dispositivos y utiliza dos hilos en una estructura bidireccional; uno para transmitir los datos y el otro para recibirlos. 

En el contexto de nuestros dispositivos basados en Arduino, la comunicación serie tiene las siguientes características:

  • Comunicación asíncrona: los PLC emisor y receptor se configuran con la misma velocidad de transmisión (bits por segundo) para la comunicación. A pesar de ello, no comparten señal de reloj sino que, aparte de ello, ambos dispositivos generan relojes de forma independiente en función de la velocidad de transmisión previamente configurada.
  • Bits de inicio y parada: cada bit de información enviado en una comunicación serie asíncrona está enmarcado por un bit de inicio al principio y uno o varios bits de parada al final. 
  • Half-Duplex y Full-Duplex: en la comunicación Half-Duplex el dispositivo no puede transmitir y recibir simultáneamente, sino que se turna para una y otra acción. En cambio, en la comunicación Full-Duplex, los dispositivos pueden transmitir y recibir al mismo tiempo. 
  • Codificación ASCII: los datos enviados a través del puerto serie suelen estar codificados con el estándar ASCII.
  • Software Serial: además de la comunicación Serial común, también puede utilizar la opción Software Serial cuando la primera no pueda aplicarse. 


2.-Configuración

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). 


3.-Ejemplo de código

Aquí podemos ver un ejemplo que utiliza los Puertos Serie 0, 1 y 2. Hay que tener en cuenta que los dispositivos de nuestra familia principal disponen de varios puertos serie: 

  • Familia M-Duino: Serial 0 (cuidado, es el mismo que se usa para subir el código, y no puedes usarlo simultáneamente mientras subes el código o usas el monitor Serial) y Serial1.
  • Familia PLC ESP32: Serie1 y Serie2. 
  • Familia Ardbox: no disponen de puerto serie por hardware, debes utilizar el puerto serie por software como puedes ver en el post anterior. 

Código del remitente:

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


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


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


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

if (Serial1.available()) {
    byte tx = 0x5;

    // Echo the byte to the serial port again
    Serial1.write(tx);
}


Código del receptor:

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


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


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


void loop() {

  // Print received byte when available
  if (Serial1.available()) {
    byte rx = Serial1.read();

    // Hexadecimal representation
    Serial.print("HEX: ");
    Serial.print(rx, HEX);

    // Decimal representation
    Serial.print(", DEC: ");
    Serial.println(rx, DEC);
  }
}

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

 

Buscar en nuestro blog

Cómo configurar el Puerto Serie en Arduino IDE industrial
Boot & Work Corp. S.L., Quesada Dani Salvans 22 de julio de 2019
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 >>>