ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

Hauptpunkte oder worum es in diesem Artikel geht

Das Thema des Artikels ist die visuelle SPS-Programmierung ShIoTiny für das hier beschriebene Smart Home: ShIoTiny: kleine Automatisierung, Internet der Dinge oder „sechs Monate vor dem Urlaub“.

Sehr kurz Konzepte wie Knoten, Beziehungen, Entwicklungensowie Funktionen zum Laden und Ausführen eines visuellen Programms ESP8266, die die Basis der SPS ist ShIoTiny.

Einführung oder ein paar organisatorische Fragen

Im vorherigen Artikel über meine Entwicklung habe ich einen kurzen Überblick über die Fähigkeiten des Controllers gegeben ShIoTiny.

Seltsamerweise zeigte das Publikum ein ziemlich großes Interesse und stellte mir ziemlich viele Fragen. Einige Freunde boten mir sogar sofort an, einen Controller von mir zu kaufen. Nein, ich habe nichts dagegen, etwas Geld zu verdienen, aber mein Gewissen erlaubt es mir nicht, etwas zu verkaufen, das softwaremäßig noch sehr primitiv ist.

Deshalb habe ich die Firmware-Binärdateien und das Gerätediagramm auf GitHub gepostet: Firmware + kürzeste Anleitung + Diagramm + Beispiele.

Jetzt kann jeder den ESP-07 flashen und selbst mit der Firmware spielen. Wenn jemand wirklich genau das gleiche Board wie auf dem Foto möchte, dann habe ich mehrere davon. Schreiben Sie per E-Mail [E-Mail geschützt] . Aber wie der unvergessliche Ogurtsov zu sagen pflegte: „Ich bin für nichts verantwortlich!“

Kommen wir also zum Punkt: Was ist „gelandet„ (Knoten) und „Ereignis„? Wie wird das Programm ausgeführt?

Beginnen wir wie üblich der Reihe nach: mit dem Herunterladen des Programms.

Wie das Programm geladen wird

Beginnen wir damit, was passiert, wenn wir einen Knopf drücken Hochladen im Editor ElDraw und unser Schaltungsprogramm, bestehend aus schönen Quadraten, fliegt in das Gerät.

Basierend auf dem von uns gezeichneten Diagramm wird zunächst dessen Beschreibung in Textform erstellt.
Zweitens prüft es, ob alle Knoteneingänge mit Ausgängen verbunden sind. Es sollte keine „hängenden“ Eingänge geben. Wenn eine solche Eingabe erkannt wird, wird die Schaltung nicht in ShIoTiny geladen und der Editor zeigt eine entsprechende Warnung an.

Wenn alles gut gelaufen ist, sendet der Redakteur Knoten für Knoten eine Textbeschreibung der Schaltung an ShIoTiny. Natürlich wird zunächst die bestehende Schaltung von ShIoTiny entfernt. Die resultierende Textbeschreibung wird im FLASH-Speicher gespeichert.

Wenn Sie übrigens einen Schaltkreis aus einem Gerät entfernen möchten, laden Sie einfach einen leeren Schaltkreis hinein (der kein einziges Knotenelement enthält).

Sobald das gesamte Schaltprogramm in die ShIoTiny-SPS geladen ist, beginnt es mit der „Ausführung“. Was bedeutet das?

Beachten Sie, dass die Prozesse zum Laden eines Schaltkreises aus dem FLASH-Speicher beim Einschalten und beim Empfangen eines Schaltkreises vom Editor identisch sind.

Zunächst werden Knotenobjekte basierend auf ihrer Beschreibung erstellt.
Dann werden Verbindungen zwischen Knoten hergestellt. Das heißt, es werden Verknüpfungen von Ausgängen zu Eingängen und von Eingängen zu Ausgängen erzeugt.

Und erst danach beginnt der Hauptprogrammausführungszyklus.

Ich habe lange geschrieben, aber der gesamte Vorgang – vom „Laden“ der Schaltung aus dem FLASH-Speicher bis zum Starten des Hauptzyklus – dauert für eine Schaltung mit 60-80 Knoten einen Bruchteil einer Sekunde.

Wie funktioniert die Hauptschleife? Sehr einfach. Zuerst wartet er auf das Auftauchen Entwicklungen an einem Knoten und verarbeitet dann dieses Ereignis. Und so endlos weiter. Nun, oder bis sie ein neues Schema auf ShIoTiny hochladen.

Ich habe schon mehrmals Dinge erwähnt wie Entwicklungen, Knoten и Beziehungen. Aber was ist das aus Software-Sicht? Wir werden heute darüber sprechen.

Knoten, Verbindungen und Ereignisse

Schauen Sie sich einfach die Beispiele für Schaltprogramme an ShIoTinyum zu verstehen, dass das Diagramm nur aus zwei Einheiten besteht – Knoten (oder Elementen) und den Verbindungen zwischen ihnen.

Knoten, aber ja oder Schaltungselement ist eine virtuelle Darstellung einiger Aktionen über die Daten. Dies kann eine arithmetische Operation, eine logische Operation oder jede andere Operation sein, die uns in den Sinn kommt. Die Hauptsache ist, dass der Knoten einen Eingang und einen Ausgang hat.

Eingang - Dies ist der Ort, an dem der Knoten Daten empfängt. Die Eingabebilder sind Punkte, die sich immer auf der linken Seite des Knotens befinden.

Ausgang – Dies ist der Ort, an dem das Ergebnis der Knotenoperation abgerufen wird. Die Ausgabebilder sind Punkte, die sich immer auf der rechten Seite des Knotens befinden.

Einige Knoten haben keine Eingänge. Solche Knoten generieren das Ergebnis intern. Zum Beispiel ein konstanter Knoten oder ein Sensorknoten: Sie benötigen keine Daten von anderen Knoten, um das Ergebnis zu melden.

Andere Knoten hingegen haben keine Ausgänge. Dabei handelt es sich um Knoten, die beispielsweise Aktoren (Relais o.ä.) darstellen. Sie akzeptieren Daten, generieren aber kein Rechenergebnis, das anderen Knoten zur Verfügung steht.

Darüber hinaus gibt es auch einen eindeutigen Kommentarknoten. Es macht nichts, hat keine Ein- oder Ausgänge. Sein Zweck besteht darin, eine Erläuterung des Diagramms zu geben.

Was "Ereignis"? Veranstaltung ist die Entstehung neuer Daten in jedem Knoten. Zu den Ereignissen gehören beispielsweise: Änderung des Eingabestatus (Knoten). zufuhr), Daten von einem anderen Gerät (Knoten) empfangen MQTT и UDP), Ablauf einer bestimmten Zeitspanne (Knoten Timer и Verzögerung) usw.

Wozu dienen Veranstaltungen? Ja, um festzustellen, in welchem ​​Knoten neue Daten entstanden sind und welche Zustände welche Knoten im Zusammenhang mit dem Empfang neuer Daten geändert werden müssen. Das Ereignis „läuft“ sozusagen entlang der Knotenkette, bis es alle Knoten umgeht, deren Zustand überprüft und geändert werden muss.

Alle Knoten können in zwei Kategorien unterteilt werden.
Nennen wir Knoten, die Ereignisse generieren können.aktive Knoten".
Wir werden Knoten nennen, die keine Ereignisse generieren können.passive Knoten".

Wenn ein Knoten ein Ereignis generiert (d. h. an seinem Ausgang erscheinen neue Daten), ändert sich im Allgemeinen der Zustand der gesamten Knotenkette, die mit dem Ausgang des Ereignisgeneratorknotens verbunden ist.

Betrachten Sie zur Verdeutlichung das Beispiel in der Abbildung.

ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

Die aktiven Knoten sind hier Input1, Input2 und Input3. Die übrigen Knoten sind passiv. Betrachten wir, was passiert, wenn der eine oder andere Eingang geschlossen wird. Der Einfachheit halber sind die Ergebnisse in einer Tabelle zusammengefasst.

ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

Wie Sie sehen können, wird beim Eintreten eines Ereignisses eine Kette vom Quellknoten des Ereignisses bis zum Endknoten erstellt. Der Zustand der Knoten, die nicht in die Kette fallen, ändert sich nicht.

Es stellt sich die berechtigte Frage: Was passiert, wenn zwei oder sogar mehrere Ereignisse gleichzeitig auftreten?

Als Liebhaber der Arbeit von Gleb Anfilov bin ich versucht, einen neugierigen Fragesteller auf sein Buch „Escape from Surprise“ zu schicken. Dabei handelt es sich um eine „Relativitätstheorie für die Kleinen“, die gut erklärt, was „gleichzeitig“ bedeutet und wie man damit leben kann.

Aber praktisch ist alles viel einfacher: Wenn zwei oder sogar mehrere Ereignisse auftreten, werden alle Ketten von jeder Ereignisquelle nacheinander aufgebaut und der Reihe nach verarbeitet, und es geschehen keine Wunder.

Die nächste völlig berechtigte Frage eines neugierigen Lesers lautet: Was passiert, wenn die Knoten zu einem Ring verbunden werden? Oder, wie es unter Ihren klugen Köpfen heißt, geben Sie Feedback. Das heißt, verbinden Sie den Ausgang eines der Knoten mit dem Eingang des vorherigen Knotens, sodass der Ausgangszustand dieses Knotens den Zustand seines Eingangs beeinflusst. Der Editor erlaubt es Ihnen nicht, den Ausgang eines Knotens direkt mit seinem Eingang zu verbinden. ElDraw. Aber indirekt, wie in der Abbildung unten, ist dies möglich.

Was wird also in diesem Fall passieren? Die Antwort wird sehr „definitiv“ sein: abhängig von den Knoten. Schauen wir uns das Beispiel in der Abbildung an.

ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

Wenn die Eingangskontakte von Eingang1 geöffnet sind, ist der obere Eingang von Knoten A 0. Der Ausgang von Knoten A ist ebenfalls 0. Der Ausgang von Knoten B ist 1. Und schließlich ist der untere Eingang von Knoten A 1. Alles ist klar. Und für diejenigen, die sich nicht sicher sind, finden Sie unten eine Beschreibung der Funktionsweise der „AND“- und „NOT“-Knoten.

Jetzt schließen wir die Kontakte des Input1-Eingangs, d. h. wir legen einen an den oberen Eingang von Knoten A an. Wer sich mit Elektronik auskennt, weiß, dass wir tatsächlich eine klassische Generatorschaltung mit Logikelementen erhalten. Und theoretisch sollte eine solche Schaltung am Ausgang der Elemente A und B endlos die Sequenz 1-0-1-0-1-0… erzeugen. und 0-1-0-1-0-1-…. Schließlich muss das Ereignis ständig den Zustand der Knoten A und B ändern und im Kreis 2-3-2-3-... laufen!

Aber in Wirklichkeit passiert das nicht. Der Stromkreis fällt in einen zufälligen Zustand – oder das Relais bleibt ein- oder ausgeschaltet, oder es summt mehrmals hintereinander leicht ein und aus. Es hängt alles vom Wetter am Südpol des Mars ab. Und deshalb passiert das.

Ein Ereignis vom Knoten Input1 ändert den Zustand von Knoten A, dann Knoten B usw. im Kreis mehrmals. Das Programm erkennt die „Schleife“ der Veranstaltung und stoppt diesen Karneval zwangsweise. Danach werden Zustandsänderungen der Knoten A und B blockiert, bis ein neues Ereignis eintritt. Der Moment, in dem das Programm entscheidet: „Hör auf, dich im Kreis zu drehen!“ - Im Allgemeinen hängt es von vielen Faktoren ab und kann als zufällig angesehen werden.

Seien Sie vorsichtig, wenn Sie Knoten zu einem Ring verbinden – die Auswirkungen sind nicht immer offensichtlich! Machen Sie sich eine gute Vorstellung davon, was und warum Sie tun!

Ist es noch möglich, auf den uns zur Verfügung stehenden Knotenpunkten einen Generator aufzubauen? Ja, du kannst! Dafür ist jedoch ein Knoten erforderlich, der selbst Ereignisse generieren kann. Und es gibt einen solchen Knoten – das ist die „Verzögerungsleitung“. Sehen wir uns in der folgenden Abbildung an, wie ein Generator mit einer Periode von 6 Sekunden funktioniert.

ShIoTiny: Knoten, Verbindungen und Ereignisse bzw. Funktionen von Zeichenprogrammen

Das Schlüsselelement des Generators ist Knoten A – die Verzögerungsleitung. Ändert man den Eingangszustand der Verzögerungsleitung von 0 auf 1, dann erscheint am Ausgang nicht sofort 1, sondern erst nach einer festgelegten Zeit. In unserem Fall sind es 3 Sekunden. Wenn Sie den Eingangszustand der Verzögerungsleitung von 1 auf 0 ändern, erscheint auf die gleiche Weise nach denselben 0 Sekunden 3 am Ausgang. Die Verzögerungszeit wird in Zehntelsekunden eingestellt. Das heißt, der Wert 30 bedeutet 3 Sekunden.

Eine Besonderheit der Verzögerungsleitung besteht darin, dass sie nach Ablauf der Verzögerungszeit ein Ereignis generiert.

Nehmen wir an, dass der Ausgang der Verzögerungsleitung ursprünglich 0 war. Nach dem Passieren von Knoten B – dem Inverter – wird diese 0 zu 1 und gelangt zum Eingang der Verzögerungsleitung. Nichts passiert sofort. Am Ausgang der Verzögerungsleitung bleibt es 0, aber der Countdown der Verzögerungszeit beginnt. 3 Sekunden vergehen. Und dann generiert die Verzögerungsleitung ein Ereignis. An seinem Ausgang erscheint 1. Diese Einheit geht nach dem Durchgang durch Knoten B – den Wechselrichter – in 0 über und gelangt zum Eingang der Verzögerungsleitung. Es vergehen weitere 3 Sekunden... und der Vorgang wiederholt sich. Das heißt, alle 3 Sekunden ändert sich der Zustand des Verzögerungsleitungsausgangs von 0 auf 1 und dann von 1 auf 0. Das Relais klickt. Der Generator funktioniert. Die Impulsdauer beträgt 6 Sekunden (3 Sekunden am Ausgang Null und 3 Sekunden am Ausgang Eins).

In realen Schaltkreisen besteht jedoch normalerweise keine Notwendigkeit, dieses Beispiel zu verwenden. Es gibt spezielle Timer-Knoten, die perfekt und ohne fremde Hilfe eine Impulsfolge mit einer vorgegebenen Periode erzeugen. Die Dauer von „Null“ und „Eins“ in diesen Impulsen entspricht der halben Periode.

Um periodische Aktionen festzulegen, verwenden Sie Timer-Knoten.

Ich stelle fest, dass solche digitalen Signale, bei denen die Dauer von „Null“ und „Eins“ gleich ist, „Mäander“ genannt werden.

Ich hoffe, ich habe die Frage ein wenig geklärt, wie Ereignisse zwischen Knoten weitergegeben werden und was man nicht tun sollte.

Fazit und Referenzen

Der Artikel ist kurz ausgefallen, aber dieser Artikel ist eine Antwort auf Fragen, die zu Knoten und Ereignissen aufgetreten sind.

Während sich die Firmware weiterentwickelt und neue Beispiele erscheinen, werde ich über die Programmierung schreiben ShIoTiny kleine Artikel, solange sie für die Leute interessant sind.

Wie zuvor, Diagramm, Firmware, Beispiele, Beschreibung der Komponenten und alles der Rest ist hier.

Fragen, Anregungen, Kritik – hier geht’s: [E-Mail geschützt]

Source: habr.com

Kommentar hinzufügen