
Wesentliche Thesen oder worum es in diesem Artikel geht
Das Thema des Artikels ist visuelle Programmierung von SPS ShIoTiny fĂŒr das intelligente Zuhause, das hier beschrieben wird: .
Sehr kurz wurden solche Begriffe wie Knoten, Verbindungen, Ereignisse, sowie die Besonderheiten des Ladens und AusfĂŒhrens eines visuellen Programms auf ESP8266, das die Grundlage der SPS bildet ShIoTiny.
EinfĂŒhrung oder einige organisatorische Fragen
In dem vorhergehenden Artikel zu meiner Entwicklung habe ich einen kurzen Ăberblick ĂŒber die Möglichkeiten des Controllers gegeben ShIoTiny.
Es ist merkwĂŒrdig, dass die Ăffentlichkeit ein ziemlich starkes Interesse gezeigt hat und mir viele Fragen gestellt hat. Einige Leute haben sogar sofort angeboten, den Controller von mir zu kaufen. Nein, ich bin nicht gegen ein wenig Verdienst, aber mein Gewissen erlaubt es mir nicht, eine noch sehr unausgereifte Software zu verkaufen.
Deshalb habe ich die BinÀrdateien des Firmware und das GerÀtediagramm auf GitHub hochgeladen: .
Jetzt kann jeder das ESP-07 flashen und selbst mit der Firmware experimentieren. Wenn jemand genau solch ein Board wie auf dem Foto möchte, habe ich ein paar davon. Schreiben Sie mir eine E-Mail shiotiny@yandex.ru. Aber, wie der unvergessliche Ogurtsov sagte: âIch ĂŒbernehme dafĂŒr keine Verantwortung.â
Nun, kommen wir zum Wesentlichen: Was ist ein âKnotenâ (Node) und âEreignisâ? Wie wird das Programm ausgefĂŒhrt?
Wie ĂŒblich, beginnen wir der Reihe nach: mit dem Laden des Programms.
Wie das Programm geladen wird
Beginnen wir damit, was passiert, wenn wir die Taste Upload im Editor ElDraw drĂŒcken und unser Diagramm-Programm, das aus schönen KĂ€stchen besteht, in das GerĂ€t ĂŒbertragen wird.
ZunÀchst wird auf Grundlage des von uns gezeichneten Diagramms eine textuelle Beschreibung erstellt.
Zweitens wird ĂŒberprĂŒft, ob alle EingĂ€nge der Knoten mit AusgĂ€ngen verbunden sind. âHĂ€ngendeâ EingĂ€nge dĂŒrfen nicht vorhanden sein. Wenn ein solcher Eingang gefunden wird, wird das Diagramm in ShIoTiny nicht geladen und der Editor gibt eine entsprechende Warnung aus.
Wenn alles erfolgreich war, sendet der Editor die textuelle Beschreibung des Diagramms Knoten fĂŒr Knoten an ShIoTiny. SelbstverstĂ€ndlich wird das bestehende Diagramm in ShIoTiny zuvor gelöscht. Die erhaltene textuelle Beschreibung wird im FLASH-Speicher gespeichert.
Ăbrigens, wenn Sie das Schema vom GerĂ€t entfernen möchten, laden Sie einfach ein leeres Schema (das keine Knoten-Einheiten enthĂ€lt) hoch.
Sobald das gesamte Programmschema in den PLC ShIoTiny geladen ist, beginnt es mit der "AusfĂŒhrung". Was bedeutet das?
Es sei darauf hingewiesen, dass die Prozesse zum Laden eines Schemas aus dem FLASH-Speicher beim Einschalten und beim Empfangen eines Schemas aus dem Editor identisch sind.
Zuerst werden Knotenobjekte basierend auf ihrer Beschreibung erstellt.
Dann werden die Verbindungen zwischen den Knoten angeordnet. Das heiĂt, AusgĂ€nge werden mit EingĂ€ngen und EingĂ€nge mit AusgĂ€ngen verknĂŒpft.
Und erst nach all dem wird die HauptausfĂŒhrungsschleife des Programms gestartet.
Ich habe lange geschrieben, aber der gesamte Prozess - vom "Laden" des Schemas aus dem FLASH-Speicher bis zur AusfĂŒhrung der Hauptschleife - dauert nur Bruchteile von Sekunden fĂŒr ein Schema mit 60-80 Knoten.
Wie funktioniert die HauptausfĂŒhrungsschleife? Ganz einfach. Zuerst wartet sie auf das Eintreten von Ereignisse in einem Knoten, dann verarbeitet sie dieses Ereignis. Und so unaufhörlich. Oder bis ein neues Schema in ShIoTiny hochgeladen wird.
Ich habe schon mehrmals solche Dinge erwÀhnt wie Ereignisse, Knoten und Verbindungen. Aber was ist das programmtechnisch gesehen? Darum wollen wir heute sprechen.
Knoten, Verbindungen und Ereignisse
Ein kurzer Blick auf die Beispiele fĂŒr Programmschemata zeigt, dass ein Schema nur aus zwei EntitĂ€ten besteht - Knoten (oder Elemente) und den Verbindungen zwischen ihnen. ShIoTinyKnoten
Knoten, Element des Schemas oder ist eine virtuelle Darstellung irgendeiner Aktion ĂŒber Daten. Das kann eine arithmetische Operation, eine logische Operation oder eine beliebige andere Operation sein, die uns einfĂ€llt. Das Hauptsache ist, dass der Knoten einen Eingang und einen Ausgang hat. Eingang
Eingang ist der Ort, an dem der Knoten Daten empfÀngt. Die Darstellung 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 abgerufen wird. Die Darstellung der AusgÀnge sind Punkte, die sich immer auf der rechten Seite des Knotens befinden.
Einige Knoten haben keine EingÀnge. Solche Knoten erzeugen Ergebnisse in ihrem Inneren. Zum Beispiel ein Konstanten-Knoten oder ein Sensor-Knoten: Sie benötigen keine Daten von anderen Knoten, um ein Ergebnis zu liefern.
Andere Knoten hingegen haben keine AusgĂ€nge. Das sind Knoten, die beispielsweise Aktuatoren (Relais oder Ă€hnliche GerĂ€te) reprĂ€sentieren. Sie empfangen Daten, erzeugen aber kein Ergebnis von Berechnungen, das fĂŒr andere Knoten verfĂŒgbar ist.
DarĂŒber hinaus gibt es einen einzigartigen Kommentar-Knoten. Er tut nichts, hat weder EingĂ€nge noch AusgĂ€nge. Sein Zweck besteht darin, eine ErlĂ€uterung im Diagramm zu sein.
Was ist âEreignis»? Ereignis â das Auftreten neuer Daten in einem Knoten. Zum Beispiel gehören zu den Ereignissen: Ănderung des Status eines Eingangs (Knoten Input), Empfang von Daten von einem anderen GerĂ€t (Knoten MQTT und UDP), Ablauf eines festgelegten Zeitintervalls (Knoten Timer und Delay) und so weiter.
Warum sind Ereignisse notwendig? Um festzustellen, in welchem Knoten neue Daten aufgetreten sind und welche Knoten im Zusammenhang mit dem Eintreffen neuer Daten geĂ€ndert werden mĂŒssen. Ein Ereignis âwandertâ durch die Kette von Knoten, bis alle Knoten durchlaufen sind, deren Zustand ĂŒberprĂŒft und geĂ€ndert werden muss.
Alle Knoten lassen sich in zwei Kategorien einteilen.
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 (das heiĂt, 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 verstÀndlich zu machen, betrachten wir ein Beispiel im Bild.

Die aktiven Knoten hier sind - Input1, Input2 und Input3. Die anderen Knoten sind passiv. Schauen wir uns an, was passiert, wenn ein bestimmter Eingang geschlossen wird. Die Ergebnisse sind zur besseren Ăbersicht in einer Tabelle zusammengefasst.

Wie wir sehen, wird beim Auftreten eines Ereignisses eine Kette vom Ursprungs-Knoten des Ereignisses bis zum Endknoten aufgebaut. Der Zustand der Knoten, die nicht in die Kette einbezogen werden, Àndert sich nicht.
Es stellt sich die berechtigte Frage, 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 Wunderâ verweisen. Es nennt sich âRelativitĂ€tstheorie fĂŒr die Kleinstenâ, in dem gut erklĂ€rt wird, was âgleichzeitigâ ist und wie man damit lebt.
Aber rein praktisch ist alles viel einfacher: Bei Auftreten von zwei oder sogar mehreren Ereignissen werden nacheinander alle Ketten von jedem Ereignis-Ursprung der Reihe nach aufgebaut und verarbeitet, ohne dass es irgendwelche Wunder gibt.
Die nĂ€chste durchaus legale Frage eines neugierigen Lesers ist: Was passiert, wenn die Knoten zu einem Ring verbunden werden? Oder, wie man unter diesen KlugscheiĂern sagt â eine RĂŒckkopplung einfĂŒhren. Das bedeutet, den Ausgang eines Knotens mit dem Eingang des vorhergehenden Knotens zu verbinden, sodass der Zustand des Ausgangs dieses Knotens den Zustand seines Eingangs beeinflusst. Es ist Ihnen nicht erlaubt, den Ausgang eines Knotens direkt mit seinem Eingang zu verbinden. ElDraw. Indirekt, wie in der Abbildung unten, ist dies jedoch möglich.
Also, was passiert in diesem Fall? Die Antwort ist sehr "bestimmt": es hÀngt davon ab, welche Knoten. Lassen Sie uns das Beispiel in der Abbildung betrachten.

Wenn die Kontakte des Eingangs Input1 am oberen Eingang des Knotens A geöffnet 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 klar ist â schauen Sie sich die Beschreibung an, wie die Knoten "UND" und "NICHT" funktionieren.
Nun schlieĂen wir die Kontakte des Eingangs Input1, das heiĂt, wir geben am oberen Eingang des Knotens A eine Eins ein. Wer mit Elektronik vertraut ist, weiĂ, dass wir im Grunde ein klassisches Schema eines Generators mit logischen Elementen erhalten. Und theoretisch sollte ein solches Schema unendlich Folgendes am Ausgang der Elemente A und B ausgeben: die Sequenz 1-0-1-0-1-0⊠und 0-1-0-1-0-1⊠Denn das Ereignis sollte den Zustand der Knoten A und B stĂ€ndig Ă€ndern, indem sie im Kreis 2-3-2-3⊠laufen!
Aber in Wirklichkeit geschieht das nicht. Das Schema verfĂ€llt in einen zufĂ€lligen Zustand â entweder bleibt das Relais eingeschaltet oder ausgeschaltet, oder es kann leicht summen, indem es mehrmals hintereinander ein- und ausgeschaltet wird. Alles hĂ€ngt vom Wetter am SĂŒdpol des Mars ab. Und hier ist der Grund, warum das geschieht.
Das Ereignis am Knoten Input1 Ă€ndert den Zustand des Knotens A, dann des Knotens B und so weiter im Kreis mehrere Male. Das Programm erkennt die "Schleife" des Ereignisses und stoppt diesen Karneval zwangsweise. Danach werden die ZustandsĂ€nderungen der Knoten A und B bis zum Eintreten eines neuen Ereignisses blockiert. Der Moment, in dem das Programm entscheidet â "es reicht, sich im Kreis zu drehen!" â hĂ€ngt im Allgemeinen von vielen Faktoren ab und kann als zufĂ€llig betrachtet werden.
Seien Sie vorsichtig, wenn Sie Knoten zu einem Ring verbinden â die Auswirkungen sind nicht immer offensichtlich! Seien Sie sich klar darĂŒber, was und warum Sie tun!
Kann man dennoch einen Generator auf den verfĂŒgbaren Knoten bauen? Ja, das ist möglich! Aber dafĂŒr ist ein Knoten erforderlich, der selbst in der Lage ist, Ereignisse zu generieren. Und es gibt so einen Knoten - das ist die "Verzögerungslinie". Schauen wir uns an, wie der Generator mit einer Periode von 6 Sekunden im untenstehenden Bild funktioniert.

Das SchlĂŒsselelement des Generators ist Knoten A - die Verzögerungslinie. Wenn der Zustand des Eingangs der Verzögerungslinie von 0 auf 1 geĂ€ndert wird, erscheint die 1 am Ausgang nicht sofort, sondern erst nach einer bestimmten Zeit. In unserem Fall sind das 3 Sekunden. Ebenso, wenn der Zustand des Eingangs der Verzögerungslinie von 1 auf 0 Ă€ndert, erscheint die 0 am Ausgang nach denselben 3 Sekunden. Die Verzögerungszeit wird in Zehntelsekunden angegeben. Das bedeutet, der Wert von 30 steht fĂŒr 3 Sekunden.
Ein besonderes Merkmal der Verzögerungslinie ist, dass sie ein Ereignis nach Ablauf der Verzögerungszeit generiert.
Angenommen, am Ausgang der Verzögerungslinie war zunĂ€chst 0. Nach dem Durchlaufen von Knoten B - dem Inverter - wird dieser 0 in 1 umgewandelt und gelangt an den Eingang der Verzögerungslinie. Sofort passiert nichts. Am Ausgang der Verzögerungslinie bleibt es bei 0, aber es beginnt der Countdown fĂŒr die Verzögerungszeit. Es vergehen 3 Sekunden. Und sofort erzeugt die Verzögerungslinie ein Ereignis. Am Ausgang erscheint 1. Diese Eins wird nach dem Durchlaufen von Knoten B - dem Inverter - in 0 umgewandelt und gelangt an den Eingang der Verzögerungslinie. Es vergehen weitere 3 Sekunden... und der Prozess wiederholt sich. Das heiĂt, alle 3 Sekunden Ă€ndert sich der Zustand des Ausganges der Verzögerungslinie von 0 auf 1 und dann von 1 auf 0. Das Relais klickt. Der Generator funktioniert. Die Impulsperiode betrĂ€gt 6 Sekunden (3 Sekunden am Ausgang 0 und 3 Sekunden 1).
In realen Schaltungen ist es jedoch normalerweise nicht nötig, sogar dieses Beispiel zu verwenden. Es gibt spezielle Timer-Knoten, die wunderbar und ohne fremde Hilfe eine Sequenz von Impulsen mit einer festgelegten Periode erzeugen. Die Dauer von "0" und "1" in diesen Impulsen betrÀgt jeweils die HÀlfte der Periode.
Um wiederkehrende Aktionen festzulegen, verwenden Sie Timer-Knoten.
Ich möchte darauf hinweisen, dass solche digitalen Signale, bei denen die Dauer von "0" und "1" gleich ist, als "Meander" bezeichnet werden.
Ich hoffe, ich konnte etwas Klarheit darĂŒber verschaffen, wie die Verbreitung von Ereignissen zwischen Knoten funktioniert und was man vermeiden sollte.
Fazit und Links
Der Artikel ist kurz geraten, aber es ist ein Artikel als Antwort auf die aufgetretenen Fragen zu Knoten und Ereignissen.
Mit der Weiterentwicklung der Firmware und dem Auftreten neuer Beispiele werde ich darĂŒber schreiben, wie man programmiert. ShIoTiny Kurzartikel, solange es fĂŒr die Menschen interessant ist.
Wie zuvor, das Schema, die Firmware, die Beispiele, die Beschreibung der Knoten und alles .
Fragen, WĂŒnsche, Kritik â hierher: shiotiny@yandex.ru
Quelle: habr.com
