
Wichtige Punkte oder worum es in diesem Artikel geht
Das Thema des Artikels ist die hier beschriebene visuelle Programmierung der
ShIoTiny- SPS fĂŒr das Smart Home:
ShIoTiny: kleine Automatisierung, das Internet der Dinge oder âsechs Monate vor den Feiertagenâ .
Konzepte wie
Knoten ,
Kommunikation ,
Ereignisse sowie Funktionen zum Laden und AusfĂŒhren eines visuellen Programms auf
ESP8266 , das die Grundlage von
ShIoTiny PLC bildet, werden
sehr kurz besprochen .
ShIoTiny- ProjektseiteEinfĂŒhrung oder ein paar organisatorische Fragen
In einem frĂŒheren Artikel ĂŒber meine Entwicklung gab ich einen kurzen Ăberblick ĂŒber die Funktionen des
ShIoTiny- Controllers.
Seltsamerweise zeigte die Ăffentlichkeit ein ziemlich starkes Interesse und stellte mir viele Fragen. Einige Kameraden boten mir sogar sofort an, einen Controller zu kaufen. Nein, ich bin nicht dagegen, ein wenig Geld zu verdienen, aber mein Gewissen erlaubt mir nicht, etwas zu verkaufen, das in Bezug auf Software immer noch sehr grob ist.
Daher habe ich auf GitHub Firmware-BinÀrdateien und GerÀtediagrammen gepostet:
Firmware + kĂŒrzeste Anweisung + Schaltung + Beispiele .
Jetzt kann jeder ESP-07 flashen und alleine mit der Firmware spielen. Wenn jemand wirklich nur ein Brett wie auf dem Foto haben möchte, dann habe ich mehrere davon. Schreiben Sie an
shiotiny@yandex.ru . Aber wie die unvergesslichen Gurken immer sagten: "Ich bin fĂŒr nichts verantwortlich!"
Kommen wir also zum Punkt: Was ist ein â
Knoten â (Knoten) und ein â
Ereignis â? Wie wird das Programm ausgefĂŒhrt?
Beginnen Sie wie gewohnt in der richtigen Reihenfolge: indem Sie das Programm herunterladen.
Wie wird das Programm geladen?
Was passiert, wenn wir im
ElDraw- Editor auf die SchaltflÀche
Hochladen klicken und unser Programmschema, das aus schönen Quadraten besteht, in das GerÀt fliegt.
ZunÀchst wird auf der Grundlage des von uns gezeichneten Diagramms dessen Beschreibung in Textform erstellt.
Zweitens wird geprĂŒft, ob alle EingĂ€nge der Knoten mit den AusgĂ€ngen verbunden sind. Es sollten keine "hĂ€ngenden" EingĂ€nge vorhanden sein. Wenn ein solcher Eingang erkannt wird, wird die Schaltung in ShIoTiny nicht geladen und der Editor zeigt eine Warnung an.
Wenn alles gut gegangen ist, sendet der Editor eine Textbeschreibung der Schaltung an einen Knoten in ShIoTiny. NatĂŒrlich wurde das vorhandene Schema von ShIoTiny zuvor entfernt. Die resultierende Textbeschreibung wird im FLASH-Speicher gespeichert.
Ăbrigens, wenn Sie die Schaltung vom GerĂ€t entfernen möchten, laden Sie einfach eine leere Schaltung (die keine Knotenelemente enthĂ€lt) hinein.
Sobald die gesamte Programmschaltung in die ShIoTiny-SPS geladen ist, beginnt sie zu âlaufenâ. Was bedeutet das?
Beachten Sie, dass die Prozesse zum Laden der Schaltung aus dem FLASH-Speicher beim Einschalten und beim Empfang der Schaltung vom Editor identisch sind.
Zuerst werden Knotenobjekte basierend auf ihrer Beschreibung erstellt.
Dann wird die Anordnung der Verbindungen zwischen Knoten hergestellt. Das heiĂt, VerknĂŒpfungen von AusgĂ€ngen zu EingĂ€ngen und EingĂ€ngen zu AusgĂ€ngen werden erzeugt.
Und erst danach wird der HauptprogrammausfĂŒhrungszyklus gestartet.
Ich habe lange geschrieben, aber der gesamte Prozess - vom âLadenâ der Schaltung aus dem FLASH-Speicher bis zum Start der Hauptschleife - dauert fĂŒr eine Schaltung mit 60-80 Knoten einen Sekundenbruchteil.
Wie funktioniert die Hauptschleife? Sehr einfach. Zuerst wartet er darauf, dass das
Ereignis in einem beliebigen Knoten
auftritt , und verarbeitet dann dieses Ereignis. Und so ohne Ende. Nun, oder bis sie ein neues Schema auf ShIoTiny hochladen.
Ich habe bereits mehrmals Dinge wie
Ereignisse ,
Knoten und
Verbindungen erwĂ€hnt . 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 Schaltungsprogramme fĂŒr
ShIoTiny an, um zu verstehen, dass eine Schaltung nur aus zwei EntitÀten besteht - Knoten (oder Elementen) und den Beziehungen zwischen ihnen.
Ein Knoten ,
Knoten oder
Schaltungselement ist eine virtuelle Darstellung einer
Aktion auf Daten. Dies kann eine arithmetische Operation, eine logische Operation oder eine beliebige Operation sein, die uns einfÀllt. Die Hauptsache ist, dass der Knoten einen Eingang und einen Ausgang hat.
Bei einer Eingabe empfÀngt der Knoten Daten. Eingabebilder sind Punkte, die sich immer auf der linken Seite des Knotens befinden.
Die Ausgabe ist der Ort, an dem das Ergebnis der Knotenoperation extrahiert wird. Ausgabebilder sind Punkte, die sich immer auf der rechten Seite des Knotens befinden.
Einige Knoten haben keine Eingaben. Solche Knoten erzeugen ein Ergebnis in sich. Zum Beispiel ein konstanter Knoten oder ein Sensorknoten: Sie benötigen keine Daten von anderen Knoten, um das Ergebnis zu melden.
Andere Knoten haben dagegen keine AusgĂ€nge. Dies sind Knoten, die beispielsweise Aktuatoren (Relais oder Ă€hnliche GerĂ€te) anzeigen. Sie akzeptieren Daten, generieren jedoch nicht das Ergebnis von Berechnungen, die anderen Knoten zur VerfĂŒgung stehen.
DarĂŒber hinaus gibt es einen eindeutigen Kommentarknoten. Er tut nichts, hat weder Ein- noch AusgĂ€nge. Sein Zweck ist es, eine ErklĂ€rung im Diagramm zu sein.
Was ist ein "
Ereignis "?
Ein Ereignis ist das Auftreten neuer Daten in einem Knoten. Zu den Ereignissen gehören beispielsweise: Ăndern des Eingabestatus (Eingabeknoten), Empfangen von Daten von einem anderen GerĂ€t (
MQTT- und
UDP- Knoten), Ablauf eines bestimmten Zeitraums (
Timer- und
Verzögerungsknoten ) usw.
WofĂŒr sind Events? Ja, um festzustellen, auf welchem ââKnoten die neuen Daten erschienen sind und welche ZustĂ€nde im Zusammenhang mit dem Empfang neuer Daten geĂ€ndert werden mĂŒssen. Das Ereignis âlĂ€uftâ sozusagen entlang der Knotenkette, bis alle Knoten umgangen wurden, deren Status ĂŒberprĂŒft und geĂ€ndert werden muss.
Alle Knoten können in zwei Kategorien unterteilt werden.
Die Knoten, die Ereignisse erzeugen können, werden als "
aktive Knoten " bezeichnet.
Die Knoten, die keine Ereignisse generieren können, werden als "
passive Knoten " bezeichnet.
Wenn ein Knoten ein Ereignis generiert (dh neue Daten werden an seiner Ausgabe angezeigt), Àndert sich im Allgemeinen der Status der gesamten Knotenkette, die mit der Ausgabe des Ereignisgeneratorknotens verbunden ist.
Betrachten Sie zur Verdeutlichung das Beispiel in der Abbildung.

Die aktiven Knoten hier sind Input1, Input2 und Input3. Die restlichen Knoten sind passiv. Ăberlegen Sie, was passiert, wenn diese oder jene Eingabe geschlossen wird. Der Einfachheit halber sind die Ergebnisse tabellarisch aufgefĂŒhrt.

Wie Sie sehen können, wird beim Eintreten eines Ereignisses eine Kette vom Quellknoten des Ereignisses zum Endknoten erstellt. Der Status der Knoten, die nicht in die Kette fallen, Àndert sich nicht.
Es stellt sich eine berechtigte Frage, aber was passiert, wenn zwei oder sogar mehrere Ereignisse gleichzeitig auftreten?
Als Liebhaber von Gleb Anfilovs Werk bin ich versucht, einen neugierigen Fragesteller zu seinem Buch "Flight from Surprise" zu schicken. Dies ist eine solche "RelativitĂ€tstheorie fĂŒr die Kleinsten", in der gut gesagt wird, was "gleichzeitig" ist und wie man damit lebt.
Aber fast alles ist viel einfacher: Wenn zwei oder sogar mehrere Ereignisse auftreten, werden alle Ketten aus jeder Ereignisquelle nacheinander aufgebaut und verarbeitet, und es gibt keine Wunder.
Die nĂ€chste rechtmĂ€Ăige Frage eines neugierigen Lesers ist, was passiert, wenn die Knoten in einem Ring verbunden sind? Oder, wie es unter Ihren klugen MĂ€nnern ĂŒblich ist, Feedback einzufĂŒhren. Verbinden Sie also den Ausgang eines der Knoten mit dem Eingang des vorherigen Knotens, sodass der Ausgangszustand dieses Knotens den Zustand seines Eingangs beeinflusst.
Mit dem ElDraw- Editor können Sie die
Knotenausgabe nicht direkt mit der eigenen Eingabe verbinden. Aber indirekt, wie in der folgenden Abbildung, kann dies getan werden.
Was wird in diesem Fall sein? Die Antwort wird sehr "eindeutig" sein: abhÀngig von den Knoten. Betrachten Sie das Beispiel in der Abbildung.

Wenn die Kontakte des Eingangseingangs1 am oberen Eingang von Knoten A - 0 geöffnet sind. Am Ausgang von Knoten A auch 0. Am Ausgang von Knoten B - 1. Und schlieĂlich am unteren Eingang von Knoten A - 1. Alles ist klar. Und fĂŒr wen es nicht klar ist - unten finden Sie eine Beschreibung der Funktionsweise der Knoten "UND" und "NICHT".
SchlieĂen Sie nun die Kontakte des Eingangseingangs1, dh wir versorgen den oberen Eingang von Knoten A mit einem. Diejenigen, die mit Elektronik vertraut sind, wissen, dass wir tatsĂ€chlich eine klassische Logikgeneratorschaltung erhalten. Und theoretisch sollte ein solches Schema am Ausgang der Elemente A und B endlos die Sequenzen 1-0-1-0-1-0 erzeugen .... und 0-1-0-1-0-1-1 .... SchlieĂlich sollte ein Ereignis den Zustand der Knoten A und B stĂ€ndig Ă€ndern und in einem Kreis 2-3-2-3- ... laufen!
Das passiert aber eigentlich nicht. Die Schaltung 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 dies.
Ein Ereignis vom Knoten Input1 Àndert den Status von Knoten A, dann von Knoten B usw. mehrmals in einem Kreis. Das Programm bestimmt die "Schleife" des Ereignisses und beendet diesen Karneval gewaltsam. Danach werden die 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 Fall hÀngt es von vielen Faktoren ab und kann als zufÀllig angesehen werden.
Seien Sie vorsichtig, wenn Sie Knoten in einem Ring verbinden - die Auswirkungen sind nicht immer offensichtlich! Stellen Sie sich vor, was und warum Sie tun!
Aber ist es möglich, einen Generator auf den uns zugĂ€nglichen Knoten zu bauen? Ja du kannst! Dies erfordert jedoch einen Knoten, der selbst weiĂ, wie Ereignisse generiert werden. Und es gibt einen solchen Knoten - dies ist eine "Verzögerungsleitung". In der folgenden Abbildung sehen wir, wie der Generator mit einem Zeitraum von 6 Sekunden arbeitet.

Ein SchlĂŒsselelement des Generators ist der Knoten A, die Verzögerungsleitung. Wenn Sie den Eingangszustand der Verzögerungsleitung von 0 auf 1 Ă€ndern, erscheint 1 am Ausgang nicht sofort, sondern erst nach einer bestimmten Zeit. In unserem Fall sind es 3 Sekunden. Wenn Sie den Eingangsstatus der Verzögerungsleitung von 1 auf 0 Ă€ndern, wird am Ausgang nach denselben 3 Sekunden ebenfalls 0 angezeigt. Die Verzögerungszeit wird in Zehntelsekunden eingestellt. Das heiĂt, der Wert ist 30 und bedeutet - 3 Sekunden.
Ein Merkmal der Verzögerungsleitung besteht darin, dass sie nach Ablauf der Verzögerungszeit ein Ereignis erzeugt.
Angenommen, der Ausgang der Verzögerungsleitung war anfangs 0. Nach dem Durchgang durch Knoten B, den Wechselrichter, wird diese 0 zu 1 und geht zum Eingang der Verzögerungsleitung. Nichts passiert sofort. Am Ausgang der Verzögerungsleitung bleibt wie bisher 0, aber dann wird der Countdown fĂŒr die Verzögerungszeit aktiviert. Es dauert 3 Sekunden. Und dann erzeugt die Verzögerungsleitung ein Ereignis. Am Ausgang hat sie 1. Diese Einheit wird nach Durchlaufen des Knotens B, des Wechselrichters, zu 0 und geht zum Eingang der Verzögerungsleitung. Weitere 3 Sekunden vergehen ... und der Vorgang wiederholt sich. Das heiĂt, alle 3 Sekunden Ă€ndert sich der Ausgangszustand der Verzögerungsleitung von 0 auf 1 und dann von 1 auf 0. Das Relais klickt. Der Generator arbeitet. Die Impulsdauer betrĂ€gt 6 Sekunden (3 Sekunden am Ausgang von Null und 3 Sekunden - Eins).
In realen Schaltkreisen mĂŒssen Sie dieses Beispiel jedoch normalerweise nicht verwenden. Es gibt spezielle Zeitgeberknoten, die perfekt und ohne externe Hilfe dazu beitragen, eine Folge von Impulsen mit einer bestimmten Periode zu erzeugen. Die Dauer von "Null" und "Einheiten" in diesen Impulsen entspricht der HĂ€lfte der Periode.
Verwenden Sie Zeitgeberknoten, um periodische Aktionen festzulegen.
Ich stelle fest, dass solche digitalen Signale, bei denen die Dauer von âNullâ und âEinheitenâ gleich ist, als âMĂ€anderâ bezeichnet werden.
Ich hoffe, ich habe die Frage ein wenig geklÀrt, wie Ereignisse zwischen Knoten verteilt sind und was nicht getan werden sollte.
Schlussfolgerung und Referenzen
Der Artikel erwies sich als kurz, aber dieser Artikel ist die Antwort auf die Fragen zu Knoten und Ereignissen.
WĂ€hrend sich die Firmware weiterentwickelt und neue Beispiele erscheinen, werde ich darĂŒber schreiben, wie man kleine
ShIoTiny- Artikel programmiert, solange dies fĂŒr die Leute interessant sein wird.
Nach wie vor finden Sie hier das Schema, die Firmware, Beispiele, die Beschreibung der Knoten und alles
andere .
Fragen, WĂŒnsche, Kritik - hier:
shiotiny@yandex.ru