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 Settimino. Settimino 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ón | Nombre | Tipo | Valor inicial | Comentario |
0.0 | Struct | |||
+0.0 | PRESSURE | REAL | 0.00000e+000 | TRANSDUCER TP1 |
+4.0 | ENCODER | DWORD | DWs16s0 | MOTOR ENCODER |
+8.0 | COMP_NUMBER | INT | 0 | COMPONENT 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..."
Cómo conectar el PLC basado en Arduino con la familia de PLCs Siemens S7 equipados a través de Ethernet