
Wichtige Punkte oder worum es in diesem Artikel geht
Das Thema des Artikels ist visuelle Programmierung von SPS ShIoTiny fĂŒr das intelligente Zuhause, wie hier beschrieben: .
Sehr kurz werden Konzepte wie Knoten, Verbindungen, Ereignisse, sowie die Besonderheiten des Ladens und der AusfĂŒhrung des visuellen Programms auf ESP8266, das die Basis der SPS bildet ShIoTiny.
EinfĂŒhrung oder ein paar organisatorische Fragen
In dem vorherigen Artikel ĂŒber meine Entwicklung habe ich einen kurzen Ăberblick ĂŒber die Möglichkeiten des Controllers gegeben. ShIoTiny.
Seltsamerweise zeigte die Ăffentlichkeit ein starkes Interesse und stellte mir viele Fragen. Einige Leute boten sogar sofort an, den Controller von mir zu kaufen. Nein, ich habe nichts dagegen, ein wenig Geld zu verdienen, aber mein Gewissen erlaubt es mir nicht, ein sehr unausgereiftes Produkt zu verkaufen.
Deshalb habe ich die BinÀrdateien des Firmwares und das Schaltbild des GerÀts auf GitHub veröffentlicht: .
Jetzt kann jeder den ESP-07 flashen und selbst mit der Firmware experimentieren. Wenn jemand unbedingt ein Board wie auf dem Foto möchte, habe ich noch einige StĂŒck davon. Schreiben Sie mir eine E-Mail shiotiny@yandex.ru. Aber wie der unvergessliche Ogurcov sagte: «Ich ĂŒbernehme dafĂŒr keine Verantwortung!».
Kommen wir also zum Wesentlichen: Was ist ein âKnoten» (Node) und âEreignisWie funktioniert das Programm?
Ganz einfach â beginnen wir der Reihe nach: mit dem Laden des Programms.
Wie wird das Programm geladen?
Lassen Sie uns damit anfangen, was passiert, wenn wir den Knopf drĂŒcken Hochladen im Editor ElDraw und unser Schema-Programm, das aus schönen KĂ€stchen besteht, ins GerĂ€t ĂŒbertragen wird.
Zuerst wird basierend auf unserem gezeichneten Schema eine textliche Beschreibung erstellt.
Als NĂ€chstes wird ĂŒberprĂŒft, ob alle EingĂ€nge der Knoten mit den AusgĂ€ngen verbunden sind. Es dĂŒrfen keine 'hĂ€ngenden' EingĂ€nge vorhanden sein. Wenn ein solcher Eingang gefunden wird, kann das Schema in ShIoTiny nicht geladen werden, und der Editor zeigt eine entsprechende Warnung an.
Wenn alles erfolgreich war, sendet der Editor die textliche Beschreibung des Schemas einzelnd zu jedem Knoten an ShIoTiny. SelbstverstÀndlich wird das bestehende Schema aus ShIoTiny vorher entfernt. Die erhaltene textliche Beschreibung wird im FLASH-Speicher gespeichert.
Ăbrigens, wenn Sie das Schema aus dem GerĂ€t entfernen möchten, laden Sie einfach ein leeres Schema (das keinen Knoten enthĂ€lt) hoch.
Sobald das gesamte Schema-Programm in den ShIoTiny PLC geladen ist, beginnt es mit der 'AusfĂŒhrung'. Was bedeutet das?
Es ist wichtig zu beachten, dass die Prozesse zum Laden des Schemas aus dem FLASH-Speicher beim Einschalten und beim Empfang des Schemas aus dem Editor identisch sind.
Zuerst erfolgt die Erstellung von Objektknoten auf Basis ihrer Beschreibung.
AnschlieĂend werden die Verbindungen zwischen den Knoten hergestellt. Das bedeutet, dass die AusgĂ€nge mit den EingĂ€ngen und die EingĂ€nge mit den AusgĂ€ngen verknĂŒpft werden.
Und erst nach all dem wird der HauptausfĂŒhrungszyklus des Programms gestartet.
Ich habe lange daran geschrieben, aber der gesamte Prozess â vom Laden des Schemas aus dem FLASH-Speicher bis zum Start des Hauptzyklus â dauert fĂŒr ein Schema mit 60-80 Knoten nur Bruchteile einer Sekunde.
Wie funktioniert der Hauptzyklus? Ganz einfach. Zuerst wartet er auf ein Ereignis, Ereignisse das in einem der Knoten auftritt, und verarbeitet dann dieses Ereignis. Und das geht immer weiter, oder bis ein neues Schema in ShIoTiny geladen wird.
Ich habe schon mehrfach solche Dinge erwĂ€hnt wie Ereignisse, Knoten und Verbindungen. Aber was ist das aus programmechnischer Sicht? DarĂŒber werden wir heute sprechen.
Knoten, Verbindungen und Ereignisse
Ein Blick auf die Beispiele der Programm-Schemata fĂŒr ShIoTiny, zeigt, dass ein Schema nur aus zwei EntitĂ€ten besteht â Knoten (oder Elementen) und den Verbindungen zwischen ihnen.
Knoten, Knoten oder Element des Schemas â ist eine virtuelle Darstellung von etwas Handlungen ĂŒber den Daten. Dies kann eine arithmetische Operation, eine logische Operation oder ĂŒberhaupt eine beliebige Operation sein, die uns in den Sinn kommt. Das Wichtigste ist, dass der Knoten einen Eingang und einen Ausgang hat.
Anmeldung â ist der Ort, an dem der Knoten Daten empfĂ€ngt. Die Darstellungen der EingĂ€nge sind Punkte, die sich immer auf der linken Seite des Knotens befinden.
Ausgang â ist der Ort, von dem das Ergebnis der Arbeit des Knotens entnommen wird. Die Darstellungen der AusgĂ€nge sind Punkte, die sich immer auf der rechten Seite des Knotens befinden.
Einige Knoten haben keine EingÀnge. Solche Knoten generieren Ergebnisse in sich selbst. Beispielsweise ein Konstantenknoten oder ein Sensorknoten: sie benötigen keine Daten von anderen Knoten, um ein Ergebnis zu liefern.
Andere Knoten hingegen haben keine AusgĂ€nge. Dies sind Knoten, die beispielsweise AusgabegerĂ€te (Relais oder Ă€hnliche) darstellen. Sie empfangen Daten, generieren jedoch kein fĂŒr andere Knoten verfĂŒgbares Berechnungsergebnis.
DarĂŒber hinaus gibt es noch einen einzigartigen Kommentarknoten. Er tut nichts und hat weder EingĂ€nge noch AusgĂ€nge. Sein Zweck ist es, eine ErklĂ€rung im Diagramm zu sein.
Was ist "Ereignis»? Ereignis â ist das Entstehen neuer Daten in einem Knoten. Ereignisse können beispielsweise Folgendes umfassen: eine Ănderung des Status eines Eingangs (Knoten Input), den Empfang von Daten von einem anderen GerĂ€t (Knoten MQTT und UDP nachzudenken), das Verstreichen eines bestimmten Zeitintervalls (Knoten Timer und Delay) und so weiter.
Warum sind Ereignisse wichtig? Sie dienen dazu festzustellen, in welchem Knoten neue Daten entstanden sind und welche Knotenstatus aufgrund der erhaltenen neuen Daten geĂ€ndert werden mĂŒssen. Ein Ereignis âwandertâ gewissermaĂen durch die Kette von Knoten, bis es alle Knoten erreicht hat, deren Status ĂŒberprĂŒft und geĂ€ndert werden muss.
Alle Knoten können in zwei Kategorien unterteilt werden.
Knoten, die Ereignisse generieren können, nennen wir âaktive Knoten».
. Knoten, die keine Ereignisse generieren können, nennen wir âpassive Knoten».
. Wenn ein Knoten ein Ereignis generiert (d. h. wenn neue Daten an seinem Ausgang erscheinen), Àndert sich im Allgemeinen der Zustand der gesamten Kette von Knoten, die mit dem Ausgang des Ereignis-generierenden Knotens verbunden sind.
Um es zu verdeutlichen, betrachten wir ein Beispiel in der Abbildung.

Die aktiven Knoten hier sind â Input1, Input2 und Input3. Die anderen Knoten sind inaktiv. Lassen Sie uns betrachten, was passiert, wenn ein bestimmter Eingang geschlossen wird. Die Ergebnisse sind zur besseren Ăbersicht in einer Tabelle zusammengefasst.

Wie wir sehen, wird bei einem Ereignis eine Kette vom Ereignisursprungsknoten bis zum Endknoten erstellt. Der Zustand der Knoten, die nicht in die Kette fallen, bleibt unverÀndert.
Eine berechtigte Frage entsteht: Was passiert, wenn zwei oder sogar mehrere Ereignisse gleichzeitig auftreten?
Als Liebhaber der KreativitĂ€t von Gleb Anfilov möchte ich den neugierigen Fragesteller auf sein Buch "Flucht vor den Ăberraschungen" hinweisen. Es ist wie eine "Theorie der RelativitĂ€t fĂŒr die Kleinsten", die erklĂ€rt, was "gleichzeitig" bedeutet und wie man damit umgeht.
Aber rein praktisch ist alles viel einfacher: Wenn zwei oder mehrere Ereignisse auftreten, werden nacheinander alle Ketten von jedem Ereignisursprung in der Reihenfolge erstellt und verarbeitet, ohne dass es Wunder gibt.
Eine ganz legale Frage eines neugierigen Lesers könnte sein: Was passiert, wenn die Knoten in einem Ring verbunden werden? Oder, wie es unter den Experten heiĂt â eine RĂŒckkopplung einfĂŒhren. Das bedeutet, den Ausgang eines Knoten mit dem Eingang des vorhergehenden Knotens zu verbinden, sodass der Zustand des Ausgangs dieses Knotens auf den Zustand seines eigenen Eingangs Einfluss nimmt. Der Editor lĂ€sst keine direkte Verbindung zwischen dem Ausgang eines Knotens und seinem eigenen Eingang zu. ElDrawIndirekt, wie im folgenden Bild gezeigt, ist das jedoch möglich.
Was passiert also in diesem Fall? Die Antwort ist sehr "eindeutig": es kommt darauf an, welche Knoten verwendet werden. Lassen Sie uns ein Beispiel anhand der Abbildung betrachten.

Wenn die Kontakte des Eingangs Input1 an der oberen Eingangsseite des Knotens A offen sind â 0. Am Ausgang des Knotens A ebenfalls 0. Am Ausgang des Knotens B â 1. Und schlieĂlich am unteren Eingang des Knotens A â 1. Alles klar. Wer es nicht versteht â schauen Sie sich die Beschreibung an, wie die "UND"- und "NICHT"-Knoten arbeiten.
Jetzt schlieĂen wir die EingĂ€nge Input1 zusammen, d.h. wir legen eine Eins am oberen Eingang des Knotens A an. Wer sich mit Elektronik auskennt, weiĂ, dass wir tatsĂ€chlich ein klassisches Schaltungsschema eines Generators auf logischen Bauelementen erhalten. GrundsĂ€tzlich sollte dieses Schema endlos die Ausgaben der Elemente A und B in den Sequenzen 1-0-1-0-1-0⊠und 0-1-0-1-0-1-⊠liefern. SchlieĂlich sollte das Ereignis stĂ€ndig den Zustand der Knoten A und B Ă€ndern, und zwar im Wechsel 2-3-2-3âŠ!
In Wirklichkeit passiert das jedoch nicht. Die Schaltung gerĂ€t in einen zufĂ€lligen Zustand â entweder bleibt das Relais eingeschaltet oder ausgeschaltet, oder es kann auch leicht summen, indem es mehrmals nacheinander ein- und ausgeschaltet wird. Das hĂ€ngt ganz von den Wetterbedingungen am SĂŒdpol des Mars ab. Und genau das erklĂ€rt, warum es so ist.
Das Ereignis am Knoten Input1 Ă€ndert den Zustand von Knoten A, dann von Knoten B, und so weiter im Kreis mehrere Male. Das Programm erkennt das "Zirkeln" des Ereignisses und beendet diesen Zirkus zwangslĂ€ufig. Danach werden die ZustandsĂ€nderungen der Knoten A und B blockiert, bis ein neues Ereignis eintritt. Der Moment, in dem das Programm entscheidet â "Genug mit dem Herumwirbeln!" â hĂ€ngt im Allgemeinen von vielen Faktoren ab und kann als zufĂ€llig angesehen werden.
Seien Sie vorsichtig, wenn Sie Knoten in einem Ring verbinden â die Effekte sind nicht immer offensichtlich! Stellen Sie sicher, dass Sie genau wissen, was Sie tun und warum!
Kann man dennoch einen Generator mit den uns zur VerfĂŒgung stehenden Knoten bauen? Ja, das ist möglich! DafĂŒr benötigen wir jedoch einen Knoten, der selbst in der Lage ist, Ereignisse zu generieren. So einen Knoten gibt es â das ist die âVerzögerungslinieâ. Sehen wir uns an, wie der Generator mit einer Periode von 6 Sekunden im folgenden Bild funktioniert.

Das SchlĂŒsselelement des Generators ist Knoten A â die Verzögerungslinie. Wenn Sie den Eingang der Verzögerungslinie von 0 auf 1 Ă€ndern, wird 1 nicht sofort am Ausgang angezeigt, sondern erst nach einer festgelegten Zeit. In unserem Fall sind das 3 Sekunden. Ebenso erscheint 0 am Ausgang erst nach denselben 3 Sekunden, wenn der Eingang der Verzögerungslinie von 1 auf 0 geĂ€ndert wird. Die Verzögerungszeit wird in Zehntelsekunden angegeben, das bedeutet, der Wert 30 entspricht 3 Sekunden.
Ein besonderes Merkmal der Verzögerungslinie ist, dass sie ein Ereignis nach Ablauf der Verzögerungszeit generiert.
Angenommen, anfangs betrĂ€gt der Ausgang der Verzögerungsleitung 0. Nach dem Durchlaufen des Knotens B â Inverter â wird dieses 0 zu 1 und gelangt an den Eingang der Verzögerungsleitung. ZunĂ€chst passiert nichts. Der Ausgang der Verzögerungsleitung bleibt 0, aber die Zeitmessung der Verzögerung beginnt. Nach 3 Sekunden. Sofort generiert die Verzögerungsleitung ein Ereignis. Am Ausgang erscheint 1. Diese 1 wird nach dem Durchlaufen des Knotens B â Inverter â zu 0 und gelangt an den Eingang der Verzögerungsleitung. Nach weiteren 3 Sekunden... und der Prozess wiederholt sich. Das heiĂt, der Ausgang der Verzögerungsleitung wechselt alle 3 Sekunden von 0 auf 1 und dann von 1 auf 0. Das Relais klickt. Der Generator lĂ€uft. Die Impulsperiode betrĂ€gt 6 Sekunden (3 Sekunden Ausgang Null und 3 Sekunden Eins).
In realen Schaltungen ist jedoch in der Regel nicht einmal dieses Beispiel erforderlich. Es gibt spezielle Timer-Knoten, die hervorragend und ohne fremde Hilfe eine Impulsfolge mit einer festgelegten Periode generieren. Die Dauer von "Null" und "Eins" in diesen Impulsen betrÀgt jeweils die HÀlfte der Periode.
FĂŒr die Festlegung periodischer Aktionen verwenden Sie Timer-Knoten.
Ich möchte anmerken, dass solche digitalen Signale, bei denen die Dauer von '0' und '1' gleich ist, als 'Meander' bezeichnet werden.
Ich hoffe, ich konnte die Frage darĂŒber, wie Ereignisse zwischen Knoten weitergeleitet werden und was man vermeiden sollte, ein wenig klĂ€ren.
Fazit und Links
Der Artikel ist kurz geraten, aber er ist eine Antwort auf die aufgetretenen Fragen zu Knoten und Ereignissen.
Mit der Weiterentwicklung der Firmware und dem Auftauchen neuer Beispiele werde ich darĂŒber schreiben, wie man ShIoTiny kurze Artikel verfasst, solange es fĂŒr die Menschen interessant bleibt.
Wie zuvor gilt: Schema, Firmware, Beispiele, Knotenbeschreibung und alles .
Fragen, WĂŒnsche, Kritik â bitte hierher: shiotiny@yandex.ru
Quelle: habr.com
