Icono del sitio ELECTROALL

Módulo expansor de entradas para PLC SIEMENS s7 1200, DIY

YouTube
YouTube
Instagram
Instagram
GitHub
GitHub

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
  1. Tensión de alimentación……………………….…………12 – 24VDC
  2. Corriente de alimentación………………….……………70mA
  3. Programación Directa………………………………….….Ordenador – Modulo de I/ para PLC
  4. Entorno de programación………………………..……..Arduino IDE
  5. Condiciones ambientales min………………………….-10°
  6. Condiciones ambientales max…………………..…….55°
  7. Entradas analógicas(0-5VDC)………………………….6
  8. Entradas analógicas(0-10VDC)……………………….2
  9. Entradas digitales(12-24VDC)…………………………8
  10. Dimensiones…………………………………….…….……….95x66mm
  11. Empotrable…………………………………………….………Sí
ESQUEMÁTICO ELECTRÓNICO

DISEÑO PCB – Ordene ahora en JLCPCB
DISPOSITVOS ELECTRÓNICOS
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).

DESCARGAR BOOTLOADER

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));
}
VIDEO
Salir de la versión móvil