Detalles Técnicos
M-DUINO PLC Arduino Ethernet & GPRS 57AAR I/Os Analog/Digital/Relay PLUS GPRS
VOLVER AL PRODUCTOInstalación Inicial
ARDUINO IDE
Arduino IDE es la plataforma original para programar placas Arduino. Esta aplicación multiplataforma está disponible en Windows, macOS y Linux y bajo la Licencia Pública General GNU.
Arduino IDE admite la estructuración de código C y C ++. Industrial Shields recomienda usar Arduino IDE para programar PLC basados en Arduino, pero cualquier software compatible con Arduino es compatible con los controladores Industrial Shields.
Aparte de eso, Industrial Shields brinda la posibilidad de seleccionar su PLC basado en Arduino en su IDE de Arduino y compilar sus bocetos para los diferentes PLC.
Descargue el IDE de Arduino 1.8.6:
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 la de 24 V.
Entradas:
(14x) Analógica (0-10Vdc) / Digital (5-24Vdc) configurable por software.
Know more about Analog Inputs.
TYPICAL CONNECTION
ENTRADAS DIGITALES
Variación de tensión de –Vcc (o GND) a + Vcc, sin valores intermedios. Dos estados: 0 (-Vcc o GND) y 1 (+ Vcc). En las E / S digitales y analógicas hay autoaislamiento, por lo que es posible conectarlas a una fuente de alimentación diferente a la de 24 V.
Las entradas digitales nos proporcionan entrada PNP.
Entradas: (10x) Digital Aislado (5-24Vdc), (5x) puede funcionar como interrupción INT (7-24Vdc).
Know more about Digital Inputs.
TYPICAL CONNECTION
- Entrada digital aislada
- Entrada digital sin aislamiento
ENTRADAS INTERRUPTAS
Interrumpir la rutina del servicio. Mecanismo que permite asociar una función con la ocurrencia de un evento en particular. Cuando ocurre el evento, el procesador sale inmediatamente del flujo normal del programa y ejecuta la función ISR asociada ignorando cualquier otra tarea.
Entradas: (5x) Entradas de interrupción (7-24Vdc). “Puede funcionar como entrada digital (24Vdc)”.
Interruptor | Arduino Mega Pin | M-Duino Pin |
INT1 | 3 | I0.6/INT1 |
INT2 | 19 | I1.6/INT2 |
INT3 | 18 | I1.5/INT3 |
INT4 | 21 | I2.1/INT4 |
INT5 | 20 | I2.0/INT5 |
- I0.6 también como Pin3 habilita las interrupciones encendiendo el interruptor número 4 del interruptor de comunicación descendente.
- I1.5 e I1.6 también como Tx1 y Rx1. Habilite las interrupciones encendiendo los interruptores número 1 y 2 de los interruptores de comunicación.
- I2.0 e I2.1 también como SCA y SCL. Habilite las interrupciones encendiendo los interruptores número 3 y 4 de los interruptores de comunicación. En este caso, no podrá utilizar I2C.
TYPICAL CONNECTION
En este ejemplo activamos INT1 usando el pin I0_6 de la placa M-duino. Cuando hay un cambio
#define INTERRUPT I0_6 //other pins: 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 ).
A LAN is a network of computers
and other electronic devices that covers a small area such as a room, office, or building. It is used in contrast to a wide area
network (WAN) , which spans much larger geographical areas. Ethernet is a network protocol that controls how data is
transmitted over a LAN. Technically it is referred to as the IEEE 802.3 protocol. The protocol has evolved and improved over time
to transfer data at the speed of a gigabit per second.
Nuestra familia M-Duino incorpora el W5500 IC integrado.
El WX5500 es un controlador Ethernet integrado TCP / IP cableado que proporciona una conexión a Internet más sencilla para 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 integran la pila TCP / IP, 10/100 Ethernet MAC y PHY. El chip W5500 incorpora el búfer de memoria interna de 32 Kb para el procesamiento de paquetes Ethernet. Con este chip, los usuarios pueden implementar la aplicación Ethernet agregando el programa de conexión simple. Se proporciona SPI para una fácil integración con el microcontrolador externo.
Hardware
Configuración de hardware
*IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24 V CC). Solo con USB hay energía insuficiente para encender la comunicación Ethernet.
Configuración del interruptor
Para el protocolo de comunicación Ethernet no hay ningún conmutador que lo afecte. Por tanto, no importa la configuración de los conmutadores para implementar la comunicación Ethernet.
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. W5500 IC se comunica con la placa Mega a través del bus SPI ya ensamblado también.
Puede acceder fácilmente al puerto Ethernet en nuestros PLC Ethernet, que se encuentra en la parte superior de la capa de comunicaciones.
La configuración del hardware Ethernet debe ser plug and play.
Software
*IMPORTANTE: La configuración del hardware Ethernet debe ser plug and play. Arduino based PLC boards para Arduino IDE.
Configuración de software:
Una vez realizada la configuración del hardware, es posible continuar con la configuración del software y también su uso. Primero es necesario incluir la librería Ethernet2.h proporcionada por Industrial Shields (tiene la misma funcionalidad que Ethernet.hy además
el mismo uso).
#include <Ethernet2.h>* Recuerde que para la versión V7 o versiones anteriores debe usar la biblioteca <Ethernet.h>.
Biblioteca Ethernet2 - funciones.
* La biblioteca Ethernet2.h tiene las mismas funciones que Ethernet.h.
Para la comunicación Ethernet hay 3 protocolos disponibles:
- Ethernet con HTTP. to know more.
- Ethernet con MQTT, to know more.
- Ethernet con Modbus TCP/IP.
- Master, know more.
- Slave, know more.
Códigos de Ejemplo:
Echo TCP Server:
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 IDE de Arduino:
// 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 usa un M-Duino para conectarse con el servidor Node.js llamado server.js, el mismo que se usó en el enlace del 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(;;) ;
}
}
Ethernet with HTTP.
Ethernet with MQTT.
Ethernet with Modbus TCP/IP (PLC = Slave).
Ethernet with Modbus TCP/IP (PLC = Master).
Serial TTL
Interfaz de comunicación entre dos dispositivos con bajo nivel de voltaje. Un puerto serial envía datos por una secuencia de bits.
Dos señales: Tx (transmisión de datos) y Rx (recepción de datos).
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).
IMPORTANTE
: La biblioteca Sim800L para GPRS usa Serial1 para comunicarse. Entonces, para habilitar la comunicación Serial1, conecte el Pin 2 (RESET GPRS) a HIGH.
Hardware
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc).
Configuración del interruptor
Para lograr la comunicación Serial TTL no hay ningún interruptor que lo afecte, siempre está habilitado. Por lo que no importa la configuración de los switches para implementar la comunicación Serial TTL.
Pines usados
MDuino Ethernet PLC Pinout | Arduino Mega Pinout |
Tx 0 | 0 |
Rx 0 | 1 |
Tx 1 | 18 |
Rx 1 | 19 |
Software
IMPORTANTE: Asegúrate de descargar el Arduino based PLC boards para Arduino IDE.
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. Primero es necesario incluir la librería RS232.h proporcionada en nuestras placas. Entonces, no olvide implementar la inicialización adecuada de su comunicación en la función setup():
Serial.begin(9600);
Ejemplo de escritura de TTL serial básico
Lee una entrada analógica en Tx0 (pin 0), imprime el resultado en el monitor serial.
La representación gráfica está disponible usando el trazador de serie (menú Herramientas> Trazador de serie) en el monitor serie 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
I2C es un protocolo sincrónico. Solo utiliza 2 cables, uno para el reloj (SCL) y otro para los datos (SDA). Esto significa que el maestro y el esclavo envían datos a través del mismo cable, que es controlado por el maestro, quien crea la señal de reloj. I2C no utiliza la selección de esclavos, sino el direccionamiento.
I2C es un bus de comunicaciones en serie. La velocidad es de 100 kbit / s en modo estándar, pero también permite velocidades de 3,4 Mbit / s. Es un bus muy utilizado en la industria, principalmente para comunicar microcontroladores y sus periféricos en sistemas integrados y generalizando más para comunicar circuitos integrados entre sí que normalmente residen en un mismo circuito impreso.
Hardware
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc).
Configuración del interruptor
Para lograr la comunicación I2C no hay ningún interruptor que lo afecte, siempre está habilitado. Por tanto, no importa la configuración de los conmutadores para implementar la comunicación I2C.
Pines usados
MDuino Ethernet PLC Pinout | Arduino Mega Pinout |
SDA | 20 |
SCL | 21 |
#include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) } byte x = 0; void loop() { Wire.beginTransmission(8); // transmit to device #8 Wire.write("x is "); // sends five bytes Wire.write(x); // sends one byte Wire.endTransmission(); // stop transmitting x++; delay(500); }
#include <Wire.h> void setup() { Wire.begin(8); // join i2c bus with address #8 Wire.onReceive(receiveEvent); // register event Serial.begin(9600); // start serial for output } void loop() { delay(100); } // function that executes whenever data is received from master // this function is registered as an event, see setup() void receiveEvent(int howMany) { while (1 < Wire.available()) { // loop through all but the last char c = Wire.read(); // receive byte as a character Serial.print(c); // print the character } int x = Wire.read(); // receive byte as an integer Serial.println(x); // print the integer }
Know more about I2C.
GPRS
General Packet Radio System es un paso de tercera generación hacia el acceso a Internet. GPRS también se conoce como GSM-IP, que es un protocolo de Internet de comunicaciones móviles del sistema global, ya que mantiene a los usuarios de este sistema en línea, permite realizar llamadas de voz y acceder a Internet sobre la marcha. Incluso los usuarios de acceso múltiple por división de tiempo (TDMA) se benefician de este sistema, ya que proporciona acceso de radio por paquetes.
Hardware
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc).
Configuración del interruptor
Para lograr la comunicación Serial TTL no hay ningún interruptor que lo afecte, siempre está habilitado. Entonces no importa la configuración de los switches para implementar Serial TTL comunicación.
Pines usados
El módulo SIM800L es el módulo integrado para el uso de GPRS / GSM en este PLC y para programarlo debes descargar this library en su IDE de Arduino
Al definir los pines en el programa, tenga en cuenta que las conexiones internas entre el módulo Sim800l y el Arduino Mega son las siguientes:
Arduino Mega Pinout | Sim800L Pinout |
5 Vdc | Vcc |
GND | GND |
TX1 (Pin 18) | TXD |
RX1 (Pin 19) | RXD |
Pin 2 | RST |
Software
Agregue la biblioteca para habilitar la comunicación GPRS:
#include <GPRS.h>
A continuación puedes ver un croquis de ejemplo donde el PLC actúa como cliente HTTP, recibimos los datos que nos está enviando el servidor en cuestión y los mostramos a través del puerto serie
// GPRS library example // by Industrial Shields #include <GPRS.h> #define PIN "3112" #define APN "internet" #define USERNAME "" #define PASSWORD "" uint8_t buffer[1024]; //////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { Serial.begin(9600UL); if (!GPRS.begin(80)) { Serial.println("Impossible to begin GPRS"); while(true); } int pinRequired = GPRS.isPINRequired(); if (pinRequired == 1) { if (!GPRS.unlockSIM(PIN)) { Serial.println("Invalid PIN"); while (true); } } else if (pinRequired != 0) { Serial.println("Blocked SIM"); while (true); } } //////////////////////////////////////////////////////////////////////////////////////////////////// void loop() { static uint32_t lastStatusTime = millis(); if (millis() - lastStatusTime > 2000) { GPRSClient client = GPRS.available(); if (client) { size_t len = client.available(); if (len > 0) { client.read(buffer, len); Serial.write(buffer, len); } } } }
SPI
Estos pines solo pueden funcionar como pines de 5V 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, ya que Ethernet no funcionaría.
Estos pines no se establecen con una configuración pull-up o pull-down. Se desconoce el estado de estos pines. Si se deben usar estos pines, requieren una configuración de pull-up o pull-down. La placa Arduino permite que los pines se establezcan en una configuración pull-up. En caso contrario, se debe establecer un circuito de pull-up o pull-down externo para que funcione correctamente con estos pines.
Hardware
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc).
Configuración del interruptor
Para lograr la comunicación SPI no hay ningún interruptor que lo afecte, siempre está habilitado. Por 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 Arduino Mega definidos se muestran en la siguiente tabla. Para el bus SPI, los pines MISO, MOSI y CLOCK son comunes a todos los dispositivos conectados al M-Duino, a la inversa, cada uno de los dispositivos conectados tendrá un pin SS único y dedicado.
Función |
M-Duino connection | Arduino Mega Pinout |
MISO | SO | 50 |
MOSI | SI | 51 |
CLOCK | SCK | 52 |
RST | Reset | Reset |
IMPORTANTE: Asegúrate de descargar el Arduino based PLC boards para Arduino IDE.
// 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); }Know more about SPI.
Funciones Especiales
RTC
El término reloj en tiempo real se utiliza 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 el control del tiempo se puede hacer sin un RTC, usar uno tiene beneficios:
- Bajo consumo de energía (importante cuando se ejecuta con energía alternativa
- Libera el sistema principal para tareas de tiempo crítico
- A veces más preciso que otros métodos
Configuración de hardware
IMPORTANTE: Asegúrese de que su PLC Ethernet esté alimentado (12-24Vdc) .
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ón I2C:
INTERRUPTOR | ON | OFF |
4 | NC | NC |
3 | NC |
NC |
2 | RTC | - |
1 | RTC | - |
RTC SCL y RTC SDA debe configurarse 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. Primero es necesario incluir la librería RTC.h proporcionada en nuestras placas (RTC.h incluye inicialización I2C.h, por lo que no será necesario inicializar la librería I2C.h):
#include <RTC.h>
Para verificar si el puerto RTC está funcionando, es fácil usar el monitor serial del IDE de Arduino usando la oración correcta dentro de la función setup ():
#Serial.begin(9600L)
Código de ejemplo
Prueba básica 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); }