SEAL Tutorial
Contents
SEAL lietošanas pamācība
Ievads
SEAL ir programmēšanas valoda bezvadu sensoru tīkliem. Atšķirībā no vispārīga pielietojuma programmēšanas valodām. SEAL ir daudz vienkāršāka, mazāka, un ātrāk apgūstama. Savukārt programmas, rakstītas SEAL, ir īsākas nekā analoģiskas programmas priekš sensoru tīkliem, kuras ir rakstītas kādā no vispārēja pielietojuma programmēšanas valodām.
Programmēšanas testa laikā jums būs pieejams sensoru mezgls. Sensoru mezgls var sazināties (pa radio) ar bāzes staciju, kas atrodas vienā telpā ar to. Sensoru mezgls spēj lasīt sensorus, mikršķināt diodes utml.
Valodas sintakse
SEAL ir šādi rezervēti atslēgvārdi:
and, config, const, define, else, elsewhen, end, load, networkread, not, parameters, pattern, read, or, output, set, use, when, where
.
Visiem SEAL izteikumiem jābeidzas ar noslēdzošo simbolu. Parasti tas ir semikols ';', izņemot when
nosacījumus, kuriem jābeidzas ar atslēgvārdu end
.
SEAL sintakse nav reģistrjūtīga. Tas ir, USE
, use
, un Use
nozīmē vienu un to pašu. Ieteicams izstrādājot programmas ievērot neformālas konvencijas, lai tās būtu viegli lasāmas. Viena no konvencijām ir apzīmēt simboliskās konstantes ar LIELAJIEM BURTIEM, sensoru vērtības ar Lielo Sākumburtu, savukārt pārējos vārdus programmā sākt ar mazo burtu.
Valodas elementi
- Komponentu lietojumus apraksta ar vieu no atslēgas vārdiem use, read, output, kuram seku komponentu nosaukums un parameteri. Piemēram,
use Beeper
-- lietot pīkstuli, ja motei tāds ir;read Humidity
-- nolasīt mitruma sensora vērtību;output Serial
-- uzvadīt nolasītos datus (visus) uz seriālo saskarni (USB kabeli).
Pilns atbalstīto komponentu saraksts ir pieejams te.
- Funkcijas ļauj ielasītos sensoru datus apstrādāt, piemēram, pielietojot tiem aritmētiskas operācijas. Piemēram, funkcija
add(Humidity, 10)
pieskaita gaismas sensora lasījumam skaitli 10. Pilns atbalstīto funkciju saraksts ir pieejams te.
- Komponentu definīcījas ļauj ar atslēgvārda
define
palīdzību "izveidot" jaunos, virtuālus komponentus, ar funkciju palīdzību kombinējot jau esošos. Piemēram,define MaxHumidity max(Humidity)
definē jaunu komponentu ar nosaukumu MaxLight, kura vērtība būs vienāda ar maksimālo līdz šim nolasītos gaismas sensora vērtību programmas darbības laikā.
- Parameterus var norādīt gan komponentu lietojumiem, gan komponentu definīcijām. Piemēram, parametrs
once
saka, ka komponentu vajag lietot (lasīt, ieslēgt utt.) tikai vienreiz. (Pēc noklusēšanas komponenti tiek lietoti periodiski, neierobežotu skaitu periodu.)
- Komentāri var tikt rakstīti, atdalot tos no pārējā programmas koda ar diviem simboliem "//". Komentārs stiepjas līdz rindiņas beigām, un neietekmē programmas funkcionalitāti. Piemēram:
use Beeper; // lieto pīkstuli
definē Beeper komponenta lietojumu ar atbilstošu paskaidrojošu tekstu.
Mainīgie un konstantes
Lielā daļā no SEAL programmām nav nepieciešams izmantot mainīgos. Jau nu tie tomēr ir vajadzīgi, mainīgo var definēt un lietot izmantojot set
atslēgvārdu.
Piemēram set counter 1;
uzstāda mainīgā ar nosaukumu "counter" vērtību vienādu ar 1.
set counter add(counter, 1);
uzstāda mainīgā "counter" vērtību vienādu ar šī mainīgā iepriekšējo vērtību, saskaitītu ar 1.
Visi mainīgie ir skalāri (t.i. var saturēt sevī tikai vienu vērtību).
Simboliskās konstantes (t.i. konstantes ar vārdu) SEAL programmās ir ieteicams izmantot bieži. Konstanti definē ar const
atslēgvārda palīdzību.
Piemēram const SLIEKSNIS 1000;
definē konstanti ar nosaukumu "SLIEKSNIS" un vērtību vienādu ar 1000.
Konstantes vietā vienmēr var rakstīt arī šīs konstantes vērtību tieši, ar cipariem.
Kontroles bloki
SEAL programmas izpildīšanos var kontrolēt ar when
atslēgvārda palīdzību.
Tā lietošana ir šāda:
when <nosacījums> <koda bloks 1> end
Šajā piemērā <koda bloks 1>
izpildās tad un tikai tad, ja <nosacījums>
ir patiess.
Jāņem vērā, ka nosacījumu patiesuma vērtības tiek atkārtoti izvērtētas periodiski. (Pēc noklusēšanas tas notiek 10 reizes sekundē). Koda bloks savukārt izpildās neatkarīgi no tiem. Ja reiz bloks ir sācis izpildīties, tas izpildās vai nu noteiktu reižu skaitu, ja tāds norādīts parametros, vai arī noteiktu laiku, ja norādīts tas. Pēc noklusēšanas koda bloks izpildās neierobežotu reižu skaitu, periodiski. Izpildīšanās periods arī atkarīgs no parametriem un pēc noklusēšanas ir vienāds ar vienu sekundi.
Ir atbalstīti arī else
un elsewhen
atslēgvārdi ar to intuitīvajām nozīmēm.else
norāda, ka tālāk sekos koda bloks, kurš izpildīsies tikai tad, kad visi iepriekšējā koda bloka nosacījumi ir nepatiesi. elsewhen
nozīme ir līdzīga else
, bet papildus tam kods šajā blokā izpildās tikai tad, kad elsewhen
sekojošais nosacījums ir patiess.
when <nosacījums>: <koda bloks 1> else: <koda bloks 2> end
Šajā piemērā < koda bloks 1 >
izpildās tad un tikai tad, ja < nosacījums >
ir patiess, savukārt < koda bloks 2 >
izpildās pretējā gadījuma -- ja nosacījums ir nepatiess.
when <nosacījums 1>: <koda bloks 1> elsewhen <nosacījums 2>: <koda bloks 2> else: <koda bloks 3> end
Šajā piemērā <koda bloks 2>
izpildās tad un tikai tad, ja <nosacījums 1>
ir nepatiess, savukārt <nosacījums 2>
ir patiess. <koda bloks 3>
izpildās tikai tad, ja abi nosacījumi ir nepatiesi.
Nosacījumi savā starpā var tikt apvienoti ar loģiskajiem atslēgvārdiem AND
, OR
, kā arī nosacījuma vērtība var tikt invertēta ar atslēgvārdu NOT
.
Piemēram:
when (NOT <nosacījums 1>) AND (<nosacījums 2> OR <nosacījums 3>): <koda bloks> end
Šeit koda bloks izpildīsies tikai tad, ja <nosacījums 1>
būs nepatiess, bet vismaz viens no nosacījumiem 2 un 3 būs patiess.
Lokālā komunikācija
Lai nosūtītu datus lokāli (datoram, kuram pieslēgta mote), izmantojies Serial
komponentu. Pēc noklusēšanas, tas izvadīs visus nolasītos sensorus. Lai izvadītu tikai daļu no tiem, var izmantot iekavās norādītus laukus. Piemēram:
read Humidity; output Serial;
izvadīs mitruma sensora lasījumus. Šis kods ir analoģisks:
read Humidity; output Serial (Humidity);
Ir iespējams izmantot arī Print
komponentu, vai arī norādot out ...
parameteru tieši aiz sensoru lasījumiem.
Tīkla komunikācija
Komunikācija pa tīklu notiek līdzīgi lokālajai komunikācijai, taču Serial
komponenta vietā ir jāizmanto Radio
vaiNetwork
komponenti. Veiksmīgas komunikācijas gadījumā ziņojumi tiks saņemti uz bāzes stacijas mezgla.
Programmēšanas vide
Uzsākot testu, jums priekšā būs MansOS IDE atvērtā stāvoklī (attēlā).
SEAL kodu rakstīt paredzēts pelēkajā rajonā kreisajā pusē.
Lai atvieglotu koda ievadīšanu, eksistē vizuālais redaktors (labā puse). Noklikšķinot uz noteikts koda rindas (kura var būt nepilnīgi uzrakstīta), vizuālais redaktors parādīs izvēļu joslu ar atslēgvārdiem, nosaukumiem un parametriem, kurus varētu lietot šajā koda rindā (vai when ... end
koda blokā). Lai aktivizētu vizuālo redaktoru, nepieciešams vai nu sākt rakstīt kodu, vai arī nospiest vienu no pogām "Add statement" vai "Add condition".
Lai pārbaudītu, vai jūsu sintakse ir korekta, nospiediet "Compile" pogu. Tiks palaists programmas būvēšanas process, kas vai nu parādīs sintakses kļūdas, vai novedīs līdz paziņojumam par veiksmīgu procesa pabeigšanos. Ja tas nenotiek automātiski, programmas būvēšanās stāvokli iespējams redzēt, aktivizējot "Info" izvēlni apakšējā darbvirsmas daļā.
Lai izmēģinātu uzlādētu programmu uz motes, nospiediet "Upload" pogu. Tehnisku operētājsistēmas un aparatūras problēmu dēļ uzlādēšana var neizdoties ar pirmo mēģinājumu, Tādā gadījumā jāmēģina atkārtoti. Ja neizdodas arī ar otro reizi, pārbaudiet, vai mote ir pilnībā iesprausta. Variet arī lūgt instruktora palīdzību. Informāciju par šo procesu iespējams redzēt "Info" izvēlnē apakšējā darbvirsmas daļā.
Sensoru mezgls var sazināties pa seriālo saskarni (sūtīt diagnostiskus rakstveida ziņojumus) ar datoru, kuram tas ir pieslēgts. Lai klausītos šos ziņojumus, nospiediet "Listen" pogu. Nevar vienlaicīgi klausīties un augšupielādēt programmu. Vispirms izslēdziet klausīšanos, pēc tam augšupielādējiet. Lai izpildītu jums izsniegtos programmēšanas uzdevumus, seriālās saskarnes izmantošana programmas tekstā nav obligāta. Ja seriālās saskarnes izmantošana programmas tekstā nav norādīta, ziņojumi netiek sūtīti.