ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

Puntos principales o de qué trata este artículo

El tema del artículo es la programación visual de PLC. ShIoTiny para la casa inteligente que se describe aquí: ShIoTiny: pequeña automatización, Internet de las cosas o “seis meses antes de las vacaciones”.

Muy corto conceptos tales como nodos, conexión, desarrollos, así como funciones para cargar y ejecutar un programa visual en ESP8266, que es la base del PLC ShIoTiny.

Introducción o un par de cuestiones organizativas.

En el artículo anterior sobre mi desarrollo, di una breve descripción de las capacidades del controlador. ShIoTiny.

Curiosamente, el público mostró un gran interés y me hizo muchas preguntas. Algunos amigos incluso se ofrecieron inmediatamente a comprarme un controlador. No, no estoy en contra de ganar un poco de dinero, pero mi conciencia no me permite vender algo que todavía es muy tosco en términos de software.

Por lo tanto, publiqué los binarios del firmware y el diagrama del dispositivo en GitHub: firmware + instrucciones más breves + diagrama + ejemplos.

Ahora todos pueden actualizar el ESP-07 y jugar con el firmware ellos mismos. Si alguien realmente quiere exactamente el mismo tablero que en la foto, tengo varios. Escribir por correo electrónico [email protected]. Pero, como decía el inolvidable Ogurtsov: “¡No soy responsable de nada!”

Entonces, vayamos al grano: ¿qué es "aterrizado" (nodo) y "evento"? ¿Cómo se ejecuta el programa?

Como siempre, comencemos en orden: descargando el programa.

Cómo se carga el programa

Comencemos con lo que sucede cuando presionamos un botón. Subir en el editor ElDraw y nuestro programa de circuito, que consta de hermosos cuadrados, vuela hacia el dispositivo.

En primer lugar, a partir del diagrama que hemos dibujado se construye su descripción en forma de texto.
En segundo lugar, comprueba si todas las entradas del nodo están conectadas a las salidas. No debe haber entradas "colgantes". Si se detecta dicha entrada, el circuito no se cargará en ShIoTiny y el editor mostrará la advertencia correspondiente.

Si todo salió bien, el editor envía una descripción de texto del circuito, un nodo a la vez, a ShIoTiny. Por supuesto, primero se elimina el circuito existente de ShIoTiny. La descripción del texto resultante se almacena en la memoria FLASH.

Por cierto, si desea eliminar un circuito de un dispositivo, simplemente cargue en él un circuito vacío (que no contenga un solo elemento de nodo).

Una vez que todo el programa del circuito está cargado en el PLC ShIoTiny, comienza a "ejecutarse". ¿Qué significa?

Tenga en cuenta que los procesos para cargar un circuito desde la memoria FLASH cuando se enciende la alimentación y cuando se recibe un circuito del editor son idénticos.

Primero, los objetos de nodo se crean en función de su descripción.
Luego se realizan conexiones entre nodos. Es decir, se generan vínculos de productos con insumos y de insumos con productos.

Y sólo después de todo esto comienza el ciclo de ejecución del programa principal.

Escribí durante mucho tiempo, pero todo el proceso, desde "cargar" el circuito desde la memoria FLASH hasta iniciar el ciclo principal, toma una fracción de segundo para un circuito de 60 a 80 nodos.

¿Cómo funciona el bucle principal? Muy simple. Primero espera la aparición. desarrollos en algún nodo, luego procesa ese evento. Y así hasta el infinito. Bueno, o hasta que suban un nuevo esquema a ShIoTiny.

Varias veces ya he mencionado cosas como desarrollos, nodos и conexión. Pero ¿qué es esto desde el punto de vista del software? Hablaremos de esto hoy.

Nodos, conexiones y eventos.

Basta con mirar los ejemplos de programas de circuitos para ShIoTinycomprender que el diagrama consta de sólo dos entidades: nodos (o elementos) y las conexiones entre ellos.

Nodo, pero si o elemento del circuito es una representación virtual de algunos acciones sobre los datos. Esta puede ser una operación aritmética, una operación lógica o cualquier operación que se nos ocurra. Lo principal es que el nodo tiene una entrada y una salida.

entrada - este es el lugar donde el nodo recibe datos. Las imágenes de entrada son puntos que siempre están en el lado izquierdo del nodo.

Salida - este es el lugar donde se recupera el resultado de la operación del nodo. Las imágenes de salida son puntos que siempre se ubican en el lado derecho del nodo.

Algunos nodos no tienen entradas. Estos nodos generan el resultado internamente. Por ejemplo, un nodo constante o un nodo sensor: no necesitan datos de otros nodos para informar el resultado.

Otros nodos, por el contrario, no tienen salidas. Se trata de nodos que muestran, por ejemplo, actuadores (relés o algo similar). Aceptan datos pero no generan un resultado computacional que esté disponible para otros nodos.

Además, también hay un nodo de comentarios único. No hace nada, no tiene entradas ni salidas. Su propósito es ser una explicación en el diagrama.

Qué "evento"? Evento es la aparición de nuevos datos en cualquier nodo. Por ejemplo, los eventos incluyen: cambio en el estado de entrada (nodo Entrada), recibiendo datos de otro dispositivo (nodos MQTT и UDP), vencimiento de un período de tiempo específico (nodos Minutero и Retrasar) y así sucesivamente.

¿Para qué sirven los eventos? Sí, para determinar en qué nodo han surgido nuevos datos y qué estados de qué nodos deben cambiarse en relación con la recepción de nuevos datos. El evento, por así decirlo, "pasa" a lo largo de la cadena de nodos hasta que pasa por alto todos los nodos cuyo estado debe ser verificado y modificado.

Todos los nodos se pueden dividir en dos categorías.
Llamemos a los nodos que pueden generar eventos "nodos activos".
Llamaremos a los nodos que no puedan generar eventos”nodos pasivos".

Cuando un nodo genera un evento (es decir, aparecen nuevos datos en su salida), entonces, en el caso general, cambia el estado de toda la cadena de nodos conectados a la salida del nodo generador de eventos.

Para que quede claro, considere el ejemplo de la figura.

ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

Los nodos activos aquí son Entrada1, Entrada2 y Entrada3. Los nodos restantes son pasivos. Consideremos lo que sucede cuando se cierra una u otra entrada. Por conveniencia, los resultados se resumen en una tabla.

ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

Como puede ver, cuando ocurre un evento, se construye una cadena desde el nodo de origen del evento hasta el nodo final. El estado de aquellos nodos que no entran en la cadena no cambia.

Surge una pregunta legítima: ¿qué pasará si dos o incluso varios eventos ocurren simultáneamente?

Como amante de la obra de Gleb Anfilov, me siento tentado a enviar una pregunta curiosa a su libro "Escape from Surprise". Se trata de una “teoría de la relatividad para los más pequeños”, que explica bien qué significa “simultáneo” y cómo vivir con ello.

Pero prácticamente todo es mucho más sencillo: cuando ocurren dos o incluso varios eventos, todas las cadenas de cada fuente de eventos se construyen y procesan secuencialmente por turno, y no ocurre ningún milagro.

La siguiente pregunta completamente legítima de un lector curioso es ¿qué pasará si los nodos se conectan en un anillo? O, como dicen entre estos chicos inteligentes tuyos, introduce comentarios. Es decir, conectar la salida de uno de los nodos a la entrada del nodo anterior para que el estado de salida de este nodo afecte al estado de su entrada. El editor no le permitirá conectar directamente la salida de un nodo a su entrada. ElDraw. Pero indirectamente, como en la figura siguiente, esto se puede hacer.

Entonces, ¿qué pasará en este caso? La respuesta será muy “contundente”: según qué nodos. Veamos el ejemplo de la figura.

ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

Cuando los contactos de entrada de Entrada1 están abiertos, la entrada superior del nodo A es 0. La salida del nodo A también es 0. La salida del nodo B es 1. Y, finalmente, la entrada inferior del nodo A es 1. Todo es claro. Y para aquellos que no lo tienen claro, busque a continuación una descripción de cómo funcionan los nodos “Y” y “NO”.

Ahora cerramos los contactos de la entrada Input1, es decir aplicamos uno en la entrada superior del nodo A. Quienes están familiarizados con la electrónica saben que, de hecho, obtendremos un circuito generador clásico utilizando elementos lógicos. Y en teoría, un circuito así debería producir infinitamente la secuencia 1-0-1-0-1-0… en la salida de los elementos A y B. y 0-1-0-1-0-1-…. Después de todo, el evento debe cambiar constantemente el estado de los nodos A y B, corriendo en un círculo 2-3-2-3-...!

Pero en realidad esto no sucede. El circuito caerá en un estado aleatorio, o el relé permanecerá encendido o apagado, o tal vez suene y se apague levemente varias veces seguidas. Todo depende del clima en el polo sur de Marte. Y es por eso que esto sucede.

Un evento del nodo Entrada1 cambia el estado del nodo A, luego del nodo B, y así sucesivamente en un círculo varias veces. El programa detecta el “bucle” del evento y detiene por la fuerza este carnaval. Después de esto, los cambios en el estado de los nodos A y B se bloquean hasta que ocurra un nuevo evento. El momento en el que el programa decide “¡deja de dar vueltas!” - En general, depende de muchos factores y puede considerarse aleatorio.

Tenga cuidado al conectar nudos en un anillo: ¡los efectos no siempre serán obvios! ¡Ten una buena idea de qué y por qué estás haciendo!

¿Todavía es posible construir un generador en los nodos que tenemos a nuestra disposición? ¡Sí tu puedes! Pero esto requiere un nodo que pueda generar eventos por sí mismo. Y existe tal nodo: esta es la "línea de retardo". Veamos cómo funciona un generador con un período de 6 segundos en la siguiente figura.

ShIoTiny: nodos, enlaces y eventos o características de programas de dibujo

El elemento clave del generador es el nodo A: la línea de retardo. Si cambia el estado de entrada de la línea de retardo de 0 a 1, entonces 1 no aparecerá en la salida inmediatamente, sino solo después de un tiempo específico. En nuestro caso son 3 segundos. De la misma manera, si cambia el estado de entrada de la línea de retardo de 1 a 0, aparecerá 0 en la salida después de los mismos 3 segundos. El tiempo de retardo se establece en décimas de segundo. Es decir, el valor 30 significa 3 segundos.

Una característica especial de la línea de retraso es que genera un evento una vez transcurrido el tiempo de retraso.

Supongamos que inicialmente la salida de la línea de retardo era 0. Después de pasar por el nodo B, el inversor, este 0 se convierte en 1 y va a la entrada de la línea de retardo. No pasa nada de inmediato. En la salida de la línea de retardo, permanecerá 0, pero comenzará la cuenta regresiva del tiempo de retardo. Pasan 3 segundos. Y luego la línea de retraso genera un evento. En su salida aparece 1. Esta unidad, después de pasar por el nodo B, el inversor, se convierte en 0 y va a la entrada de la línea de retardo. Pasan otros 3 segundos... y el proceso se repite. Es decir, cada 3 segundos el estado de la salida de la línea de retardo cambia de 0 a 1 y luego de 1 a 0. El relé hace clic. El generador está funcionando. El período de pulso es de 6 segundos (3 segundos en la salida cero y 3 segundos en la salida uno).

Pero, en circuitos reales, normalmente no es necesario utilizar este ejemplo. Existen unidades de temporizador especiales que, perfectamente y sin ayuda externa, generan una secuencia de impulsos con un período determinado. La duración de “cero” y “uno” en estos pulsos es igual a la mitad del período.

Para configurar acciones periódicas, utilice nodos de temporizador.

Observo que estas señales digitales, en las que la duración de "cero" y "uno" son iguales, se denominan "meandro".

Espero haber aclarado un poco la pregunta sobre cómo se propagan los eventos entre nodos y qué no hacer.

Conclusión y referencias

El artículo resultó ser breve, pero este artículo es una respuesta a las preguntas que han surgido sobre nodos y eventos.

A medida que se desarrolle el firmware y aparezcan nuevos ejemplos, escribiré sobre cómo programar. ShIoTiny Artículos pequeños siempre que sean interesantes para la gente.

Como antes, diagrama, firmware, ejemplos, descripción de componentes y todo. el resto esta aqui.

Preguntas, sugerencias, críticas - vaya aquí: [email protected]

Fuente: habr.com

Añadir un comentario