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

Usando la librería Software Serial en PLCs de Industrial Shields

Vea un Ejemplo de comunicación Serial con Arduino


 
 

Que és la comunicación Serial con Arduino? y como se utiliza la libreria en el Arduino IDE


Hay diferentes tipos de comunicación Serial. Cuándo se utiliza una placa Arduino en un proyecto puedes utilizar el estandard de comunicación Serial desde los pins Rx, Tx, de la UART incorporado en la misma placa Arduino, lo que se llama SerialTTL. En este caso, utilizarás la libreria Hardwareserial.h pero hay otros pines adicionales que tambien te permiten trabajar como Rx o Tx. Por ejemplo, Los pines de la comunicación SPI como són MISO, MOSI y Select (SC), de hecho, estos pines tambien pueden trabajar como entradas y salidas digitales, y tal y como explicamos son muy prácticos para utilizrse como  Rx, Tx utilizando 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.

To sum up, if you are using the UART serial port from the Arduino or from the Arduino based PLC for Industrial projects. The use of other pins working as a Serial TTL can help you with the success of the development of your project.  So, that additional serial port must be programmed using softwareserial.h library.

Si no puedes utilizar la libreria hardwareserial porque necesitas utilizar un protocolo de comunicación que necesite de la comunicación originaria de la UART fisica de la placa en lugar de utilizar un puerto seria virtual. En estos casos necesitarás un conversor para a comunicación RS232 o RS485 del dispostivo 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). 

Arduino Uno board Serial TTL

Puerto Serie en Arduino y en un PLC Arduino Industrial de Industrial Shield

Arduino Uno incluye 1 puerto serie TTL, en el pin 0 y el pin 1. Este trabaja desde la UART, pero tambien se pueden utilizar otros pines como Serial TTL. Por ejemplo, todos los pines digitales pueden trabajar como Tx pero los pines de la comunicación SPI tambien se pueden configurar como Rx, por lo que podrás añadir almenos 3 puertos serie adicionales. Mira las especificaciones técnicas de Arduino UNO dónde se explica que el Rx y Tx de la UART está compartido con el puerto USB, por lo que en el caso de utilizar el puerto USB para comunicaciones estos no se pueden utilizar. También hay otras caracteristicas que limitan el uso de esta comunicación en la placa Arduino UNO, por lo que nosotros recomendamos el uso de Arduino Leonardo o Arduino MEGA si necesitas los dos puertos de comunicación, 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.

Utilizando un PLC Industrial con 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. 

Industrial Arduino PLC Ardbox Relay

Vea un ejemplo de uso

Requisitos

Ethernet or 20 I/Os PLC:    Ethernet PLC          20 I/Os PLC

SoftwareSerial Library:       SoftwareSerial Library

Configuración

Para Arduino LEONARDO:

En el Arduino LEONARDO, todos los pines se pueden utilizar como Tx mientras que los siguientes pines se pueden utilizar como Rx:

pin 14 de Leonardo (SO), pin 15 de Leonardo (SCK) o pin 16 de Leonardo(SI). 

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

Para Arduino MEGA:

 En Arduino MEGA, todos los pines se pueden utilizar como Tx, mientras que los siguientes pines se pueden utilizar como Rx: 

pin 50 of the Arduino Mega 2560 (SO), pin 51 of the Arduino Mega (SI), Pin 52 of the Arduino Mega (SCK).

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

Si se utiliza alguna otra placa Arduino se tiene que verificar en las especificaciones técnicas de la misma que pines se pueden utilizar como Rx.


Software

This sketch is very simple and shows how the library works. First, the Tx and Rx pins of the equipment for the Serial Software must be defined (we are trying it on an Ardbox Family model) . See the softwareserial source code:
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 al RX del otro dispositivo.

Recibe del hardware serial, envía al serial del software, recibe del serial del software, envía al serial del hardware.



#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");

}

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