Programdesign (Sun SPOT): Forskelle mellem versioner

Fra DAMNWiki
Spring til navigationSpring til søgning
No edit summary
No edit summary
Linje 18: Linje 18:
* Håndtering af indkomne datapakker.
* Håndtering af indkomne datapakker.
*# ''Ping''. Hver frie sensor skal konstant gøre opmærksom på sin tilstedeværelse.
*# ''Ping''. Hver frie sensor skal konstant gøre opmærksom på sin tilstedeværelse.
*# Data. Temperatur, accelerometer, lys, radiostyrke. Dataene håndteres konkret et andet sted.
*# Data. Protokollen giver mulighed for at sende variabelværdier fra sensoren til basisstationen. Dataene håndteres konkret et andet sted.
*# Adresser.  
*# Vedligeholdelseskommandoer, herunder:
*# Vedligeholdelseskommandoer, herunder:
*## Hver frie sensor vil forsøge at oprette forbindelse til basisstationen. Der er således et konstant behov for, at sensorer kan kontakte basisstationen.
*## Hver frie sensor vil forsøge at oprette forbindelse til basisstationen. Der er således et konstant behov for, at sensorer kan kontakte basisstationen.
Linje 33: Linje 34:


Hver af de følgende opgaver håndteres af en enkelt tråd:
Hver af de følgende opgaver håndteres af en enkelt tråd:
* Oprettelse af forbindelse og efterfølgende ''pings''.
* Oprettelse af forbindelse og efterfølgende ''pings'' til både nabosensorer og basisstation.
* Modtagelse og distribuering af indkommende opgaver samt forespørgsler.
* Modtagelse og distribuering af indkommende opgaver samt forespørgsler.
* Opgavehåndtering, herunder:
* Opgavehåndtering, herunder:

Versionen fra 9. apr. 2008, 15:23

Denne artikel indeholder informationer omkring den konkrete udformning af Sun SPOT programmet. Designet ligger tæt op ad kravspecifikationen

Generelt

Vi vil som altid i forbindelse med grafisk brugerflade programmering benytte os af model-view-control design mønstret.

Model

Modellen er den del af systemet, som skal håndtere alle data, hvilket inkluderer positionsbestemmelse samt protokol. Disse punkter bliver behandlet selvstændigt nedenfor.

Modellen kommunikerer med den grafiske brugerflade igennem interfaces. Brugerfladen må ikke i sig selv indeholde vigtige oplysninger såsom variabler, sensor lister osv. Disse gemmes og vedligeholdes i modellen.

Protokol

Protokollen opdeles som i kravspecifikationen i to dele. En for basisstationen og en for de frie sensorer. I forbindelse med simulering af sensorer gælder nogle specifikke forholdsregler, da der i dette tilfælde skal oprettes en virtuel forbindelse og ikke en fysisk forbindelse mellem basisstationen og sensorerne.

Basisstation

Basisstationenen skal kunne holde styr på mange ting på en gang. Det er derfor nødvendigt at benytte trådet programmering.

Opgaver (ukomplet liste):

  • Håndtering af indkomne datapakker.
    1. Ping. Hver frie sensor skal konstant gøre opmærksom på sin tilstedeværelse.
    2. Data. Protokollen giver mulighed for at sende variabelværdier fra sensoren til basisstationen. Dataene håndteres konkret et andet sted.
    3. Adresser.
    4. Vedligeholdelseskommandoer, herunder:
      1. Hver frie sensor vil forsøge at oprette forbindelse til basisstationen. Der er således et konstant behov for, at sensorer kan kontakte basisstationen.
      2. Hvis en sensor pludselig mister forbindelse til en anden sensor, skal dette rapporteres.
      3. Status meddelelser som f.eks. antal naboer, deres adresser osv.
  • Håndtering af data.
Som beskrevet i kravspecifikationen skal det være muligt til hver en tid at se en sensors målinger. Vi ved endnu ikke, om disse målinger skal gemmes eller blot være den seneste måling.
Pseudokode

Dette punkt vil løbende blive opdateret eftersom protokollen udvikler sig.

Fri sensor (Sun SPOT)

De frie sensorer er primært kommunikationled i en kæde/rute, som forbinder hele sensornetværket. Kravspecifikationen beskriver, hvad de frie sensorer skal kunne, hvilket uddybes her. Der er ligesom for basisstationen behov for at benytte trådet programmering.

Hver af de følgende opgaver håndteres af en enkelt tråd:

  • Oprettelse af forbindelse og efterfølgende pings til både nabosensorer og basisstation.
  • Modtagelse og distribuering af indkommende opgaver samt forespørgsler.
  • Opgavehåndtering, herunder:
    • Videresendelse af beskeder.
    • Besvarelse på forespørgsler.
Opgave/forespørgelsprotokol
package = data_to_base {name type value}+ | request_from_base address request_line | broadcast
request_line = "get" get_type | "set" name value | "run" name {arguments}*
get_type = name | "variables" | "functions" | "neighbours"

name = alpha{alpha | number}*
value = rnumber | alpha+ | bool

address = "0014.4F01." subaddr "." subaddr
subaddr = hex{4}

data_to_base = 1
request_from_base = 2
broadcast = 3

type = byte | int | long | float | double | char | string | boolean 
byte = 0
int = 1
long = 2
float = 3
double = 4
char = 5
string = 6
boolean = 7

"hex" betegner et hexadecimal tal. Altså 0 til F. "alpha" betegner bogstaver fra a-z og A-Z. "number" er et positivt heltal bestående af cifrene 0-9. "rnumber" er et rationelt tal. "bool" en sandhedsværdi, som kan være enten true eller false.

Pseudokode

Dette punkt vil løbende blive opdateret eftersom protokollen udvikler sig.

Tråd 1: Oprettelse af forbindelse og efterfølgende pings

while (true)
{
    while (!connected)
    {
        broadcast(this.id);
        pause(random long); // milisecs
    }

    while (connected)
    {
        sendToBaseStation(ping & sensordata);
        pause(10000); // milisecs
    }
}

Tråd 2: Modtagelse af opgaver samt distribuering:

while (true)
{
    while (connected)
    {
        receive(request);
        distributeRequest(request); // Tilføj til en kø eller lignende
        pause(100);
    }
    pause(5000);
}

Tråd 3: Opgavehåndtering

while (true)
{
    while (!requestQueue.isEmpty)
    {
        handleRequest(requestQueue.poll); // Videresend besked
        pause(100);
    }
    pause(1000);
}

Positionsbestemmelse

Model design

Ovenstående beskrivelser giver anledning til følgende programopbygning for modellen.

View - GUI

GUI design