Detalles Técnicos

M-DUINO PLC Arduino Ethernet 38R I/Os Relay/Analog/Digital 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á bajo la Licencia Pública General de GNU.  Arduino IDE admite la estructuración de codigo C y C++ . Industrial Shields recomienda usar Arduino IDE para programar PLC's basados en Arduino, pero cualquier software compatible con Arduino es también compatible con los controladores de Industrial Shields.

A parte de todo esto, Industrial Shields brinda la posibilidad de seleccionar tu propio PLC basado en Arduino en su Arduino IDE y compilar sus bocetos para los diferentes PLC's

Descargar Arduino IDE 1.8.6:    

INSTALADOR WINDOWS

MAC OSX

Instalar Industrial Shields units to 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 entrada analógica proporciona una medición codificada en forma de valor digital con un número de N bits. En las E / S digitales y analógicas hay autoaislamiento, por lo que es posible conectarlas a una fuente de alimentación diferente a 24 V.

Inputs:  (8x) 10bit – Analog (0-10Vdc) / Digital (7-24Vdc) configurable by software. 

Conexión TípicaPara saber más sobre entradas analógicas... 

TYPICAL CONNECTION

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.

Inputs:  (8x) 10bit – Analog (0-10Vdc) / Digital (7-24Vdc) configurable por el software. 

Todas las entradas digitales son PNP.

Para saber más sobre 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. 


Inputs:  (4x) Interrupt Input (7-24Vdc). “Pueden funcionar como una entrada digital (7-24Vdc)”.  


Interrupt Arduino Mega Pin M-Duino Pin
INT0 2 I0.0
INT1 3 I0.1
INT4 19 I1.1
INT5 18 I1.0

- I0.0 y I0.1 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.0 y I1.0 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

Para saber más sobre las entradas de interrupción...

CONEXIÓN TÍPICA

 Arduino PLC Interrupt Service Rutine TYPICAL CONNECTION


EJEMPLO 

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

#define INTERRUPT I0_0 //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 is the technology that is most commonly used in wired local area networks ( LANs ). 

 Ethernet es la tecnología que se usa más comúnmente en redes de área local cableadas (LAN). Una LAN es una red de computadoras y otros dispositivos electrónicos que cubren un área pequeña, como una habitación, oficina o edificio. Se usa en contraste con un área amplia red (WAN), que abarca áreas geográficas mucho más grandes. Ethernet es un protocolo de red que controla cómo están los datos transmitido por una LAN. Técnicamente se conoce como el protocolo IEEE 802.3. El protocolo ha evolucionado y mejorado con el tiempo. para transferir datos a la velocidad de un gigabit 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 Hardware

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

 

Configuración de interruptores

Para el protocolo de comunicación Ethernet no hay  ningún interruptor  que lo afecte . Por lo tanto, no importa la configuración de la conmutadores para implementar la comunicación.

Códigos(Pines) usados

Para el protocolo de comunicación Ethernet, el pin Arduino Mega definido es el PIN 10, que está conectado y ya internamente
ensamblado al controlador Ethernet WX5500 . El W5500 IC se comunica con la placa Mega a través del bus SP  también ensamblado. Usted puede Acceder fácilmente al puerto Ethernet en nuestros PLC Ethernet, se encuentra en la parte superior de la capa de comunicaciones.

La configuración del hardware Ethernet debe ser plug and play.

Software

 

IMPORTANTE: Asegúrese de descargarArduino based PLC boards for 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());
  }
}

Echo TCP Client:

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(;;) ;
  }
}

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:  Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc) .

Configuración de interruptores.

RTC funciona con la comunicación del protocolo I2C, por lo que es necesario haber habilitado el protocolo I2C 

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


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


RTC SCL  &  RTC SDA  debe establecerse en modo ON para habilitar los cables I2C al RTC. Si están en modo APAGADO, el Arduino no se comunicará con el RTC.

Configuración de 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);
}