INTRODUCCIÓN
Alguna vez te preguntaste, será posible establecer una comunicación entre un ARDUINO y un PLC?, la respuesta es SÍ, en este artículo aprenderemos como se realiza paso a paso este enlace. Seguramente a muchos de nosotros nos suena familiar el protocolo de comunicación MODBUS, esta comunicación es una de las comunicaciones estándar que se usa en las industrias para la comunicación de dispositvos plc’s, drivers, módulos, etc. Justamente para establecer el intercambio de datos de un Arduino y un PLC usaremos el mismo protocolo ya antes mencionado, el cual nos permitirá el intercambio de lecturas de señales digitales, señales analógicas y otros datos. Por consiguiente, en este episodio mandaremos señales analógicas desde un arduino a un dispositivo PLC Siemens S7 1200, para que posteriormente el dispositivo PLC realice un acción de acuerdo a los datos recibidos. por ejemplo, que se active una salida cuando el valor analógico sea mayor igual a 500.
ENVIAR UN DATO ANALÓGICO DESDE ARDUINO AL PLC
DISPOSITIVOS
- PLC S7 1200 (siemens)
- Arduino UNO
- Módulo Ethernet ENC28J60
- Potenciometro 10k Ohm
- Router (Cualquiera)
- 02 cables Red (RJ45)
CONEXIONES ENTRE (Arduino – Módulo ethernet -PLC) PARA LA LECTURA ANALÓGICA
Las conexiones que se va a realizar a continuación es para la lectura analógica; donde se enviará datos analógicos (potenciometro) desde la tarjeta arduino UNO
CÓDIGO ARDUINO
/* MODIFICADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó @carlos_j_fuentess FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ________________________________________________________ {==[=======> (ENVIANDO DATOS ANALÓGICOS DESDE ARDUINO A PLC S7 1200) <=======]==} ________________________________________________________ */ #include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> const int SENSOR_IREG=50; const int sensorAnalog =A0; ModbusIP mb; void setup() { Serial.begin(9600);// inicializamos el serial com //dirección MAC byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF,0xFE, 0xED}; //dirección IP byte ip [] = {192,168,1,22}; mb.config (mac,ip);// se confirma las direcciones mb.addIreg(SENSOR_IREG); } void loop() { mb.task();// actualiza para el trabajo se realize // con normalidad // envía los valores del potenciometro mb.Ireg(SENSOR_IREG, analogRead(sensorAnalog)); //muestra en el monitor serie los valores del pot4 Serial.println(analogRead(sensorAnalog)); }
Programa TIA PORTAL (PLC S7 1200 Siemens)
ENLAZANDO PLC A UNA RED DE TRABAJO Se tiene que establecer la dirección IP para trabajar en una sola Red de esa manera tener una satisfactoria conexión entre ambos dispositivos (PLC – ARDUINO). Para hacer este cambio se tiene que dirigir al árbol de proyecto y, seleccione configuración de dispositivo , luego haga doble click en el puerto profinet, y seguidamente cambie la dirección IP, en realidad se puede colocar la dirección que ud desee, siempre en cuando pertenezca a la conectividad IP_V4, Ejemplo:
-
-
- 192.168.1.10
- 192.168.1.15
- 192.168.1.22
- 192.168.2.40Para la demostración de este episodio usaremos la segunda dirección IP: 192.168.1.15
-
CREAR BLOQUE DE DATOS PARA ALMACENAR LOS VALORES DEL ARDUINO Crearemos bloque de datos para establecer comunicación y recibir datos del ARDUINO, para ello nos dirigimos al árbol del proyecto, seguidamente abrimos bloques de programa, luego creamos un bloque de datos(ARDUINO [DB]). Dentro de bloque de datos modificamos los parámetros como se muestra en la siguiente imagen.
SACAR LA FUNCIÓN MODBUS CLIENT En la parte principal de bloques de programa sacaremos la función MODBUS CLIENT (MB_CLIENT), esto nos facilitará el recojo de datos del potenciometro que viene del arduino, para posteriormente usar dichos datos para activar salidas etc.
ACTIVANDO UNA SALIDA: Finalmente haremos una pequeña demostración, la cual consta en activar una salida. Es decir; cuando el valor del pontenciómetro sea >=500 (mayor igual), entonces que se encienda la salida Q0.1.
VIDEO
ENVIAR VARIOS DATOS ANALÓGICOS DESDE ARDUINO AL PLC
DISPOSITIVOS
- PLC S7 1200 (siemens)
- Arduino UNO
- Módulo Ethernet ENC28J60
- 03 Potenciometros 10k Ohm
- Router (Cualquiera)
- 02 cables Red (RJ45)
CONEXIONES ENTRE (Arduino – Módulo ethernet -PLC) PARA LAS LECTURAS ANALÓGICAS
Las conexiones que se va a realizar a continuación es para las lecturas analógicas; donde se enviará datos analógicos (potenciometros) desde la tarjeta arduino UNO al PLC.
CÓDIGO ARDUINO
/* MODIFICADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó @carlos_j_fuentess FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ________________________________________________________ {==[=======> (ENVIANDO DATOS ANALÓGICOS DESDE ARDUINO A PLC S7 1200) <=======]==} ________________________________________________________ */ #include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> const int SENSOR_IREG=50; const int sensorAnalog =A0; const int SENSOR_IREG1=60; const int sensorAnalog1 =A1; const int SENSOR_IREG2=70; const int sensorAnalog2 =A2; ModbusIP mb; void setup() { Serial.begin(9600);// inicializamos el serial com //dirección MAC byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF,0xFE, 0xED}; //dirección IP byte ip [] = {192,168,1,22}; mb.config (mac,ip);// se confirma las direcciones mb.addIreg(SENSOR_IREG); mb.addIreg(SENSOR_IREG1); mb.addIreg(SENSOR_IREG2); } void loop() { mb.task();// actualiza para el trabajo se realize // con normalidad // envía los valores de los respectivos potenciometro mb.Ireg(SENSOR_IREG, analogRead(sensorAnalog)); mb.Ireg(SENSOR_IREG1, analogRead(sensorAnalog1)); mb.Ireg(SENSOR_IREG2, analogRead(sensorAnalog2)); //muestra en el monitor serie los valores del pot4 Serial.println(analogRead(sensorAnalog)); }
PROGRAMA TIA PORTAL (PLC Siemens S7 1200)
En cuanto a las diagramas de programación son similares a los que se muestra en el primer ejercicio, la única diferencia es que se cambia la dirección de las entradas analógicas. Ver el video.
VIDEO
ENVIAR VARIOS DATOS DIGITALES DESDE ARDUINO AL PLC
DISPOSITIVOS
- PLC S7 1200 (siemens)
- Arduino UNO
- Módulo Ethernet ENC28J60
- Pulsadores
- Router (Cualquiera)
- 02 cables Red (RJ45)
CONEXIONES ENTRE (Arduino – Módulo ethernet -PLC) PARA LAS LECTURAS DIGITALES
Las conexiones que se va a realizar a continuación es para las lecturas analógicas; donde se enviará datos analógicos (potenciometros) desde la tarjeta arduino UNO al PLC.
CÓDIGO ARDUINO
/* MODIFICADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó @carlos_j_fuentess FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ________________________________________________________ {==[=======> (ENVIANDO DATOS ANALÓGICOS DESDE ARDUINO A PLC S7 1200) <=======]==} ________________________________________________________ */ #include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> const int SENSOR_IREG1=60; const int button1 =2; const int SENSOR_IREG2=70; const int button2 =3; ModbusIP mb; void setup() { Serial.begin(9600);// inicializamos el serial com pinMode (button1,INPUT); pinMode (button2,INPUT); //dirección MAC byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF,0xFE, 0xED}; //dirección IP byte ip [] = {192,168,1,22}; mb.config (mac,ip);// se confirma las direcciones mb.addIreg(SENSOR_IREG1); mb.addIreg(SENSOR_IREG2); } void loop() { mb.task();// actualiza para el trabajo se realize // con normalidad mb.Ireg(SENSOR_IREG1,digitalRead(button1)); mb.Ireg(SENSOR_IREG2,digitalRead(button2)); //muestra en el monitor serie los valores de la entrada del boton 1 Serial.println(digitalRead(button1)); }
PROGRAMA TIA PORTAL (PLC Siemens S7 1200)
En cuanto a las diagramas de programación son similares a los que se muestra en el primer ejercicio, la única diferencia es que se cambia la dirección de las entradas analógicas. Ver el video.
POSICIÓN DE LOS BITS EN LAS VARIABLES (MW).
VIDEO
INTRODUCCIÓN
Hace poco un cliente me pidió que hiciera un tablero eléctrico controlado por un PLC SIEMENS, donde se requería más 6 entradas analógicas de voltaje. Sin embargo, me encontré con un problema, el PLC s7 1200 solo trae 2 entradas análogas, por lo que aún me faltaba 4 más. Entonces fui a cotizar a las tiendas pertinente un módulo de entradas analógicas de 0 a 10v. No obstante, estos dispositivos estaban muy caros. En consecuencia a esto me puse a crear un módulo de entradas analógicas que sea capaz de mandar las señales a través del puerto ethernet. Y sí efectivamente ya hemos concluidos este módulo que incluye 8 entradas analógicas de 0-10V, y hoy en este video te voy ensañar y explicar a como a hacer módulos para PLC SIEMENS., te interesa? Pues acompáñenme a ver el video.
CARACTERÍSTICA TÉCNICAS
- Tensión de alimentación……………………….…………24VDC
- Corriente de alimentación………………….……………80mA
- Tensión de entrada(recomendado)…………………24VDC
- Entradas analógicas ( 0-10VDC )………………………8
- Puerto ethernet…………………………………………………….1
- Programación Directa…………………………………………PC-BOARD MAIN
- Condiciones ambientales min……………………….….-40°
- Condiciones ambientales max…………………..……….85°
- Dimensiones……………………………………………………………. 64*80mm
- Empotrable………………………………………………………………SÍ
LISTA DE COMPONENTES ELECTRÓNICOS
Categoría | Cantidad | Referencias | Valor | PCB Package | Coste unitario |
Condensadores | 20 | C1,C5,C6,C7,C8,C9,C10,C11,C15, C16,C17,C18,C19,C20,C21,C22, C23,C27,C29,C31 |
100nF | 0603_CAP | $0.004 |
Condensadores | 1 | C2 | 2000uF | ELEC-RAD25 | $0.119 |
Condensadores | 2 | C3,C4 | 18pF | CAPC1608X87 | $0.004 |
Condensadores | 2 | C12,C26 | 470uF | CAP SMD 10.5X10MM ALUMINUM 470UF/35V | $0.570 |
Condensadores | 3 | C13,C24,C25 | 220uF | CAP SMD 6.3X7.7MM ALUMINUM 220UF/16V | $0.030 |
Condensadores | 1 | C14 | 100nF | 1206_CAP | $0.013 |
Condensadores | 1 | C28 | 10uF | 0805_CAP | $0.035 |
Condensadores | 1 | C30 | 47uF | CAP SMD 5X5.4MM ALUMINUM 47UF/16V | $0.030 |
Resistencias | 4 | R1,R2,R3,R19 | 10k | 0603_RES | $0.001 |
Resistencias | 22 | R4,R5,R6,R7,R8,R9,R10,R11,R12, R18,R20,R21,R22,R24,R25,R26, R27,R28,R29,R30,R31,R32 |
1k | 0603_RES | $0.003 |
Resistencias | 1 | R13 | 2.7k | 0603_RES | $0.003 |
Resistencias | 4 | R14,R15,R16,R17 | 49.9 | 0805_RES | $0.005 |
Resistencias | 1 | R23 | 1M | 0603_RES | $0.002 |
Resistencias | 1 | R33 | 6.8k | 0603_RES | |
Resistencias | 1 | R34 | 2k | 0603_RES | |
Resistencias | 8 | R35,R36,R37,R38,R39,R40,R41,R42 | 10k | 1206_RES | |
Integrados | 4 | U1,U2,U7,U8 | LM358N | SO8 | $0.043 |
Integrados | 1 | U3 | ENC28J60-I/SS | SSOP28 V1 | $3.055 |
Integrados | 1 | U4 | ATMEGA328P | QFP80P900X900X120-32 | $2.190 |
Integrados | 1 | U5 | CH340C | SO16 | $0.500 |
Integrados | 1 | U6 | LM2576-adj | TO170P1410X464-6 | $0.413 |
Integrados | 2 | U9,U11 | LD1117S50 | SOT230P700X180-4 | |
Integrados | 1 | U10 | LD1117S33 | SOT230P700X180-4 | $0.065 |
Diodos | 8 | D1,D2,D3,D4,D7,D8,D9,D10 | MM3Z5V1T1G | SOD-323 | $0.018 |
Diodos | 2 | D5,D11 | B330A-13-F | DIOM5226X230N | $0.112 |
Diodos | 1 | D6 | LED-RED | LEDC2012X120 | $0.021 |
Miscelánea | 1 | BTN1 | RST | BUTTON SMD 2P | $0.016 |
Miscelánea | 4 | J1,J3,J4,J5 | TBLOCK-M2 | TERMINAL BLOCK 2P | $0.200 |
Miscelánea | 1 | J2 | TBLOCK-M3 | TERMINAL BLOCK 3P | $0.100 |
Miscelánea | 1 | J6 | JACK USB 2 TIPO B | JACK USB 2.0 TYPE B | $0.110 |
Miscelánea | 1 | L1 | HF70ACC201209 | INDC2012X130 | $0.065 |
Miscelánea | 1 | L2 | 100u | INDUCTOR 100UH | $0.550 |
Miscelánea | 1 | RJ1 | RJ45/HR | RJ45/NORMAB | $1.371 |
Miscelánea | 1 | X1 | CRYSTAL | XTAL18 V1 | $0.090 |
Miscelánea | 1 | X2 | CRYSTAL SMD S | OSCILADOR SMD CERAMIC RESONATORS | $0.445 |
CONEXIONES EXTERNAS BOARD – ETHERNET
CÓDIGO ARDUINO
/* MODIFICADO POR :{==[=======>>>> ELECTROALL <<<<<=======]==} INSTAGRAM : https://www.instagram.com/carlos_j_fuentess/ ó electroall_ FACEBOOK : https://web.facebook.com/ELECTROALL.ELECTRONICA/?_rdc=1&_rdr PÁGINA WEB : https://www.electroallweb.com/ YOUTUBE : https://www.youtube.com/c/ELECTROALL ________________________________________________________ {==[=======> (ENVIANDO DATOS ANALÓGICOS DESDE ARDUINO A PLC S7 1200) <=======]==} ________________________________________________________ */ #include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> const int SENSOR_IREG0 = 10; const int SENSOR_IREG1 = 20; const int SENSOR_IREG2 = 30; const int SENSOR_IREG3 = 40; const int SENSOR_IREG4 = 50; const int SENSOR_IREG5 = 60; const int SENSOR_IREG6 = 70; const int SENSOR_IREG7 = 80; const int sensorAnalog0 = A0; const int sensorAnalog1 = A1; const int sensorAnalog2 = A2; const int sensorAnalog3 = A3; const int sensorAnalog4 = A4; const int sensorAnalog5 = A5; const int sensorAnalog6 = A6; const int sensorAnalog7 = A7; ModbusIP mb; void setup() { //dirección MAC byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; //dirección IP byte ip [] = {192, 168, 1, 22}; mb.config (mac, ip); // se confirma las direcciones mb.addIreg(SENSOR_IREG0); mb.addIreg(SENSOR_IREG1); mb.addIreg(SENSOR_IREG2); mb.addIreg(SENSOR_IREG3); mb.addIreg(SENSOR_IREG4); mb.addIreg(SENSOR_IREG5); mb.addIreg(SENSOR_IREG6); mb.addIreg(SENSOR_IREG7); } void loop() { mb.task();// actualiza para el trabajo se realize con normalidad // envía los valores de la entrada de corriente mb.Ireg(SENSOR_IREG0, analogRead(sensorAnalog0)); mb.Ireg(SENSOR_IREG1, analogRead(sensorAnalog1)); mb.Ireg(SENSOR_IREG2, analogRead(sensorAnalog2)); mb.Ireg(SENSOR_IREG3, analogRead(sensorAnalog3)); mb.Ireg(SENSOR_IREG4, analogRead(sensorAnalog4)); mb.Ireg(SENSOR_IREG5, analogRead(sensorAnalog5)); mb.Ireg(SENSOR_IREG6, analogRead(sensorAnalog6)); mb.Ireg(SENSOR_IREG7, analogRead(sensorAnalog7)); }