Simulacion con S7 PLCSIM

En este artículo describimos de manera general como extender el entorno de simulación con el Siemens S7 PROSIM.

SIMATIC S7-PLCSIM


Entre los fabricantes de PLC que existen hoy en la actualidad, el simulador de PLC de Siemens es quizás el más robusto que existe, ya que no solo se emula el código en ejecución, sino que también se pueden tener acceso a las funciones de diagnóstico del CPU, acceso a memoria, simular errores de comunicación con interfaces y desde la versión 5.4 ya se pueden simular varios PLC conectados en red por MPI, PROFIBUS DP y TCP / IP. Pero lo realmente importante y que consideramos que es una idea fantástica, es la inclusión de un módulo de comunicación para extender el entorno del simulador S7 PLCSIM, en donde el desarrollador puede generar una aplicación para PC (C/C++ o en .Net Framework) que se comunica con el simulador de manera de por ejemplo emular un proceso.
Es muy importante aprender a utilizar estas herramientas, ya que reducen los tiempos de arranque y por tanto reduce costos. El descubrimiento de errores de programación o secciones de código que no están optimizadas aumentan la seguridad e integridad de los elementos a controlar cuando la solución se lleve al entorno real.


S7 PLCSIM

S7ProSim

S7ProSim ofrece un acceso desde una aplicación de PC externa a la interfaz del sistema de destino simulada en S7 PLCSIM, lo que permite escribir programas para realizar tareas tales como cambiar la posición de un interruptor o el valor de una variable de temperatura del sistema de destino simulado. Para establecer la comunicación entre las dos aplicaciones, S7ProSim expone un objeto COM el cual puede ser enlazado a cualquier aplicación escrita para ser compatible con este sistema de enlace entre aplicaciones.

La implementación es bastante sencilla

Primeramente debe incorIncorporar el objeto COM S7ProSim de Siemens al proyecto.

Luego para implementar la comunicación utilice las siguientes interfaces:


La interface para Visual Basic 6.0 sería:

Option Explicit 
Private WithEvents S7ProSim As S7PROSIMLib.S7ProSim
...
Private Sub Form_Load()
Set S7ProSim = New S7PROSIMLIB.S7ProSim
...
End Sub
Private Sub S7ProSim_PauseStateChanged(ByVal NewState As String)
  DoEvents
   ...
End Sub
Private Sub S7ProSim_ScanFinished(ByVal ScanInfo As Variant)
DoEvents
...
End Sub
Private Sub S7ProSim_PLCSimStateChanged(ByVal NewState As String)
DoEvents
...
End Sub
Private Sub S7ProSim_ConnectionError(ByVal ControlEngine As String, ByVal error As Long)
DoEvents
MsgBox "Error de conexión"
End Sub
Private Sub S7ProSim_ScanModeChanged(ByVal NewState As String)
DoEvents
...
End Sub

La interface para Visual Basic .Net sería:

Private WithEvents S7ProSim As New S7PROSIMLib.S7ProSim    
Private Sub S7ProSim_PauseStateChanged(ByVal NewState As String) Handles S7ProSim.PauseStateChanged
   ...
End Sub
Private Sub S7ProSim_ScanFinished(ByVal ScanInfo As Variant) Handles S7ProSim.ScanFinished
...
End Sub
Private Sub S7ProSim_PLCSimStateChanged(ByVal NewState As String) Handles S7ProSim.PLCSimStateChanged
...
End Sub
Private Sub S7ProSim_ConnectionError(ByVal ControlEngine As String, ByVal error As Long) Handles S7ProSim.ConnectionError
MsgBox "Error de conexión"
End Sub
Private Sub S7ProSim_ScanModeChanged(ByVal NewState As String) Handles S7ProSim.ScanModeChanged
...
End Sub

La interface en C#

using S7PROSIMLib; 
...
private S7ProSim ps;
// create the COM Object connection
ps = new S7ProSim();

Para C# y C++ no se requieren controladores de eventos, y realmente a nuestra manera de ver tampoco son necesarios en VB.NET salvo si se habilita el control de eventos de error, el cual esta implementado por el evento S7ProSim.ConnectionError.


Como pueden ver, no se tiene que ser un programador diestro para hacer comunicación con el S7 PLCSIM. La aplicación  Simul BP desarrollada por nosotros, es resultado de la implementación simple de esta interfaz, asi que los animamos a que las lleven a cabo. Mas adelante explicaremos un poco mas este proceso.

Hasta la próxima, y como siempre seguir aprendiendo.


PD.
Algunos de los nombres como SIEMENS, S7 PROSIM, S7 PLCSIM, COM, VB.NET, Visual Basic son marcas registradas de SIEMENS AG y Microsoft respectivamente. Se mencionan solo como referencia.

Grado 
02/11/2016

Muy bueno

Una manera distinta de implementar simulación de procesos.

Escribe tu comentario

Escribe tu opinión

Simulacion con S7 PLCSIM

Simulacion con S7 PLCSIM

En este artículo describimos de manera general como extender el entorno de simulación con el Siemens S7 PROSIM.

Haz una pregunta

No se requiere registro

2 Pregunta(s) respondidas

Si luego de leer nuestro articulo aun tiene dudas, puede hacer su pregunta utilizando el siguiente formulario.

(Opcional)
*(Requerido para ser notificado cuando la respuesta este disponible)
  • Preguntada por: Nathalie Cardona
    el 18/01/2018
    Buenas, estoy diseñando una interfaz en c# que tenga comunicacion con plcsim... tengo un pequeño problema con los comando yo por ejemplo puedo escribir desde mi interfaz en el plcsim, pero de plcsim no puedo escribir lo único que veo es la salida cuando se activa pero las entradas y las marcas no.. que yo las marque en el plcsim para que se activen en mi programa pues esto no sucede. por favor si podria ayudarme se lo agradeceria Respuesta:
    Que tal Nathalie, entiendo que quieres leer el estado de la memoria de entradas y quieres modificar el estado de las marcas o memoria de flags. No es posible hacer eso directamente con la interfaz S7ProSim, hay que hacer algunos truquillos avanzados con C++ accediendo directamente al puntero de memoria de PLC-SIM. S7ProSim fue pensado para que la comunicación con PLC-SIM sea lo más natural posible. Recuerda que en un PLC real el proceso no puede acceder a la memoria de estados de entradas y mucho menos modificar marcas de memoria a menos que entres por el bus, y eso es posible simularlo tambien con el WinCC...ahhh e impensable modificar la memoria de salidas. jajajaja. Otra consa importante, que creo que no es tu pregunta, pero te evitará problemas futuros es que para leer los estados de las entradas y salidas deben estar debidamente cargadas y parametrizadas en la memoria del PLC simulado, ejemplo si no colocas un rack de entradas mapeado para la palabra 8, y quiere modificar la entrada 8.1 no te dara resultado alguno. Al igual con las salidas, es importante que este "parametrizado en memoria del PLC Simulado." Si tienes otra duda, pues por aca estamos.
  • Preguntada por: Nathalie Cardona
    el 21/01/2018
    Entonces por que desde labview si se puede hacer? que escribe y lee? asi marque en el panel que ha diseñado o directamenre de plcsim yo lei el manual y bueno trae estos metodos WriteInputPoint y ReadOutputPoint me dice que con write escribo las entradas perifericas y con read leo las salidas perifericas no puedo utilizar este mismo para poder tambier leer las entradas? cuando sean activadas directamente desde el plcsim? Respuesta:
    Hola Nathalie, como te comentaba en el mensaje anterior. Con WriteInputPoint puedes escribir en la memoria de las entradas, pero tu quieres es leerlas. No se puede leer la memoria de las entradas. Es decir, yo escribo un array de bytes con los estados de entrada que quiero enviar y se los mando al PLC con WriteInputPoint. No puedo usar WriteInputPoint para copiar los estados de la memoria de las entradas del PLC a mi array de bytes. Al igual que la funcion ReadOutputPoint, Solo puedo leer estado de la memoria de salidas, no escribir en ella. Nosotros hicimos una pequeña interfaz que se comunica con PLC-SIM, sencilla y efectiva. Pero como te comente anteriormente, para poder leer y escribir en las memorias deben estar mapeadas en el PLC simulado, sino al leer o escribir no hará nada. De todas formas puedes enviarnos la parte del código en C# o VB.NET donde tienes el problema a intarcesoft@gmail.com o a contacto@intarcesoft.com.ve y con gusto te ayudo con eso. Ahh no te olvides de enviar una impresion de pantalla donde se vea la parametrizacion de las E/S en el Administrador Simatic. Saludos.

Si el enlace de descarga redirige a otro producto que no es el descrito en el artículo o está roto, reportarlo usando nuestro

 FORMULARIO DE REPORTE

MásArtículos