Programa para convertir de Siemens Step 7 a Rockwell

Aprovechando el código AWL de los programas hechos en Step 7 junto a la línea en texto ASCII que lleva incorporado el Logix Designer de Rockwell se puede crear un programa para realizar una traducción directa desde Siemens Step 7 a Rockwell.

Este programa lo he realizado con .NET y aunque no está totalmente perfeccionado, puede llegar a traducir el 65% de un programa hecho en Siemens Step7, del mismo modo no sería muy complicado realizar la opción contraria, es decir de .

El programa traduce de segmento en segmento, es decir no traduce un bloque o FC completo, esto es así porque es muy importante comprobar en todo momento que lo que está traduciendo sea correcto, ya que algunas veces por pequeños fallos la traducción no es correcta al 100%

traduccion-siemens-rockwell

 

Programa para convertir de Siemens Step 7 a Rockwell

El programa es muy simple, vamos a ver un ejemplo, en primer lugar debemos de copiar el código AWL del segmento del programa de Siemens:

El segmento a copiar

red-siemens-step-7

Seleccionamos ver AWL:

red-siemens-step-7-awl

Seleccionamos todo el contenido AWL de la red y hacemos Control C, y lo pegamos con el botón Pegar Traducir Copiar, este botón realiza las 3 tareas, es decir pega el contenido del portapapeles en el programa, realiza la traducción y copia en el portapapeles la traducción a Rockwell, de esta forma solo necesitamos un clic para traducir el segmento:

programa-traduccion-siemens-rockwell

 

Aunque se puede ver en la parte inferior el segmento traducido a ASCII para Rockwell, no hace falta seleccionarlo y copiarlo, por que ya lo tenemos copiado en el portapapeles, ahora simplemente lo pegamos en el editor de Rockwell:

pegar-a-Rockwell

Y comprobamos como realiza la traducción, eso si los simbólicos ya deben estar creados en el programa:

resultado-traduccion-rockwell

 

Comunicación Modbus TCP entre Sentron 3200 y el PLC S7 1200

Vamos a realizar una conexión entre un PLC S7 1200 y un analizador de red de siemens mediante Modbus TCP.

sentron3200-panoramic

 

El S7 1200 lleva incorporado el protocolo Modbus TCP, aunque en algunas versiones de firmware no lo lleve, siempre podemos actualizar el firmware, la comunicación mediante Modbus TCP es sumamente sencilla de realizar.

Requerimientos técnicos

  1.  PLC autómata S7 1200 (cuidado con la versión de firmware)
  2. Analizador de red Sentron 3200

Comunicación Modbus TCP entre Sentron 3200 y el PLC S7 1200

Para establecer una comunicación entre el Sentron y el PLC S7 1200 mediante Modbus TCP, utilizaremos la función de cliente Modbus que nos proporciona el PLC 1200, dependiendo en qué modelo de PLC trabajemos podemos utilizar una función u otra, en este caso utilizamos el modelo CPU 1212C con lo que la función MB_CLIENT será un poco más compleja, ya que debemos de definir un DB con tipos de datos “Connect”.

 

Llamada a la función MB_CLIENT

llamada-mb_client

Podemos observar que la lectura de datos del Sentron es cíclica cada 1 segundo, en nuestro caso será más que suficiente.

En este ejemplo leemos del registro 40002 con una longitud de 200 words.

Los datos leídos los guardamos en el DB “READ_MODBUS”, este db es simplemente un array de enteros, evidentemente este array debe de contener al menos 200 enteros.

El parámetro CONNET es un DB donde debemos de definir los datos de conexión.

Ejemplo del db de array de enteros

array-enteros

 

Ejemplo del db CONNECT para los parámetros IP de conexión

db-connect

 

El tipo de datos utilizado es TCON_IP_v4, un tipo de datos específico para las conexiones Ethernet.

Con este Db ya podemos asignar la ip de nuestro servidor, en este caso el Sentron

db_connect-ip

Como podemos observar la IP del Sentron es la 192.168.1.81.

Debemos de definir el resto de parámetros, puerto, ID, hardware

parametros-modbus

El puerto modbus es el 502, tipo de conexión TCP/IP, el ID que utilizamos y la identificación hardware del dispositivo.

Los datos que vamos a leer del analizador de red se encuentran en la dirección 40002 que corresponde al primer registro leído, este es el listado de parámetros leídos a partir de esta dirección:

registros-sentron-1

registros-sentron-2

registros-sentron-3

registros-sentron-4

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)