Detalj Design versjon 1

sandved.net

Detalj Design versjon 1

Designdokument type:

Kontrollsystem for

invertert pendel

Fag:

Systemering2

Filformat:

Versjon:

1.0

Gruppe nr:

2

Filnavn:

Dato:

Word 2000

Gruppemedlemmer:

DetaljDesign1.doc

Navn:

Christian Raspotnig

Anders Bakken

Petter Larsen

Eva Sandved

Therese Røsholdt

Signatur: Dato:

25.04.2002

Bestiller:

Rune Winther

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 1 av 30


Innholdsfortegnelse:

1 Ordliste 3

1.1 Definisjoner 3

1.2 Globale variabler 3

1.3 Hva de Globale variablene skal brukes til? 5

2 Innledning 12

2.1 Systemets brukere 12

2.2 Beskrivelse av systemet 12

2.3 Forandringer fra tidligere versjoner 12

2.4 Beskrivelse av dokumentet 12

3 Detalj design 13

3.1 Pakker og moduler 13

3.1.1 I/O-handler 14

3.1.1.1 Modulen Omforming har disse metodene: 14

3.1.1.2 Modulen Manipulering har disse metodene: 15

3.1.2 Prosessering 15

3.1.2.1 Modulen Styringsalgoritmen har disse

metodene:

15

3.1.2.1 Modulen Validering har disse metodene: 17

3.1.3 Arkivering 17

3.1.3.1 Modulen Arkivering har disse metodene: 17

3.1.4 GUI 18

3.1.4.1 Modulen Fremvisning har disse metodene: 18

3.1.4.2 Modulen Brukervalg har disse metodene: 19

3.2 Dataflyt-modell 21

3.3 Meldningssekvenser 22

3.3.1 Vanlig gang 22

3.3.2 Manipulering av output 23

3.4 Sporingstabell 24

3.4.1 Forward-form 24

3.4.1.1 Systemkrav 24

3.4.1.2 Grensesnittkrav 25

3.4.2 Backward-to 26

3.4.4.2 Designdokument 26

4 Skisse over GUI 27

4.1 ÅpningsGUI 27

4.2 GUI for kjøreverdier 28

4.3 GUI for sanntidsgraf 29

4.4 GUI for arkiverte data 30

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 2 av 30


1 Ordliste

1.1 Definisjoner

Prosedyrer En metode som ikke gir return verdi. Men setter globale

verdier

Funksjon En metode som kalkulerer/beregner og returnerer verdier

Manipuleringsdata Brukers data som skal brukes til manipulering

TidspunktPendel Tidspunkt når pendelposisjon blir lest av I/O-kort

TidspunktVogn Tidspunkt når vognposisjon blir lest av I/O-kort

1.2 Globale variabler

Begreper Variabelnavn

Arkiveringsfrekvens aFrek

Arkiveringssted aStd

Avlesningsfrekvens avLesFrek

Balanseintervall balInt

Balansepunkt balPkt

Filnavn fNavn

Lovlig område lovOmr

Plottingsfrekvens pFrek

Posisjonsdata pData

Skinnelengde sLng

Startpunkt sPkt

Styrefrekvens styrFrek

Styreverdi sVerdi

Tidsfrist tFrist

TidspunktPendel tPktPendel

TidspunktVogn tPktVogn

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 3 av 30


Begreper Variabelnavn

Tidsramme tRamme

VinkelAkselerasjon vinkAks

VinkelHastighet vinkHast

VognAkselerasjon vAks

VognHastighet VHast

Vognposisjon vPos

Tilstand Variabelnavn

Avslutt avs

Balanse bal

Behandledata bData

Flytt flytt

Kjør PV kPv

Klar klar

Null null

Nødstopp nStopp

Parametere param

Pendel ned pNed

Pendel opp pOpp

Sjekk sjekk

Slå Av sAv

Start start

Validering val

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 4 av 30


1.3 Hva de Globale variablene skal brukes til

Variabelnavn Definisjon

avLesFrek Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- omfInput() som avleser minneadressene på I/O-kortet så ofte

som variabelen tilsier

balInt Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- sjekkKjørVerdier() for å se om verdien i variabelen er kjørbar

- balanser() skal balansere pendelen innenfor verdien til

variabelen

balPkt Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- flytt() skal flytte vognen til verdien i variabelen

- balanser() skal beregne balInt ut fra verdien i variabelen

fNavn Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- arkiver() setter navn på filen lik innholder i variabelen

aFrek Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- arkivere() arkiverer kjøreverdier så ofte som verdien i variabelen

tilsier

pFrek Brukes av prosedyren:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

Brukes av funksjonene:

- lageSPendelGraf() lager grafobjekt for pendel så ofte som

innholdet i variabelen tilsier

- lageSVognGraf() lager grafobjekt for vogn så ofte som innholdet

i variabelen tilsier

aStd Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- arkivere() setter navn på filstien lik innholder i variabelen

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 5 av 30


Variabelnavn Definisjon

lovOmr Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- startAvslutt() passer på at vognene ikke kommer utenfor verdien

til variabelen

- pendeOpp() passer på at vognene ikke kommer utenfor verdien

til variabelen

- pendelNed() passer på at vognene ikke kommer utenfor verdien

til variabelen

- flytt() passer på at vognene ikke kommer utenfor verdien til

variabelen

- sjekkKjørVerdier() sjekker om innholdet i variabelen er kjørbart

- balanser() passer på at vognene ikke kommer utenfor verdien til

variabelen

sLng Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- sjekkKjørVerdier() sjekker om innholdet i variabelen er kjørbar

sPkt Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- sjekkKjørVerdier() sjekker om innholdet i variabelen er kjørbart

- startAvslutt() plassere vognen på stedet som variabelen definere

styrFrek Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- omfOutput() som setter sVerdi til minneadressene på I/O-kortet

så ofte som verdien til variabelen

tFrist Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- pendelOpp() prøver å få pendelen kontrollerbar innenfor

perioden som variabelen inneholder

tRamme Brukes av prosedyrene:

- settKjøreverdier() hvor bruker kan sette verdien til variabelen

- balanser() prøver å balansere pendelen innenfor perioden som

variabelen inneholder

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 6 av 30


Variabelnavn Definisjon

pData Brukes av prosedyrene:

- pendelOpp() som bruker verdiene i variabelen til å få pendelen

kontrollerbar

- pendelNed() som bruker verdiene i variabelen til å ta pendelen

kontrollert ned og for å stoppe vognen

- akselBeregner() som bruker verdien i variabelen for å beregne

vAks og vinkAks

- hastigBeregner() som bruker verdien i variabelen for å beregne

vHast og vinkHast

- flytt() som bruker verdien i variabelen for å flytte vognen med

pendelen i balanse, til et nytt balansepunkt

- balanser() som bruker verdien i variabelen til å holde pendelen i

balanse

- manInput() som bruker verdiene i variablene til å manipulere og

setter denne verdien i denne variabelen på nytt

vPos Brukes av prosedyrene:

- omfOutput() som omformer verdiene i variabelen til sVerdi

- nødstopp() som bruker verdien i variabelen til å stoppe vognen

fortest mulig

- startAvslutt() som bruker verdien i variabelen til å plassere

vognen på sPkt

- slåAv() som bruker verdien i variabelen til å plassere vognen på

utgangspunktet

sVerdi Brukes av prosedyrene:

- omfOutput() gjør om verdiene i sVerdi til integers som sendes til

I/O-kortet

- pendelOpp() som bruker verdien i variabelen til å få pendelen

kontrollerbar

- pendelNed() som bruker verdiene i variabelen til å ta pendelen

kontrollert ned og for å stoppe vognen

- balanser() som bruker verdien i variabelen til å styre vognen, for

å holde pendelen i balanse

- nødstopp() som bruker verdien i variabelen til å stoppe vognen

fortest mulig

- startAvslutt() som bruker verdien i variabelen til å plassere

vognen på sPkt

- slåAv() som bruker verdien i variabelen til å plassere vognen på

utgangspunktet

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 7 av 30


Variabelnavn Definisjon

tPktPendel Brukes av prosedyrene:

- omfInput() som setter den globale variabelen tPktPendel lik

verdien til variabelen

- akselBeregner() som bruker verdien i variabelen for å beregne

vAks og vinkAks

- hastigBeregner() som bruker verdien i variabelen for å beregne

vHast og vinkHast

Brukes av funksjonene:

- lageSPendelGraf() bruker verdien i variabelen til å lage et

grafobjekt for pendelen

- lageHPendelGraf() bruker verdien i variabelen til å lage et

grafobjekt for pendelen

tPktVogn Brukes av prosedyrene:

- omfInput() som setter den globale variabelen tPktVogn lik

verdien til variabelen

- akselBeregner() som bruker verdien i variabelen for å beregne

vAks og vinkAks

- hastigBeregner() som bruker verdien i variabelen for å beregne

vHast og vinkHast

Brukes av funksjonene:

- lageSVognGraf() bruker verdien i variabelen til å lage et

grafobjekt for vognen

- lageHVognGraf() bruker verdien i variabelen til å lage et

grafobjekt for vognen

vAks Brukes av prosedyrene:

- pendelOpp() som bruker verdien i variabelen til å få pendelen

kontrollerbar, samt hindre at vognen får for stor akselerasjon

- pendelNed() som bruker verdien i variabelen til å ta pendelen

kontrollert ned og stoppe vognen, samt hindre at vognen får for

stor akselerasjon

- flytt() som bruker verdien i variabelen til å flytte vognen til ett

nytt balansepunkt, samt hindre at vognen får for stor akselerasjon

- nødstopp() som bruker verdien i variabelen til å stoppe vognen

fortest mulig

- startAvslutt() som bruker verdien i variabelen til å plassere

vognen på sPkt, samt hindre at vognen får for stor akselerasjon

- slåAv() som bruker verdien i variabelen til å plassere vognen på

utgangspunktet, samt hindre at vognen får for stor akselerasjon

- balanser() som bruker verdien i variabelen for å prøve å holde

pendelen i balanse, samt hindre at vognen får for stor

akselerasjon

- sjekk() som bruker verdien i variabelen for å sjekke om

pendelsystemet er OK, samt hindre at vognen får for stor

akselerasjon

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 8 av 30


Variabelnavn Definisjon

vinkAks Brukes av prosedyrene:

- pendelOpp() som bruker verdiene i variabelen til å få pendelen

kontrollerbar

- pendelNed() som bruker verdiene i variabelen til å ta pendelen

kontrollert ned og stoppe vognen

- flytt() som bruker verdien i variabelen i å flytte vognen til ett

nytt balansepunkt

- balanser() som bruker verdien i variabelen for å prøve å holde

pendelen i balanse

vHast Brukes av prosedyrene:

- pendelOpp() som bruker verdiene i variabelen til å få pendelen

kontrollerbar, samt hindre at vognen får for stor hastighet

- pendelNed() som bruker verdiene i variabelen til å ta pendelen

kontrollert ned og stoppe vognen, samt hindre at vognen får for

stor hastighet

- flytt() som bruker verdien i variabelen til å flytte vognen til ett

nytt balansepunkt, samt hindre at vognen får for stor hastighet

- nødstopp() som bruker verdien i variabelen til å stoppe vognen

fortest mulig

- startAvslutt() som bruker verdien i variabelen til å plassere

vognen på sPkt, samt hindre at vognen får for stor hastighet

- slåAv() som bruker verdien i variabelen til å plassere vognen på

utgangspunktet, samt hindre at vognen får for stor hastighet

- balanser() som bruker verdien i variabelen for å prøve å holde

pendelen i balanse, samt hindre at vognen får for stor hastighet

- sjekk() som bruker verdien i variabelen for å sjekke om

pendelsystemet er OK, samt hindre at vognen får for stor

hastighet

vinkHast Brukes av prosedyrene:

- pendelOpp() som bruker verdiene i variabelen til å få pendelen

kontrollerbar

- pendelNed() som bruker verdiene i variabelen til å ta pendelen

kontrollert ned og stoppe vognen

- flytt() som bruker verdien i variabelen til å flytte vognen til ett

nytt balansepunkt

- balanser() som bruker verdien i variabelen for å prøve å holde

pendelen i balanse

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 9 av 30


Variabelnavn Definisjon

avs Variabelen avs er ”True” når pendelen er tatt kontrollert ned, eller

etter at nødstopp er foretatt. Den forblir ”True” til bruker velger

slå av, gi nødstopp-kommando eller velger en ny kjøring

bal Variabelen bal er ”True” når vognen har nådd et nytt

balansepunkt. Den forblir ”True” til bruker velger nytt

balansepunkt, gir nødstopp-/slutt-kommando, vognen kommer

utenfor lovlig område eller tidsrammen er utgått

bData Variabelen bData er ”True” når bruker har valgt å behandle

kjøredata. Den forblir ”True” til bruker velger til å forta en kjøring

flytt Variabelen flytt er ”True” når pendelen er kontrollerbar eller

brukeren har gitt et nytt balansepunkt. Den forblir ”True” til

vognen er på balansepunktet eller at nødstopp-kommando er gitt

klar Variabelen flytt er ”True” når kjøreverdier er validert til kjørbare,

eller når bruker velger en ny kjøring med samme kjøreverdier.

Den forblir ”True” til bruker velger å gi start-kommando eller å

avbryte

kPv Variabelen flytt er ”True” når PV er slått på, etter at bruker

avbryter en kjøring eller etter at bruker har avsluttet

behandledata. Den forblir ”True” til bruker velger å slå av PV,

velger å behandledata, eller velger å foreta en kjøring

nStopp Variabelen nStopp er ”True” når nødstopp-kommando blir gitt,

eller når vognen er utenfor lovlig område. Den forblir ”True” til

bruker gir slutt-kommando

null Variabelen null er ”True” når strømmen er slått av. Den forblir

”True” til PV blir slått på

param Variabelen param er ”True” når bruker har valgt kjøring av

pendelsystem, bruker har valgt en ny kjøring der han vil velge nye

kjøreverdier eller hvis kjøreverdiene ikke er kjørbare. Den forblir

”True” til bruker velger å validere kjøreverdiene

pNed Variabelen pNed er ”True” etter at tidsfrist, tidsramme har utgått

eller når bruker har gitt slutt-kommando. Den forblir ”True” til

slutt-kommando blir gitt, eller til vognen står stille

pOpp Variabelen pOpp er ”True” når vognen er plassert på startpunktet.

Den forblir ”True” til nødstopp-kommando blir gitt, pendelen er

kontrollerbar eller tidsfrist er utgått

sAv Variabelen sAv er ”True” etter at bruker slår av PV. Den forblir

”True” til nødstopp-kommando blir gitt eller strømmen blir slått av

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 10 av 30


Variabel Definisjon

sjekk Variabelen sjekk er ”True” etter at bruker har gitt startkommando.

Den forblir ”True” til nødstopp-kommando blir gitt eller når

pendelsystemet er sjekket

start Variabelen start er ”True” når pendelsystemet er OK. Den forblir

”True” til nødstopp-kommando er gitt eller når vognen er plassert

på startpunktet

val Variabelen val er ”True” etter at bruker har valgt å validere

kjøreverdier. Den forblir ”True” til kjøreverdiene er validert

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 11 av 30


2 Innledning

2.1 Systemets brukere

Systemets brukere er hovedfagsstudenter og ansatte innenfor Informatikk og

Automatisering ved Høgskolen i Østfold.

2.2 Beskrivelse av systemet

Systemet skal være en læringsmodell for å kjøre kritiske sanntidssystemer, og

består av en vogn på skinner som skal balansere en invertert pendel. Input kommer

fra sensorer som leser av posisjonene på vogn og pendel. Systemet prosesserer

input og styrer vognen på dette grunnlaget. Systemet skal ha mulighet for

manipulering av input/output for å simulere kritiske situasjoner. Systemet skal ha et

grensesnitt som gir en grafisk presentasjon av modellens bevegelser. Systemet skal

også ha mulighet til å arkivere data og behandle disse.

2.3 Endringsoversikt

Ingen, dette er første versjon av dokumentet.

2.4 Beskrivelse av dokumentet

Dette dokumentet tar for seg detaljdesign. Detaljdesign er et detaljert beskrivelse på

hvordan programvaren skal bygges opp. Dokumentet avspeiler kravdokumentet, dvs

at alle krav i kravdokumentet blir dekket opp i designdokumentet.

Dokumentet inneholder en modell som har delt opp systemet opp i pakker og

moduler. Hver modul er deretter delt opp i metoder. Metodene er definert ut i fra

hva de skal gjøre.

Dataflytmodellen i dokumentet viser hvordan flyten av data er i systemet.

Meldingssekvensen viser hvordan meldinger blir sendt mellom de forskjellige

modulene/objektene.

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 12 av 30


3 Detalj design

3.1 Pakker og moduler

Subsystem

PV

I/O-handler

Prosessering

Subsystem

I/O-handler

Omforming

Subsystem

Arkivering

Arkivere

Arkivering

GUI

Manipulering

Subsystem

Prosessing

Styrings-

algoritme

Subsystem

GUI

Fremvisning

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 13 av 30

Validering

Brukervalg


Notasjon:

Navn

3.1.1 I/O -handler

Moduler i pakken I/O -handler:

o Omforming

o Manipulering

Pakker

Modul i en pakke

3.1.1.1 Modulen Omforming har disse metodene:

o omfInput()

o omfOutput()

Krav ID: S-32, S-56, S-63

Indikere hvilke objekter som er forbundet

med andre objekter innen i samme

pakke, eller hvilke objekter som er

forbundet med andre pakker.

Metode Beskrivelse Setter verdier Leser variabler

omfInput() Denne prosedyren

Prosedyren setter Prosedyren mottar

omformer signalene de globale verdiene integers fra minne

(integer) som leses fra for variabelen adresser på I/O

minneadresser på I/O- pData, tPktPendel kortet

kortet. Leser også

tidspunktene signalene

ble lest. Signalene gjøres

om til grader for pendelen

og cm for vognen. Dette

er data PV kan jobbe

videre med. Sjekker om

bruker vil manipulere

og tPktVogn

omfOutput() Denne prosedyren

Prosedyren setter Prosedyren leser

omformer styreverdien integers i

den globale

som sendes til

minneadresser på variabelen sVerdi

minneadresser på I/O I/O-kortet

fra prosedyrer eller

kortet. Styreverdien

funksjoner under

omformes fra cm til

modulen

signaler (integer) som I/O

kortet på pendelsystemet

styrer vognen med.

Sjekker om bruker vil

manipulere

styringsalgoritme

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 14 av 30


3.1.1.2 Modulen Manipulering har disse metodene:

o manInput()

o manOutput()

Krav ID: S-45

Metode Beskrivelse Setter verdier Leser variabler

manInput() Denne prosedyren

manipulerer de globale

verdiene for pData med

brukers

manipuleringsdata

manOutput() Denne prosedyren

manipulerer den globale

sVerdi med brukers

manipuleringsdata

3.1.2 Prosessering

Moduler i pakken Prosessering:

o Styringsalgoritme

o Validering

Prosedyren setter

de globale

verdiene for

variabelen pData

Prosedyren setter

den globale

verdien for

variabelen sVerdi

3.1.2.1 Modulen Styringsalgoritme har disse metodene:

o pendelOpp()

o pendelNed()

o flytt()

o balanser()

o nødstopp()

o startAvslutt()

o slåAv()

o sjekk()

o akselBeregner()

o hastigBeregner()

o priSjekk()

Krav ID: S-10, S-25–S-42, S–49, S-52, S-53, S-55–S-58, S-61, S-63

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 15 av 30

Prosedyren leser

brukers satte

verdier for

manipulert pData

Prosedyren leser

brukers satte verdi

for manipulert

styreverdi

Metode Beskrivelse Setter verdier Leser variabler

pendelOpp() Denne prosedyren skal få

pendel fra posisjon ned til

kontrollerbar innenfor

tidsfristen

Setter den globale

verdien for

variabelen sVerdi

Leser de globale

variablene pData,

tPktPendel,

tPktVogn, vinkAks,

vAks, vinkHast og

vHast


Metode Beskrivelse Setter verdier Leser variabler

pendelNed() Denne prosedyren tar

pendelen kontrollert ned

og stopper vognen

flytt()

Denne prosedyren

flytter vognen til et

balansepunkt som er

satt av brukeren

balanser() Denne prosedyren skal

holde pendelen i

balanse ved å generere

styresignal til vognen

nødstopp() Denne prosedyren skal

på raskest mulig måte

bringe vognen til

stillstand

startAvslutt() Denne prosedyren skal

plassere vognen på

startpunktet

slåAv() Denne prosedyren

plasserer vognen på

utgangspunktet

sjekk() Denne prosedyren

sjekker om

pendelsystemet har

strøm og kjører vognen

over skinnen med en

jevn hastighet og

registrere uvanlig

motstand på pendelen

eller motoren

priSjekk() Denne funksjonen

sjekker om det er tid til

å utføre prioriteringene

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Setter den globale

verdien for

variabelen sVerdi

Hvis det er tid til

forespurte

prioritet,

returnerer

funksjonen ”True”,

ellers returneres

”False”

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 16 av 30

Leser de globale

variablene pData,

tPktPendel,

tPktVogn, vinkAks,

vAks, vinkHast og

vHast

Leser de globale

variablene pData,

balPkt, tPktVogn,

vinkAks, vAks,

vinkHast og vHast

Leser de globale

variablene pData,

tPktVogn, vinkAks,

vAks, vinkHast og

vHast

Leser de globale

variablene vPos,

tPktVogn,

vAks og vHast

Leser lokale

variabelen sPkt, de

globale variablene

vPos, tPktVogn,

vAks og vHast

Leser de globale

variablene for vPos,

tPktVogn, vAks og

vHast

Leser de globale

variablene pData,

tPktVogn, vinkAks,

vAks, vinkHast og

vHast

Leser variabelen

gjSnittTidArk og

gjSnittTidPlot


Metode Beskrivelse Setter verdier Leser variabler

akselBeregner() Denne prosedyren

skal på grunnlag av

tidspunktene med

tilhørende

posisjonsdata beregne

akselrasjonen til

vognen og

vinkelakselerasjon til

pendelen

hastigBeregner() Denne prosedyren

skal på grunnlag av

tidspunktene med

tilhørende

posisjonsdata beregne

hastighet til vognen

og vinkelhastigheten

til pendelen

3.1.2.2 Modulen Validering har denne metoden:

o sjekKjørVerdier()

Krav ID: S-4–S-9, S-11-S-14, S-18–S-21, S-50, S-51

Setter de globale

verdiene for

variablene

vinkAks, vAks,

samt retningen

for disse

Setter de globale

verdiene for

variablene

vinkHast og

vHast, samt

retningen for

disse

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 17 av 30

Leser de globale

variablene pData,

tPktPendel,

tPktVogn, vinkHast

og vHast

Leser de globale

verdiene for pData,

tPktPendel,

tPktVogn, vinkAks

og vAks

Metode Beskrivelse Setter verdier Leser variabler

sjekKjørVerdier() Denne prosedyren

sjekker om de valgte

kjøreverdiene er

kjørbare.

3.1.3 Arkivering

Moduler i pakken Arkivering:

o Arkivering

Hvis verdiene er

kjørbare, så kaller

den opp klar(),

hvis ikke kaller

den opp

settKjøreverdier()

3.1.3.1 Modulen Arkivering har denne metoden:

o Arkivering

Krav ID: S-15–S-17, S-23, S-24, S-56

Leser de globale

variablene aFrek,

balInt, balPkt,

avLesFrek, pFrek,

aStd, lovOmr, sLng,

sPkt, styrFrek,

tFrist, tRamme,

fNavn


Metode Beskrivelse Setter verdier Leser verdier

arkivere()

Denne prosedyren Lagrer variabelene Leser de globale

skal arkivere pData og balPkt på variablene pData og

pData og balPkt ut

fra en kjøring

lagringsmedium balPkt

3.1.4 GUI

Moduler i pakken GUI:

o Fremvisning

o Brukervalg

3.1.4.1 Modulen Fremvisning har disse metodene:

o lageSPendelGraf()

o lageSVognGraf()

o lageHPendelGraf()

o lageHVognGraf()

o visePendelGraf()

o viseVognGraf()

o viseData()

o viseMeldinger()

Krav ID: S-20, S-27, S-48, S-56, G-2, G-3, G-5, G-6, G-8, G-9, G-11-G-13, S-63

Metode Beskrivelse Setter verdier Leser variabler

lageSPendelGraf() Denne funksjonen Returnerer et Leser de globale

lager en sanntidsgraf grafobjekt

variablene pPos

for pendelen under en

kjøring

og tPktPendel

lageSVognGraf() Denne funksjonen Returnerer et Leser de globale

lager en sanntidsgraf grafobjekt

variablene vPos,

for vognen under en

tPktVogn og

kjøring

balPkt

lageHPendelGraf() Denne funksjonen Returnerer et Leser arkiverte

lager historiske grafer grafobjekt

verdier for

for pendelen ut fra en

variablene pPos

eller flere arkiverte

kjøringer

og tPktPendel

lageHVognGraf() Denne funksjonen Returnerer et Leser arkiverte

lager historiske grafer grafobjekt

verdier for

for vognen ut fra en

variablene vPos,

eller flere arkiverte

tPktVogn og

kjøringer

balPkt

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 18 av 30


Metode Beskrivelse Setter verdier Leser variabler

visePendelGraf() Denne prosedyren

Mottar

viser hvordan

grafobjekter fra

pendelen beveger seg

lageSPendelGraf()

i forhold til tid. Denne

og

prosedyren skal kunne

vise sanntids- og

historiske-grafer.

Sanntidsgrafen skal

vise det siste minuttet

til pendelens posisjon.

Tidsspekteret til den

historiske grafen er

konfigurerbart

lageHPendelGraf()

viseVognGraf() Denne prosedyren

Mottar

viser hvordan vognen

grafobjektet fra

beveger seg i forhold

lageSVognGraf()

til tid. Balansepunkt

og

skal også tegnes inn

på grafen. Denne

prosedyren skal kunne

vise sanntids- og

historiske-grafer.

Sanntidsgrafen skal

vise det siste minuttet

til vognens posisjon.

Tidsspekteret til den

historiske grafen er

konfigurerbart

lageHVognGraf()

viseData()

Denne prosedyren

Leser de globale

viser alle de valgte

variablene aFrek,

kjøreverdiene for en

balInt, balPkt,

kjøring. Disse dataene

avLesFrek, pFrek,

skal vises i samme

aStd, lovOmr,

skjermbilde som

sLng, sPkt,

grafene

styrFrek, tFrist,

tRamme, fNavn

samt balPkt

viseMeldinger() Denne funksjonen skal Returner en Leser lokal array

gi tilbakemelding til tilbakemelding som inneholder

bruker

ulike

tilbakemeldinger

3.1.4.2 Modulen Brukervalg har disse metodene:

o slette()

o skriveUtPendelGraf()

o skriveUtVognGraf()

o settKjøreverdier()

Krav ID: S-2, S-3, S-18, S-19, S-21, S-22, S-30, S-41, S-46, S-47, G-1, G-7, G-10

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 19 av 30


Metode Beskrivelse Setter verdier Leser verdier

slette()

Denne prosedyren

sletter en arkivert

kjøring fra

lagringsmediet

Leser valgt fil

skriveUtPendelGraf() Denne prosedyren

Mottar grafobjekt

skriver ut en

fra

arkivert graf over

pendelens posisjon

i forhold til tid

lageHPendelGraf()

skriveUtVognGraf() Denne prosedyren

Mottar grafobjekt

skriver ut en

fra

arkivert graf over

vognen posisjon

og balansepunkt i

forhold til tid

lageHVognGraf()

settKjøreverdier() Denne prosedyren Setter de globale Leser default

gir brukeren verdiene til

verdiene fra

mulighet til å variablene aFrek, defaultv.conf

konfigurere alle balInt, balPkt,

kjøreparametere avLesFrek, pFrek,

aStd, lovOmr,

sLng, sPkt,

styrFrek, tFrist,

tRamme, fNavn

samt balPkt

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 20 av 30


B

R

U

K

E

R

3.2 Dataflyt-modell

Kommandoer*

og verdier**

Manipulerte

posisjonsdata

Manipulert

styreverdi

Graf objekt

Omformer rå

pos.data til pos.data

Manipulerer

pos.data

Start visning-kommando

Rå posisjonsdata

Posisjonsdata

Prosessér graf

Vis i GUI

I/O kort

Posisjonsdata

Styrings-

algoritme

Manipulerte

posisjonsdata

Posisjonsdata,

tidspkt. og

verdier**

Graf objekt

* Start- slutt- og nødstoppkommando

** Kjøreverdier og balansepunkt

Styreverdi

Styreverdi

Arkiver

posisjonsdat og

tidspkt.

Omformer

styreverdier til

rå styreverdier

Manipulerer

styreverdi

Posisjonsdata,

tidspkt. og

verdier**

Posisjonsdata,

tidspkt. og

verdier**

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 21 av 30

Rå styreverdi

Manipulert

styreverdi

Posisjonsdata,

tidspkt. og

verdier**

NB! Det er ikke

parameteroversendelse, globale

variabler hentes fra RAM

A

R

K

I

V

E

R

I

N

G

S

M

E

D

I

U

M


Notasjon:

Tegn Forklaring

Terminator. Bruker av systemet

Input Output

I forbindelse med pilen er det en tekst som beskriver

hva inputen/outputen består av

Transformasjon (også kalt metode). Her behandles data

fra input og sendes videre som output til en annen

metode eller bruker

Databaser. Dette kan være interne databaser i selve

systemet eller eksterne databaser

3.3 Meldningssekvenser

Disse sekvensene dokumentere interaksjoner som utføres mellom objekter.

3.3.1 Vanlig gang

Systemets tilstand før start av meldingssekvens:

Systemet er slått på. Kjøreverdiene er satt av bruker og er blitt validert av systemet.

I/O-kortet har fått råsignaler fra pendel og vogn og legger disse i minneadresser på

I/O-kortet. Systemet har lest brukerkommandoer.

Prioritering

If tid til arkivering

If tid til plotting

PV

omfInput()

total

omfOutput()

arkiver()

lageSPendelGraf()

lageSVognGraf()

:I/O-Handler :Prosessering :Arkivering :Plotting

visePendelGraf()

viseVognGraf()

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 22 av 30


total omfatter alle metoder i modulen Styringsalgoritme, unntatt priSjekk().

Systemets tilstand etter endt meldingssekvens:

Vognene er plassert på startpunktet. Systemet gir bruker valg om enten å slå av

systemet, starte en ny kjøring med samme kjøreverdier eller med nye kjøreverdier

eller behandle kjøredata.

3.3.2 Manipulering av output

Systemets tilstand før start av meldingssekvens:

Modulen Prosessering har beregnet styreverdi og skrevet disse til den globale styreverdien.

If manipulering = true

Systemets tilstand etter endt meldingssekvens:

Pendelsystemet styres etter de omformede verdiene som omfOutput() har lagret i

minneadressene på I/O-kortet.

Notasjon:

Tegn Forklaring

Sender forventer svar

:Objektnavn

:PV

omfOutput()

omfOutput() manOutput() I/O-kort

manOutput()

omfOutput()

Sender forventer ikke svar

Har kontroll

Gir kontroll tilbake

Objekt med navn

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 23 av 30


3.4 Sporingstabell

3.4.1 Forward-from

3.4.1.1 Systemkrav

Krav Relatert til Krav Relatert til

S-1 Pakken: PV S-30 balanser(), Modul: Brukervalg

S-2 Modul: Brukervalg S-31 flytt()

S-3 settKjøreverdier() S-32 pendelOpp(), pendelNed(), flytt(),

balanser(), nødstopp(), startAvslutt(),

slåAv(), sjekk(), omfInput(), omfOutput()

S-4 validering() S-33 pendelNed(), pendelOpp(), balanser(),

nødstopp(), startAvslutt(), slåAv()

S-5 validering() S-34 pendelOpp(), pendelNed(), flytt(),

balanser(), nødstopp(), startAvslutt(),

slåAv()

S-6 validering() S-35 pendelOpp()

S-7 validering() S-36 balanser()

S-8 validering() S-37 pendelNed()

S-9 validering() S-38 pendelOpp(), pendelNed(), flytt(),

balanser(), startAvslutt(), slåAv(), sjekk()

S-10 balanser() S-39 nødstopp()

S-11 validering() S-40 startAvslutt()

S-12 validering() S-41 startAvslutt(), settKjøreverdier()

S-13 validering() S-42 slåAv()

S-14 validering() S-45 manInput(), manOutput()

S-15 arkivering() S-46 Modul: Brukervalg

S-16 arkivering() S-47 slette()

S-17 arkivering() S-48 skriveUtPendelGraf(),

S-18 validering(), Modul:

Brukervalg

skriveUtVognGraf()

S-49 pendelOpp(), pendelNed(), flytt(),

balanser(), nødstopp(), startAvslutt(),

slåAv(), nødstopp(),akselBeregner(),

hastigBeregner()

S-50 Pakken: Prosessering

S-19 validering(),

settKjøreverdier()

S-20 validering(),

viseMeldinger()

S-51 Pakken: Prosessering!!

S-21 validering(), Modul:

Brukervalg

S-52 priSjekk()

S-22 Modul: Brukervalg S-53 priSjekk()

S-23 arkivering() S-55 Pakken: Prosessering

S-24 arkivering() S-56 Styringsalgoritme, arkivering(),

lageSPendelGraf() lageSVognGraf(),

visePendelGraf(), viseVognGraf(),

omfInput(), omfOutput()

S-25 sjekk() S-57 startAvslutt()

S-26 startAvslutt() S-58 akselBeregner(), hastigBeregner()

S-27 sjekk(),

viseMeldinger()

S-61 Pakken: Prosessering

S-28 pendelOpp() S-63

S-29 pendelOpp()

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 24 av 30


3.4.1.2 Grensesnittkrav

Krav Relatert til Krav Relatert til

G-1 Modul: Brukervalg G-8 viseData()

G-2 lageSVognGraf(),

viseVognGraf()

G-9 lageSVognGraf(), viseVognGraf()

G-3 lageSPendelGraf(),

visePendelGraf()

G-10 Modul: Brukervalg

G-5 visePendelGraf() G-11 lageHPendelGraf(), lageHVognGraf(),

viseVognGraf(), visePendelGraf

G-6 lageHVognGraf(),

lageHPendelGraf(),

viseVognGraf(),

visePendelGraf()

G-12 visePendelGraf(), viseVognGraf()

G-7 Modul: Brukervalg G-13 visePendelGraf(), viseVognGraf()

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 25 av 30


3.4.2 Backward-to

3.4.2.1 Designdokument

Designdokument Kravdokument

Modul: Omforming

omfInput() S-32, S-56

omfOutput() S-32, S-56

Modul: Manipulering

manInput() S-45

manOutput() S-45

Modul: Styringsalgoritme S-56

PendelOpp() S-28, S-29, S-32, S-33, S-34, S-35, S-38, S-49

PendleNed() S-32, S-33, S-34, S-37, S-38, S-49

flytt() S-31, S-32, S-33, S-34, S-38, S-49

balanser() S-10, S-30, S-32, S-33, S-34, S-36, S-38, S-49

nødstopp() S-32, S-33, S-34, S-39, S-49

startAvslutt() S-26, S-32, S-3, S-34, S-38, S-40, S-41, S-49, S-57

slåAv() S-32, S-33, S-34, S-38, S-42, S-49

sjekk() S-25, S-27, S-32, S-38

priSjekk() S-52, S-53

akselBeregner() S-49, S-58

hastigBeregner() S-49, S-58

Modul: Validering

sjekkKjørVerdier() S-4–S-9, S-11-S-14, S-18–S-21,

Modul :Arkivering

arkivere() S-15–S-17, S-23, S-24, S-56

Modul: Fremvisning

lageSPendelGraf() S-56, G-3

lageSVognGraf() S-56, G-9

lageHPendelGraf() G-2, G-6, G-10

lageHVognGraf() G-2, G-6, G-10

visePendelGraf() S-56, G-3, G-5, G-6, G-10, G-11, G-12

viseVognGraf() S-56, G-6, G-9, G-10, G-11, G-12

viseData() G-8

viseMeldinger() S-20, S-27

Modul: Brukervalg S-2, S-18, S-20, S-21, S-30, S-46, G-1, G-7, G-10

slette() S-47

skriveUtPendelGraf() S-48,

skriveUtVognGraf() S-48,

settKjøreverdier() S-3, S-19, S-41,

Krav S-1, S-50, S-51, S-55 og S-61 blir ikke dekket av metoder. I sporingstabellen

3.4.1.1 er S-1 relatert til pakken: PV, og de andre til pakken: Prosessering.

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 26 av 30


4 Skisser av GUI

GUIene er relatert til GUI-krav, G-1-G-3, G-5-G-13.

NB: Disse skissene sier noe om hvilke elementer GUIene

skal inneholde. Skissene sier ingenting om størrelsen på

elementene eller plasseringen av disse, verken seg i mellom

eller i forhold til totalstørrelsen på GUIet

4.1 ÅpningsGUI

Orientering om systemet

Beskjedfelt

Start

pendelsystem

Se tidligere

kjøringer

Lukk

Kommentar:

Velger brukeren ”Start pendelsystem” åpnes ”GUI for kjøreverdier” i stedet for

”ÅpningsGUI”.

Velger brukeren” Se tidligere kjøringer” åpnes ”GUI for arkiverte data” i stedet for

”ÅpningsGUI”.

Knappen ”Lukk” kan virke på to måter:

Har det ikke vært foretatt noen kjøring i løpet av sesjonen, lukkes bare PV.

Har det vært foretatt en eller flere kjøringer: se kommentar under ”GUI for

sanntidsgraf”.

”Beskjedfelt” brukes til å informere brukeren om feil ved pendelsystemet

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 27 av 30


4.2 GUI for kjøreverdier

Kjøreverdifelt

Beskjedfelt

Lagring

Sett

kjøreverdier

Ja Nei

Lukk

Kommentar:

”Lagring” skal ikke være tilgjengelig før PV har godkjent kjøreverdiene.

Brukeren kan velge om han vil benytte default kjøreverdier (vises i ”Kjøreverdifelt”) eller

sette sine egne (gjøre om verdiene i ”Kjøreverdifelt”). Har det allerede vært foretatt en

kjøring og brukeren går tilbake til dette GUIet er det kjøreverdiene for den siste

kjøringen som vises i ”Kjøreverdifelt”.

Brukeren kan så velge ”Sett kjøreverdier” og kjøreverdiene blir sjekket og evt. godkjent

av PV. Blir kjøreverdiene underkjent får brukeren beskjed i ”Beskjedfelt”, blir de godkjent

blir ”Lagring” gjort tilgjengelig.

Når brukeren har valgt ”Ja” eller ”Nei” til lagring åpnes ”GUI for sanntidsgraf” i tillegg til

”GUI for kjøreverdier”. Så lenge ”GUI for sanntidsgraf” er åpent skal ingen av knappene i

”GUI for kjøreverdier” være tilgjengelige.

Velger brukeren ”Lukk” åpnes ”ÅpningsGUI” i stedet for ”GUI for kjøreverdier”.

Fotnote: Knappen ”Lukk” må avspeiles i tilstandsmodellen???

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 28 av 30


4.3 GUI for sanntidsgraf

Beskjedfelt

Pendelgraf

Vogngraf

Sett nytt

balansepunkt

Manipulering av

posisjonsdata

og styreverdi

Start

kjøring

Avslutt

kjøring

Lukk

Nødstopp

Kommentar:

Velger brukeren ”Start kjøring” utføres først en sjekk av pendelsystemet.

Hvis sjekken er OK går vognen til startpunktet for å starte oppsving av pendelen og

grafene begynner å bli tegnet.

I ”Sett nytt balansepunkt” kan brukeren sette et nytt balansepunkt underveis i kjøringen.

I ”Manipulering av …” kan brukeren manipulere posisjonsdata og styreverdi.

Hvis sjekken ikke er OK lukkes både ”GUI for sanntidsgraf” og ”GUI for kjøreverdier”, og

”ÅpningsGUI” åpnes med beskjed om at noe gikk galt under sjekken.

”Start kjøring” og ”Lukk” skal ikke være tilgjengelig mens en kjøring pågår.

”Nødstopp” skal ikke være tilgjengelig før brukeren har trykket på ”Start kjøring”.

”Avslutt kjøring” skal ikke være tilgjengelig før pendelen er kontrollérbar eller brukeren

har trykket ”Nødstopp”.

”Sett nytt balansepunkt” og ”Manipulering av…” skal ikke være tilgjengelige før systemet

har fått pendelen kontrollérbar.

Hvis kjøringen avslutttes ved at brukeren trykker ”Avslutt kjøring”, eller ved at tisfristen

eller tidsrammen til kjøringen er utgått, blir både ”GUI for sanntidsgraf” og ”GUI for

kjøreverdier” stående åpne, og ”Lukk” i ”GUI for sanntidsgraf” blir gjort tilgjengelig.

Brukeren kan så velge ”Start kjøring” for å starte en ny kjøring med de samme

kjøreverdiene, eller velge ”Lukk” for å gå tilbake til ”GUI for kjøreverdier” og der sette

nye kjøreverdier eller gå videre ut av ”GUI for kjøreverdier”.

Hvis kjøringen avslutttes ved at brukeren trykker ”Nødstopp” blir både ”GUI for

sanntidsgraf” og ”GUI for kjøreverdier” stående åpne, men ”Lukk” blir ikke gjort

tilgjengelig. Brukeren må først velge ”Avslutt kjøring” slik at vognen går til startpunktet

igjen, før ”Lukk” blir tilgjengelig.

Velger brukeren å avslutte PV (med ”Lukk” på ”ÅpningsGUI”), og det har vært foretatt en

eller flere kjøringer i løpet av sesjonen, åpnes ”GUI for sanntidsgraf” igjen, men da skal

”Nødstopp” være den eneste tilgjengelige knappen (fordi det kan være nødvendig å

bruke ”Nødstopp” mens vognen plasseres på utgangspunktet). Ingen av knappene på

”ÅpningsGUI” skal være tilgjengelige så lenge ”GUI for sanntidsgraf” står åpent. Går

vognplasseringen uten problemer lukkes både ”GUI for sanntidsgraf” og ”ÅpningsGUI”.

Hvis brukeren Prosjekt i denne i Systemering fasen har 2, brukt Kontrollsystem ”Nødstopp” for invertert blir GUIene pendel stående åpne og brukeren

Detaljdesign

må velge ”Avslutt kjøring” slik at vognen går til startpunktet igjen, før ”Lukk” blir

Side 29 av 30

tilgjengelig og han kan førsøke å lukke PV igjen.


4.4 GUI for arkiverte data

Kjøreverdifelt

Manipulering

????????????

Pendelgraf

Vogngraf

Zoom

Prosjekt i Systemering 2, Kontrollsystem for invertert pendel

Detaljdesign

Side 30 av 30

Velg

kjøring

Skriv ut graf

Lukk

Kommentar:

Når GUIet åpnes er bare knappene ”Velg kjøring” og ”Lukk” tilgjengelige. Velger

brukeren ”Lukk” lukkes ”GUI for arkiverte data” og ”ÅpningsGUI” åpnes.

Velger brukeren ”Velg kjøring” åpnes defaultmappen for arkiverte data i en vanlig

filtremeny. Brukeren kan da velge en kjøring, og slette eller åpne denne.

Velger brukeren å åpne kjøringen vises kjøreverdiene for denne i ”Kjøreverdifelt” og

Grafene for kjøringen vises i ”Pendelgraf” og ”Vogngraf”. Knappen ”Skriv ut graf” gjøres

tilgjengelig.

I ”Zoom” kan brukeren velge hvilken del av kjøringen han vil se på, og i hvilken

oppløsning.

Velger brukeren ”Skriv ut graf” åpnes dialogboksen til printer, slik at brukeren kan

formatere utskriften før den blir skrevet ut.

Similar magazines