Hoy te voy a demostrar que registrar valores de un PLC se puede hacer en un tiempo record si tienes las herramientas adecuadas.
Contenido
¿Se puede registrar valores de un PLC en 5 minutos?
Bueno, para empezar, dependerá un poco lo que se quiera registrar.
Lógicamente si se quiere hacer una cosa bestialmente grande y complicada, seguramente no.
Pero si tienes las herramientas adecuadas, y estamos hablando de registrar digamos media docena de valores, a tiempo fijo, se puede sin problemas.
¿Empezar desde cero?
No, lógicamente si cada vez que tienes que hacer un registro, tienes que empezar de cero, no lo vas a poder en 5 minutos.
En general, yo lo suelo hacer de esta manera cuando me toca hacerlo.
Pero no es la forma más eficiente de trabajar.
Por eso he desarrollado una forma de realizar el registro que sea sencillo de implementar cada vez que lo necesite.
Lo que quiero que veas es que se puede darle un poco al rosco y hacer tus propios programas que te cuesten un poco (o mucho) el primer día, pero que para el futuro, sea una gran inversión.
Este método que te presento, lo he incluido dentro de la plantilla del curso de Snap7 y VB.Net.
Lógicamente, tu puedes crear tus propias creaciones.
O comprar software de Siemens, u otros fabricantes que te ayuden. Aunque sus licencias cuestan varios miles de euros.
¿Y cómo hacemos para registrar valores de un PLC?
En mi caso, como la plantilla tienen controles que leen/escriben en el PLC, puedo usar esta característica para crear una colección de controles y pasárselo a la función para que los trate.
Es decir, configuro «la lista de la compra» de los controles que quiero registrar y luego solamente hago la llamada.
Tú, tendrás que realizar algo parecido con tus creaciones.
El video.
Ahora, quiero enseñarte a lo que me refiero, porque vas a ver que es realmente sencillo si lo piensas, y creas tu forma de trabajar.
La que te muestro, es la que yo he creado para el curso de Snap 7, pero lógicamente no es la única, ni tiene por qué ser la mejor.
Solamente es una forma de trabajar, que funciona razonablemente bien.
El código.
Te adjunto el código del bloque de escritura que te he presentado.
Por si lo puedes reutilizar para tus creaciones, o adaptar la idea de alguna forma.
#Region "EScribir archivos " ''' <summary> ''' Escritura en un log de valores de controles ''' </summary> ''' <param name="ColeccionControles">Colección que contendrá los controles cuyos valores se quieren registrar</param> ''' <param name="Archivo">Path completo del archivo de registro</param> ''' <param name="Separador">Caracter separador entre valores (por ejemplo ";" o ",")</param> ''' <param name="Hora">True: Registrar la hora, False: No registrar hora</param> ''' <param name="Fecha">True: Registrar la fecha, False: No registrar la fecha</param> Public Sub Escribir_Log(ByVal ColeccionControles As Collection, ByVal Archivo As String, ByVal Separador As String, ByVal Hora As Boolean, Fecha As Boolean) Dim Linea As String = "" Dim Contador As Integer = 0 Dim file As System.IO.StreamWriter If Not IO.File.Exists(Archivo) Then If Fecha Then Linea = "Fecha" Contador = Contador + 1 End If If Hora Then If Contador > 0 Then Linea = Linea & " " & Separador & " " & "Hora" Contador = Contador + 1 Else Linea = "Hora" Contador = Contador + 1 End If End If For i = 1 To ColeccionControles.Count If Contador > 0 Then Linea = Linea & " " & Separador & " " End If Linea = Linea & ColeccionControles(i).Name Contador = Contador + 1 Next Linea = Linea & vbCrLf End If Contador = 0 If Fecha Then Linea = Linea & Now.ToShortDateString Contador = Contador + 1 End If If Hora Then If Contador > 0 Then Linea = Linea & " " & Separador & " " & Now.TimeOfDay.ToString Contador = Contador + 1 Else Linea = Linea & Now.TimeOfDay.ToString Contador = Contador + 1 End If End If For i = 1 To ColeccionControles.Count If Contador > 0 Then Linea = Linea & " " & Separador & " " End If Linea = Linea & ColeccionControles(i).PLC_Valor Contador = Contador + 1 Next Try file = My.Computer.FileSystem.OpenTextFileWriter(Archivo, True) file.WriteLine(Linea) file.Close() Catch ex As Exception End Try End Sub #End Region
¿Qué te ha parecido?
Espero que te haya abierto la mente y dado ideas para tus proyectos.
Como ves, se puede hacer en un tiempo mas que razonable si tienes una herramienta ya creada.
Evidentemente me ha llevado muchas horas desarrollar el motor sobre lo que se asienta todo.
Y a ti también te va a costar hacer algo así, o parecido.
Pero créeme que merece a pena una vez lo tienes hecho.
Ni que decir tiene, que si no quieres complicarte la vida, siempre tienes el curso de Snap7 con VB.Net donde tendrás a tu disposición la plantilla actualizada con el motor de lectura/escritura que he creado apoyándome en Snap7.
Poco a poco voy metiendo nuevos controles, y además junto con un alumno del curso que me está haciendo de beta tester, estamos de forma continua realizando pruebas y mejorando la plantilla para que sea más eficiente y robusta.
Recuerda que puedes apuntarte en Guorker.com donde por una cuota mensual, tendrás tarifa plana en todos los cursos disponibles en la plataforma.
Enseño a programar PLC de Siemens a través de mis cursos.
Más información sobre mi aquí
Puedes seguirme en cualquiera de las siguientes redes sociales.
15 Comentarios
Muy bueno el video Iñigo. Muchas gracias.
Te quería pedir si es posible, un ejemplo de envío de correos (alarmas), con s7-1200 a una cuenta Hotmail, Gmail, etc. La información de Siemens es confusa y no me a funcionado. Te lo agradecerá mucho si nos puedes ayudar con esto.
Con un S7-1200, directamente es complicado porque funciona sobre el puerto 25, y ese puerto no lo usa ningun servicio.
Tienes un ejemplo aquí: https://programacionsiemens.com/enviar-email-tm_mail-tia-portal/
Saludos
Perdona Iñigo pero una duda que no viene al caso ¿de donde sacas esas imágenes o fotos que acompañas a la entrada al blog? Lo digo por son super concisas; describen y resumen fielmente el contenido del la entrada al blog ¿has sido publicista alguna vez? Saludos !!!
Jaja, no no.
Sólo intento buscar en un banco de imágenes que compre el poder usarlo en su día e intento buscar una imagen que pegue más o menos bien.
Que siempre no es fácil.
Pero vamos, quedan más o menos.
Saludos
Buen aporte Iñigo precisamente tengo el objetivo de aprender en VB.Net y pensaba comprarte el curso y aprender porque despue lo voy a poder aplicar en varios sitios.
Pero primero tengo unas modificaciones en un plc de Rockwell y me tendrá un tiempo entretenido a ver si me lo saco de encima y empiezo el curso de VB.Net que no quiero que se me demore. Ya tendrás noticias mias.
Un Saludo ?
Eres un máquina Iñigo! Muy útil cada post qué subes!
Gracias
Por cierto, tienes algún curso/ manual de VB disponible?
Saludos
Hola Antonio,
No, no tengo ninguno.
Pero hay en la red muchos sitios donde sí tienen.
Saludos
Buenas noches Iñigo,
Comienzo dándote las gracias por lo increíblemente fácil que consigues hacer cosas que llevarían horas de desarrollo. Hoy un compi del trabajo que no tenía ni idea VB, pero si que sabe arrastrar y soltar jajaja… se ha puesto a poner controles LED y botones ON/OFF salidas booleanas y le ha quedado una aplicación funcional :).
PD: por el momento he ejecutado aplicaciones realizadas con tu plantilla del curso de snap7 en 7 autómatas S7-1200 y la estabilidad es genial, reconexión en caso de problemas de red, visualiación de gráficas con datos cruzados de varios autómatas, ….. y ahora la posibilidad de hacer LOG…me quito el sombrero, de categoría lo tuyo…
Muchas gracias José Carlos!
Esa es un poco la idea: que gente sin conocimientos previos en VB.NET pueda crear un HMI funcional de una forma sencilla.
La idea es que vaya creciendo con el tiempo y que cada vez vaya mas fino y con más funcionalidades.
Un saludo!
Muy bueno y lo haces facil. Un saludo
Muchas gracias Noel!
Mil gracias.
Es posible descargar una versión temporal STEP-7 para realizar prácticas?. Si no se realizan prácticas se olvidan los instructivos.
Desde la web de Siemens se pueden bajar los trial de 21 días.
Hola estimado muy bueno tu video.. por casualidad sabes como hacer para registrar esos datos del PLC a una base de datos?