INTRODUCCIÓN
Hace más de 2 años compré un dispositivo PLC S7 1200 de la marca siemens para automatizar un proceso de una pequeña empresa y, al momento de ir al sitio para instalación me di con la sorpresa que se requería mas de 15 sensores, lo cual la cantidad de las entradas digitales del plc era menor, por consiguiente me vi en la obligación de adquirir un modulo externo de entradas digitales. Sin embargo, el costo de este producto superaba el precio de la cotización del proyecto, así que como electrónico Industrial me propuse a diseñar un circuito expansor de entradas para PLC´s. Y sí después de tanto tiempo ya tenemos terminado el diseño en un prototipo PCB, el cual cuenta con 8 entradas digitales de 12 a 24VDC, 6 entradas Analógicas de 0 a 5VDC y 2 entradas analógicas de 0 a 10VDC. Por otro lado, contaremos con la comunicación MODBUS, este protocolo permitirá la comunicación entre la tarjeta expansor de entradas y el dispositivo plc. Así mismo, contaremos con la comunicación serial, este nos permite la comunicación entre el modulo expansor y la computadora de esta podremos subir cualquier programa de manera directa.
DATOS TÉCNICOS
- Tensión de alimentación……………………….…………12 – 24VDC
- Corriente de alimentación………………….……………70mA
- Programación Directa………………………………….….Ordenador – Modulo de I/ para PLC
- Entorno de programación………………………..……..Arduino IDE
- Condiciones ambientales min………………………….-10°
- Condiciones ambientales max…………………..…….55°
- Entradas analógicas(0-5VDC)………………………….6
- Entradas analógicas(0-10VDC)……………………….2
- Entradas digitales(12-24VDC)…………………………8
- Dimensiones…………………………………….…….……….95x66mm
- Empotrable…………………………………………….………Sí
DISEÑO PCB – Ordene ahora en JLCPCB
DISPOSITVOS ELECTRÓNICOS
- U1; Circuito Integrado ENC28J60-I/SS, SSOP-28 Ethernet ICs RoHS ( see & buy )
- U2; Circuito Integrado Transceiver USB CH340C ( see & buy )
- U3; Microcontrolador ATmega328p-AU ( see & buy )
- U4; Regulador de voltaje (7805) 5.0V (see & buy)
- U5-U12; Optoacoplador TLP127 (see & buy)
- U3; Regulador de voltaje SMD (AMS 1117-3.3) 3.3V (see & buy)
- J2, J3; Pines espadines Macho (see & buy)
- J1; JACK USB – Type B Female USB 2 4 (see & buy)
- J6, J11; borneras 3PIN (see & buy)
- J4, J5, J7-J10; Borneras 2PIN (see & buy)
- D3, D4, D8 – D16; Led smd 1206 ( see & buy )
- D4; Diodo Schottky SS14-T (see & buy)
- C1,C4; Capacitor cerámico 0.1uF (0805) (see & buy)
- C2,C3; Capacitor cerámico 18pF (0603) (see & buy)
- C5; Capacitor cerámico 10uF (0805) (see & buy)
- C6, C7, C12-C19, C22-C24; Capacitor cerámico 0.1uF (0603) ( see & buy )
- C8, C10; Capacitor ceramico 0.1uF(1206) (see & buy)
- C10; Capacitor electrolítico 470uF ( see & buy )
- C11,C20; Capacitor electrolítico 220uF ( see & buy )
- Q1-Q2; Transistor SOT23 PNP ( see & buy )
- R1-R4; Resistencia SMD 1/8W, 49.9 Ohm, package 0805 ( see & buy )
- R5, R6; Resistencia SMD 1/10W, 470 Ohm, package 0603 ( see & buy )
- R7-R9, R15, R30-R38, R40; Resistencia SMD 1/10W, 10k Ohm, package 0603 ( see & buy )
- R10; Resistencia SMD 1/10W, 2.7k Ohm, package 0603 ( see & buy )
- R11-R14, R39, R41; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R21; Resistencia SMD 1/4W, 4.7K Ohm, package 1206 ( see & buy )
- R7-R10, R12, R19, R22-R21 ; Resistencia SMD 1/10W, 1k Ohm, package 0603 ( see & buy )
- R16; Resistencia SMD 1/10W, 1M Ohm, package 0603 ( see & buy )
- RJ1; conector RJ45 HR911105A ( see & buy )
- BTN1; Pulsador SMD (see & buy)
- X1; Crystal SMD 16Mhz ( see & buy )
PASO PARA SUBIR UN PROGRAMA
PASO 1 : SUBIR GESTOR DE ARRANQUE (BOOTLOADER)
Para poder usar un microcontrolador nuevo (atmega328p-AU), es necesario subir un un gestor de arranque como también llamado “BOOTLOADER”, esto nos facilitará subir programas en futuras ocasiones.
finalmente para quemar el bootloader se tendrá que realizar a través de los pines ISP, que prácticamente serían los pines [ (MOSI=11) (MISO = PIN12) (SCK=PIN13) (Slave=PIN10) ]. Para subir y quemar el gestor de arranque necesitaremos un arduino UNO ó MEGA y realizar las siguientes conexiones (ARDUINO UNO – MAIN BOARD).
PASO 2 : SUBIR PROGRAMA; PC – MAIN BOARD
Después de haber subido el gestor de arranque finalmente ya podremos subir cualquier programa como normalmente lo realizamos a través del puerto serie.
COMO SUBIR BOOTLOADER (VIDEO)
CONEXIONES EXTERNAS
CÓDIGOS DE PRUEBA
ENTRADAS ANALOGICAS
/* 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 = 10; const int SENSOR_IREG2 = 20; const int SENSOR_IREG3 = 30; const int SENSOR_IREG4 = 40; const int SENSOR_IREG5 = 50; const int SENSOR_IREG6 = 60; const int SENSOR_IREG7 = 70; const int SENSOR_IREG8 = 80; const int sensorAnalog1 = A0; const int sensorAnalog2 = A1; const int sensorAnalog3 = A2; const int sensorAnalog4 = A3; const int sensorAnalog5 = A4; const int sensorAnalog6 = A5; const int sensorAnalog7 = A6; const int sensorAnalog8 = A7; 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_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); mb.addIreg(SENSOR_IREG8); } void loop() { mb.task();// actualiza para el trabajo se realize // con normalidad // envía los valores del potenciometro 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)); mb.Ireg(SENSOR_IREG8, analogRead(sensorAnalog8)); }
ENTRADAS DIGITALES
/* 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 DIGITALES DESDE ARDUINO A PLC S7 1200) <=======]==} ________________________________________________________ */ #include <EtherCard.h> #include <Modbus.h> #include <ModbusIP_ENC28J60.h> const int int1 = 100; const int int2 = 200; const int int3 = 300; const int int4 = 400; const int int5 = 500; const int int6 = 600; const int int7 = 700; const int int8 = 800; const int in1 = 2; const int in2 = 3; const int in3 = 4; const int in4 = 5; const int in5 = 6; const int in6 = 7; const int in7 = 8; const int in8 = 9; 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 pinMode(in1, INPUT); pinMode(in2, INPUT); pinMode(in3, INPUT); pinMode(in4, INPUT); pinMode(in5, INPUT); pinMode(in6, INPUT); pinMode(in7, INPUT); pinMode(in8, INPUT); mb.addIreg(int1); mb.addIreg(int2); mb.addIreg(int3); mb.addIreg(int4); mb.addIreg(int5); mb.addIreg(int6); mb.addIreg(int7); mb.addIreg(int8); } void loop() { mb.task();// actualiza para el trabajo se realize // con normalidad // envía los valores del potenciometro /* const int v_int1 = digitalRead(in1); const int v_int2 = digitalRead(in2); const int v_int3 = digitalRead(in3); const int v_int4 = digitalRead(in4); const int v_int5 = digitalRead(in5); const int v_int6 = digitalRead(in6); const int v_int7 = digitalRead(in7); const int v_int8 = digitalRead(in8); */ mb.Ireg(int1, digitalRead(in1)); mb.Ireg(int2, digitalRead(in2)); mb.Ireg(int3, digitalRead(in3)); mb.Ireg(int4, digitalRead(in4)); mb.Ireg(int5, digitalRead(in5)); mb.Ireg(int6, digitalRead(in6)); mb.Ireg(int7, digitalRead(in7)); mb.Ireg(int8, digitalRead(in8)); //muestra en el monitor serie lo s valores del pot4 //Serial.println(analogRead(sensorAnalog)); }
3 comentarios. Dejar nuevo
Buenas tardes. Cuanto me cuesta la tarjeta ya armada y para conectar ya armada y puesta en México al C.P. 76138
Hola. Cuanto me sale la placa armada y lista para utilizarla en algún proyecto que tengo? Saludos y gracias
Buenas noches, aún no tenemos a la venta por el tema de la pandemia, en cuanto abran las agencias de envio , estaremos haciendo realizando los envíos respectivos. muchas gracias .