1 de septiembre de 2009

Comunicación OPC entre un PLC software WinAC RTX y Visual Basic (Parte 1ª)

En esta entrada tuve mi primer contacto con un PLC software de Siemens. Ya he trabajado un poco más con él y es tan sencillo como un S7-300 o un S7-400.

Como HMI (interfaz de usuario) tenía dos opciones. Una era usar un run-time del WinCC Flexible, el cual requiere pagar por una licencia; la otra era usar el servidor OPC de Siemens que viene con el Simatic NET y programar en Visual Basic. El servidor OPC NO requiere licencia (increíble) y el Visual Basic 2008 Express es gratuito y te lo puedes bajar de Microsoft.

Estas notas describen los pasos que di para implementar la segunda opción y ha funcionado todo bastante bien.

ADVERTENCIA: Debemos tener instalado el Simatic NET para poder agregar el servidor OPC. He tenido problemas con el Simatic NET 2007, no hubo manera de hacer funcionar la versión del OPC que trae; sin embargo con el Simatic NET 2006 no he tenido la más mínima pega. Existe un Simatic NET 2008 (no sé si un 2009) pero no lo tengo disponible.

ACTUALIZACIÓN (11-12-2009): He probado el Simatic NET 2008 HF1 y el servidor OPC funciona perfectamente.

NOTA: En la web de Siemens hay información sobre este tema, aunque mucha está algo anticuada. Por ejemplo, aquí explican como realizar la configuración del OPC y probarla con el OPC Scout.

Voy a partir justo donde lo dejé en la entrada a la que me referí al principio.

Lo primero es añadir el servidor OPC al Station Configuration Editor, para ello hacemos doble clic sobre el icono del ordenador de la bandeja de Windows:


Seleccionamos el slot 1 y pulsamos sobre el botón 'Add...'


Seleccionamos 'OPC Server' y pulsamos 'OK'. También aceptamos en la siguiente ventana.




Y listo, ya tenemos el OPC instalado en nuestro equipo.



Ahora vamos a configurar nuestro proyecto de Step7 para que acepte la comunicación por OPC, para ello abrimos la configuración hardware, buscamos en el árbol de componentes la versión de OPC Server de la que dispongamos, en mi caso la versión 6.4 correspondiente al Simatic NET 2006.


A continuación abrimos el NetPRO, vemos que dentro de nuestro equipo aparece 'OPC Server', pulsamos encima para seleccionarlo y vamos al menú Insertar => Nuevo enlace...


Creamos un enlace de tipo S7 con el proyecto actual, pulsamos Aceptar y en la siguiente ventana nos aseguramos que el interface es 'Interno PLC'. Aceptamos de nuevo.



De vuelta al NetPRO vemos que el enlace está creado.


Vamos ahora a las propiedades del OPC Server haciendo doble clic sobre él.


Pinchamos sobre la pestaña S7 y en el recuadro 'Utilizar símbolos' marcar la casilla 'Seleccionados' y pulsamos sobre el botón 'Configurar...'


En la ventana que sale desplegamos el árbol del proyecto y seleccionamos las variables que estarán disponibles para la comunicación OPC. En mi caso las he agrupado todas en un bloque de datos (DB) llamado OPCCom.


NOTA: En este paso fue donde me falló la configuración del OPC que viene con el Simatic NET 2007, no hubo manera de que me saliesen las variables del proyecto. Con la versión 2006 no hubo problema. Encontré en el foro de Siemens una consulta similar, pero ni siquiera siguiendo los pasos que describen para reconstruir el fichero de símbolos funcionó. Si a alguien le ha pasado algo similar y lo ha arreglado me gustaría conocer la solución.

Continuemos, aceptamos y en el NetPRO guardamos y compilamos. Si todo va bien nos saldrá el aviso 'Sin Errores.'




En la configuración hardware del proyecto también salvamos y compilamos, y transferimos la configuración. Ya tenemos la parte de S7 lista. En la siguiente entrada explicaré como he programado la comunicación desde Visual Basic.

Cualquier comentario, crítica o corrección será bienvenida.

10 comentarios:

  1. En planta tengo una aplicacion similar con la diferencia que en mi caso estoy untilizando comunicacion Ethernet entre el PLC y la PC.
    Y tengo un problema con esta configuracion lo que pasa es que cada vez que se reinicia la PC debemos cargarle nuevamente la configuracion desde el administrador de hardware. Me pregunto si hay alguna forma de evitar este paso o que la configuracion sea guardada en la pc.
    Gracias por su respuesta.
    Saludos

    ResponderEliminar
  2. Hola amigo anónimo. Me suena raro eso de que la configuración se te borre cada vez que apagas el PC. En mi máquina virtual, cada vez que la arranco, mantiene la última configuración cargada para el WinAC, y no recuerdo haber hecho ninguna configuración especial.

    Un saludo.

    ResponderEliminar
  3. Buenas tardes, tengo un dilema y es q necesito hacer una interfaz con visual basic y un plc festo (fc640) y no se como hacer la comunicacion entre ellos.

    ResponderEliminar
  4. Hola GR he instalado winac 2010 y simatic net 2007 seguí paso x paso tu tutorial y no tuve ningun problema con net 2007

    Ahora estoy intentando probar la segunda parte

    Saludos

    ResponderEliminar
  5. Hola GR, muchas gracias por adelantado con este blog, estoy intentando configurar algo partecido con simatic net 2005, mi pregunta es ¿se puede configurar simatic net 2005 via MPI con PC adapter a un puerto serie del PC sin una cp? un saludo.

    ResponderEliminar
  6. Una duda, aquí has utilizado el simulador del plc para emular el server opc, pero si quisiera realizar la misma conexión con un autómata real, que sería el opc?, una aplicación en el servidor? una función instalada en el plc? o incluso un sistema operativo independiente???

    ResponderEliminar
    Respuestas
    1. No uso un simulador de PLC, el WinAC es un PLC real. El OPC no va en el PLC, aunque en este ejemplo use una conexión tipo PLC Interno. El servidor OPC estará en un PC o Panel y la conexión podría ser, por ejemplo, ethernet o Profibus.

      Un saludo.

      Eliminar
  7. Hola,
    Gracias por este blog, es de esos que te arreglan la mañana. Tengo un tema que me trae por la calle la amargura con la librería libnodave, por que quiero escribir un float por ejemplo en el db3.dbd0 usando vb.net y me falta algo; para leer, no problem con las funciones DaveGetxx, pero para escribir algo mas grande que un simple byte, como es el caso de un single, tengo que almacenar en el buffer 'buf' en el orden adecuado byte por byte, y luego llamar a la funcion de escritura:

    res = dc.writeBytes(libnodave.daveDB, 3, 0, 4, buf)

    y me extraña tener que hacerlo manualmente

    SALUDOS!!

    ResponderEliminar
  8. Hola,tengo el simatic step 7 2010 v5.5,sin embargo no tengo el simatic net,descarge el que tu mencionas arriba sin embargo al querer instalarlo me sale que el producto no esta instalado y se cierra la instalacion,tal vez no me descarge el correcto o la version correcta...tendras el link de descarga si no fuera mucha molestia?..gracias

    ResponderEliminar
  9. Hola , muy buena explicacion del funcionamiento y configuracion . gracias por su aporte!!. quisiera preguntarle si hay alguna forma de usar los datos obtenidos en el opc dentro de la logica de un programa del Step 7 . osea poder tomar esos valores y usarlo como contactos NA, NO, o variables de valor entero o doble entero y asi poder controlar salidas del plc
    desde ya muchas gracias

    ResponderEliminar

Por favor, no pidas copias de programas comerciales, licencias o números de serie.