ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

Points principaux ou de quoi parle cet article

Le sujet de l'article est la programmation visuelle des automates ShioTiny pour la maison intelligente décrite ici : ShIoTiny : petite automatisation, Internet des objets ou « six mois avant les vacances ».

Très brièvement des notions telles que noeuds, liens, développements, ainsi que des fonctionnalités de chargement et d'exécution d'un programme visuel sur ESP8266, qui est la base de l'automate ShioTiny.

Introduction ou quelques questions d'organisation

Dans l'article précédent sur mon développement, j'ai donné un bref aperçu des capacités du contrôleur ShioTiny.

Bizarrement, le public s’est montré assez intéressé et m’a posé pas mal de questions. Certains amis m'ont même immédiatement proposé de m'acheter une manette. Non, je ne suis pas contre le fait de gagner un peu d’argent, mais ma conscience ne me permet pas de vendre quelque chose qui est encore très rudimentaire en termes de logiciel.

Par conséquent, j'ai publié les binaires du micrologiciel et le schéma du périphérique sur GitHub : firmware + instructions les plus courtes + schéma + exemples.

Désormais, tout le monde peut flasher l'ESP-07 et jouer lui-même avec le firmware. Si quelqu'un veut vraiment exactement la même planche que sur la photo, alors j'en ai plusieurs. Écrire par email [email protected]. Mais comme le disait l’inoubliable Ogurtsov : « Je ne suis responsable de rien ! »

Alors, entrons dans le vif du sujet : qu'est-ce que "noeud" (nœud) et "événement" ? Comment le programme est-il exécuté ?

Comme d'habitude, commençons dans l'ordre : par télécharger le programme.

Comment le programme est chargé

Commençons par ce qui se passe lorsque nous appuyons sur un bouton Téléchargement dans l'éditeur ElDraw et notre programme de circuit, composé de beaux carrés, s'envole dans l'appareil.

Tout d'abord, à partir du schéma que nous avons dessiné, sa description sous forme textuelle est construite.
Deuxièmement, il vérifie si toutes les entrées des nœuds sont connectées aux sorties. Il ne devrait y avoir aucune entrée « suspendue ». Si une telle entrée est détectée, le circuit ne sera pas chargé dans ShIoTiny et l'éditeur affichera un avertissement correspondant.

Si tout s'est bien passé, l'éditeur envoie une description textuelle du circuit un nœud à la fois à ShIoTiny. Bien entendu, le circuit existant de ShIoTiny est d'abord supprimé. La description textuelle résultante est stockée dans la mémoire FLASH.

À propos, si vous souhaitez supprimer un circuit d'un appareil, chargez-y simplement un circuit vide (ne contenant aucun élément de nœud).

Une fois que l'intégralité du programme de commande est chargée dans l'automate ShIoTiny, il commence à « s'exécuter ». Qu'est-ce que ça veut dire?

A noter que les processus de chargement d'un circuit depuis la mémoire FLASH à la mise sous tension et lors de la réception d'un circuit de l'éditeur sont identiques.

Tout d’abord, les objets nœuds sont créés en fonction de leur description.
Ensuite, des connexions sont établies entre les nœuds. Autrement dit, des liens entre les sorties et les entrées et les entrées vers les sorties sont générés.

Et seulement après tout cela, le cycle principal d'exécution du programme commence.

J'ai écrit pendant longtemps, mais l'ensemble du processus - du "chargement" du circuit depuis la mémoire FLASH au démarrage du cycle principal - prend une fraction de seconde pour un circuit de 60 à 80 nœuds.

Comment fonctionne la boucle principale ? Très simple. Il attend d'abord l'émergence développements à un nœud, traite ensuite cet événement. Et ainsi de suite sans fin. Eh bien, ou jusqu'à ce qu'ils téléchargent un nouveau schéma sur ShIoTiny.

Plusieurs fois déjà, j'ai mentionné des choses comme développements, noeuds и liens. Mais qu’est-ce que c’est d’un point de vue logiciel ? Nous en parlerons aujourd'hui.

Nœuds, connexions et événements

Il suffit de regarder les exemples de programmes de commande pour ShioTinycomprendre que le diagramme se compose de seulement deux entités - les nœuds (ou éléments) et les connexions entre eux.

Узел, mais oui ou élément de circuit est une représentation virtuelle de certains actes sur les données. Cela peut être une opération arithmétique, une opération logique ou toute opération qui nous vient à l’esprit. L'essentiel est que le nœud ait une entrée et une sortie.

entrée - c'est l'endroit où le nœud reçoit les données. Les images d'entrée sont des points qui se trouvent toujours sur le côté gauche du nœud.

Sortie - c'est l'endroit où est récupéré le résultat de l'opération du nœud. Les images de sortie sont des points toujours situés sur le côté droit du nœud.

Certains nœuds n'ont pas d'entrées. Ces nœuds génèrent le résultat en interne. Par exemple, un nœud constant ou un nœud capteur : ils n'ont pas besoin des données d'autres nœuds pour rapporter le résultat.

Au contraire, les autres nœuds n’ont aucune sortie. Ce sont des nœuds qui affichent, par exemple, des actionneurs (relais ou quelque chose de similaire). Ils acceptent les données mais ne génèrent pas de résultat de calcul disponible pour les autres nœuds.

De plus, il existe également un nœud de commentaire unique. Il ne fait rien, n'a ni entrées ni sorties. Son but est d'être une explication sur le schéma.

Ce qui s'est passé "événement"? Événement est l'émergence de nouvelles données dans n'importe quel nœud. Par exemple, les événements incluent : un changement d'état d'entrée (nœud Entrée), recevoir des données d'un autre appareil (nœuds MQTT и UDP), expiration d'une période de temps spécifiée (nœuds Minuteur и Retard) et ainsi de suite.

A quoi servent les événements ? Oui, afin de déterminer dans quel nœud de nouvelles données sont apparues et les états de quels nœuds doivent être modifiés en relation avec la réception de nouvelles données. L'événement, pour ainsi dire, « passe » le long de la chaîne de nœuds jusqu'à ce qu'il contourne tous les nœuds dont l'état doit être vérifié et modifié.

Tous les nœuds peuvent être divisés en deux catégories.
Appelons les nœuds pouvant générer des événements "nœuds actifs».
Nous appellerons les nœuds qui ne peuvent pas générer d’événements «nœuds passifs».

Lorsqu'un nœud génère un événement (c'est-à-dire que de nouvelles données apparaissent à sa sortie), alors dans le cas général, l'état de toute la chaîne de nœuds connectés à la sortie du nœud générateur d'événements change.

Pour que ce soit clair, considérons l’exemple de la figure.

ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

Les nœuds actifs ici sont Entrée1, Entrée2 et Entrée3. Les nœuds restants sont passifs. Considérons ce qui se passe lorsque l'une ou l'autre entrée est fermée. Pour plus de commodité, les résultats sont résumés dans un tableau.

ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

Comme vous pouvez le constater, lorsqu'un événement se produit, une chaîne est construite depuis le nœud source de l'événement jusqu'au nœud final. L'état des nœuds qui n'entrent pas dans la chaîne ne change pas.

Une question légitime se pose : que se passera-t-il si deux, voire plusieurs événements se produisent simultanément ?

En tant qu'amateur de l'œuvre de Gleb Anfilov, je suis tenté d'envoyer un curieux questionneur à son livre « Escape from Surprise ». Il s’agit d’une « théorie de la relativité pour les plus petits », qui explique bien ce que signifie « simultané » et comment vivre avec.

Mais pratiquement tout est beaucoup plus simple : lorsque deux, voire plusieurs événements se produisent, toutes les chaînes de chaque source d'événements sont construites et traitées séquentiellement, et aucun miracle ne se produit.

La prochaine question tout à fait légitime d’un lecteur curieux est la suivante : que se passera-t-il si les nœuds sont connectés en anneau ? Ou, comme on dit parmi vos gars intelligents, introduisez des commentaires. Autrement dit, connectez la sortie de l'un des nœuds à l'entrée du nœud précédent afin que l'état de sortie de ce nœud affecte l'état de son entrée. L'éditeur ne vous permettra pas de connecter directement la sortie d'un nœud à son entrée. ElDraw. Mais indirectement, comme dans la figure ci-dessous, cela peut être fait.

Alors que va-t-il se passer dans ce cas ? La réponse sera très « définitive » : en fonction de quels nœuds. Regardons l'exemple de la figure.

ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

Lorsque les contacts d'entrée de Input1 sont ouverts, l'entrée supérieure du nœud A est 0. La sortie du nœud A est également 0. La sortie du nœud B est 1. Et, enfin, l'entrée inférieure du nœud A est 1. Tout est clair. Et pour ceux qui ne sont pas clairs, regardez ci-dessous une description du fonctionnement des nœuds « ET » et « NON ».

Nous fermons maintenant les contacts de l'entrée Input1, c'est-à-dire que nous en appliquons un à l'entrée supérieure du nœud A. Ceux qui connaissent l'électronique savent qu'en fait nous obtiendrons un circuit générateur classique utilisant des éléments logiques. Et en théorie, un tel circuit devrait produire sans fin la séquence 1-0-1-0-1-0… à la sortie des éléments A et B. et 0-1-0-1-0-1-…. Après tout, l'événement doit constamment changer l'état des nœuds A et B, fonctionnant en cercle 2-3-2-3-... !

Mais en réalité, cela n’arrive pas. Le circuit tombera dans un état aléatoire - ou le relais restera allumé ou éteint, ou peut-être légèrement bourdonné et éteint plusieurs fois de suite. Tout dépend de la météo au pôle sud de Mars. Et c'est pourquoi cela arrive.

Un événement du nœud Input1 change l'état du nœud A, puis du nœud B, et ainsi de suite en cercle plusieurs fois. Le programme détecte la « boucle » de l’événement et arrête de force ce carnaval. Après cela, les changements d’état des nœuds A et B sont bloqués jusqu’à ce qu’un nouvel événement se produise. Le moment où le programme décide « d’arrêter de tourner en rond ! » - en général, cela dépend de nombreux facteurs et peut être considéré comme aléatoire.

Soyez prudent lorsque vous faites des nœuds dans un anneau : les effets ne seront pas toujours évidents ! Ayez une bonne idée de ce que vous faites et pourquoi !

Est-il encore possible de construire un générateur sur les nœuds dont nous disposons ? Oui, vous pouvez! Mais cela nécessite un nœud capable de générer lui-même des événements. Et il existe un tel nœud - c'est la "ligne à retard". Voyons comment fonctionne un générateur avec une période de 6 secondes dans la figure ci-dessous.

ShIoTiny : nœuds, liens et événements ou fonctionnalités des programmes de dessin

L'élément clé du générateur est le nœud A - la ligne à retard. Si vous modifiez l'état d'entrée de la ligne à retard de 0 à 1, alors 1 n'apparaîtra pas immédiatement à la sortie, mais seulement après un temps spécifié. Dans notre cas, c'est 3 secondes. De la même manière, si vous changez l'état d'entrée de la ligne à retard de 1 à 0, alors 0 en sortie apparaîtra après les mêmes 3 secondes. Le temps de retard est réglé en dixièmes de seconde. Autrement dit, la valeur 30 signifie 3 secondes.

Une particularité de la ligne à retard est qu'elle génère un événement après l'expiration du délai.

Supposons qu'initialement la sortie de la ligne à retard était 0. Après avoir passé le nœud B - l'inverseur - ce 0 se transforme en 1 et va à l'entrée de la ligne à retard. Rien ne se passe tout de suite. A la sortie de la ligne à retard, il restera 0, mais le compte à rebours du temps de retard démarrera. 3 secondes passent. Et puis la ligne à retard génère un événement. A sa sortie apparaît 1. Cette unité, après avoir traversé le nœud B - l'inverseur - se transforme en 0 et va à l'entrée de la ligne à retard. 3 secondes supplémentaires s'écoulent... et le processus se répète. C'est-à-dire que toutes les 3 secondes, l'état de la sortie de la ligne à retard passe de 0 à 1 puis de 1 à 0. Le relais clique. Le générateur fonctionne. La période d'impulsion est de 6 secondes (3 secondes au zéro de sortie et 3 secondes à la sortie un).

Mais dans les circuits réels, il n’est généralement pas nécessaire d’utiliser cet exemple. Il existe des nœuds de minuterie spéciaux qui génèrent parfaitement et sans aide extérieure une séquence d'impulsions avec une période donnée. La durée du « zéro » et du « un » dans ces impulsions est égale à la moitié de la période.

Pour définir des actions périodiques, utilisez des nœuds de minuterie.

Je note que de tels signaux numériques, où les durées de « zéro » et de « un » sont égales, sont appelés « méandres ».

J'espère avoir un peu clarifié la question de savoir comment les événements se propagent entre les nœuds et que ne pas faire ?

Conclusion et références

L'article s'est avéré court, mais cet article est une réponse aux questions qui se sont posées concernant les nœuds et les événements.

Au fur et à mesure que le firmware se développe et que de nouveaux exemples apparaissent, j'écrirai sur la façon de programmer ShioTiny des petits articles tant qu'ils intéresseront les gens.

Comme avant, schéma, firmware, exemples, description des composants et tout le reste est ici.

Questions, suggestions, critiques - allez ici : [email protected]

Source: habr.com

Ajouter un commentaire