Cómo utilizar la librería de Software Serial en el controlador industrial Arduino PLC
Ejemplo de serie del software Arduino
18 febrero, 2019 por
Cómo utilizar la librería de Software Serial en el controlador industrial Arduino PLC
Boot & Work Corp. S.L., Support Team


 
 

¿Qué es la comunicación en serie con Arduino? ¿Cómo se utiliza la biblioteca en el IDE de Arduino? 

Hay diferentes tipos de comunicaciones en serie. Cuando usas una placa Arduino en un proyecto puedes elegir los pines Seriales estándar como Rx Tx del software Arduino, desde la UART dentro de la placa Arduino, por lo que se llama Serial TTL. En ese caso, utilizarás la librería Hardwareserial.h, pero algunos pines adicionales pueden funcionar como Rx o Tx. Por ejemplo, los pines de comunicación SPI pueden funcionar como MISO, MOSI y Select (SC), pero también son pines que pueden funcionar como entrada o salida digital, o si lo necesitas, podrías usar esos pines como Rx, Tx usando la librería softwareserial.h.
 

Las comunicaciones Serial te permiten conectar dos dispositivos diferentes enviando y recibiendo datos entre ellos.  

El puerto Serial TTL se puede transformar a un estandar Industrial cómo son RS232 y RS485. Cuándo utilizas RS232, la funcionalidad es bastante similar a cuando trabajas directamente con el puerto Serial TTL aúnque trabajas a un rango de voltaje estandarizado ya que Serial TTL para una placa Arduino Uno, Mega o Leonardo trabaja a 5V. En cambio si utilizas el puerto RS485 puedes configurar una red de comunicaciones entre dispositivos dónde defines un equipo que trabaje como MAESTRO (Master) conectado a varios dispositivos configurados como ESCLAVOS (Slave). En este caso el numero de dispositivos que puedes conectar es de entre 2 a 32 dispositivos (comunmente llamados Nodos). La máxima distáncia entre estos dispositivos será de hasta 1220m siempre y cuando el cableado esté bien echo y cumpliendo con los requisitos EMC y el ruido eléctrico haya sido minimizado.

En resumen, si estás utilizando el puerto serie UART del Arduino o del PLC basado en Arduino para proyectos industriales. El uso de otros pines que funcionen como TTL Serial puede ayudarte con el éxito del desarrollo de tu proyecto.  Por lo tanto, ese puerto serie adicional debe ser programado utilizando la biblioteca softwareserial.h

Si no puedes utilizar la Librería HardwareSerial, porque necesitas utilizar un protocolo de comunicación que necesite de la comunicación originaria de la UART física de la placa en lugar de utilizar un puerto seria virtual. En estos casos necesitarás convertir el estándar RS232 o RS485 del dispositivo a Puerto Serie TTL. (Este ejemplo lo mostraremos en otro post)

En este post explicamos las ventajas de utilizar la libreria SoftwareSerial para simular un puerto Serie mediante el Arduino IDE (Puerto serie Virtual). 

Puertos serie en Arduino y PLCs industriales Arduino utilizando Industrial shields

Arduino Uno incluye 1 puerto serial TTL desde pin 0 y pin 1. Este trabaja desde UART, pero existe la posibilidad de usar otros pines como Serial TTL. Por ejemplo, todos los pines digitales pueden funcionar como Tx, pero los pines de comunicación SPI también se pueden configurar como Rx, por lo que podrás agregar al menos 3 puertos SoftwareSerial adicionales. Mira en las especificaciones técnicas de Arduino UNO dónde se explica que el Rx y Tx de la UART comparten el puerto USB, por lo que si necesitas usar Rx y Tx desde UART, el puerto USB no se puede usar. También hay otras características que afectan el uso de Arduino UNO por lo que recomendamos el uso de Arduino Leonardo y Arduino Mega si necesitas usar ambos puertos, USB y Serial TTL.

IComo se observa en las carecteristicas técnicas de Arduino MEGA, Esta incluye 4 puertos Serie TTL independientes. Utilizando la placa Arduino Leonardo, tiene unicamente un único puerto Serie TTL si bien este está separado del puerto USB de la placa.

De todos modos, en ningún caso recomendamos el uso del puerto USB para enviar y recibir datos ya que este ha estado diseñado para la carga del programa. Cuando se utiliza el puerto USB de la placa Arduino para enviar datos, ya sea por envio de muchos datos o por altas velocidades, el chicp se desprograma y puede dar problemas de comunicación dificiles de arreglar en un proyecto industrial por lo que recomendamos el uso de RS232 en lugar de USB para estos casos.

Uso de un controlador industrial Arduino

Utilizando Una shield Industrial para Arduino como la de Industrial Shields, esta ya lleva incorporados los estandares industriales de comunicación como son RS485 y/o RS232. En el caso de los Ardbox, al utilizar Arduino Leonardo y disponer unicamente de un puerto Serie TTL, solo uno de estos tipos de comunicación se podrán utilizar con la libreria Hardwareserial.h por lo que el otro deberá utilizar la libreria softwareserial.h. En este caso la configuración del puerto para trabajar con cada una de las librerias se puede hacer mediante unos jumpers que lleva el equipo en su interior. En el caso de la famila Ethernet PLC este ya permite el uso de los dos puertos de comunicación simultanea al incorporar en su interior una placa Arduino MEGA y disponer de más puertos de comunicación TTL. 

Ejemplo de uso

                Requisitos

                Configuration

                Por el Arduino LEONARDO

                Todos los pines se pueden usar para Tx en el Arduino LEONARDO, mientras que para Rx se pueden usar los siguientes:

                • Pin 14 de Leonardo (SO)

                • Pin 15 de Leonardo (SCK)

                • Pin 16 de Leonardo (SI)

                Recomendamos usar uno de los pines habilitados para Rx para Tx.

                Por el Arduino MEGA

                En el Arduino MEGA, todos los pines pueden ser usados para Tx, mientras que para hile Rx se pueden usar los siguientes

                • Pin 50 del Arduino Mega 2560 (SO)

                • Pin 51 del Arduino Mega (SI)

                • Pin 52 del Arduino Mega (SCK)

                Recomendamos usar uno de los pines Rx habilitados para Tx. Usando una placa Arduino (este ejemplo se ha realizado utilizando Arduino Leonardo, Arduino Uno y Arduino Mega. Si necesitas utilizar otras placas Arduino, puedes consultar las especificaciones técnicas de esa placa).


                Software

                Este sketch es muy simple y muestra cómo funciona la librería. Primero, se deben definir los pines Tx y Rx del equipo para el SoftwareSerial (lo estamos probando en un modelo de la Familia Ardbox). Mira el código fuente de SoftwareSerial:
                SoftwareSerial mySerial(14, 15); // RX, TX

                Rx es el pin digital 14 (SO), conectado a TX del otro dispositivo.

                Tx es el pin digital 15 (SI), conectado aRX del otro dispositivo.


                Recibe de HardwareSerial, envia a SoftwareSerial. Recibe de SoftwareSerial, envia a HardwareSerial.

                #include <SoftwareSerial.h>
                
                SoftwareSerial mySerial(14, 15); // RX (MISO), TX (SCK)
                
                void setup()  
                {
                  // Open serial communications and wait for port to open:
                  Serial.begin(9600);
                  while (!Serial) {
                    ; // wait for serial port to connect. Needed for Leonardo only
                  }
                
                
                  Serial.println("Goodnight moon!");
                
                  // set the data rate for the SoftwareSerial port
                mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() // run over and over
                { if (mySerial.available())
                Serial.write(mySerial.read());
                if (Serial.available())
                mySerial.write(Serial.read()); }

                Este otro código envía instrucciones a través del serial del software: 
                 
                #include <SoftwareSerial.h>
                SoftwareSerial mySerial(14, 15);  // Rx (MISO, Tx (MOSI)
                void setup() {
                  // put your setup code here, to run once:
                mySerial.begin(9600);
                Serial.begin(9600);
                }
                void loop() {
                  // put your main code here, to run repeatedly:
                delay(500);
                mySerial.println("Instruction 1"); 
                Serial.println("1st instruction sended");
                delay(500); 
                mySerial.println("Instruction 2"); 
                Serial.println("2nd instruction sended");
                }

                Cómo utilizar la librería de Software Serial en el controlador industrial Arduino PLC
                Boot & Work Corp. S.L., Support Team
                18 febrero, 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!