Članak o tome kako napraviti programabilni logički kontroler od jeftinog kineskog uređaja. Takav uređaj će naći svoju upotrebu i u kućnoj automatizaciji i kao praktična nastava u školskoj informatici.
Za referencu, program Sonoff Basic po defaultu radi s mobilnom aplikacijom putem kineskog cloud servisa; nakon predložene izmjene, sva daljnja interakcija s ovim uređajem bit će moguća u pretraživaču.
Odjeljak I. Povezivanje Sonoff-a na uslugu MGT24
Korak 1: Kreirajte kontrolni panel
Registrirajte se na web mjestu
Prijavite se u sistem
Da biste kreirali kontrolni panel za novi uređaj, kliknite na dugme “+”.
Primjer kreiranja panela
Kada se panel kreira, pojaviće se na vašoj listi panela.
Na kartici "Podešavanje" kreiranog panela pronađite polja "Device ID" i "Authorization Key"; ubuduće će ove informacije biti potrebne prilikom postavljanja Sonoff uređaja.
Primjer kartice
Korak 2. Osvježite uređaj
Korištenje uslužnog programa
Korak 3. Podešavanje uređaja
Uključite uređaj, nakon što se LED dioda upali, pritisnite dugme i držite ga pritisnuto dok LED ne počne periodično ravnomjerno treptati.
U ovom trenutku će se pojaviti nova wi-fi mreža pod nazivom “PLC Sonoff Basic”, povežite svoj računar na ovu mrežu.
Objašnjenje LED indikacije
LED indikacija
Status uređaja
periodično dvostruko treptanje
nema veze sa ruterom
sija neprekidno
uspostavljena veza sa ruterom
periodično ravnomerno treptanje
režim wi-fi pristupne tačke
ugašen
Nema napajanja
Otvorite internet pretraživač i unesite tekst “192.168.4.1” u adresnu traku, idite na stranicu postavki mreže uređaja.
Popunite polja na sljedeći način:
- “Naziv mreže” i “Lozinka” (za povezivanje uređaja sa vašim kućnim wi-fi ruterom).
- “ID uređaja” i “Ključ za autorizaciju” (za autorizaciju uređaja na MGT24 servisu).
Primjer postavljanja mrežnih parametara uređaja
Sačuvajte podešavanja i ponovo pokrenite uređaj.
to je
Korak 4. Povezivanje senzora (opciono)
Trenutni firmver podržava do četiri senzora temperature ds18b20. Evo
Odjeljak II. Vizuelno programiranje
Korak 1: Kreirajte skripte
Koristi se kao programsko okruženje
Dodao sam specijalizirane blokove za pisanje i čitanje parametara uređaja. Bilo kojem parametru se pristupa po imenu. Za parametre udaljenih uređaja koriste se složeni nazivi: “parametar@uređaj”.
Padajuća lista opcija
Primjer scenarija za ciklično uključivanje i isključivanje opterećenja (1Hz):
Primjer skripte koja sinhronizuje rad dva odvojena uređaja. Naime, relej ciljnog uređaja ponavlja rad releja udaljenog uređaja.
Scenario za termostat (bez histereze):
Da biste kreirali složenije skripte, možete koristiti varijable, petlje, funkcije (sa argumentima) i druge konstrukcije. Neću ovde sve detaljno opisivati, već ima dosta toga na netu.
Korak 2: Redoslijed skripti
Skripta radi kontinuirano, a čim dođe do kraja, počinje ponovo. U ovom slučaju, postoje dva bloka koja mogu privremeno pauzirati skriptu, “kašnjenje” i “pauza”.
Blok "delay" se koristi za kašnjenja od milisekundi ili mikrosekunde. Ovaj blok striktno održava vremenski interval, blokirajući rad cijelog uređaja.
Blok “pauza” se koristi za sekundu (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”, interpretator samostalno pokreće kratku pauzu.
Ako je dodijeljeni memorijski stog iscrpljen, interpretator će prestati izvršavati takvu skriptu gladnu energije (budite oprezni s rekurzivnim funkcijama).
Korak 3: Otklanjanje grešaka u skriptama
Da biste otklonili greške u skripti 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 pokaže da je ponašanje skripte drugačije od onoga što je autor namjeravao. U ovom slučaju, praćenje omogućava autoru da brzo pronađe izvor problema i ispravi grešku u skripti.
Scenario za izračunavanje faktorijala u načinu za otklanjanje grešaka:
Alat za otklanjanje grešaka je vrlo jednostavan i sastoji se od tri glavna dugmeta: “start”, “jedan korak naprijed” i “stop” (ne zaboravimo ni na “enter” i “exit” debug mod). Pored praćenja korak po korak, možete postaviti tačku prekida na bilo koji blok (klikom na blok).
Za prikaz trenutnih vrijednosti parametara (senzora, releja) na monitoru, koristite blok "print".
to je
Sekcija za radoznale. Šta je ispod haube?
Da bi skripte radile na ciljnom uređaju, razvijeni su bajtkod interpreter i asembler sa 38 instrukcija. Blocklyjev izvorni kod ima ugrađeni specijalizovani generator koda koji pretvara vizualne blokove u upute za sklapanje. Nakon toga, ovaj asemblerski program se pretvara u bajt kod i prenosi na uređaj za izvršenje.
Arhitektura ove virtuelne mašine je prilično jednostavna i nema posebne svrhe u njenom opisivanju; na Internetu ćete naći mnogo članaka o dizajniranju najjednostavnijih virtuelnih mašina.
Obično izdvajam 1000 bajtova za stog moje virtuelne mašine, što je dovoljno za rezervu. Naravno, duboke rekurzije mogu iscrpiti bilo koji stek, ali je malo vjerovatno da će imati praktičnu upotrebu.
Rezultirajući bajt kod je prilično kompaktan. Kao primjer, bajt kod za izračunavanje istog faktorijala je samo 49 bajtova. Ovo je njegov vizuelni 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 montažni oblik reprezentacije 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 performansi. Kada sam pokrenuo najjednostavniji flasher skript, dobio sam kvadratni talas od 47 kHz na ekranu osciloskopa (pri taktu procesora od 80 MHz).
Mislim da je ovo dobar rezultat, barem je ova brzina skoro deset puta veća od
Završni deo
Da rezimiramo, reći ću da nam korištenje skripti omogućava ne samo da programiramo logiku rada zasebnog uređaja, već i omogućuje povezivanje nekoliko uređaja u jedan mehanizam, pri čemu neki uređaji utječu na ponašanje drugih.
Također napominjem da odabrani način pohranjivanja skripti (direktno u same uređaje, a ne na server) pojednostavljuje prebacivanje već ispravnih uređaja na drugi server, na primjer na kućni Raspberry, ovdje
To je sve, bit će mi drago čuti savjete i konstruktivne kritike.
izvor: www.habr.com