Comunicación entre un S7 1200 o S7 1500 y una aplicación de escritorio

Ya es conocido que la librería gratuita libnodave.dll podía conectarse sin problemas a un PLC S7 de siemens, pues bien en la librería libnodave.dll a partir de la versión 0.8.5 tambien es posible conectarse a un autómata S7 1200 y también a un S7 1500 con Windows 7 y Windows 8.

s7-1200_pc

Detalles a tener en cuenta para poder conectar con un 1200:

  1. No utilizar ningún DB optimizado dentro del proyecto del PLC

Detalles a tener en cuenta para poder conectar con un 1500:

  1. No utilizar ningún DB optimizado dentro del proyecto del PLC
  2. En las protecciones del PLC dar permisos para acceder al PUT/GET

Comunicación entre un S7 1200 o S7 1500 y una aplicación de escritorio

Desde este link se puede descargar la librería libnodave a partir de la versión 0.8.5 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)

 

Leave a Reply