
Článok o tom, ako z lacného čínskeho zariadenia vytvoriť programovateľný logický kontrolér. Toto zariadenie nájde svoje uplatnenie ako v domácich automatizáciách, tak aj ako praktická činnosť v školskom informatickom vzdelávaní.
Na informáciu, program Sonoff Basic predvolene funguje s mobilnou aplikáciou prostredníctvom čínskeho cloudového servisu, po navrhovanej úprave bude možné ďalšie interakcie s týmto zariadením realizovať cez prehliadač.
Časť I. Pripojenie Sonoff k službe MGT24
Krok 1. Vytvorenie ovládacieho panela
Zaregistrujte sa na stránke (ak ešte nie ste registrovaní) a prihláste sa do svojho účtu.
Prihlásenie
Aby ste vytvorili ovládací panel pre nové zariadenie, kliknite na tlačidlo „+“.
Príklad vytvorenia panela
Po vytvorení sa panel objaví v zozname vašich panelov.
Na karte „Inštalácia“ vytvoreného panela nájdite polia „ID zariadenia“ a „Autorizácia kľúč“, táto informácia bude neskôr potrebná pri nastavení zariadenia Sonoff.
Príklad záložky
Krok 2. Preprogramovanie zariadenia
Pomocou nástroja nahrajte firmvér do zariadenia, na to budete potrebovať USB-TTL prevodník. Tu je a .
Krok 3. Nastavenie zariadenia
Pripojte zariadenie k zdroju napájania, keď sa rozsvieti dióda, stlačte a držte tlačidlo, kým dióda nezačne pravidelne blikať.
V tomto momente sa objaví nová wi-fi sieť s názvom „PLC Sonoff Basic“, pripojte svoj počítač k tejto sieti.
Dešifrovanie indikácie diódy
Indikácia diódy
Stav zariadenia
pravidelné dvojité blikanie
nie je spojenie s routerom
nepretržite svieti
spočiatku je spojenie s routerom
pravidelné rovnomerné blikanie
režim wi-fi prístupového bodu
vypnuté
žiadne napájanie
Otvorené internetový prehliadač a do adresného riadku zadajte text „192.168.4.1“, prejdite na stránku nastavení parametrov siete zariadenia.
Vyplňte polia nasledovne:
- „Meno siete“ a „Heslo“ (na pripojenie zariadenia k domácemu wi-fi routeru).
- „ID zariadenia“ a „Autorizácia kľúč“ (na autorizáciu zariadenia na službe MGT24).
Príklad nastavenia parametrov siete zariadenia
Uložte nastavenia a reštartujte zariadenie.
Tu .
Krok 4. Pripojenie snímačov (voliteľné)
Aktuálny firmvér podporuje až štyri snímače teploty ds18b20. Tu nájdete pokyny na montáž snímačov. Tento krok bude zrejme najnáročnejší, pretože si vyžaduje vaše zručnosti a spájkovací prístroj.
Časť II. Vizualizované programovanie
Krok 1. Tvorba skriptov
Ako programovacie prostredie sa používa , prostredie je jednoduché na osvojenie, preto na vytváranie jednoduchých skriptov nie je potrebné byť programátorom.
Pridal som špeciálne bloky pre zapisovanie a čítanie parametrov zariadenia. Prístup k akémukoľvek parametru sa vykonáva podľa názvu. Pre parametre vzdialených zariadení sa používajú zložené názvy: „parametr@zariadenie“.
Rozbaľovací zoznam parametrov
Príklad skriptu pre cyklické zapínanie a vypínanie záťaže (1 Hz):

Príklad skriptu synchronizujúceho prácu dvoch samostatných zariadení. To znamená, že relé cieľového zariadenia opakuje činnosť relé vzdialeného zariadenia.

Skript pre termostat (bez hysterézy):

Na vytváranie zložitejších skriptov je možné použiť premenné, cykly, funkcie (s argumentmi) a ďalšie konštrukcie. Nebudem to tu podrobne opisovať, na internete už existuje dosť .
Krok 2. Poradie vykonávania skriptov
Skript funguje v kontinuálnom režime a akonáhle dosiahne svoj koniec, spustí sa znova. Existujú však dva bloky, ktoré môžu dočasne pozastaviť činnosť skriptu, „delay“ a „pause“.
Blok „delay“ sa používa na milisekundové alebo mikrosekundové oneskorenia. Tento blok presne dodržiava časový interval, čím blokuje činnosť celého zariadenia.
Blok „pause“ sa používa na druhé (ale aj menej) oneskorenia a neblokuje vykonávanie iných procesov v zariadení.
Ak skript obsahuje nekonečnú slučku, v ktorej nie je uvedená „pause“, interpret sám iniciuje krátku pauzu.
V prípade vyčerpania prideleného zásobníka pamäte interpret zastaví vykonávanie takého náročného skriptu (buďte opatrní pri rekurzívnych funkciách).
Krok 3. Ladenie skriptov
Na ladenie už nahraného scenára do zariadenia je možné spustiť sledovanie programu po krokoch. To je veľmi užitočné, keď sa správanie scenára nezhoduje s tým, čo autor zamýšľal. V takom prípade sledovanie umožňuje autorovi rýchlo nájsť zdroj problému a opraviť chybu v scenári.
Scenár výpočtu faktoriálu v ladicím režime:

Nástroj na ladenie je veľmi jednoduchý a pozostáva z troch hlavných tlačidiel: „štart“, „krok vpred“ a „stop“ (nezabúdajme ani na „vstup“ a „výstup“ z režimu ladenia). Okrem krokového sledovania je možné nastaviť bod prerušenia na akomkoľvek bloku (kliknutím myši na blok).
Na zobrazenie aktuálnych hodnôt parametrov (snímače, relé) použite blok „print“.
Tu o používaní ladice.
Sekcia pre zvedavých. A čo je pod kapotou?
Aby scenáre fungovali na cieľovom zariadení, bol vyvinutý interpret bajtového kódu a assembler na 38 inštrukcií. Do zdrojového kódu blockly bol integrovaný špecializovaný generátor kódu, ktorý konvertuje vizuálne bloky na assemblerové inštrukcie. Následne sa tento assemblerový program prekonvertuje na bajtový kód a odovzdá sa zariadeniu na vykonanie.
Architektúra tejto virtuálnej mašiny je dosť jednoduchá a nemá zmysel ju osobitne opisovať, na internete nájdete veľa článkov o návrhu najjednoduchších virtuálnych strojov.
Na zásobník svojej virtuálnej mašiny obvykle vyčlením 1000 bajtov, čo je viac než dostatočné. Samozrejme, hlboké rekurzie môžu vyčerpať akýkoľvek zásobník, ale ťažko by sa našlo praktické využitie.
Konečný bajtový kód je dosť kompaktný. Ako príklad, bajtový kód pre výpočet toho istého faktoriálu má len 49 bajtov. Toto je jeho vizuálna forma reprezentácie:

A toto je jeho assemblerový program:
shift -1
ldi 10
call factorial, 1
print
exit
:factorial
ld_arg 0
ldi 1
gt
je 8
ld_arg 0
ld_arg 0
ldi 1
sub
call factorial, 1
mul
ret
ldi 1
ret
Ak má assemblerová forma reprezentácie akúkoľvek praktickú hodnotu, záložka „javascrit“ naopak ponúka známejší vzhľad ako vizuálne bloky:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Čo sa týka výkonu. Pri spustení najjednoduchšieho scenára blikačky som na obrazovke oscilloskopu dostal meander 47 kHz (pri taktovacej frekvencii procesora 80 MHz).


Považujem to za slušný výsledok, aspoň táto rýchlosť je takmer desaťkrát rýchlejšia ako. a .
Záverečná časť
Na záver poviem, že využívanie scenárov nám umožňuje nielen naprogramovať logiku fungovania jednotlivých zariadení, ale aj spojiť niekoľko zariadení do jedného mechanizmu, kde jedno zariadenie ovplyvňuje správanie iného.
Taktiež zdôrazním, že zvolený spôsob ukladania scenárov (priamo v samotných zariadeniach, nie na serveri) zjednodušuje prechod už fungujúcich zariadení na iný server, napríklad domáci Raspberry, tu. .
To je všetko, budem rád počuť rady a konštruktívnu kritiku.
Zdroj: habr.com
