Compartir datos entre 2 PLC S7 mediante ethernet

Una opción muy interesante cuando trabajamos con varios PLC de Siemens es poder compartir datos mediante la red ethernet del propio PLC, Siemens nos ofrece la posibilidad de crear enlaces de comunicación aprovechando la red y así poder Compartir datos entre 2 PLC S7 mediante ethernet.

En el siguiente ejemplo se utiliza dos PLC S7 315 2DP PN, aunque también se puede realizar con otros PLC de Siemens o Vipa que tengan el puerto de ethernet integrado, o también una tarjeta de ethernet

En primer lugar debemos de crear un enlace en el PLC maestro, este PLC será el encargado de leer y escribir los datos en el PLC cliente, supongamos que tenemos las siguientes direcciones IP

  • IP PLC Maestro: 192.168.10.20
  • IP PLC Esclavo: 192.168.10.120

Configuración del enlace del PLC

Abrimos el programa NetPro y seleccionamos la CPU del PLC maestro:

enlace-netpro-plc

Nuevo enlace con el netpro

Seleccionamos enlace no especificado y tipo de enlace S7:

enlace-no-especificado

Insertar nuevo enlace

En aceptar el enlace se abren las propiedades, aquí debemos de especificar la IP del PLC cliente, en nuestro caso será la 192.168.10.120, definimos el ID del enlace, en este caso el 1, este ID será el que luego utilizaremos en el programa de Step 7, luego hacemos clic en direcciones:

propiedades-del-enlace

Propiedades del enlace

En direcciones definimos el bastidor y slot, normalmente 0 y 2 y en recurso de enlace seleccionamos en local el 10 y en el interlocutor seleccionamos el 3:

detalle-direcciones-enlace-s7

Aceptamos todos los cambios y transferimos la nueva configuración al PLC maestro.
Con esto hecho ya deberíamos tener el enlace entre los 2 PLC realizado, probamos de conectar los 2 PLC en la misma red y al abrir en online desde el Netpro veremos como el enlace esta funcionando correctamente.

Programa de lectura y escritura de datos

En primer lugar debemos de copiar los FB de comunicación en nuestro proyecto de Step 7 y transferirlos al PLC, los FB de comunicaron que utilizaremos son el “PUT” Write Data to a Remote CPU y el “GET” Read Data From a Remote CPU, el FB14 y el FB15 de nuestro ejemplo.

Lectura de datos del PLC cliente

Mediante el FB de lectura “GET” realizamos una lectura secuencial de los datos del cliente, en este caso hemos puesto un clock de 1 décima de segundo, pero se podría aumentar el tiempo de ciclo dependiendo de la cantidad de datos a leer:

lectura-datos-get

En este ejemplo se leen los datos del DB300 a partir de la posición 200 con una cantidad de 150 bytes, y se transfieren al plc del maestro también al DB300 a partir de la posición 200. Se puede ver como el ID del enlace es el 1 que anteriormente hemos definido en la configuración de hardware

Escritura de datos del PLC cliente

Mediante el FB de escritura “PUT” realizamos una escritura secuencial de los datos del cliente, en este caso hemos puesto un clock de 1 décima de segundo, pero se podría aumentar el tiempo de ciclo dependiendo de la cantidad de datos a escribir:

escritura-datos-put

En este ejemplo se escriben los datos del DB300 a partir de la posición 0 con una cantidad de 150 bytes, estos datos se transfieren al PLC cliente también al DB300 a partir de la posición 0. Se puede ver como el ID del enlace es el 1 que anteriormente hemos definido en la configuración de hardware

FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS

Uno de los problemas que surgen al trabajar con un autómata S7 300 y con un bus de comunicaciones Profinet o Profibus, es el diagnostico de la periferia descentralizada en tiempo real, aunque no tengamos una herramienta concreta para realizar esta tarea, Siemens pone a disposición el FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS, con este FB podemos realizar un diagnostico en tiempo real de la periferia descentralizada.

El FB126 realmente lee directamente sobre los datos de diagnostico del PLC y anota los errores producidos por una caida del Bus de comunicaciones.

Ejemplo del FB126 PNOIDIAG

En primer lugar debemos de descargarnos el programa FB 126 que nos proporciona Siemens en la siguiente dirección:

Descarga de FB126 PNOIDIAG, Diagnostico PROFINET o PROFIBUS

Descomprimimos y instalamos el programa, luego abrimos el administrador Simatic y en abrir proyecto, en librerías seleccionamos PNIODiag:

abrir-fb126

Abrir proyecto de FB126 de Diagnostico

Dependiendo de la CPU que utilizamos debemos de utilizar el FB126 que corresponda, con bloques de mas de 16K o con bloques de menos de 16K, copiamos el FB126 a nuestro programa de Step 7

El siguiente paso seria crear un DB donde se almacenara el estado del Bus, este DB debemos de crearlo manualmente según esta estructura:

estructura-db-200

DB200, de diagnostico de los esclavos del Bus

Podemos ver en el ejemplo que por cada estación utiliza 2 bytes de información, por tanto debemos de crear tantos como estaciones tengamos.

Seguidamente debemos de llamar el FB126 en los siguientes bloques, OB1, OB82, OB83, OB86 y OB100, recordar que para que el diagnostico funcione es importante realizar todas las llamadas:

llamada-fb126

Al realizar la llamada, el programa nos pide un db de instancia para el FB126, aquí escogemos el DB que queramos, este DB simplemente es de trabajo y de uso interno del FB.

Una vez cargado los bloques modificados, ya tendremos listo el diagnostico del bus, PROFINET O PROFIBUS, o incluso ambos a la vez.

Establecer una comunicación entre una aplicación de escritorio y un autómata siemens S7

Una manera fácil de establecer una comunicación entre una aplicación de escritorio  y un autómata siemens S7, es la librería gratuita libnodave.dll

Comunicación entre una aplicación de escritorio y autómata siemens S7, Libnodave.dll

LibNodave.dll es una librería gratuita para VB.NET, Java, C, C++, etc para comunicarse con los autómatas de Siemens S7 300 y S7 400. Se pueden realizar desde aplicaciones de escritorio hasta apps para moviles y tabletas, la comunicación puede realizarse desde ethernet, MPI o profibus.

Desde este link se puede descargar la librería libnodave de forma gratuita:

libnodave.dll

Al descomprimir el fichero que nos hemos descargado podemos ver diferentes directorios con algunos ejemplos de VB, de Pascal, de PERL, etc.

Para trabajar en .net tenemos la libreria libnodave.net.dll, debemos de crear una referencia a la dll libnodave.net:

referencia-vb-libnodave

y luego declarar las siguientes variables de trabajo :

'Variable daveOSerialType
Private fds As libnodave.daveOSserialType
'Variable daveInterface
Private di As libnodave.daveInterface
'Variable daveConnection
Private dc As libnodave.daveConnection

Para crear una conexión, podemos crear un método que realiza la conexión al PLC, donde p_port y p_ip son el puerto y la IP del PLC respectivamente:

Public Function conectar() As Boolean
    Try
      If fds.rfd = 0 Then
         fds.rfd = libnodave.openSocket(p_port, p_ip)
         fds.wfd = fds.rfd
         di = New libnodave.daveInterface(fds, "IF1", 0, libnodave.daveProtoISOTCP, libnodave.daveSpeed187k)
         di.setTimeout(1000000)
         dc = New libnodave.daveConnection(di, 0, p_rack, p_slot)
         conexion = dc.connectPLC
      End If
      If conexion <> -1 Then
         Return True
      Else
         Return False
      End If
    Catch ex As Exception
        regErrores = ex.Message
        Return False
    End Try
End Function

Una vez realizada la conexión con el PLC con éxito, podemos leer y escribir del PLC, para leer y escribir de un DB:

'Lectura de un db del PLC
 res = dc.readBytes(libnodave.daveDB, DB, inicio, longitudLeer, Nothing) 
 dc.getS32At(puntero)

'Escritura de un db del PLC
 res = dc.writeBytes(libnodave.daveDB, DB, inicio, longitud, escriure)

 Conclusiones

Con esta librería podemos crear fácilmente un enlace entre una aplicación de escritorio, una app para móvil, un enlace hacia una hoja excel, hacia un autómata S7 300 o 400 de forma gratuita, la experiencia que he tenido con esta librería es perfecta, tengo realizada una aplicación de escritorio con VB.NET conectada a un autómata VIPA Speed 7 y funciona a la perfección sin ningún tipo de problemas.