En artikel om, hvordan man opretter en programmerbar logisk controller fra en billig kinesisk enhed. En sådan enhed vil finde sin anvendelse både i hjemmeautomatisering og som praktiske klasser i skolens datalogi.
Som reference fungerer Sonoff Basic-programmet som standard med en mobilapplikation gennem en kinesisk skytjeneste; efter den foreslåede ændring vil al yderligere interaktion med denne enhed være mulig i browseren.
Afsnit I. Tilslutning af Sonoff til MGT24-tjenesten
Trin 1: Opret et kontrolpanel
Tilmeld dig på siden
Log på
For at oprette et kontrolpanel til en ny enhed skal du klikke på knappen "+".
Eksempel på oprettelse af et panel
Når panelet er oprettet, vises det på din liste over paneler.
I fanen "Opsætning" i det oprettede panel skal du finde felterne "Enheds-id" og "Autorisationsnøgle"; i fremtiden vil disse oplysninger være nødvendige, når Sonoff-enheden konfigureres.
Eksempel på faneblad
Trin 2. Flash enheden igen
Brug af hjælpeprogrammet
Trin 3. Enhedsopsætning
Sæt strøm til enheden, efter at LED'en lyser, skal du trykke på knappen og holde den nede, indtil LED'en begynder at blinke jævnt jævnt.
I dette øjeblik vises et nyt wi-fi-netværk kaldet "PLC Sonoff Basic", tilslut din computer til dette netværk.
Forklaring af LED indikation
LED indikation
Enhedsstatus
periodisk dobbeltblink
ingen forbindelse til router
skinner konstant
oprettet forbindelse med routeren
periodisk uniform blinkende
wi-fi adgangspunkt tilstand
slukket
Ingen strømforsyning
Åbn en internetbrowser og indtast teksten "192.168.4.1" i adresselinjen, gå til enhedens side med netværksindstillinger.
Udfyld felterne som følger:
- "Netværksnavn" og "Adgangskode" (for at forbinde enheden med din hjemme-Wi-Fi-router).
- "Device ID" og "Autorization key" (for at autorisere enheden på MGT24-tjenesten).
Eksempel på indstilling af enhedsnetværksparametre
Gem indstillingerne og genstart enheden.
Her
Trin 4. Tilslutning af sensorer (valgfrit)
Den nuværende firmware understøtter op til fire ds18b20 temperatursensorer. Her
Afsnit II. Visuel programmering
Trin 1: Opret scripts
Anvendes som programmeringsmiljø
Jeg tilføjede specialiserede blokke til at skrive og læse enhedsparametre. Enhver parameter tilgås ved navn. For parametre for eksterne enheder bruges sammensatte navne: "parameter@enhed".
Dropdown liste over muligheder
Eksempelscenarie for cyklisk til- og frakobling af belastningen (1Hz):
Et eksempel på et script, der synkroniserer driften af to separate enheder. Målanordningens relæ gentager nemlig driften af relæet på fjernanordningen.
Scenarie for termostat (uden hysterese):
For at skabe mere komplekse scripts kan du bruge variabler, loops, funktioner (med argumenter) og andre konstruktioner. Jeg vil ikke beskrive alt dette i detaljer her; der er allerede ret meget på nettet.
Trin 2: Rækkefølge af scripts
Scriptet kører kontinuerligt, og så snart det når sin afslutning, starter det igen. I dette tilfælde er der to blokke, der midlertidigt kan sætte scriptet på pause, "delay" og "pause".
"Delay"-blokken bruges til millisekunds- eller mikrosekundsforsinkelser. Denne blok opretholder strengt tidsintervallet og blokerer driften af hele enheden.
"Pause"-blokken bruges til andre (eller mindre) forsinkelser, og den blokerer ikke for udførelsen af andre processer i enheden.
Hvis selve scriptet indeholder en uendelig løkke, hvis krop ikke indeholder "pause", starter tolken selvstændigt en kort pause.
Hvis den allokerede hukommelsesstak er opbrugt, vil tolken stoppe med at udføre et sådant strømkrævende script (vær forsigtig med rekursive funktioner).
Trin 3: Fejlretning af scripts
For at fejlsøge et script, der allerede er blevet indlæst i enheden, kan du køre en programsporing trin for trin. Dette kan være yderst nyttigt, når manuskriptets opførsel viste sig at være anderledes end det, forfatteren havde til hensigt. I dette tilfælde giver sporing forfatteren mulighed for hurtigt at finde kilden til problemet og rette fejlen i scriptet.
Scenarie til beregning af faktor i fejlretningstilstand:
Debug-værktøjet er meget enkelt og består af tre hovedknapper: "start", "et skridt frem" og "stop" (lad os heller ikke glemme "enter" og "exit" fejlretningstilstand). Ud over trin-for-trin sporing kan du indstille et brudpunkt på enhver blok (ved at klikke på blokken).
For at vise de aktuelle værdier af parametre (sensorer, relæer) i monitoren, brug "print"-blokken.
Her
Sektion for nysgerrige. Hvad er der under motorhjelmen?
For at scriptene kunne fungere på målenheden, blev der udviklet en bytekodefortolker og en assembler med 38 instruktioner. Blocklys kildekode har en specialiseret kodegenerator indbygget, der konverterer visuelle blokke til monteringsvejledninger. Efterfølgende konverteres dette assembler-program til bytekode og overføres til enheden til udførelse.
Arkitekturen af denne virtuelle maskine er ret enkel, og der er ingen særlig mening i at beskrive den; på internettet finder du mange artikler om at designe de enkleste virtuelle maskiner.
Jeg plejer at tildele 1000 bytes til stakken på min virtuelle maskine, hvilket er nok til overs. Selvfølgelig kan dybe rekursioner udmatte enhver stak, men det er usandsynligt, at de har nogen praktisk nytte.
Den resulterende bytekode er ret kompakt. Som et eksempel er bytekoden til beregning af den samme faktoral kun 49 bytes. Dette er dens visuelle form:
Og dette er hans assembler-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
Hvis samlingsformen for repræsentation ikke har nogen praktisk værdi, giver fanen "javascrit" tværtimod et mere velkendt udseende end visuelle blokke:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Med hensyn til ydeevne. Da jeg kørte det enkleste flasher-script, fik jeg en 47 kHz firkantbølge på oscilloskopskærmen (ved en processor-clock-hastighed på 80 MHz).
Jeg synes, det er et godt resultat, i det mindste er denne hastighed næsten ti gange hurtigere end
Den sidste del
For at opsummere vil jeg sige, at brugen af scripts giver os ikke kun mulighed for at programmere logikken i driften af en separat enhed, men gør det også muligt at forbinde flere enheder til en enkelt mekanisme, hvor nogle enheder påvirker andres adfærd.
Jeg bemærker også, at den valgte metode til lagring af scripts (direkte i selve enhederne og ikke på serveren) forenkler skiftet af allerede fungerende enheder til en anden server, f.eks. til en Raspberry hjemme, her
Det er alt, jeg vil være glad for at høre råd og konstruktiv kritik.
Kilde: www.habr.com