Detalles Técnicos

M-DUINO PLC Arduino Ethernet 57AAR I/Os Analog/Digital/Relay PLUS

Volver al producto

Instalación Inicial

ARDUINO IDE

El controlador industrial Arduino IDE es la plataforma original para programar placas Arduino. Esta aplicación multiplataforma está disponible en Windows, macOS y Linux y está configurada bajo la Licencia Pública General GNU. Arduino IDE admite la estructuración de código C y C ++.
Industrial Shields recomienda usar el IDE de automatización industrial Arduino para programar PLC basados en Arduino, pero cualquier software compatible con la automatización industrial Arduino también es compatible con los controladores Industrial Shields.

Aparte de eso, Industrial Shields brinda la posibilidad de seleccionar su controlador PLC industrial basado en Arduino en su IDE de Arduino y compilar sus bocetos para los diferentes PLC (controlador lógico programable).

Descargue el IDE de Arduino 1.8.6: 

Instalador Windows

MAC OSX

Instalar unidades de Industrial Shields  a  Arduino IDE:

Industrialshields boards

ENTRADAS Y SALIDAS

ENTRADAS ANALÓGICAS

La variación de voltaje entre  –Vcc (o GND)  y , +Vcc, puede tomar cualquier valor. Una salida analógica proporciona una medición codificada en forma de un valor digital con un número de N-Bits. En I/O digital y analógica hay una autoaislamiento, por lo que es posible conectarlos a una fuente de alimentación diferente a 24  V

Entradas:   (16x) Analog (0-10Vdc, 10bit) / Digital (7-24Vdc) Inputs configurable by software.


Para saber más sobre las entradas Analógicas...

CONEXIÓN TÍPICA                           

Arduino PLC Analog Imputs Typical Connection

ENTRADAS DIGITALES

La variación de voltaje de  –Vcc (o GND)  a  +Vcc, sin valores intermedios. Dos estados : 0 (-Vcc o GND) y 1 (+Vcc). En I/O digital y analógica hay una autoaislamiento, por lo que es posible  conectarlos a una fuente de alimentación diferente a 24 V.

ENTRADAS:  (16x) Analog (0-10Vdc, 10bit) / Digital (7-24Vdc) entradas configurables por el software.

                (10x) Entrada Digital Aisladas (7-24Vdc)     


Todas las entradas Digitales són PNP.


Para saber más sobre las entradas Digitales...


CONEXIÓN TÍPICA


 -Entrada Digital Aislada


Arduino PLC Digital Isolated Imput Typical Connection 

 -Entrada Digital No Aislada

Arduino PLC Digital No Isolated Imput Typical Connection

Entradas de Interrupción

Interrupt Service Rutine ( rutina de servicio de interrupción). Un mecanismo que permite asociar una función con la ocurrencia de un evento particular. Cuando el evento ocurre que el procesador sale inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando cualquier otra tarea. 


ENTRADAS:   (6x) Interrupt Inputs (7-24Vdc). “Pueden funcionar como una entrada digitial (24Vdc)”.


Interruptor  Arduino Mega Pin M-Duino Pin
INT0 2 I0.5
INT1 3 I0.6
INT2 19 I1.1
INT3 18 I1.0
INT4 21 I2.1
INT5 20 I2.0

    - I0.5 y I0.6 también como el Pin3 y Pin2. Habilite las interrupciones ENCENDIENDO (ON) los interruptores número 3 y 4 de los interruptores de comunicación inactivos .
    - I1.5 y I1.6 también como el Tx1 y Rx1. Habilite las interrupciones ENCENDIENDO (ON) los interruptores número 1 y 2 de los interruptores de comunicación activos.
    - I2.0 y I2.1 también como SCA y SCL. Habilite las interrupciones ENCENDIENDO (ON) los interruptores número 3 y 4 de interruptores de comunicación ascendente. En este caso no podrá usar I2C

Para saber más sobre las entradas Interrumpidas...

CONEXIÓN TÍPICA

Arduino PLC Interrupt Service Rutine TYPICAL CONNECTION

EJEMPLO  

En este ejemplo activamos INT0 usando el pin I0_5 de la placa M-duino. Cuando haya un cambio.  

#define INTERRUPT I0_5 //other pins: I0_1, I0_6, I2_6, I2_5, I1_6, I1_5 (M-Duino) I0_0, I0_3, I0_2, I0_1 (Ardbox)

volatile bool state = false;

void setup() {
  pinMode(INTERRUPT, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(INTERRUPT), function_call_back, CHANGE);
}

void loop() {
  if (state == true){
    Serial.println("Interrupt activated");
    state = false;
  }
}

void function_call_back(){ //Change led state
  state = true;
}

Comunicaciones

Ethernet

Ethernet es la tecnología que se utiliza con mayor frecuencia en las redes de área local cableadas (WLAN). Una WLAN es una red de computadoras y otros dispositivos electrónicos que cubre un área pequeña como una habitación, una oficina o un edificio. Se utiliza en contraste con una red de área amplia (WAN), que abarca áreas geográficas mucho más grandes. Ethernet es un protocolo de red que controla cómo se transmiten los datos a través de una WLAN. Técnicamente, se lo conoce como protocolo IEEE 802.3. El protocolo ha evolucionado y mejorado con el tiempo para transferir datos a la velocidad de un gigabyte por segundo.

Nuestra familia M-Duino incorpora el IC W5500 integrado.

WX5500   es un controlador Ethernet incorporado TCP / IP cableado que proporciona una conexión a Internet más fácil a los sistemas integrados. Este chip permite a los usuarios tener Conectividad a Internet en sus aplicaciones mediante el uso de un solo chip en el que se apilan TCP / IP, 10/100 Ethernet MAC y PHY están integrados. El chip W5500 incorpora el búfer de memoria interna de 32Kb para el paquete Ethernet tratamiento. Con este chip, los usuarios pueden implementar la aplicación Ethernet agregando el programa de socket simple. SPI se proporciona para Fácil integración con el microcontrolador externo

Hardware   

Configuración del Hardware                            

*IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24V CC). Solo con la alimentación USB no hay suficiente energía para encender la comunicación Ethernet.

 

Configuración de los interruptores

Para el protocolo de comunicación de Ethernet, no hay ningún interruptor que lo afecte, así que no importa la configuración de los interruptores para implementar la comunicación de Ethernet.

Códigos(Pines) usados

Para el protocolo de comunicación de Ethernet, el pin definido de la placa Arduino Mega es el pin 10, que está conectado y ensamblado internamente al controlador de Ethernet, WX5500. El WX5500 IC se comunica con la placa Arduino Mega via el SPI bus, también ensamblado previamente. Puedes acceder fácilmente al puerto Ethernet de nuestros PLCs Ethernet, ya que esta localizado arriba de ellos, donde hay la capa de comunicaciones.

 

Software 

 

*IMPORTANTE: Asegúrese de descargar el Arduino based PLC boards para Arduino IDE.

Configuración Software

Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. En primer lugar es necesario incluir la biblioteca Ethernet2.h proporcionada por Industrial Shields (tiene la misma funcionalidad y uso que Ethernet.h).

#include <Ethernet2.h> 
* Recuerde que para la versión V7 o versiones anteriores debe usar la biblioteca <Ethernet.h>

Ethernet2 Library - funciones .

* Ethernet2.h library tiene las mismas funciones que Ethernet.h.


Códigos de Ejemplo

Servidor Echo TCP :

Una vez que el servidor se está ejecutando, cualquier cliente puede conectarse al servidor. En este ejemplo, se utiliza un M-Duino para generar el servidor. El ejemplo de cliente TCP mostrado anteriormente podría ser uno de los clientes.

A continuación se muestra el código de Arduino IDE:

// use Ethernet.h if you have a M-Duino V7 version
#include <Ethernet2.h>
// mac address for M-Duino
byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// Ip address for M-Duino
byte ip[] = { 192, 168, 1, 100 };
int tcp_port = 5566;
EthernetServer server = EthernetServer(5566);
void setup()
{
  // initialize the ethernet device
  Ethernet.begin(mac, ip);
  // start server for listenign for clients
  server.begin();
}
void loop()
{
  // if an incoming client connects, there will be bytes available to read:
  EthernetClient client = server.available();
  if (client.available()) {
    // read bytes from the incoming client and write them back
    // to the same client connected to the server
    client.write(client.read());
  }
}

Cliente Echo TCP :

Una vez que el servidor se está ejecutando, M-Duino puede conectarse al servidor. En este ejemplo, se utiliza un M-Duino para conectarse con Node.js servidor llamado server.js, el mismo que se usó en el enlace de ejemplo anterior.

Para configurar el M-Duino, esta publicación solo sigue el ejemplo de TCP del sitio web de Arduino con algunos cambios. Para poder conectarnos al servidor, debemos conocer la IP del servidor TCP y el puerto donde este servidor está escuchando..

A continuación se muestra el código Arduino :

#include <Ethernet2.h>
#include <SPI.h>
byte mac[] = { 0xBE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 1, 100 };
byte server[] = { 192, 168, 1, 105 }; // Touchberry Pi Server
int tcp_port = 5566;
EthernetClient client;
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  delay(1000);
  Serial.println("Connecting...");
  if (client.connect(server, tcp_port)) { // Connection to server.js
    Serial.println("Connected to server.js");
    client.println();
  } else {
    Serial.println("connection failed");
  }
}
void loop()
{
  if (client.available()) {
    if(Serial.available()){
      char s = Serial.read();
      client.write(s); // Send what is reed on serial monitor
      char c = client.read();
      Serial.print(c); // Print on serial monitor the data from server 
    }
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;) ;
  }
}

Serial TTL

Interfaz de comunicación entre dos dispositivos con un voltaje de bajo nivel. Un puerto serial envía datos por una secuencia de bits.
Dos señales: Tx (Dato transmitido) y Rx (Dato recibido)

 

M-Duino tiene dos puertos TTL, RX0/TX0, RX1/TX1. Se accede a TTL0 con la función serial  (pines 0 y 1 del Arduino Mega).Se accede a TTL1 con la función Serial1 (pines 18 y 19 del Arduino Mega).


Para saber más sobre el Serial TTL...

Hardware

IMPORTANTE: Asegurate de que tu PLC Ethernet está conectado a (12-24V CC).

Configuración de los interruptores


Para obtener una comunicación Serial TTL no hay ningún interruptor que la afecte, ya que está siempre activo. Así que no importa al configuración de los interruptores para poder implementar la comunicación Serial TTL.

Pines utilizados

Para el protocolo de comunicación I2C, los pines definidos para la placa Arduino Mega se enseñan en la tabla siguiente:

MDuino Ethernet PLC Pinout Arduino Mega Pinout
Tx 0
0
Rx 0 1
Tx 1 18
Rx 1
19

Software

IMPORTANTE: Asegurate de descargar el Arduino based PLC boards   para Arduino IDE.


Configuración del Software 

Una vez está echa la configuración del hardware, se puede continuar con la configuración del Software y también con su utilización. Primeramente es necesario incluir la biblioteca RS232.h proporcionada para nuestras placas Arduino. Después, no te olvides de implementar la inicialización adecuada de tu comunicación en el apartado de setup():

 Serial.begin(9600);

Ejemplo básico del Serial TTL

  Lee una entrada analógica al pin 0 (Tx0) y escribe en el Monitor Serial el resultado de este.

  La representación gráfica está disponible utilizando el serial plotter (Herramientas > Menú Serial Plotter) en el Serial Monitor de Arduino IDE.

                                // the setup routine runs once when you press reset:
                                
void setup() {
  pinMode(I0_2, INPUT);
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}
// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(I0_2);
  // print out the value you read:
  Serial.println(sensorValue);
  delay(1);        // delay in between reads for stability
}

I2C

El I2C es un protocolo sincrónico. Solo utiliza 2 cables, uno para el reloj (SCL) y otro para los datos (SDA). Esto quiere decir que el "master" y el "slave" envian datos por el mismo cable, que está controlado por el "master", que es quien crea el señal de reloj. El I2C no utiliza la selección de "slave", sino que utiliza su direccionamiento.

El I2C es un bus de comunicación serial. La velocidad de este es de 100 kbit/s en el modo estándar, pero también acepta velocidades de 3.4 Mbit/s. Es un bus muy utilizado en la industria, básicamente para comunicar microcontroladores y sus periféricos en circuitos integrados; generalizando más, para comunicar circuitos integrados entre ellos, que normalmente estan en el mismo circuito impreso.


Para saber más sobre el I2C...


Hardware

IMPORTANTE: Asegurate de que tu PLC Ethernet está conectado a (12-24V CC).

Configuración de los interruptores

Para conseguir la comunicación I2C no hay ningún interruptor que la afecte, ya que está siempre activado. Así que no importa la configuración de los interruptores para pode implementar la comunicación I2C.

Pines utilizados

Para el protocolo de comunicación I2C, los pines definidos para la placa Arduino Mega se enseñan en la tabla siguiente:

MDuino Ethernet PLC Pinout
Arduino Mega Pinout
SDA 20
SCL 21

Software 


IMPORTANTE:  Asegurate de descargar el Arduino based PLC boards para Arduino IDE. Arduino based PLC boards  para Arduino IDE.

SPI

Estos pines solo pueden funcionar como pines de 5 V si no se va a utilizar el protocolo Ethernet. Como el protocolo Ethernet usa el SPI para comunicarse con la placa Arduino, ambos comportamientos no pueden ocurrir al mismo tiempo, porque Ethernet no funcionaría.

Estos pines no se establecen con una configuración pull-up o pull-down. El estado de estos pines es desconocido. Si se deben utilizar estos pines, requieren una configuración pull-up o pull-down. La placa Arduino permite que los pines se configuren en una configuración pull-up. De lo contrario, debe establecerse un circuito externo de pull-up o pull-down para que funcione correctamente con estos pines.


Para saber más sobre el SPI...

Hardware 

IMPORTANTE: Asegurate de que tu PLC Ethernet está conectado a (12-24V CC).

Configuración de los interruptores

Para lograr la comunicación SPI no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo tanto, no importa la configuración de los conmutadores para implementar la comunicación SPI.

Pines usados

Para el protocolo de comunicación en serie, los pines Mega Arduino definidos se muestran en la tabla a continuación. Para el bus SPI, los pines MISO, MOSI y CLOCK son comunes a todos los dispositivos conectados al M-Duino, por el contrario, cada uno de los dispositivos conectados tendrá un pin SS único y dedicado.


Function M-Duino connection Arduino Mega Pinout
MISO SO 50
MOSI SI 51
CLOCK SCK 52
RST Reset Reset



Software

IMPORTANTE:  Asegurate de descargar el Arduino based PLC boards para Arduino IDE. Arduino based PLC boards 
 

Boceto de ejemplo - Control de puerto digital

Este ejemplo controla un potenciómetro digital AD5206 de Analog Devices.
El AD5206 tiene 6 canales de potenciómetro. Los pines de cada canal están etiquetados
 A - conecta esto al voltaje
W: este es el potenciometro , que cambia cuando lo configuras
B - conecta esto a tierra.

El AD5206 es compatible con SPI, y para mandarlo, envía dos bytes,
uno con el número de canal (0 - 5) y otro con el valor de resistencia para
 el canal (0 - 255).

El circuito: 
* Todos los Pines A de  AD5206 conectados a +5V
* Todos los Pines B de  AD5206 conectados a  tierra
* Un LED y una resistencia de 220 ohmios en serie conectados desde cada pin W a tierra
* CS - a pin digital (pin SS)
* SDI - a pin digital  ( pin MOSI)
* CLK - a pin digital (pin SCK )

// inslude the SPI library:
#include <SPI.h>


// set pin 10 as the slave select for the digital pot:
const int slaveSelectPin = 10;

void setup() {
  // set the slaveSelectPin as an output:
  pinMode(slaveSelectPin, OUTPUT);
  // initialize SPI:
  SPI.begin();
}

void loop() {
  // go through the six channels of the digital pot:
  for (int channel = 0; channel < 6; channel++) {
    // change the resistance on this channel from min to max:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, level);
      delay(10);
    }
    // wait a second at the top:
    delay(100);
    // change the resistance on this channel from max to min:
    for (int level = 0; level < 255; level++) {
      digitalPotWrite(channel, 255 - level);
      delay(10);
    }
  }

}

void digitalPotWrite(int address, int value) {
  // take the SS pin low to select the chip:
  digitalWrite(slaveSelectPin, LOW);
  //  send in the address and value via SPI:
  SPI.transfer(address);
  SPI.transfer(value);
  // take the SS pin high to de-select the chip:
  digitalWrite(slaveSelectPin, HIGH);
}

Funciones especiales

RTC

El término real-time clock (reloj en tiempo real) se usa para evitar confusiones con los relojes de hardware ordinarios que son solo señales que gobiernan la electrónica digital y no cuentan el tiempo en unidades humanas. RTC no debe confundirse con la computación en tiempo real, que comparte el acrónimo pero no se relaciona directamente con la hora del día. 

Aunque se puede mantener el tiempo sin un RTC, usar uno tiene beneficios:
- Bajo consumo de energía (importante cuando se ejecuta desde energía alternativa
- Libera el sistema principal para tareas de tiempo crítico
- A veces más preciso que otros métodos.

Hay una batería de celda de moneda de litio de 3,3V que suministra el RTC. El módulo M-Duinos RTC se basa en el chip DS1307. El reloj de tiempo real serie (RTC) DS1307 es un reloj / calendario decimal (BCD) de código binario completo de baja potencia más 56 bytes de NV SRAM. La dirección y los datos se transfieren en serie a través de un bus bidireccional I2C. El reloj / calendario proporciona información sobre segundos, minutos, horas, día, fecha, mes y año. La fecha de fin de mes se ajusta automáticamente para los meses con menos de 31 días, incluidas las correcciones por año bisiesto. El reloj funciona en formato de 24 horas o de 12 horas con indicador AM / PM. El DS1307 tiene un circuito de detección de energía incorporado que detecta fallas de energía y cambia automáticamente al suministro de respaldo. La operación de cronometraje continúa mientras la parte opera desde el suministro de respaldo.

Para saber más sobre el RTC...


Configuración Hardware 


IMPORTANTE: Asegurate ded que tu PLC Ethernet está conectado a (12-24V CC).

Configuración de los interruptores

El RTC funciona con el protocolo de comunicación I2C, por eso necesitamos activar el interruptor del I2C.

Quatro interruptores tienen que estar configurados para poder trabajar con las diferentes características del RTC y con la comunicación I2C:

Configuración del interruptor

RTC trabaja con el protocolo de comunicación I2C, por lo que se requiere tener habilitado el protocolo I2C.

Se deben configurar 4 interruptores para habilitar las funciones de RTC y la comunicació :


SWITCH ON OFF
NC - -
NC - -
RTC/SCL RTC -
RTC/SDA RTC -

RTC SCL & RTC SDA tiene que estar puesto en el modo ON para habilitar los cables del I2C hasta el RTC. Si estan en la posición de OFF, la placa Arduino no se comunicará con el RTC.

Configuración Software


Una vez que se realiza la configuración del hardware, es posible continuar con la configuración del software y también su uso. En primer lugar es necesario incluir la biblioteca RTC.h proporcionada en nuestros tableros (RTC.h incluye la inicialización I2C.h, por lo que no será necesario inicializar la biblioteca I2C.h):

#include <RTC.h>  

Para verificar si el puerto RTC funciona, es fácil usar el monitor serial de Arduino IDE usando la frase correcta dentro de la función setup ():

#Serial.begin(9600L)  

Código de Ejemplo

TEST Básico de RTC


// RTC library example
// by Industrial Shields
#include <RTC.h>
////////////////////////////////////////////////////////////////////////////////////////////////////
void setup() {
  Serial.begin(9600L);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
void loop() {
  if (!RTC.read()) {
    Serial.println("Read date error: is time set?");
    }
     else {
    Serial.print("Time: ");
    Serial.print(RTC.getYear());
    Serial.print("-");
    Serial.print(RTC.getMonth());
    Serial.print("-");
    Serial.print(RTC.getMonthDay());
    Serial.print(" ");
    Serial.print(RTC.getHour());
    Serial.print(":");
    Serial.print(RTC.getMinute());
    Serial.print(":");
    Serial.print(RTC.getSecond());
    Serial.print(" (");
    Serial.print(RTC.getTime());
    Serial.println(")");
  }
  delay(1000);
}