ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

Főbb pontok, vagy amiről ez a cikk szól

A cikk témája a vizuális PLC programozás ShioTiny az itt leírt okosotthonhoz: ShioTiny: kis automatizálás, tárgyak internete vagy „hat hónappal a nyaralás előtt”.

Nagyon röviden fogalmak, mint pl csomók, közlés, fejlesztések, valamint a vizuális program betöltésének és végrehajtásának jellemzői ESP8266, amely a PLC alapja ShioTiny.

Bevezetés vagy néhány szervezési kérdés

A fejlesztésemről szóló előző cikkben rövid áttekintést adtam a vezérlő képességeiről ShioTiny.

Furcsa módon a közvélemény meglehetősen nagy érdeklődést mutatott, és nagyon sok kérdést tettek fel nekem. Néhány barátom azonnal felajánlotta, hogy vesz tőlem egy kontrollert. Nem, nem vagyok ellene, hogy keressek egy kis pénzt, de a lelkiismeretem nem engedi, hogy eladjak valamit, ami még mindig nagyon durva a szoftver szempontjából.

Ezért közzétettem a firmware-binárisokat és az eszközdiagramot a GitHubon: firmware + legrövidebb utasítások + diagram + példák.

Mostantól mindenki flashelheti az ESP-07-et, és maga játszhat a firmware-rel. Ha valaki tényleg pont olyan táblát szeretne, mint a képen, akkor nekem van belőle több is. Írj emailben [e-mail védett]. De ahogy a felejthetetlen Ogurcov szokta mondani: „Nem vagyok felelős semmiért!”

Tehát térjünk a lényegre: mi az "csomópont" (csomópont) és "esemény"? Hogyan történik a program végrehajtása?

Szokás szerint kezdjük sorrendben: a program letöltésével.

Hogyan töltődik be a program

Kezdjük azzal, hogy mi történik, ha megnyomunk egy gombot Feltöltés a szerkesztőben ElDraw gyönyörű négyzetekből álló körprogramunk pedig berepül a készülékbe.

Először is az általunk megrajzolt diagram alapján felépítjük annak szöveges leírását.
Másodszor, ellenőrzi, hogy az összes csomóponti bemenet csatlakoztatva van-e a kimenetekhez. Nem lehetnek „függő” bejáratok. Ha ilyen bemenetet észlel, az áramkör nem töltődik be a ShioTiny-be, és a szerkesztő megfelelő figyelmeztetést jelenít meg.

Ha minden jól ment, a szerkesztő egyenként küldi el az áramkör szöveges leírását a ShioTiny-nek. Természetesen először a ShioTiny meglévő áramkörét eltávolítják. Az így kapott szöveges leírást a rendszer a FLASH memóriában tárolja.

Egyébként, ha egy áramkört szeretne eltávolítani egy eszközről, akkor egyszerűen töltsön be egy üres áramkört (egyetlen csomópont elemet nem tartalmaz).

Miután a teljes áramköri program betöltődik a ShioTiny PLC-be, elkezdi a „végrehajtást”. Mit jelent?

Vegye figyelembe, hogy az áramkör FLASH memóriából történő betöltésének folyamata a tápfeszültség bekapcsolásakor és az áramkör szerkesztőtől való fogadásakor azonos.

Először a csomópontobjektumok jönnek létre leírásuk alapján.
Ezután kapcsolatok jönnek létre a csomópontok között. Vagyis a kimenetek és a bemenetek, valamint a bemenetek a kimenetek linkjei generálódnak.

És csak ezek után indul el a fő programvégrehajtási ciklus.

Sokáig írtam, de az egész folyamat - az áramkör FLASH memóriából való „betöltésétől” a fő ciklus elindításáig - a másodperc töredéke egy 60-80 csomópontból álló áramkör esetében.

Hogyan működik a főhurok? Nagyon egyszerű. Először megvárja a megjelenést fejlesztések egy csomóponton, majd feldolgozza az eseményt. És így tovább a végtelenségig. Nos, vagy amíg fel nem töltenek egy új sémát a ShioTinyre.

Már többször említettem olyan dolgokat, mint pl fejlesztések, csomók и közlés. De mi ez szoftveres szempontból? Ma erről fogunk beszélni.

Csomópontok, kapcsolatok és események

Csak nézze meg az áramköri programok példáit ShioTinymegérteni, hogy a diagram csak két entitásból áll - csomópontokból (vagy elemekből) és a köztük lévő kapcsolatokból.

csomópont, de igen vagy áramköri elem néhány virtuális ábrázolása akciók az adatok felett. Ez lehet egy aritmetikai művelet, egy logikai művelet vagy bármilyen művelet, ami eszünkbe jut. A lényeg az, hogy a csomópontnak van bejárata és kijárata.

Bemenet - ez az a hely, ahol a csomópont adatokat fogad. A bemeneti képek olyan pontok, amelyek mindig a csomópont bal oldalán vannak.

Teljesítmény - ez az a hely, ahol a csomópont műveletének eredménye lekérhető. A kimeneti képek olyan pontok, amelyek mindig a csomópont jobb oldalán helyezkednek el.

Egyes csomópontok nem rendelkeznek bemenettel. Az ilyen csomópontok belsőleg generálják az eredményt. Például egy állandó csomópont vagy egy érzékelő csomópont: nincs szükségük más csomópontok adataira az eredmény jelentéséhez.

Ezzel szemben a többi csomópontnak nincs kimenete. Ezek olyan csomópontok, amelyek például működtetőket (relék vagy valami hasonló) jelenítenek meg. Elfogadják az adatokat, de nem generálnak olyan számítási eredményt, amely elérhető más csomópontok számára.

Ezen kívül van egy egyedi megjegyzés csomópont is. Nem csinál semmit, nincs bemenete vagy kimenete. Célja, hogy magyarázat legyen a diagramon.

Mi történt "esemény"? esemény az új adatok megjelenése bármely csomópontban. Például az események közé tartozik: a bemeneti állapot változása (node Bemenet), adatok fogadása egy másik eszközről (csomópontok MQTT и UDP), meghatározott időtartam lejárta (csomópontok Időzítő и Késleltetés) stb.

Mire valók a rendezvények? Igen, annak megállapításához, hogy melyik csomópontban keletkeztek új adatok, és mely csomópontok állapotát kell módosítani az új adatok fogadása kapcsán. Az esemény mintegy „halad” a csomópontok láncán, amíg megkerül minden olyan csomópontot, amelynek állapotát ellenőrizni és módosítani kell.

Minden csomópont két kategóriába sorolható.
Hívjunk olyan csomópontokat, amelyek eseményeket generálhatnak"aktív csomópontok".
Olyan csomópontokat fogunk meghívni, amelyek nem tudnak eseményeket generálni "passzív csomópontok".

Amikor egy csomópont eseményt generál (azaz új adatok jelennek meg a kimenetén), akkor általános esetben az eseménygenerátor csomópont kimenetéhez kapcsolódó csomópontok teljes láncának állapota megváltozik.

A világosság érdekében tekintse meg az ábrán látható példát.

ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

Az aktív csomópontok itt az Input1, Input2 és Input3. A többi csomópont passzív. Nézzük meg, mi történik, ha egyik vagy másik bemenet zárva van. A kényelem kedvéért az eredményeket táblázatban foglaljuk össze.

ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

Amint látható, egy esemény bekövetkezésekor egy lánc épül fel az esemény forráscsomópontjától a végcsomópontig. A láncba nem eső csomópontok állapota nem változik.

Felmerül a jogos kérdés: mi lesz, ha két vagy akár több esemény egyidejűleg történik?

Gleb Anfilov munkásságának kedvelőjeként nagy a kísértés, hogy egy kíváncsi kérdezőt küldjek „Menekülés a meglepetés elől” című könyvéhez. Ez egy „relativitáselmélet a kicsiknek”, ami jól megmagyarázza, mit jelent az „egyidejű” és hogyan lehet vele együtt élni.

De gyakorlatilag minden sokkal egyszerűbb: ha két vagy akár több esemény is bekövetkezik, minden eseményforrásból minden lánc egymás után épül fel és dolgoz fel, és nem történnek csodák.

A következő teljesen jogos kérdés egy kíváncsi olvasótól, hogy mi lesz, ha a csomópontokat gyűrűvé kapcsolják? Vagy, ahogy ezek az okos srácok mondják, adjon visszajelzést. Vagyis csatlakoztassa az egyik csomópont kimenetét az előző csomópont bemenetéhez úgy, hogy ennek a csomópontnak a kimeneti állapota befolyásolja a bemenetének állapotát. A szerkesztő nem engedi, hogy egy csomópont kimenetét közvetlenül a bemenetéhez csatlakoztassa. ElDraw. De közvetve, mint az alábbi ábrán, ez megtehető.

Tehát mi fog történni ebben az esetben? A válasz nagyon „határozott” lesz: attól függően, hogy mely csomópontok. Nézzük az ábrán látható példát.

ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

Amikor az Input1 bemeneti érintkezői nyitva vannak, az A csomópont felső bemenete 0. Az A csomópont kimenete szintén 0. A B csomópont kimenete 1. És végül az A csomópont alsó bemenete 1. Minden egyértelmű. Azok számára pedig, akik nem világosak, nézze meg alább az „ÉS” és „NEM” csomópontok működésének leírását.

Most zárjuk le az Input1 bemenet érintkezőit, vagyis alkalmazunk egyet az A csomópont felső bemenetére. Aki járatos az elektronikában, az tudja, hogy tulajdonképpen egy klasszikus, logikai elemekre épülő generátoráramkört kapunk. És elméletileg egy ilyen áramkörnek a végtelenségig az 1-0-1-0-1-0 sorozatot kellene előállítania az A és B elemek kimenetén. és 0-1-0-1-0-1-…. Hiszen az eseménynek folyamatosan változtatnia kell a 2-3-2-3-... körben futó A és B csomópontok állapotát!

De a valóságban ez nem történik meg. Az áramkör véletlenszerű állapotba kerül - vagy a relé bekapcsolva vagy kikapcsolva marad, esetleg enyhén zúg egymás után többször is. Minden a Mars déli pólusának időjárásától függ. És ezért történik ez.

Az Input1 csomópontból származó esemény többször megváltoztatja az A csomópont állapotát, majd a B csomópont állapotát, és így tovább. A program érzékeli az esemény „hurkolását”, és erőszakkal leállítja ezt a karnevált. Ezt követően az A és B csomópontok állapotának változásait blokkolja, amíg új esemény nem történik. Az a pillanat, amikor a program úgy dönt, hogy „hagyd abba a körforgást!” - általában sok tényezőtől függ, és véletlenszerűnek tekinthető.

Legyen óvatos, amikor csomókat köt gyűrűbe - a hatások nem mindig lesznek nyilvánvalóak! Legyen jó ötleted, hogy mit és miért csinálsz!

Lehet még generátort építeni a rendelkezésünkre álló csomópontokra? Igen tudsz! Ehhez azonban olyan csomópontra van szükség, amely maga is képes eseményeket generálni. És van egy ilyen csomópont - ez a „késleltetési vonal”. Nézzük meg, hogyan működik egy 6 másodperces periódusú generátor az alábbi ábrán.

ShioTiny: csomópontok, kapcsolatok és rajzprogramok eseményei vagy jellemzői

A generátor kulcseleme az A csomópont - a késleltetési vonal. Ha a késleltetési vonal bemeneti állapotát 0-ról 1-re változtatja, akkor az 1 nem jelenik meg azonnal a kimeneten, hanem csak egy meghatározott idő után. Esetünkben ez 3 másodperc. Ugyanígy, ha a késleltetési vonal bemeneti állapotát 1-ről 0-ra változtatja, akkor a kimeneten ugyanaz a 0 másodperc után 3 jelenik meg. A késleltetési idő tizedmásodpercben van beállítva. Vagyis a 30-as érték 3 másodpercet jelent.

A késleltetési vonal különlegessége, hogy a késleltetési idő lejárta után eseményt generál.

Tegyük fel, hogy a késleltetési vonal kimenete kezdetben 0 volt. A B csomóponton - az inverteren - ez a 0 1-re változik, és a késleltetési vonal bemenetére kerül. Semmi sem történik azonnal. A késleltetési vonal kimenetén 0 marad, de elindul a késleltetési idő visszaszámlálása. 3 másodperc telik el. Ezután a késleltetési vonal eseményt generál. A kimenetén 1 jelenik meg. Ez az egység a B csomóponton - az inverteren - áthaladva 0-ra vált és a késleltetési vonal bemenetére megy. Eltelik még 3 másodperc... és a folyamat megismétlődik. Azaz 3 másodpercenként a késleltetett vonal kimenetének állapota 0-ról 1-re, majd 1-ről 0-ra változik. A relé kattan. A generátor működik. Az impulzus periódusa 6 másodperc (3 másodperc a nulla kimeneten és 3 másodperc az egyes kimeneten).

De valós áramkörökben általában nincs szükség ennek a példának a használatára. Vannak speciális időzítő csomópontok, amelyek tökéletesen és külső segítség nélkül generálnak egy adott periódusú impulzussorozatot. A „nulla” és az „egy” időtartama ezekben az impulzusokban egyenlő a periódus felével.

Az időszakos műveletek beállításához használjon időzítő csomópontokat.

Megjegyzem, hogy az ilyen digitális jeleket, ahol a „nulla” és az „egy” időtartama egyenlő, „meander”-nek nevezzük.

Remélem egy kicsit tisztáztam a kérdést, hogy az események hogyan terjednek a csomópontok között, és mit ne tegyen?

Következtetések és hivatkozások

A cikk rövidnek bizonyult, de ez a cikk válasz a csomópontokkal és eseményekkel kapcsolatban felmerült kérdésekre.

Ahogy a firmware fejlődik és új példák jelennek meg, írok a programozásról ShioTiny kis cikkeket, amíg érdekes lesz az emberek számára.

Mint korábban, diagram, firmware, példák, alkatrészek leírása és minden a többi itt van.

Kérdések, javaslatok, kritika – ide: [e-mail védett]

Forrás: will.com

Hozzászólás