Cómo conectar el PLC basado en Arduino con la familia de PLCs Siemens S7 equipados a través de Ethernet

10 de diciembre de 2018 por
Cómo conectar el PLC basado en Arduino con la familia de PLCs Siemens S7 equipados a través de Ethernet
Alejandro Jabalquinto

Introducción 

En este post se muestra cómo conectar Industrial Shields Arduino based PLC (M-Duino‘scon un PLC © Siemens equipado con puerto Ethernet o procesador de comunicación. Cualquier PLC es compatible excepto para la antigua familia S5©. Para ello tenemos que usar SettiminoSettimino es una biblioteca Ethernet de código abierto para interconectar Arduino con Siemens© S7 PLC. También se admiten los modelos 1200/1500 LOGO 0BA7 y S7200 de la CPU. Descargar siguiendo este enlace Settimino.

Requisitos

Ethernet PLC:

Productos de la familia MDuino
Biblioteca Ethernet2 :Biblioteca Arduino Ethernet2.h
Siemens© PLC con conexión Ethernet 


Metodología

Una vez que tengamos todos los requisitos, podemos proceder a explicar cómo funciona. La clase principal es s7Client objeto que es capaz de conectar y transferir datos entre PLC basado en Arduino y Siements© PLC.El chip Ethernet W5100 soporta 4 clientes y utiliza un buffer de datos para todo el cliente porque sólo uno se puede conectar al mismo tiempo. Este búfer de datos puede contener solo una PDU (consulte la comunicación de © Siemens para saber lo que eso significa).

La variable PDU es global, esto significa que es visible desde el croquis. Vea un ejemplo (consulte la sintaxis de S7Client para obtener una mejor comprensión).

Esta es la PDU definida en Settimino.h: 

typedef struct {
   byte H [ Size_WR ];                      Header PDU //
   byte Data [ Shift + MaxPduSize-Size_WR ];  // Data PDU
TPDU};
TPDU PDU; // Declaration

La matriz H contiene el encabezado del protocolo y la matriz de datos contiene la carga útil.

Transferencia big data:

byte mybuffer [1024]; // 1K matrix
Cliente.ReadArea(S7AreaDB , 24, 0, 1024, y mybuffer);

Estamos diciendo que el cliente puede acceder a la base de datos 24, para leer de 0 a 1024 bytes y controlar en mybuffer. 

Transferencia small data:

Cliente.ReadArea(S7AreaDB, 24, 0, 64, NULL);
Serial.println (PDU.DATA [0]); // Printing the first byte
Serial.println (PDU.DATA [1]); // Printing the second byte and so on ...

Estamos diciendo que el cliente puede acceder a la base de datos 24, leer 64 bytes de 0 a 64 y manejar en el búfer interno.

Para escribir tenemos que hacerlo de la misma manera poniendo datos a PDU. DATA[] y luego llame a WriteArea().

S7Helper

Los datos de la © Siemens son Big-endian y los datos de Arduino son Little-endian.S7Helper es un objeto que permite extraer valores de derecha a izquierda con un formato intermedio de bytes de memoria. The name of the request is S7.

Supongamos que queremos cargar esta base de datos:

DirecciónNombreTipo Valor inicialComentario
0.0 Struct  
+0.0PRESSUREREAL0.00000e+000TRANSDUCER TP1
+4.0ENCODERDWORDDWs16s0MOTOR ENCODER
+8.0COMP_NUMBERINT0COMPONENT NUMBER
=10.0 END_STRUCT  

 

flotar pressure;
unsigned long Encoder;
int16_t components;
// getting 10 bytes from 0
Client.ReadArea(S7AreaDB , 100, 0, 10, y mybuffer);

Mi búfer contendrá un trastorno serial de bytes.

Para acceder a esto podemos escribir:

Pressure = S7.FloatAt (y mybuffer , 0);
Encoder = S7.DWordAt (y mybuffer , 4);
Componeny = S7.IntegerAt (y mybuffer , 8);

Memoria de modelos

Para optimizar aún más la impresión, los modelos de memoria de árbol están disponibles: pequeños, normales y extendidos. 

A pesar de que el modelo extendido funciona perfectamente en Arduino Leonardo y Arduino Mega, es posible que desee reducir aún más el uso de la memoria.Por ejemplo, Settimino Client puede controlar el modo Stop o el modo Run del PL, pero si solo necesita datos de lectura/escritura, no necesita esta característica. 

Para establecer el modelo de memoria que simplemente necesita modificar la directiva al principio de la escritura Settimino.h:

#define _SMALL
or
#define _NORMAL
or
#define _EXTENDED

El modelo pequeño tiene el grupo mínimo de funciones para conectarse a un PLC y leer/escribir datos.

El modo normal tiene el S7Helper.

Por último, el modelo extendido también tiene las funciones extendidas restantes. 

De forma predeterminada, Settimino se libera como Extendido. 

Configuración S7 1200: 

  • En las propiedades de base de datos, debe seleccionar "Acceso optimizado para el bloque" en la pestaña de atributos. 
  • En el área de protección de las propiedades del PLC sólo debe seleccionar "Acceso completo (sin protección)" y "Permitir el acceso a la comunicación PUT/GET desde PLC, HMI, OPC..."


Buscar en nuestro blog

Cómo conectar el PLC basado en Arduino con la familia de PLCs Siemens S7 equipados a través de Ethernet
Alejandro Jabalquinto 10 de diciembre de 2018
Compartir

¿Estás buscando tu Controlador Lógico Programable ideal?

Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


Industrial PLC comparison >>>