jueves, 7 de abril de 2016

CONEXIÓN ARDUINO Y EL AUTÓMATA S7 1200 DE SIEMENS.(Parte 2)






Configuración de S7 1200 ,para comunicarlo con ARDUINO.

Settimino es una biblioteca de Arduino, que consta de tres archivos
1. Settimino.h           
2.             Settimino.cpp
3.             keywords.txt
Depende de la Biblioteca Ethernet suministrado (<Arduino Dir > \ bibliotecas \ Ethernet).
Para usarlo, al igual que otras bibliotecas, es necesario importar en su entorno de programación.
Para ello, siga este excelente tutorial
En cambio, para modificar / ampliar Settimino seguir

S7Client


La clase principal es exportada S7Client que es el objeto que es capaz de conectar y transferir los datos de Arduino a un PLC Siemens (y viceversa).
No hay una instancia global de S7Client , usted tiene que instancia (o ellos) en su dibujo.
Cada cliente utiliza un zócalo (a través de la EthernetClient objeto) para que pueda crear una instancia de hasta cuatro clientes o menos si está instanciadores otro objeto Ethernet (o derivados) en el mismo proyecto.
Este es el límite del chip W5100 Ethernet.
S7Client es una clase, pero como se puede ver en otras bibliotecas, el paradigma orientado a objetos debe ser revisada para Arduino, por la necesidad de tener un tamaño reducido para los programas, por lo que vamos a ver las opciones Settimino.
·       El entorno de Arduino no es multitarea es así, a pesar de que tiene 4 clientes, sólo uno a la vez es la activa.
·       El cliente está totalmente sincronizada, cada puesto de trabajo (transacción) se ejecuta por completo en su llamada a la función.
Dicho esto, se utiliza un búfer de datos global. Se comparte a través de todos los clientes, ya que sólo uno a la vez puede utilizarlo.
Este buffer de datos es capaz de contener solamente una PDU ver la comunicación de Siemens para entender lo que esto significa. Sustancialmente, la PDU es la base "segmento de datos" manejado por el PLC, si es necesario transferir más datos, deben utilizarse los estados de protocolo S7 que las transacciones subsiguientes (cada uno conteniendo una PDU).
La variable PDU es en sí misma global, es decir, es visible desde el boceto.
Por lo que tiene dos opciones para optimizar el uso de memoria.
1.    Si tiene que transferir más de 222 bytes (la carga útil de una PDU) que necesita un buffer externo.
2.    Si desea transferir pequeña cantidad de datos, se puede usar un tampón externo o utilizar directamente la variable PDU.
Veamos un ejemplo (consulte la sintaxis de las funciones S7Client para más información).
Esta es la PDU como se define en Settimino.h :
typedef struct {
   byte H [ Size_WR ];                      Header PDU //
   byte de datos [ Shift + MaxPduSize-Size_WR ];  // PDU de datos
TPDU};
TPDU PDU; // Declaración
El H matriz contiene la cabecera del protocolo, la DATOS matriz contiene la carga útil es decir, los datos en bruto del telegrama.
// La transferencia de datos grande
byte mybuffer [1024]; // 1K matriz

Cliente . ReadArea ( S7AreaDB , 24, 0, 1024, y mybuffer );

Estamos diciendo que el cliente pueda acceder a la base de datos 24, para leer 1024 bytes a partir del primero (0) y ponerlas en mybuffer .


// Transferencia de datos pequeños
Cliente . ReadArea ( S7AreaDB , 24, 0, 64, NULL);
Serial.println (PDU.DATA [0]); // Imprimir el primer byte recibido
Serial.println (PDU.DATA [1]); // imprimir la segunda y así sucesivamente ...

Estamos diciendo que el cliente pueda acceder a la base de datos 24, leer 64 bytes a partir del primero (0) y al dejarlos en el buffer interno.

Del mismo modo para las operaciones de escritura, a poner sus datos en una memoria intermedia o en PDU.DATA [] y luego llamar WriteArea ().

Nota:
El Cliente de forma segura recortar la cantidad de parámetros si se pasa NULL como puntero de memoria intermedia y la cantidad es mayor que el tamaño de PDU.DATA [].

S7Helper


datos de Siemens PLC son Big-Endian, los datos de Arduino son little-endian.
S7Helper es un objeto global que permite extraer los valores de derecha con formato de un memoria intermedia de bytes. El nombre de la instancia es S7 .
Vamos a suponer para cargar la siguiente DB 100.
Descripción: Descripción: C: \ Deploy Settimino 1,0 \ www \ settimino_ref_file \ image001.png

flotar presión ;
largo sin signo Encoder ;
int16_t de componentes ;
// Obtener 10 bytes empezando desde 0
Client . ReadArea ( S7AreaDB , 100, 0, 10, y mybuffer );

Mybuffer contendrá ahora una serie "desordenada" de bytes (El octeto).
Para acceder a los campos podemos escribir:
Presión = S7.FloatAt (y mybuffer , 0);
Codificador = S7.DWordAt (y mybuffer , 4);
Componente = S7.IntegerAt (y mybuffer , 8);

S7Helper tiene dos métodos sobrecargados para cada acceso de campo, por lo
Codificador = S7.DWordAt (4);

se referirá a PDU.DATA [4]

  modelos memoria 


Para optimizar aún más la huella, tres modelos de memoria están disponibles: Pequeño , normal y extendida .
Aunque el modelo extendido funciona muy bien en el Arduino UNO, es posible que desee reducir aún más el uso de la memoria "saltándose" algunas de las características que usted no necesita usar en su proyecto.
Por ejemplo, Settimino cliente puede controlar el PLC ponerlo en modo STOP o RUN, pero si sólo necesita leer / escribir datos, tal vez usted no necesita de estas características.
Para establecer el modelo de memoria que usted necesita simplemente para modificar la directiva al inicio del Settimino.h , escribiendo:

#define PEQUEÑO
o
#define NORMAL
o
#define _EXTENDED

El modelo "pequeña" contiene el conjunto mínimo de funciones para conectarse a un PLC y los datos de lectura / escritura.

El modo "normal" contiene la S7Helper.

Por último, el modelo de "Extended" contiene también las funciones ampliadas restantes.
Por defecto Settimino se libera en forma extendida .
Estas directrices son visibles desde el boceto.
Configuración S7 1200.

En las propiedades de el DB se selecciona la características señalada.




En las propiedades del PLC en la parte de protección se señala así.







Yo configure el DB con las siguientes variable.




Y el OB-1 asi.








Aquí tenemos como se comunica y ARDUINO lee los cambios de variable.