Članak o tome kako stvoriti programabilni logički kontroler iz jeftinog kineskog uređaja. Takav će uređaj svoju primjenu naći kako u kućnoj automatizaciji, tako i kao praktična nastava u školskoj informatici.
Za referencu, program Sonoff Basic prema zadanim postavkama radi s mobilnom aplikacijom putem kineske usluge u oblaku; nakon predložene izmjene sve daljnje interakcije s ovim uređajem bit će moguće u pregledniku.
Odjeljak I. Povezivanje Sonoffa s uslugom MGT24
Korak 1: Napravite upravljačku ploču
Registrirajte se na stranici
Prijaviti se
Za izradu upravljačke ploče za novi uređaj kliknite na gumb “+”.
Primjer izrade panela
Nakon što se ploča izradi, pojavit će se na vašem popisu ploča.
Na kartici "Podešavanje" stvorene ploče pronađite polja "ID uređaja" i "Ključ autorizacije", u budućnosti će ti podaci biti potrebni prilikom postavljanja Sonoff uređaja.
Primjer kartice
Korak 2. Ponovno fleširajte uređaj
Korištenje uslužnog programa
Korak 3. Postavljanje uređaja
Uključite uređaj u struju, nakon što LED dioda zasvijetli pritisnite tipku i držite je pritisnutu dok LED dioda ne počne povremeno ravnomjerno treperiti.
U ovom trenutku pojavit će se nova Wi-Fi mreža pod nazivom "PLC Sonoff Basic", povežite svoje računalo na ovu mrežu.
Objašnjenje LED indikacije
LED indikacija
Status uređaja
periodično dvostruko treptanje
nema veze s ruterom
neprekidno svijetli
uspostavljena veza s ruterom
periodično ravnomjerno bljeskanje
način rada wi-fi pristupne točke
ugasio se
Nema napajanja
Otvorite internetski preglednik i unesite tekst "192.168.4.1" u adresnu traku, idite na stranicu postavki mrežnih postavki uređaja.
Ispunite polja na sljedeći način:
- “Naziv mreže” i “Lozinka” (za povezivanje uređaja s kućnim wi-fi usmjerivačem).
- “ID uređaja” i “Autorizacijski ključ” (za autorizaciju uređaja na usluzi MGT24).
Primjer postavljanja mrežnih parametara uređaja
Spremite postavke i ponovno pokrenite uređaj.
Ovdje
Korak 4. Povezivanje senzora (opcija)
Trenutačni firmware podržava do četiri temperaturna senzora ds18b20. Ovdje
Odjeljak II. Vizualno programiranje
Korak 1: Stvorite skripte
Koristi se kao programsko okruženje
Dodao sam specijalizirane blokove za pisanje i čitanje parametara uređaja. Bilo kojem parametru se pristupa imenom. Za parametre udaljenih uređaja koriste se složeni nazivi: “parameter@device”.
Padajući popis opcija
Primjer scenarija za cikličko uključivanje i isključivanje opterećenja (1Hz):
Primjer skripte koja sinkronizira rad dva odvojena uređaja. Naime, relej ciljnog uređaja ponavlja rad releja udaljenog uređaja.
Scenarij za termostat (bez histereze):
Za izradu složenijih skripti možete koristiti varijable, petlje, funkcije (s argumentima) i druge konstrukcije. Neću ovdje sve to detaljno opisivati, ima već dosta toga na netu.
Korak 2: Redoslijed skripti
Skripta radi kontinuirano, a čim dođe do kraja, počinje iznova. U ovom slučaju postoje dva bloka koji mogu privremeno pauzirati skriptu, "odgoda" i "pauza".
Blok "kašnjenja" koristi se za odgode od milisekundi ili mikrosekundi. Ovaj blok strogo održava vremenski interval, blokirajući rad cijelog uređaja.
Blok “pause” koristi se za sekunde (ili manje) kašnjenja i ne blokira izvršavanje drugih procesa u uređaju.
Ako sama skripta sadrži beskonačnu petlju, čije tijelo ne sadrži "pauzu", tumač samostalno pokreće kratku pauzu.
Ako je dodijeljeni memorijski stog iscrpljen, tumač će prestati izvršavati takvu skriptu gladnu energije (budite oprezni s rekurzivnim funkcijama).
Korak 3: Otklanjanje pogrešaka u skriptama
Za otklanjanje pogrešaka skripte koja je već učitana u uređaj, možete pokrenuti praćenje programa korak po korak. Ovo može biti izuzetno korisno kada se ponašanje skripte razlikuje od onoga što je autor namjeravao. U ovom slučaju praćenje omogućuje autoru da brzo pronađe izvor problema i ispravi grešku u skripti.
Scenarij za izračunavanje faktorijela u načinu otklanjanja pogrešaka:
Alat za otklanjanje pogrešaka vrlo je jednostavan i sastoji se od tri glavna gumba: "start", "jedan korak naprijed" i "stop" (također nemojmo zaboraviti "ulaz" i "izlaz" iz načina otklanjanja pogrešaka). Osim praćenja korak po korak, možete postaviti prijelomnu točku na bilo koji blok (klikom na blok).
Za prikaz trenutnih vrijednosti parametara (senzora, releja) na monitoru koristite blok "ispis".
Ovdje
Sekcija za znatiželjne. Što je ispod haube?
Kako bi skripte radile na ciljnom uređaju, razvijen je interpreter bajtkoda i asembler s 38 instrukcija. Blocklyjev izvorni kod ima ugrađen specijalizirani generator koda koji vizualne blokove pretvara u upute za sklapanje. Naknadno se ovaj asemblerski program pretvara u bajt kod i prenosi na uređaj za izvođenje.
Arhitektura ovog virtualnog stroja prilično je jednostavna i nema smisla opisivati ga, na internetu ćete naći mnogo članaka o projektiranju najjednostavnijih virtualnih strojeva.
Obično izdvajam 1000 bajtova za stog svog virtualnog stroja, što je dovoljno za preokret. Naravno, duboke rekurzije mogu iscrpiti bilo koji stog, ali malo je vjerojatno da će imati bilo kakvu praktičnu korist.
Rezultirajući bajt kod prilično je kompaktan. Na primjer, bajt kod za izračun istog faktorijela je samo 49 bajtova. Ovo je njegov vizualni oblik:
A ovo je njegov asemblerski 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
Ako skupni oblik predstavljanja nema nikakvu praktičnu vrijednost, tada kartica "javascrit", naprotiv, daje poznatiji izgled od vizualnih blokova:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Što se tiče izvedbe. Kad sam pokrenuo najjednostavniju flasher skriptu, dobio sam pravokutni val od 47 kHz na zaslonu osciloskopa (na taktu procesora od 80 MHz).
Mislim da je ovo dobar rezultat, barem je ova brzina gotovo deset puta veća od
Završni dio
Ukratko, reći ću da nam korištenje skripti omogućuje ne samo programiranje logike rada zasebnog uređaja, već također omogućuje povezivanje nekoliko uređaja u jedan mehanizam, gdje neki uređaji utječu na ponašanje drugih.
Također napominjem da odabrani način pohranjivanja skripti (izravno u same uređaje, a ne na poslužitelj) pojednostavljuje prebacivanje već radnih uređaja na drugi poslužitelj, primjerice na kućni Raspberry, ovdje
To je sve, bit će mi drago čuti savjet i konstruktivnu kritiku.
Izvor: www.habr.com