Isang artikulo tungkol sa kung paano lumikha ng isang programmable logic controller mula sa isang murang Chinese device. Ang nasabing aparato ay makikita ang paggamit nito kapwa sa home automation at bilang mga praktikal na klase sa computer science ng paaralan.
Bilang sanggunian, bilang default, gumagana ang Sonoff Basic program sa isang mobile application sa pamamagitan ng Chinese cloud service; pagkatapos ng iminungkahing pagbabago, lahat ng karagdagang pakikipag-ugnayan sa device na ito ay magiging posible sa browser.
Seksyon I. Pagkonekta ng Sonoff sa serbisyo ng MGT24
Hakbang 1: Gumawa ng control panel
Magrehistro sa site
Pag-login
Upang lumikha ng control panel para sa isang bagong device, mag-click sa "+" na buton.
Halimbawa ng paggawa ng panel
Kapag nalikha na ang panel, lalabas ito sa iyong listahan ng mga panel.
Sa tab na "Setup" ng ginawang panel, hanapin ang mga field na "Device ID" at "Authorization Key"; sa hinaharap, kakailanganin ang impormasyong ito kapag nagse-set up ng Sonoff device.
Halimbawa ng tab
Hakbang 2. I-reflash ang device
Gamit ang utility
Hakbang 3. Pag-setup ng device
Ilapat ang power sa device, pagkatapos umilaw ang LED, pindutin ang button at pindutin nang matagal ito hanggang sa magsimulang mag-flash ang LED nang pana-panahon nang pantay-pantay.
Sa sandaling ito, lilitaw ang isang bagong wi-fi network na tinatawag na "PLC Sonoff Basic", ikonekta ang iyong computer sa network na ito.
Paliwanag ng indikasyon ng LED
LED na indikasyon
Status ng Device
panaka-nakang double flashing
walang koneksyon sa router
patuloy na kumikinang
naitatag ang koneksyon sa router
panaka-nakang unipormeng kumikislap
mode ng access point ng wi-fi
napatay
Walang power supply
Magbukas ng Internet browser at ipasok ang text na "192.168.4.1" sa address bar, pumunta sa pahina ng mga setting ng network setting ng device.
Punan ang mga patlang tulad ng sumusunod:
- "Pangalan ng network" at "Password" (upang i-link ang device sa iyong home wi-fi router).
- βDevice IDβ at βAuthorization keyβ (upang pahintulutan ang device sa serbisyo ng MGT24).
Halimbawa ng pagtatakda ng mga parameter ng network ng device
I-save ang mga setting at i-reboot ang device.
Dito
Hakbang 4. Pagkonekta ng mga sensor (opsyonal)
Sinusuportahan ng kasalukuyang firmware ang hanggang apat na ds18b20 temperature sensors. Dito
Seksyon II. Visual programming
Hakbang 1: Gumawa ng Mga Script
Ginamit bilang isang kapaligiran sa programming
Nagdagdag ako ng mga espesyal na bloke para sa pagsusulat at pagbabasa ng mga parameter ng device. Ang anumang parameter ay ina-access sa pamamagitan ng pangalan. Para sa mga parameter ng mga malalayong device, ginagamit ang mga pangalan ng tambalan: "parameter@device".
Dropdown na listahan ng mga opsyon
Halimbawang senaryo para sa cyclic switching on at off ang load (1Hz):
Isang halimbawa ng script na nagsi-synchronize sa pagpapatakbo ng dalawang magkahiwalay na device. Ibig sabihin, inuulit ng relay ng target na device ang operasyon ng relay ng remote device.
Sitwasyon para sa termostat (nang walang hysteresis):
Upang lumikha ng mas kumplikadong mga script, maaari kang gumamit ng mga variable, loop, function (na may mga argumento) at iba pang mga construct. Hindi ko ilalarawan ang lahat ng ito nang detalyado dito; marami na sa net.
Hakbang 2: Pagkakasunud-sunod ng mga Script
Tuloy-tuloy na tumatakbo ang script, at sa sandaling maabot nito ang dulo, magsisimula itong muli. Sa kasong ito, mayroong dalawang bloke na maaaring pansamantalang i-pause ang script, "antala" at "i-pause".
Ang "delay" block ay ginagamit para sa millisecond o microsecond delays. Ang block na ito ay mahigpit na nagpapanatili ng agwat ng oras, na hinaharangan ang pagpapatakbo ng buong device.
Ang "pause" block ay ginagamit para sa pangalawang (o mas kaunting) pagkaantala, at hindi nito hinaharangan ang pagpapatupad ng iba pang mga proseso sa device.
Kung ang script mismo ay naglalaman ng isang walang katapusang loop, ang katawan nito ay hindi naglalaman ng "pause", ang interpreter ay nakapag-iisa na nagpasimula ng isang maikling pag-pause.
Kung ang inilalaan na memory stack ay naubos na, ang interpreter ay hihinto sa pagsasagawa ng naturang power hungry na script (mag-ingat sa mga recursive function).
Hakbang 3: Pag-debug ng Mga Script
Upang i-debug ang isang script na na-load na sa device, maaari kang magpatakbo ng isang pagsubaybay sa programa nang sunud-sunod. Maaari itong maging lubhang kapaki-pakinabang kapag ang pag-uugali ng script ay naging iba sa kung ano ang nilayon ng may-akda. Sa kasong ito, ang pagsubaybay ay nagbibigay-daan sa may-akda na mabilis na mahanap ang pinagmulan ng problema at itama ang error sa script.
Sitwasyon para sa pagkalkula ng factorial sa debug mode:
Ang tool sa pag-debug ay napaka-simple at binubuo ng tatlong pangunahing mga pindutan: "simulan", "isang hakbang pasulong" at "ihinto" (huwag din nating kalimutan ang tungkol sa "enter" at "exit" debug mode). Bilang karagdagan sa sunud-sunod na pagsubaybay, maaari kang magtakda ng breakpoint sa anumang block (sa pamamagitan ng pag-click sa block).
Upang ipakita ang kasalukuyang mga halaga ng mga parameter (sensor, relay) sa monitor, gamitin ang "print" block.
Dito
Seksyon para sa mausisa. Ano ang nasa ilalim ng talukbong?
Upang gumana ang mga script sa target na device, binuo ang isang bytecode interpreter at isang assembler na may 38 mga tagubilin. Ang source code ng Blockly ay may espesyal na generator ng code na nakapaloob dito na nagko-convert ng mga visual block sa mga tagubilin sa pagpupulong. Kasunod nito, ang assembler program na ito ay na-convert sa bytecode at inilipat sa device para sa pagpapatupad.
Ang arkitektura ng virtual machine na ito ay medyo simple at walang partikular na punto sa paglalarawan nito; sa Internet makikita mo ang maraming mga artikulo tungkol sa pagdidisenyo ng pinakasimpleng virtual machine.
Karaniwan akong naglalaan ng 1000 bytes para sa stack ng aking virtual machine, na sapat na upang matitira. Siyempre, ang mga malalim na recursion ay maaaring maubos ang anumang stack, ngunit ang mga ito ay malamang na hindi magkaroon ng anumang praktikal na paggamit.
Ang resultang bytecode ay medyo compact. Bilang halimbawa, ang bytecode para sa pagkalkula ng parehong factorial ay 49 bytes lamang. Ito ang visual na anyo nito:
At ito ang kanyang 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
Kung ang form ng pagpupulong ng representasyon ay walang anumang praktikal na halaga, kung gayon ang tab na "javascrit", sa kabaligtaran, ay nagbibigay ng mas pamilyar na hitsura kaysa sa mga visual na bloke:
function factorial(num) {
if (num > 1) {
return num + factorial(num - 1);
}
return 1;
}
window.alert(factorial(10));
Tungkol sa pagganap. Noong pinatakbo ko ang pinakasimpleng flasher script, nakakuha ako ng 47 kHz square wave sa oscilloscope screen (sa processor clock speed na 80 MHz).
Sa tingin ko ito ay isang magandang resulta, hindi bababa sa bilis na ito ay halos sampung beses na mas mabilis kaysa
Ang pangwakas na bahagi
Upang ibuod, sasabihin ko na ang paggamit ng mga script ay nagbibigay-daan sa amin hindi lamang upang i-program ang lohika ng pagpapatakbo ng isang hiwalay na aparato, ngunit ginagawang posible upang ikonekta ang ilang mga aparato sa isang solong mekanismo, kung saan ang ilang mga aparato ay nakakaimpluwensya sa pag-uugali ng iba.
Napansin ko rin na ang napiling paraan ng pag-iimbak ng mga script (direkta sa mga device mismo, at hindi sa server) ay pinapasimple ang paglipat ng mga gumagana nang device sa isa pang server, halimbawa sa isang home Raspberry, dito
Iyon lang, ikalulugod kong makarinig ng mga payo at nakabubuo na pagpuna.
Pinagmulan: www.habr.com