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.
Detalles a tener en cuenta para poder conectar con un 1200:
-
No utilizar ningún DB optimizado dentro del proyecto del PLC
Detalles a tener en cuenta para poder conectar con un 1500:
-
No utilizar ningún DB optimizado dentro del proyecto del PLC
- 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:
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:
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)