SEAL Tutorial

From DiLab
Jump to: navigation, search

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

Mansos-ide-startup.png

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. Mansos-ide-compile.png 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. Mansos-ide-upload.png 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. Mansos-ide-listen.png 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.