PLC S7 Tarjeta E/S Wifi 6- (Arduino)

Comunicando ARDUINO a través de WIFI con el PLC WinAC RTX

En esta entrada, muestro paso a paso como establecer una comunicación de datos entre una placa WIFI ESP8266 y el PLC S7.

Esta entrada es una continuación de la entrada PLC S7 WinAC RTX 4- (Arduino) donde se explicaba una forma de comunicar con el PLC tanto por cable como wifi.

En esta entrada explico como configurar una tarjeta totalmente funcional de un bit de entrada y un bit de salida a Relé, pudiendo ser la plataforma inicial para crear tarjetas Input/Output de mayor capacidad.

Para facilitar la realización del proyecto, he utilizado un Hardware de libre disposición en las principales plataformas de venta Online.

Manos a la obra….

Objetivo:        

– Disponer de un hardware Arduino comandado desde el PLC SIEMENS S7.

Recursos necesarios:

-PC-PLC ya instalado. Ver entrada PLC S7 WinAC RTX 1- (Configuración) y PLC S7 WinAC RTX 2- (Conexión LAN)

-Una placa WIFI basada en el procesador ESP8266 con ref: HW-622.

-Tener el entorno de programación de Arduino instalado.

-Disponer de la librería Settimino de (Davide Nardella).

Finalidad:

-Poder controlar una Entrada digital y un Relé de forma remota dentro de nuestra red Wifi.

INTRODUCCION

Para poder hacer realidad este proyecto, utilizamos una librería libre (Settimino), la cual incorpora el protocolo de comunicación de Siemens a nuestro proyecto Arduino.

Ver la entrada: PLC S7 WinAC RTX 4- (Arduino) donde se explica la descarga de la libreria.

Como se puede ver en el esquema superior, en este caso comunicamos el PC con el software STEP7 V5.6 por Wifi, este software es el que nos permite programar el PLC SIEMENS.

La placa ESP8266 con relé incorporado y entrada digital optoacoplada, también comunica por Wifi.

Después de varias pruebas, llego a la conclusión que el wifi solo es factible en casos que podamos permitir perdida de información. Es decir existe un retraso entre la información del PLC y la tarjeta Relé.

Siendo válido para instalaciones domóticas pero no recomendable para uso industrial.

Nuestro esquema es:

Ejecutamos el entorno de programación Arduino V1.8.7. Una vez dentro del entorno seleccionamos uno de los ejemplos de la librería Settimino, y modificamos a nuestro gusto:

/*----------------------------------------------------
Tarjeta IO Wifi para PLC SIEMENS S7   

 Probado por Wifi en placa (Generic ESP8266 module)

 Funciona bien pero la latencia se ve afectada por 
 de ancho de banda del wifi o cobertura.
 
 Compilado con Arduino IDE 1.8.7
 JColl Dic.2018
 --------------------------------------------------*/
#include <SPI.h>
#include <Ethernet.h>
#include <ESP8266WiFi.h> 
#include "Settimino.h"

// Enter a MAC address and IP address for your controller below.
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0F, 0x08, 0xE1 };

IPAddress Local(192,168,1,40); // Local Address
IPAddress PLC(192,168,1,51);   // PLC Address

char ssid[] = "MIWIFI_2G";    // Your network SSID (name)
char pass[] = "mipassword";    // Your network password (if any)

IPAddress Gateway(192,168,1,1);
IPAddress Subnet(255,255,255,0);

byte ArrayInput[64]; // Array de entradas
byte ArrayOutput[64]; // Array de salidas

int PinRELE  =4;      //Definimos el pin de salida del RELE 
int PinOPTO  =5;      //Definimos el pin de entrada Optoacoplador 

  S7Client Client(_S7WIFI);

void setup() {
    // Configuración de las Entradas y Salidas
    pinMode(PinOPTO, INPUT_PULLUP);  
    pinMode(PinRELE, OUTPUT); 
  
    WiFi.begin(ssid, pass);
    WiFi.config(Local, Gateway, Subnet);
    while (WiFi.status() != WL_CONNECTED) { delay(500); }
}

void loop() 
{
  int Size, Result;
   
  while (!Client.Connected)  // Conexión con PLC SIEMENS S7
    { 
    Result=Client.ConnectTo(PLC,0,2);  // Rack ,Slot. 
    if (!Result) delay(500); 
    }
  

  //**********************************
  //**** Gestión de las Entradas *****
  //**********************************

  //Leemos las entradas del Arduino y las transferimos al DB1 bytes 0..63 (Entradas del PLC)
  ArrayInput[0]=0; // Byte entradas EB0
  if (!digitalRead(PinOPTO))  bitWrite(ArrayInput[0],0,1); //Byte EB0 bit 0

  Size=1; //Cantidad de Bytes a enviar
  Client.WriteArea(S7AreaDB,1,0,Size,&ArrayInput);  // Escribe el ArrayDatos en el PLC

  //**********************************
  //**** Gestión de las Salidas. *****
  //**********************************

  //Leemos DB1 bytes 64..128 (Salidas del PLC) y activamos Salidas del Arduino
  Size=1;
  Result=Client.ReadArea(S7AreaDB,1,64,Size,&ArrayOutput);  // Put them into our target (Buffer or PDU)  
  if (Result==0)
  {
     if (bitRead(ArrayOutput[0],0)) {  // Lee bit 0 del byte 1 de las salidas
         digitalWrite(PinRELE, HIGH);
          } else {
            digitalWrite(PinRELE, LOW);
            }
  } else  Client.Disconnect(); //Si hay error desconecta.
  
  delay(500);  
}
 

Como se puede observar introducimos los datos de nuestra red:

Introducimos la IP local y la del PLC WinAc RTX

Configuramos los parámetros del wifi:

Seleccionamos bastidor 0 Slot 2

Seleccionamos el tipo de placa que estamos utilizando.

Conectamos la placa al PC por cable USB y pulsamos el icono Compilar y transferir.

Este ejemplo, lee y escribe en el DB1 del PLC, por tanto el PLC debe tener un control de estos datos y actualizar la memoria de imagen de las señales de entrada y salidas.

Pudiendo programar directamente en nuestro caso el Relé es la A0.0 y la entrada es la E0.0 del PLC SIEMENS S7.

Programando la parte PLC mediante el software STEP7 V5.6

Aquí muestro un pequeño programa que hace las funciones de interconexión con la información de la base de datos DB1, la cual está siendo el enlace con el Arduino.

Como podemos observar, tenemos tres bloques:

DB1: bloque de datos para la imagen de entradas y salidas.


FC1: Función para la actualización de la imagen de entradas y salidas en función de los datos del DB1.

OB1: Bloque principal del programa, donde la primera línea (SEGMENTO1) hace una única llamada a la función FC1, donde se actualiza el área de Entradas/Salidas y que permite continuar programando como si la tarjeta de IO fuera una tarjeta nativa del PLC.

Nota: La configuración Hardware del PLC no se debe alterar para incorporar esta tarjeta. Es decir el PLC no supervisará la presencia y buen funcionamiento de esta tarjeta. Por lo que este montaje no es válido para el uso industrial.

A partir de aquí podemos desarrollar nuestro hardware IO personalizado.

Fin del procedimiento….