Esta semana vamos a resolver una duda que Alfredo nos ha dejado en el foro del curso de iot e Industria 4.0.
Dice así:
Me gustaría emplear Node-Red para enviar un mensaje de Telegram cuando se genere una alarma en el PLC, una variable con valor 1 envía el mensaje de alarma generada. Consigo que se envíe en mensaje de alarma pero no se como programar el flanco ascendente para que envíe sólo un sólo mensaje cuando se produzca, me envía uno cada vez que hace el ciclo de lectura del PLC y la variable tenga valor 1.
Saludos
Lo primero de todo.. ¡cómo mola Node-Red! y la cantidad de cosas que se pueden hacer con ello.
En el curso efectivamente vemos con se puede usar Telegram para enviar mensajes de alarma (entre un montón de cosas más, claro está).
Esta pregunta me ha dado pie a crear esta entrada en la que vamos a ver cómo podemos muchas veces resolver pequeños problemas en Node-Red.
Desde el modo más sencillo, al modo más pro:
- Buscar un nodo en la paleta que haga lo que yo quiero.
- Crear la unión de varios nodos para obtener el mismo resultado
- Programarlo tú mismo en javascript bajo el nodo función.
Contenido
Buscando el nodo en la paleta.
Este es el método indudablemente más sencillo.
Si existe ¿para qué inventar nada?
En el caso que nos ocupa, es tan sencilla la aplicación que el nodo hace simplemente eso: un flanco ascendente o descendente.
Para ello solo tienes que instalar node-red-contrib-edge-trigger
Lo único que tienes que tener en cuenta en esta solución es no matar moscas a cañonazos. Es decir, no instalar y usar nodos super complejos y pesados para realizar tareas sencillas.
Te puede pasar que el nodo que instales sea apto para tus necesidades pero no esté pensado para lo que tú lo quieres usar, y bueno, funcionar funciona, pero digamos, que no es lo suyo.
Además puede ocupar mucho espacio y/o ser pesado de procesar, por lo que tendrás que valorar si merece la pena el nodo en sí.
En este caso, es una solución perfecta como veremos luego.
Crear la unión de varios nodos.
Habrá otras veces, que no haya un nodo que haga exactamente lo que tú quieres. Pero sí que te puede suceder que bien con los nodos existentes por defecto o bien instalando algún nuevo nodo desde la paleta y combinándolo con los existentes, obtengas el resultado deseado.
No es tan directo como bajarte el nodo y ya está pero sí que tienes un poco el control sobre ello.
En nuestro caso, vamos a ver que con el nodo rbe y el nodo switch, podemos crear un bloque cuyas salidas sean el flanco positivo o negativo. Dos al precio de uno.
Este es un método entre el más fácil y el de picar tú mismo el código.
Muy fácil de mantener, de que todo el mundo sea capaz de seguirlo, aunque no tan flexible como picar el código donde tienes completa flexibilidad ya que al fin y al cabo, siempre dependerás de lo que haga cada nodo por separado.
En nuestro caso, para generar los pulsos, es simplemente perfecto.
Lo vemos funcionar enseguida.
Programar la funcionalidad en JS.
Finalmente tienes el método más potente, más compacto, y más difícil: programarlo todo tú mismo.
Evidentemente habrá casos en los que no queda más remedio que picar el código.
Porque puede parecer que sea la forma más dificil, pero a veces, no lo es.
En muchas ocasiones, y debido a la naturaleza del problema, es más complicado hallar la solución de forma gráfica usando nodos simples, que picar el código usando JS.
Haciendo un paralelismo con los autómatas, no siempre es más sencillo programar X en ladder frente a AWL o a SCL. De hecho, hay muchas veces, que la complejidad en programarlo en ladder es tal, que solo se puede hacer en AWL o SCL sin volverse loco.
Pues esta es un poco la idea: fabricar el código desde cero.
En este caso, esta opción es la que menos me gusta debido a la naturaleza del problema: generar un pulso.
El vídeo
¿Con cual me quedo yo?
Para mi gusto, con la opción 2.
Como se suele decir, en la mesura está la virtud.
Pues eso, que ni lo más complicado, ni bajarte un nodo para ello.
¿Por qué?
No lo programaría en JS porque con nodos simples lo puedo solucionar (solamente concatenando 2).
No bajaría un nodo para hacer esto, porque solo necesito dos nodos estándar, no dependo de un señor que puede que mantenga o no el nodo en la paleta y mañana en una actualización deje de funcionar, y porque en este caso, al solo necesitar 2 nodos concatenados, me fabrico mi nodo de pulsos y quedo como un señor.
¿Qué te ha parecido crear un pulso en Node-Red?
Como ves, es un ejercicio entre práctico y filosófico.
No siempre hay que fustigarse y picar el código para todo, ni que todo te lo tengan que dar hecho.
Hay que valorar los pros y contras y decidir.
Cualquiera de las opciones es buena dependiendo de las circunstancias.
¿Cuál es más de tu agrado?
Finalmente recordarte que si quieres adentrante en el apasionante mundo de los IOT y la Industria 4.0, puedes echar un vistazo al curso donde encontrarás un montón de aplicaciones y de ejemplos de este apasionante mundo.
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.
Deja un comentario