7 Test. 7.1 Indledning

Relaterede dokumenter
2 Resumé. Denne projektrapport omhandler udvikling af et Intelligent House Control system hvor lys og varme kan overvåges og styres i en bygning.

Filnavn: main.c

7.8 Accepttest Visuelt i Ontime s Ontime kræver eller Visuelt på PC. Kommunikationsstik sidder i en COM-port.

Projektet opdeles i et overordnet blokdiagram bestående af 3 hovedblokke: Husstyrings system. Fig hovedblokke

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

fig RS-485-tranciever

KOMPONENT BESKRIVELSE

Projekt - RoboNet Del Journal.

Arduino Programmering

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

MCE9637 DeviceNet Modul

Seriel kommunikation RS232 / RS485

GSM SMS Modem MODEL: SA RTU-1 V1.01

Microcontroller, Arduino

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

Analoge indgange og A/D konvertering. Analoge udgange

Programmeringseksempel tl BCxxxx (Seriel)

0.1 Modultest af hardware

FireBUS PARKERINGSVENTILATION

Gateway MP til Modbus RTU. Alle BELIMO motorer med MP-Bus kan tilsluttes til MP-siden af UK24MOD. Interface MP / Modbus RTU

Manual IHC Kompatibelt SMS modem. Generel info:... 2 Controllere:... 2 Manualen... 2 Komandoer syntax... 2 Lysdioder... 2 Tilslutning:...

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

AgroSoft A/S AgroSync

QUICKVEJLEDNING til Piccolo Light

System Arkitektur og Integration

Beskrivelse af vejrstation OM1 NETLON NETLON. Dette dokument indeholder en beskrivelse af en vejrstation OM1 fra Netlon.

Datamaters arkitektur og programmering

MANUAL SKIOLD GØR EN FORSKEL DISTRIWIN SERVICE INSTALLATION

QUICKVEJLEDNING til multiguard DIN6. Montering

MCE2040 SERIEL KOMMUNIKATIONSMODUL

Indholdsfortegnelse:

Dr.Sherlock INSTALLATION. 1.0 Diagram TEMPERATUR - OVERVÅGNING

Analog Øvelser. Version. A.1 Afladning af kondensator. Opbyg følgende kredsløb: U TL = 70 % L TL = 50 %

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

Selektro CCM App. Brugermanual. Selektro CCM App Brugermanual DK. Selektro A/S, Erhvervsvej 29-35, DK-9632 Møldrup. Copyright Selektro A/S 2017

Journal JTAG: Udarbejde af: Benjamin Grydehøj I samarbejde med PDA Projektgruppen. Elektronikteknologafdelingen på Erhvervsakademi Fyn.

Installatør Guide. CTS6000 Webcontrol

Updater KINO. Opsætning og installation

X88. X88 er en GSM/SMS baseret fjernstyring med: 8 indgange 8 relæudgange Mulighed for temperaturføler

FireBUS BRANDSIKRINGSAUTOMATIK For spjældsikrede og røgventilerede systemer

Vejledning INSTALLATION AF ZHC5010 BETJENINGSTRYK MED FIBARO HOME CENTER. ZHC5010 Firmware Version: 1.0

AF2208N og AF2208N + trådløse Wi-fi forstærker / AP Long-range

Kravspecifikation For. Gruppen

Navn: Søren Guldbrand Pedersen Klasse: 2i Fag: up/ansi C Opgave: Brev til Sigurd Lære: John Austin Side 1 af 13 Dato:

1.1 Indledning. Features: Højintensitet LED-display. Fleksibel forsyning (12-45V). Kan placeres op til 100m fra controlleren.

Reguleringssystem EnergyLogic Touchline Wave

INSTALLATION GOLDen GATE, TBLZ-1/

2x50 ETHERNET MODUL. RS485 slave med Ethernet-IP. Gælder for: Program nr.: AUXSLAVE v1 Dokument nr.: 0422md2x50-2v1 Dato:

GSM port styring 400 brugere

IP Modul report / Netværks software manual 1.0 Funktions beskrivelse:

ninasoft Micro Temp. Vandtæt miniature temperatur datalogger.

Montering af CSE-H55N til REFUsol invertere (rev 1.0)

Øvelse. Øvelse. D.1 CMOS-øvelse. Under øvelsen laves notater, som senere bruges i den efterfølgende journal! Opgave 1:

Parallelbox 2. Installationsmanual

Installation af Point Yomani terminal

Hardware dokumentation Skrevet af. Gruppen. Version 1.0

WEA-Base Brugervejledning til vejetransmitter

UniLock System 10. Manual til interface fra trådløse Salto Sallis døre til UniLock. Version 1.0 Revision

smart-house Web-Server Manual smart-house Web-Server Manual 1 of 15

SSIHuset Svane Electronic Arildsvej 27, Gråmose, DK-7442 Engesvang. Tastatur med proximity standard læser Model 12 og 20

QUICKGUIDE multiguard Klima

Programmeringseksempel til CX/IPC

Grundopsætning af Piccolo på server og terminal og brug af Check-In

Interrupt - Arduino. Programmering for begyndere Brug af Arduino. Kursusaften 6 EDR Hillerød Knud Krogsgaard Jensen / OZ1QK

SSI-9001 IP65. Installations vejledning. SSIHuset v/svane Electronic ApS. GSM fjern kontrol og alarm system

UniLock System 10. Manual til COM Server CV72. Version 1.0 Revision

Accepttest Specifikation For. Gruppen

Microcontroller, Arduino

I3PRG3+I3DTM3+I3ISY1-3. semester

Alle dip 1 7 sættes til On for at opnå stand-alone operation fra PC.

Vedvarende energi. Sådan kommer du i gang med LEGO Energimåleren

Relæ - Timer relæ m. 18 funktioner, 12 V

QUICKVEJLEDNING til multiguard Master IO. Montering

DME Bootstrap Version 1.4x

Klasse 1.4 Michael Jokil

Installation af GPS med tilslutning til USB port

TinkerCad - Arduino simulator

Lyskryds. Thomas Olsson Søren Guldbrand Pedersen. Og der blev lys!

Secure O matic. Gruppe 5 2. SEMESTERPROJEKT. Udgave. Testspecifikation

Viditronic NDVR Quick Guide. Ver. 2.0

DRFLive - dynamisk visning af resultater fra DRF Stævnesystem

Diagnostic og Toolbox Instruktion. Lindgaard Pedersen A/S. Rev. 1.0 Side 1 / 14

KOMPONENT BESKRIVELSE

Betjeningsvejledning. til. Vandkiosk. system

Svar på de mest almindelige Citrix spørgsmål

LM Technologies bluetooth seriel adapter Installationsvejledning

Projekt Træningsmaskine

18/ Version 2.0 Side 1 af 36

SPIDER Quick guide. DATO: August 2017 FORHANDLER: WASYS A/S. Langebjergvænget Roskilde

INSTALLATIONS- OG REFERENCEVEJLEDNING ECR8200SPROGRAMMING UTILITY. Code:

X88S. SMS fjernstyring til sommerhuse

Analyseopgaver. Forklar kredsløbet. Forklar kredsløbet. 3.0 DC Adapter med Batteri Backup.

LCD Character display Intro

Video Projector Controller. Brugermanual

Indholdsfortegnelse. EasyIQ IDM 5.4 Brugermanual

DK-Unit Point version 2.xx til PWE 37

NVR Client system. Bruger Manual. SuperVision Alarmteknik ApS Cedervej 2, 8462 Harlev J

Duplex 312 FJERNAKTIVERING, OVERVÅGNING OG STYRING Brugermanual Varenr

Åbning af porte og UPnP

Transkript:

7 Test 7.1 Indledning For at definere/kontrollere det udviklede produkts kvalitet skal der udføres forskellige typer af tests. Disse tests skal defineres og planlægges udfra hvad der testes for, og hvad testen skal give af informationer. Der skal udarbejdes testcases der udføres parallelt med projektets udviklingsforløb, og der vil derfor være tale om tests på flere niveauer. De udførte tests skal i sidste ende sikre at produktets kvalitet er kendt, og give en sikkerhed for at produktet opfylder de ønskede krav. Desuden skal test på forskellige niveauer sikre at eventuelle fejl konstateres så tidligt i forløbet som muligt, ideelt set under beskrivelse af kravene til produktet. Årsagen til ønsket om at eventuelle fejl findes tidligt, er naturligvis, at fejlene bliver sværere og mere kostbare at rette jo længere projektforløbet er nået. Testen i dette projekt udføres efter den kendte og meget benyttede V-model. V-modellen er opbygget således hver fase i udviklingen af et produkt har en tilsvarende testfase.?? Kravspecifikationen modsvares af acceptesten.?? Overordnet design/struktureringen modsvares af integrationstesten.?? Detaljeret design/implementering modsvares af modultesten. På denne måde sikres det, at der udføres tests af alle faser i projektet, hvilket giver overblik over kvaliteten af de enkelte dele, der indgår i produktet. I det færdige produkt vil der indgå både hardware og software, og disse har naturligvis forskellige parametre, der kan fremprovokere fejl. Det har imidlertid ikke indflydelse på testmodellen, det skal blot sikres, at de enkelte tests udarbejdes målrettet til testobjekterne. Der vil under hver enkelt af de ovenstående punkter være en beskrivelse af testens formål, samt en testdokumentation, der indeholder hvad der testes på, teststimuli og det forventede resultat. Intelligent House Control Side 7-1

7.2 Modultest af PC-protokol Test af PC-protokollen foretages med to PC ere forbundet med et nullmodem-kabel WindowsNT, Slave Com1 NullModem RD, TD, GND Com1 RTKernel, Master fig. 7.1 - testopstilling På slavesiden er hyberterminalen åbnet når slaven skal modtage og et Cpp-program når slaven skal sende. Både hyberterminal og Cpp-programmet er sat til 1200baud, 8 databit, ingen paritet og 1 stopbit. På mastersiden kører et commandprompt RTKernel-program, der benytter protokollen og skriver tider og data ud på skærmen for programforløbet til dette testformål. Protokollen er sat til en timeout på 1 sek. og retransmision på op til 3 gange. I efterfølgende test udføres scenarierne for protokollen. Intelligent House Control Side 7-2

Signatur forklaring CheckSum Adr. CheckSum data pakke PC µprocessor Scenarie 1 Solskins-eksempel 1 CheckSum 1 CheckSum 1 Adresse-felt Scenarie 2 Ingen pakke når slave 1 støj Timeout: 1 sek - prøv igen - op til 3 gange 1 1 Scenarie 3 Checksumfejl i slave 1 støj Timeout: 1 sek - prøv igen - op til 3 gange 1 CheckSum ikke 1 Svar ikke master Scenarie 4 Checksumfejl i master 1 prøv igen - op til 3 gange CheckSum ikke støj 1 CheckSum 1 Adresse-felt Scenarie 5 Fejl i Adr. felt 1 CheckSum 3 prøv igen - op til 3 gange Adresse-felt ikke støj CheckSum 1 Intelligent House Control Side 7-3

Test 1: Scenarie 1 - Solskins-eksempel. Der sker ingen fejl i systemet masteren sender og modtager kort efter datapakke fra slave med fejlfrie data. Herunder ses teminal-vindue på slaven med sendte data. De fire bytes, der sendes tre gange med et sekunds interval er målt med stopur. Masteren er sat til at sende: Adresse: 63 = ( ASCII =? ) Temperatur: 25 = ( ASCII =? ) FlagData: 64 = ( ASCII = @ ) CheckSum: 102 = ( ASCII = f ) Tegnet for temperaturen burde have været en pil i stedet for den viste firkant. Dette skyldes fonten for hyberterminalen, som ikke helt overholder ASCII-tabellen. fig. 7.2 - hyper-terminal på slave Indenfor det tidsinterval, hvor masteren venter på data fra slaven sendes et korrekt datagram fra slave til master, hvorefter masteren hopper direkte ud af venterutinen og returnerer den fejlfrie pakke. Det ses i denstående figur at programmet starter til tiden 0 og venter i første omgang 1 sekund. Grunden til at tælleren står på 1043 msekund skyldes, at tælleren kun kontrolleres en gang for hver gennemløb af modtageløkken og fortsætter til tælleren er større end 1000 msek. Efter første timeout aktiveres sendeprogrammet på slaven og de fire bytes modtages af masteren og kontrolleres. Pakken var korrekt og dataindholdet udskrives på skærmen. fig. 7.3 - solskins-scenarie Intelligent House Control Side 7-4

Test 2: Scenarie 2 og 3 Ingen pakke når slave og checksumfejl i slave. Ovenstående to scenarier giver samme udfald på masteren da slaven ikke skal svare, hvis der detekteres en fejl i checksummen på den modtagne datapakke Denne test udføres hvor nullmodem et ikke er monteret. Derved modtages ingen data på den serielle port og alle tre timeouts opstår som det ses herunder. Efter disse timeouts returnerer protokollen med suspend-flaget sat. Dette har værdien 16, som vises som et tomt felt i datagrammet. fig. 7.4 - ingen forbindelse-scenarie Test 3: Scenarie 4 og 5 Checksumfejl i master eller adr. fejl I denne test modtager masteren alla fire byte data fra slaven, men alle disse indeholder fejl, enten i Checksum- eller adresse-feltet. Testen udføres ved at aktivere 4- og 5-tasten på slave-pc en hurtigt efter hinanden (<5 Hz) under hele test-forløbet igennem hyberterminalen. Det ses på figuren herunder, at de fire første bytes modtages inden for de første 659 ms, men da datagrammet indeholder fejl forsøges igen. Her modtages igen fire bytes inden for de næste ( 988 659 )ms = 329ms. Alle disse tider er ca. tider. Disse data indeholder også fejl og der hentes igen fire bytes med fejl. På de udlæste data ses at suspend-flaget er sat i tredje felt, idet tegnet er tomt som i forrige test-eksempel. fig. 7.5 - fejl i adr. el. CS-felt-scenarie Intelligent House Control Side 7-5

Test 4: Scenarie 4 og 5 Checksumfejl i master eller adr. fejl I denne test modtager masteren kun en del af det fire byte lange datagram. Testen udføres ved at aktivere 4-tasten på slave-pc en to gange efter hinanden med 0,5 sek. mellemrum efter første timeout på masteren. Det ses, at der modtages to bytes efter første timeout, men timeout nummer to opstår som forventet, da ikke alle fire bytes er modtaget inden for det fastsatte sekund. Suspend-flaget er sat i tredje felt som i forrige test. fig. 7.6 - ikke alle bytes modtaget-scenarie Delkonklusion Under test af PC-protokollen blev alle mulige scenarier udført med forventet resultat. Hyperterminalen i windows gengav dog ikke ASCII-tabellen helt korrekt når bytes skulle representeres. Protokollens timeout på 1 sekund er i praksis 1043 millisekunder, hvilket ikke har nogen betydning. De fejlsituationer, der kan opstå i dataoverførslen bliver fanget og rettet ved gensendelse af data forudsat at forbindelsen er tilstede. Intelligent House Control Side 7-6

7.3 Modultest af slave Formålet med modultesten er at kontrollere, at de enkelte moduler fungerer som forventet inden de integreres til et samlet system. Modultesten er udført sideløbende med udviklingen af de enkelte moduler og er derfor en vigtig del af udviklingen/implementeringen af slaveenheden. Mange moduler vil bestå af noget hardware der skal kommunikere med µprocessoren, vha. en driver/funktion skrevet til formålet. Derfor vil testen være en kombination af både hardware og software. Målinger er foretaget med StorageScope: Agilent 54621A ID# 109-9-7. De enkelte modultests opbygges og udføres på fumlebrædder, og den involverede hardware tilsluttes µprocessoren via den endelige grænseflade. På den måde sikres at softwaren kommunikerer med den korrekte port på µprocessoren og gør integreringen af softwaren enklere. 7.3.1 Adressevælger: I denne test indgår en 6-bit dipswitch, 2 adressebuffere, µprocessoren og funktionen HentAdr(). Formålet med testen er at kontrollere om den korrekte adresse indlæses af µprocessoren. Opstillingen forbindes som beskrevet under implementeringen. schematics tegning se bilag afsnit 9.2 Adressevælger med Buffer kildekode se bilag afsnit 9.5 Indgang RA0-2 opsættes som input, RA3 og RB0-7 opsættes til output. På port B tilsluttes 6 lysdioder. Værdien af adressevariablen udlæses på disse lysdioder, dvs. bit 1 på adressevælgeren udlæses på RB0 osv. I main funktionen placeres en uendelig while-løkke og HentAdr() kaldes kontinuerligt, således at ændring på adresse vælger, udlæses umiddelbart efter. Figur 7.7 -tilslutning til µp Intelligent House Control Side 7-7

Adressevælger (1-6) indstilles på følgende kombination: 111000 Led 1-6 har følgende kombination: 111000 Adressevælger (1-6) indstilles på følgende kombination: 000111 Adressevælger (1-6) indstilles på følgende kombination: 101010 Led 1-6 har følgende kombination: 000111 Led 1-6 har følgende kombination: 101010 7.3.2 WriteVEEProm og ReadVEEProm(): I denne test indgår ovenstående funktioner og µprocessoren. Formålet med testen er at kontrollere at der læses og skrives korrekt til EEProm. kildekode se bilag afsnit 9.5 Opstillingen fra test af adressevælger bibeholdes, dog placeres yderligere 2 lysdioder på port b, så der ialt kan udlæses en byte. Main funktionen ændres således at ReadVEEPProm() kaldes som det første. Værdien af ønskettemp variablen udlæses herefter til port B. Efter udlæsningen overføres en hard-kodet værdi til ønskettemp variablen, VEEPwrite sættes = 1 og WriteVEEProm() kaldes. µprocessoren resettes og den hardkodede værdi skal nu stå på lysdioderne. På den måde er det sikret at der både er læst og skrevet til EEProm. Der testes med 3 forskellige værdier for ønskettemp. Figur 7.8 -tilslutning til µp Intelligent House Control Side 7-8

Beskrivelse af main: main(){ ReadVEEProm(); portb_(var); var = xx VEEPwrite = 1; WriteVEEProm(); } } Til ønskettemp variablen Led 8-1 har følgende overføres værdien: 11110000b kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) µprocessor resettes, ingen Led 8-1 har følgende ændring af program. Til ønskettemp variablen overføres værdien: 00001111b µprocessor resettes, ingen ændring af program. Til ønskettemp variablen overføres værdien: 10101010b µprocessor resettes, ingen ændring af program. kombination: 11110000. Led 8-1 har følgende kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) Led 8-1 har følgende kombination: 00001111. Led 8-1 har følgende kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) Led 8-1 har følgende kombination: 10101010. 7.3.3 WriteLEEProm og ReadLEEProm(): I denne test indgår ovenstående funktioner og µprocessoren. Formålet med testen er at kontrollere at der læses og skrives korrekt til EEProm. kildekode se bilag afsnit 9.5 Opstillingen fra test af WriteVEEProm() og ReadVEEProm() bibeholdes. Main funktionen ændres således at ReadLEEProm() kaldes som det første. Værdien af lys variablen udlæses herefter til port B. Efter udlæsningen overføres en hardkodet værdi til lys variablen, LEEPwrite sættes = 1 og WriteLEEProm() kaldes. µprocessoren resettes og den hardkodede værdi skal nu stå på lysdioderne. På den måde er det sikret at der både er læst og skrevet til EEProm. Der testes med 3 forskellige værdier for ønskettemp. Intelligent House Control Side 7-9

Figur 7.9 -tilslutning til µp Beskrivelse af main: main(){ ReadLEEProm(); portb_(var); var = xx LEEPwrite = 1; WriteLEEProm(); } } Til lys variablen overføres Led 8-1 har følgende værdien: 11110000b kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) µprocessor resettes, ingen Led 8-1 har følgende ændring af program. Til lys variablen overføres værdien: 00001111b µprocessor resettes, ingen ændring af program. Til lys variablen overføres værdien: 10101010b µprocessor resettes, ingen ændring af program. kombination: 11110000. Led 8-1 har følgende kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) Led 8-1 har følgende kombination: 00001111. Led 8-1 har følgende kombination: 11111111. (Ved program download settes alle EEProm værdier til FF ) Led 8-1 har følgende kombination: 10101010. Intelligent House Control Side 7-10

7.3.4 clear_wdt(): I denne test indgår ovenstående funktion og µprocessoren. Formålet med testen er kontrollere at watchdog timeren resetter µprocessoren efter 2,3 sek., hvis clear_wdt() funktionen ikke kaldes med mindre end 2,3 sek. mellemrum. kildekode se bilag afsnit 9.5 Opstillingen fra test af WriteVEEProm() og ReadVEEProm() bibeholdes. I main placeres en uendelig while-løkke. Før while-løkken startes, settes hele port b høj (FF), alle lysdioder lyser. I while-løkken kaldes clear_wdt() først, der indføres en delay, herefter settes port B lav (00). Endelig indføres endnu en dealy. Afhægig af de tidsforsinkelser der indføres, vil alle lysdioderne enten være slukkede (efter tidsforsinkelse) eller togle. Hvis tidsforsinkelserne samlet er mindre end 2,3 sek. vil lysdioderne være slukkede, da µprocessoren ikke resettes. Er tidsforsinkelserne derimod større end 2,3 sek. vil lysdioderne toggle, da watchdog timeren vil resette µprocessoren. Beskrivelse af main: main(){ portb_(ff); while(1){ clear_wdt(); delay_(sek); portb_(00); delay_(sek); } } Figur 7.10 -tilslutning til µp delay kaldes med 1 sek. Ved opstart lyser led 1-8. ialt 2 sek. forsinkelse. Efter 1 sek. slukker led 1-8 delay kaldes med 1.5 sek. ialt 3 sek. forsinkelse. og forbliver slukkede Led 1-8 toggler. Intelligent House Control Side 7-11

7.3.5 Temperatur måler: I denne test indgår AD-konverter, temperaturføler og µprocessoren. Formålet med testen er at kontrollere korrekt kommunikation mellem µprocessoren og A/Dkonverter, samt at kontrollere at en given indgangsspænding giver den ønskede bitkombination. schematics tegning se bilag afsnit 9.2 Temperaturføler kildekode se bilag afsnit 9.5 Port RA0-3, RB0-3 og RB6-7 opsættes til output, resten til input og der placeres lysdioder på RA0-3 og RB0-3. AD-konverteren tilsluttes µprocessoren som beskrevet under implementering. schematics tegning se bilag afsnit 9.2 Temperaturføler I stedet for at tilslutte LM335, benyttes istedet en regulerbar spændingsforsyning. På reference benet Vref (ben 5) på ADC 3081 påtrykkes en spænding svarende til dynamikområdet og Vin(-) (ben 3) påtrykkes den mindste spænding der måles. Spændingen til Vin(+) (ben 2) kan nu reguleres vha. spændingsforsyningen fra Vin(-) til Vin(-) + Vref. Værdien der kan udlæses fra A/D-konverteren kan udregnes som: Udlæsning? Vin(?)? Vin(?) ( Vin(?)? Vin(?))? 256? Vref Vref 256 Værdien udlæses af A/D-konverteren til µprocessoren og udskrives til lysdioder. Først udskrives værdien til RA0-3, derefter shiftes værdien 4 gange således MSB nu står på LSB, og værdien udskrives nu til RB0-3. Dvs. værdien udlæses på følgende måde: MSB LSB RB3-0 RA3-0. I main placeres en uendelig while-løkke, hvorfra HentTemp() kontinuerligt kaldes. Efter kaldet til HentTemp() udskrives værdien i temp. variablen til henholdsvis port A og B som beskrevet tidligere. Figur 7.11 -tilslutning til µp Intelligent House Control Side 7-12

Inden der foretages målinger, kontrolleres klokken til AD-konverteren. Dette gøres med oscilloskop på RB6. Figur 7.12 -clock til A/D konverter Fra scope-billedet af klokken til AD-konverteren kan det umiddelbart ses, at sekvensen stemmer med den ønskede. Efter de 2 første clocks kan MSB aflæses når der kommer et skift fra lav til høj, og en bit kan herefter aflæses for hver clock-puls. Desuden er clock-frekvensen i det, i databladet, beskrevne arbejdsområde 10kHz 100kHz. En dutycycle er gennemført på ca 50µs? 20KHz. (). Den under implementeringen fundne frekvens (30KHz) stemmer ikke overens med den aktuelle. Dette skyldtes at der mellem hver clock-cycle foretagets interne operationer der giver anledning til yderligere tidsforsinkelser. Denne øgede tidsforsinkelse ses også på scope-billedet hvor duty-cyclen på klokken ikke er 50%. Dette kan naturligvis rettes ved at tilpasse tidsforsinkelserne, men da dette ikke vil give anledning til fejl bibeholden den aktuelle tidsforsinkelse. Test 1 Vref påtrykkes 5V, Vin(-) påtrykkes 0V, Vin(+) påtrykkes 5,1V RB3-0 og RA3-0 lyser. Vref påtrykkes 5V, Vin(-) RB3-0 og RA3-0 er slukket. påtrykkes 0V, Vin(+) påtrykkes -0,1V Vref påtrykkes 5V, Vin(-) påtrykkes 0V, Vin(+) påtrykkes 3,62V RB3-0 = 1011 RA3-0 = 1001 Dataout = (3,62 * 256)/5 = 185,34 = 10111001b (185) 5V er referencespændingen og 256 er 8 bit dynamikområde. Intelligent House Control Side 7-13

Figur 7.13 -data fra A/D konverter På ovenstående skærm-billede kan data fra AD-konverteren aflæses og værdien stemmer overens med den udlæste på lysdioder. Der skal nu testes for det endelige dynamikområde: 0,9V. [2,33:3,23] Test 2 Vref påtrykkes 0,9V, Vin(-) påtrykkes 2,33V, Vin(+) påtrykkes 3,23V RB3-0 og RA3-0 lyser. Vref påtrykkes 0,9V, Vin(-) RB3-0 og RA3-0 er slukket. påtrykkes 2,33V, Vin(+) påtrykkes 2,32V Vref påtrykkes 0,9V, Vin(-) påtrykkes 2,33 V, Vin(+) RB3-0 = 1101 RA3-0 = 0010 påtrykkes 3,07V Ved at påtrykke en spænding på 3,07V opnås en udlæsning på: (3,07-2,33)*255/0,9 = 210,49 = 11010010b (210) Intelligent House Control Side 7-14

Figur 7.14 -data fra A/D konverter Ovenstående scop-billede viser data-out fra A/D-konverter, og det ses umiddelbart at den udregnede værdi også er lig den udlæste. 7.3.6 HentVindue(): I denne test indgår ovenstående funktion og µprocessoren. Formålet med testen er at kontrollere om den interne variabel for vindue vedligeholdes korrekt, samt at der læses korrekt på porten. schematics tegning se bilag afsnit 9.2 Forbindelser Klæmrækker UD/IND kildekode se bilag afsnit 9.5 Opsætning: Port RB0-3 og RA0-3 er output og RB5 er input. På RB5 monteres en kontakt som gør det ud for vindueskontakten (0 eller +5V). Udlæsningen af vindues variablen sker på lysdioderne 1-8 som på ovenstående test, med led 8 som MSB. Main opbygges med en uendelig while-løkke der kontinuerligt kalder HentVindue(), og udskriver værdien af vinduesvariablen(128 eller 0) på lysdioder. Også her udskrives først 4 LSB på port RA3-0, derefter shiftes værdien ned og 4 MSB uskrives på port RB3-0. Hvis kontakten på RB5 er sluttet (høj) udskrives værdien 0 på lysdioder, hvis kontakten er brudt udskrives værdien 128. Figur 7.15 -tilslutning til µp Intelligent House Control Side 7-15

Kontakten sluttes, og der er RB3-0 = 0000 +5V på RB5 RA3-0 = 0000 Kontakten brydes, og der er 0V på RB5 RB3-0 = 1000 RA3-0 = 0000 7.3.7 BeregnVarme(): I denne test indgår ovenstående funktion, HentVindue() og µprocessoren. Formålet med testen er at kontrollere, at en given forskel mellem ønsket og aktuel temperatur, giver den ønskede duty-cycle. kildekode se bilag afsnit 9.5 Opsætning: Port RB0-3 og RA0-3 er output og RB5 er input. På RB5 monteres en kontakt som gør det ud for vindueskontakten (0 eller +5V). Udlæsningen af vindues variablen sker på lysdioderne 1-8 som på ovenstående test, med LED nr. 8 som MSB. Også her udskrives først 4 LSB på port RA3-0, derefter shiftes værdien ned og 4 MSB uskrives på port RB3-0. I programmet hard-kodes forskellige værdier for ønsket temperatur og for aktuel temperatur. Værdien af duty-cycle variablen udlæses på lysdioder 1-8. Der udføres test således alle grene af if-sætningen testes, dvs. alle værdier for duty-cyclen der kan forekomme skal være udlæst på lysdioder mindst én gang (Whitebox test). Main opbygges således der udføres ét kald til HentVindue() og BeregnVarme() og herefter udlæses værdien af duty-cycle variablen på lysdioder. Figur 7.16 -tilslutning til µp Først testes for elradiator, radiator-flag variabel = 1. Intelligent House Control Side 7-16

Test 1 Ønskettemp = 255 Aktueltemp = 0 kontakt sluttet(vindue lukket) RB3-0 = 0110 RA3-0 = 0100, (100%) Ønskettemp = 0 Aktueltemp = 255 kontakt sluttet(vindue lukket) Ønskettemp = 255 Aktueltemp = 0 kontakt brudt(vindue åbent) Ønskettemp = 200 Aktueltemp = 200 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 199 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 198 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 197 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 196 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 195 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 194 kontakt sluttet(vindue lukket) RB3-0 = 0000 RA3-0 = 0000, (0%) RB3-0 = 0000 RA3-0 = 0000, (0%) RB3-0 = 0001 RA3-0 = 0100, (20%) RB3-0 = 0001 RA3-0 = 1110, (30%) RB3-0 = 0010 RA3-0 = 1000, (40%) RB3-0 = 0011 RA3-0 = 0010, (50%) RB3-0 = 0011 RA3-0 = 1100, (60%) RB3-0 = 0100 RA3-0 = 0110, (70%) RB3-0 = 0110 RA3-0 = 0100, (100%) Herefter testes for vandradiator, radiator-flag variabel = 0. Intelligent House Control Side 7-17

Test 2 Ønskettemp = 255 Aktueltemp = 0 kontakt sluttet(vindue lukket) RB3-0 = 0000 RA3-0 = 0000, (0%) Ønskettemp = 0 Aktueltemp = 255 kontakt sluttet(vindue lukket) Ønskettemp = 255 Aktueltemp = 0 kontakt brudt(vindue åbent) Ønskettemp = 200 Aktueltemp = 200 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 199 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 198 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 197 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 196 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 195 kontakt sluttet(vindue lukket) Ønskettemp = 200 Aktueltemp = 194 kontakt sluttet(vindue lukket) RB3-0 = 0110 RA3-0 = 0100, (100%) RB3-0 = 0110 RA3-0 = 0100, (100%) RB3-0 = 0101 RA3-0 = 0000, (80%) RB3-0 = 0100 RA3-0 = 0110, (70%) RB3-0 = 0011 RA3-0 = 1100, (60%) RB3-0 = 0011 RA3-0 = 0010, (50%) RB3-0 = 0010 RA3-0 = 1000, (40%) RB3-0 = 0001 RA3-0 = 1110, (30%) RB3-0 = 0000 RA3-0 = 0000, (0%) Intelligent House Control Side 7-18

7.3.8 SetLys(): I denne test indgår ovenstående funktion og µprocessoren. Formålet med testen er at kontrollere, at funktionen setter/resetter lysudgangen afhængig af den aktuelle status. schematics tegning se bilag afsnit 9.2 Forbindelser Klæmrækker UD/IND kildekode se bilag afsnit 9.5 Opsætning: RB4 er output og til porten tilsluttes en lysdiode, således det kan kontrolleres at udgangen er set. Main opbygges med en uendelig while-løkke. I denne while-løkke kaldes SetLys() og en delay funktion kontinuerligt, og lys dioden skal derfor toggle med delay-funktionens interval. Beskrivelse af main: Figur 7.17 -tilslutning til µp main(){ } } while(1){ clear_wdt(); delay_(sek); SetLys(); Delay funktionen kaldes Lysdioden toggler med 2 med 2 sek. sek mellemrum 7.3.9 SetVarme(): I denne test indgår ovenstående funktion og µprocessoren. Formålet med testen er at kontrollere at en given duty-cycle værdi giver den ønskede dutycycle på radiatorudgangen kildekode se bilag afsnit 9.5 Opsætning: RB3 er output og til porten tilsluttes en lysdiode, således det kan kontrolleres at udgangen er sat. Intelligent House Control Side 7-19

Main opbygges med en uendelig while-løkke. I denne while-løkke kaldes SetVarme() kontinuerligt, og lys dioden skal derfor tænde og slukke svarende til den aktuelle duty-cycle. Inden while-løkken settes porten lav. I programmet hard-kodes forskellige værdier for duty-cyclen. Der udføres test således alle grene af switch-sætningen testes, dvs. alle værdier for on/off der kan forekomme skal være udlæst på lysdiode mindst én gang (Whitebox test). Figur 7.18 -tilslutning til µp Duty-cycle = 0 Lysdiode er slukket. Duty-cycle = 20 Lysdiode toggler: Er tændt 1 sek., slukket 4 sek. Duty-cycle = 30 Lysdiode toggler: Er tændt 1,25 sek., slukket 3,75 sek. Duty-cycle = 40 Lysdiode toggler: Er tændt 2 sek., slukket 3 sek. Duty-cycle = 50 Lysdiode toggler: Er tændt 2,5 sek., slukket 2,5 sek. Duty-cycle = 60 Lysdiode toggler: Er tændt 3 sek., slukket 2 sek. Duty-cycle = 70 Lysdiode toggler: Er tændt 3,75 sek., slukket 1,25 sek. Duty-cycle = 80 Lysdiode toggler: Er tændt 4 sek., slukket 1 sek. Duty-cycle = 100 Lysdiode lyser konstant Duty-cycle = 110 Lysdiode er slukket Intelligent House Control Side 7-20

7.3.10 Interruptrutine: I denne test indgår ovenstående funktion, SetLys() og µprocessoren. Formålet med testen er at kontrollere om interruptrutinen bliver eksekveret, og eksekveret korrekt ved interrupt. kildekode se bilag afsnit 9.5 Først benyttes INT/RB0 som interruptkilde og det eneste der foretages i interruptrutinen er at kalde SetLys(). På den måde kan det konstateres om interruptrutinen bliver kaldt. Opsætning: RB0 er input, RB4 er output og interrupt for RB0 enables. På RB0 tilsluttes en kontakt (0 eller +5V), der benyttes som lyskontakt. Main opbygges med en uendelig while-løkke, hvor programmet ikke gør andet end at loope. Figur 7.19 -tilslutning til µp Test 1 Kontakt påvirkes (on/off) Lysdiode toggler, hvergang kontakt påvirkes Den næste test udføres med USART som interruptkilde, og igen benyttes SetLys() funktionen som eneste funktion der bliver kaldt fra interruptrutinen. Opsætningen af kommunikationen udføres som beskrevet under implementering. Der placeres en pull-up modstand på RX. Dette gøres da bussen skal være høj i hvile. For at opnå interrupt fra USART, kortsluttes RX til stel, hvilket vil tolkes som startbit. Figur 7.20 -tilslutning til µp Intelligent House Control Side 7-21

Test 2 RX kortsluttes til stel. Lysdiode toggler hvergang RX kortsluttes. Den trejde test skal kontrollere at interruptrutinen skelner mellem RB0/INT og USART interrupt. Dette gøres ved at opsætte interruptrutine som beskrevet i implementering, hvor der testes på interruptkilden, inden den passende funktion kaldes. Opsætning: RB3 og RB4 er output, RB0/INT og USART interrupt enables. Der tilsluttes lysdioder på RB3 og RB4. I den uendelige while-løkke i main, kaldes en delay funktion og Port RB3 settes lav. På den måde kan RB3 settes høj ved interrupt fra USART og RB4 toggler ved interrupt fra lyskontakt. Beskrivelse af main: Figur 7.21 -tilslutning til µp main(){ } } while(1){ clear_wdt(); delay_(sek); RB3_lav(); Test 3 RX kortsluttes til stel. Lysdiode lyser og slukker Delay kaldes med 2 sek. igen hvergang RX kortsluttes. Kontakt påvirkes (on/off) Lysdiode toggler, hvergang kontakt påvirkes Intelligent House Control Side 7-22

7.3.11 HentData(): I denne test indgår ovenstående funktion, interruptrutinen og µprocessoren. Formålet med testen er at kontrollere om HentData() synkroniserer modtagne databytes korrekt. kildekode se bilag afsnit 9.5 Opsætning: RA0-2 er output, USART opsættes som beskrevet i implementering. Til RX og TX tilsluttes en anden µprocessor der kontinuerligt sender bytes med forskellig mellemrum. PÅ RA0-2 tilsluttes lysdioder. HentData() kaldes fra interrupt fra USART. Hvis tiden mellem 2 bytes overskrider 65ms, opnås timeout og datagram resettes. For at kontrollere bytetælleren (antalint) udskrives værdien af denne kontinuerligt på RA0-2. Main opbygges med en uendelig while-løkke, hvor programmet udskriver værdien af antalint (0-4) på Led 1-3. Figur 7.22 -tilslutning til µp Der sendes 1 databytes. Der ventes 2 sek. og endnu en databyte sendes. RA2-0 = 001, efter 2 sek RA2-0 = 001 (datagram reset da timeout Der sendes 2 databytes med mindre end 65ms mellemrum. Der ventes 2 sek. og endnu en databyte sendes. Der sendes 3 databytes med mindre end 65ms mellemrum. Der ventes 2 sek. og endnu en databyte sendes. Der sendes 4 databytes med mindre end 65ms mellemrum. Der sendes kontinuerligt databytes med 70ms mellemrum er indtruffen) RA2-0 = 010, efter 2 sek RA2-0 = 001 (datagram reset da timeout er indtruffen) RA2-0 = 011, efter 2 sek RA2-0 = 001 (datagram reset da timeout er indtruffen) RA2-0 = 100, RA2-0 = 001. (datagram resettes mellem hver databyte) Intelligent House Control Side 7-23

7.3.12 µp-protokol(): I denne test indgår ovenstående funktion, interruptrutinen, HentData() og µprocessoren. Formålet med testen er at kontrollere om Protokol() beregner korrekt checksum samt reagerer korrekt på indhold i databyte 3 (mdata3). kildekode se bilag afsnit 9.5 HentData() og Protokol() kaldes ved USART interrupt. HentData() sikrer at antalint vedligeholdes korrekt. Opsætning som ved test af HentData(). Værdien af antalint udskrives ikke. Værdien for Adr-variablen hardkodes i programmet til 00101010b, dvs. denne adresse skal passe med det modtagne i byte 1, for at Protokol() funktionen beregner checksum etc. Figur 7.23 -tilslutning til µp Der sendes 4 databytes med mindre end 65ms mellemrum, og følgende indhold: byte1 = 00001111 (adresse) byte2 = 11110000 (temperatur) byte3 = 01100000 (lystændt) byte4 = 10011111 (checksum) Led 1 forbliver uændret. (checksum korrekt, adressen er forkert) Der sendes 4 databytes med mindre end 65ms mellemrum, og følgende indhold: byte1 = 00101010 (adresse) byte2 = 11110000 (temperatur) byte3 = 01100000 (lystændt) byte4 = 00001111 (checksum) Led 1 forbliver uændret. (adressen er korrekt, checksum forkert) Der sendes 4 databytes med Led 1 lyser. Intelligent House Control Side 7-24

mindre end 65ms mellemrum, og følgende indhold: byte1 = 00101010 (adresse) byte2 = 11110000 (temperatur) byte3 = 01100000 (lystændt) byte4 = 10111010 (checksum) Der sendes 4 databytes med mindre end 65ms mellemrum, og følgende indhold: byte1 = 00101010 (adresse) byte2 = 11110000 (temperatur) byte3 = 00000000 (lystændt) byte4 = 11011010 (checksum) Der sendes 4 databytes med mindre end 65ms mellemrum, og følgende indhold: byte1 = 00101010 (adresse) byte2 = 11110000 (temperatur) byte3 = 00100000 (lystændt) byte4 = 11111010 (checksum) (adressen er korrekt,checksum korrekt og lyset ønskes tændt) Led 1 forbliver uændret. (adressen er korrekt,checksum korrekt og lyset ønskes uændret) Led 1 slukker. (adressen er korrekt,checksum korrekt og lyset ønskes slukket) Intelligent House Control Side 7-25

7.3.13 SendData(): I denne test indgår ovenstående funktion og µprocessoren. Formålet med denne test er at kontrollere at sdata1-sdata4 sendes korrekt på RX-ben. kildekode se bilag afsnit 9.5 Opsætning: USART opsættes som beskrevet i implementering sdata1-sdata4 hardkodes, og SendData() placeres i en uendelig while-løkke i main, således der kontinuerligt sendes. Værdien måles med scop på RX ben. sdata1 = 11000111b sdata2 = 10111111b sdata3 = 10000000b sdata4 = 11111000b Figur 7.24 -tilslutning til µp Figur 7.25 -datagram sendt fra µp Intelligent House Control Side 7-26

Som det fremgår af scope-billedet sendes der først 2 bytes, herefter ventes der 20ms og dersendes igen 2 bytes. Dette sikrer at der ikke skrives til transmit registeret i µprocessoren inden den forgående byte er sendt. Det kan også konstateres, at det sendte datagram indeholder de korrekte informationer. Læses pulstoget med tidsaksen mod højre: Først sendes et startbit, herefter byte 1, med LSB som første bit og til sidst et stopbit. Værdien af byte 1 kan aflæses til 1000111b. De efterfølgende bytes afsendes på samme måde, og værdierne aflæses: sdata2 = 10111111b, sdata3 = 10000000b, sdata4 = 11111000b. Værdierne stemmer overens med værdierne hardkodet i programmet. 7.3.14 RS-485 signal inverter: I denne test indgår SentData(), inverter (Transistor) mellem µprocessoren og RS-485 kredsen og µprocessoren. Formålet med testen er at kontrollere, at det sendte signal på TX, inverteres korrekt. Testen udføres som SendData() og er den sidste modultest på slaveenheden. Der foretages en scpoe-måling på ben 2 og 3 på RS-485 kredsen og samme data som ved test af SendData() sendes fra µprocessoren. Figur 7.26 -inverteret signal fra µp Sammenlignes signalet med signalet på TX benet fra SendData() testen, kan det tydeligt ses, at signalet er en inverteret udgave af TX. Inverter fungerer korrekt Delkonklusion: Modultestene er forløbet tilfredsstillende, og det kan konstateres, at modulerne fungerer som forventet. Det skal naturligvis nævnes at modultestene har været benyttet under udvilkingsforløbet og de ovenstående tests er den endelige modultest. Intelligent House Control Side 7-27

7.4 Integrationstest af slave Efter modultesten skal de enkelte moduler integreres til den endelige slave enhed. For hardwarens vedkomne skal komponenterne placeres på print og det endelige program skal samles. Herefter skal der udføres integrationstest der skal sikre, at de enkelte moduler fungerer sammen som et hele. Der udføres integrationstest på kommunikations-delen for at sikre at slaven svarer og der udføres kontrol af spændingsniveauet på printet. Test af temperaturmålinger, varmestyring osv. findes under accepttest. 7.4.1 Print: I denne test indgår printet med komponenter, dog uden IC er. schematics tegning se bilag afsnit 9.3 Formålet med testen er at kontrollere korrekt spændingsniveau på Vcc og at der er spænding på alle kredse. Test 1 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V måles på primærside af spændingsregulator ben 1-3 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V DC tilsluttes slaveprintet på forsyningsklemmer. 24V DC tilsluttes slaveprintet på forsyningsklemmer. 5V måles på sekundærside af spændingsregulatoren ben 2-3 4,95V måles på MAX3082CSA mellem ben 8 og 5. 4,95V måles på µprocessor mellem ben 14 og 5. 4,95V måles på 74HC126 mellem ben 14 og 7 4,95V måles på 74HC125 mellem ben 14 og 7 4,95V måles på ADC0831 mellem ben 8 og 4 Målt 4,95V Intelligent House Control Side 7-28

IC-kredsene monteres i de respektive sokler og en integrationstest af kommunikationen med µprocessoren kan foretages. 7.4.2 Kommunikation med µprocessoren, uden bus: I denne test indgår HentData(), Protokol(), SendData(), HentAdr() og µprocessor. Formålet er at kontrollere om µprocessoren modtager, behandler og sender data korrekt. kildekode se bilag afsnit 9.5 Opsætning: Som endeligt program beskrevet under implementering. Main opbygges med en uendelig while-løkke, hvor programmet looper uden kald til funktioner. Inden while-løkken kaldes HentAdr(). Adresse-vælgeren står på værdien 7 og der sendes pakker kontinuerligt til µprocessoren. Disse pakker indeholder forskellige adresser 5, 7 og 9. Sendefunktionen er opbygget som et konsolprogram på pc, og kommunikerer til µprocessoren direkte, dvs. uden bussystem. Konsolprogrammet sender en pakke indeholdende adressen til slaven den ønsker at kommunikere med. Hvis slaven ikke svarer gentages sende-rutinen 3 gange, hvorefter der sendes til næste slave. Svarer slaven udskrives værdien af det datagrammet slaven svarer med på skærm, og der sendes til næste slave. Rutinen looper mellem adresserne 5, 7 og 9. Udskriften af disse skærmbilleder er ikke medtaget da testen er udført på SBC med RTkernel OS (screen-dump ikke mulig). Istedet er der taget scope-billeder af de sendte datapakker: Bemærk: LSB i databyte sendes først. Figur 7.27 -datagram med adresse 5 Intelligent House Control Side 7-29

Sendt fra PC: Figur 7.28 -datagram med adresse 7 Figur 7.29 -datagram med adresse 9 Intelligent House Control Side 7-30

Ovenstående datagrammer sendes til µprocessoren. temp- variablen er hardkodet med værdien 188. Vindue variablen er hardkodet med værdien 128 (åbent) Der svares kun på datagram med adresse 7. Der svares med et datagram med følgende data: Data1 = 11000111 (Adr 7) Data2 = 10111100 (temp 188) Data3 = 10000000 (vindue 128) Data4 = 11111011 (checksum) Sendt fra slave: Figur 7.30 -datagram fra slave med adresse 7 Som det fremgår af scope-billedet stemmer det returnerede datagram overens med det forventede. Intelligent House Control Side 7-31

7.4.3 Kommunikation med µprocessoren, med bus: I denne test indgår HentData(), Protokol(), SendData(), HentAdr(), RS-232 til 485 konverter og µprocessor. Formålet er at kontrollere om data kommunikeres og behandles korrekt over bussen. kildekode se bilag afsnit 9.5 Opsætning: Som endeligt program beskrevet under implementering. Testen udføres som Kommunikation med µprocessoren, uden bus, dog forbindes slaven via den endelige forbindelse RS-485 til RS-232? 485 konverter-print, der er tilsluttet PC ens Com port. Adresse-vælgeren står på værdien 9 og der sendes pakker kontinuerligt til µprocessoren. Disse pakker indeholder forskellige adresser 5, 7 og 9. Sendefunktionen er opbygget som et konsolprogram på PC. Konsolprogrammet sender en pakke indeholdende adressen til slaven den ønsker at kommunikere med. Hvis slaven ikke svarer gentages sende-rutinen 3 gange, hvorefter der sendes til næste slave. Svarer slaven udskrives værdien af det datagrammet slaven svarer med på skærm, og der sendes til næste slave. Rutinen looper mellem adresserne 5, 7 og 9. Udskriften af disse skærmbilleder er ikke medtaget da testen er udført på SBC med RTkernel OS (screen-dump ikke mulig). Istedet er der taget scope-billeder af de sendte datapakker: Bemærk: LSB i databyte sendes først/signalet er inverteret. Sendt fra PC: Figur 7.31 -datagram på bus, til slave med adresse 5 Intelligent House Control Side 7-32

Sendt fra PC: Figur 7.32 -datagram på bus, til slave med adresse 7 Ovenstående datagrammer sendes til µprocessoren. temp- variablen er hardkodet med værdien 185. Vindue/lys variablen er hardkodet med værdien 192 (åbent vindue, lys tændt) Der svares kun på datagram med adresse 9. Der svares med et datagram med følgende data: Data1 = 11001001 (Adr 9) Data2 = 10111001 (temp 185) Data3 = 11000000 (vindue/lys 192) Data4 = 10110000 (checksum) Intelligent House Control Side 7-33

Sendt fra PC og svar fra slave: Figur 7.33 -datagram på bus, til slave med adresse 9 og svar fra slave med adresse 9 Som det fremgår af ovenstående scope-billeder svarer slaven ikke på pakker til adresse 5 og 7. Men derimod er der svar umiddelbart efter sidste byte er modtaget, når slave 9 addresseres. Det kan ses af figur 7.33 at der svares med adresse 9 først, og derefter de hardkodede værdier for temperatur og lys/vindue status. Årsagen til at bit mønstret ikke er ens i de 2 bytes med nummer 1, skyltes at slaven skal svare med 11 stående på MSB i adressefeltet. Desuden fremgår den indbyggede delay mellem byte 2 og 3 også på figur 7.33 Delkonklusion: Integrationstestene er forløbet tilfredsstillende, og det kan konstateres, at modulerne fungerer som forventet. Det skal i den forbindelse nævnes at der opstår store problemer hvis der ikke benyttes terminering på bussen. Støj er årsag til at kommunikationen ødelægges og ingen af slaverne får information. Der er benyttet 120O termineringsmodstand, hvilket giver et veldefineret bussignal som det kan ses på fig 7.31 til fig 7.33. Intelligent House Control Side 7-34

7.5 Test af Konverter-modul Konverter-modulet ved PC en, der konverterer fra RS-232 til RS-485 og tilbage igen testes ved at sætte et oscilloscope og en 120 Ohms terminerings-modstand i parrallel med data + og terminlerne. PC med HouseTech IHC System RS-232 <-> RS-485 Konverter RS-232 RS-485 D+ RS-232 D- 120R OSC GND -24VDC fig. 7.34 - måleopstilling til konvertermodul Herefter startes programmet på PC en og et datagram som det ses herunder kører på bussen. Datagrammet indeholder 4 byte plus start og stopbit for hver byte. Scope-billedet herunder viser datagrammet og de enkelte bits. Hver enkelt byte herunder er representeret ved MindstBetydendeBit til venstre. Dvs. byte nr 1 indeholder adressen 00000101,bin=5,dec. Byte nr. 2 indeholder temperaturværdi 00011001, bin. Byte nr. 3 har værdien 01000000,bin, hvor det tændte bit viser, at lyset er tændt. Byte nr. 4 indeholder checksummen for de foregående tre bytes. Startbit er et lavt bit og et stopbit er et højt som det ses af figuren. De viste overshoots er primært følge af den store forstærkning på Y-aksen. Følgende målinger er foretaget med StorageScope: Agilent 54621A ID# 109-9-7. fig. 7.35 - scope-billede af datagram fra master Intelligent House Control Side 7-35

Herunder ses en forstørrelse af ovenstående scope-billede, der bl.a. viser, at bussens overshoots er ubetydelige små. Signal-spændingen er 2,61 Voltpp på RS-485-forbindelsen i forhold til Data, hvilket er langt bedre end kravet til denne type forbindelse. På X-aksens cursore ses det, at en bit er 828 µsek., hvilket svarer til en baudrate på 1,2077kbaud, som var forventet. De 77Hz afvigelse skyldes det ukorante multiplum af masterens CPU-clockfrekvens. fig. 7.36 - forstørret scopebillede af datagram fra master Delkonklusion Det ses af målingerne, at konvertermodulet virker som forventet. Alle signaler bliver konverteret til RS-485-niveau. Det blev vist, at de sendte bytes i datagrammet kommer i kronologisk rækkefølge med omvendt bitrækkefølge i den enkelte byte. Intelligent House Control Side 7-36

7.6 Modultest af PC-program Modultesten af dialogboksene: Slaveplacering, Varmestyring og Logning er foregået visuelt. Følgende test er blevet foretaget med slave nummer fem på netværket og følgende opsætning for slaven: Tempføler benyttet Hverdag X: 135 Dagtemp: 17 Y: 200 Nattemp : 14 Vindueskontakt benyttet Dagstart: 0700 X: 160 Natstart: 1600 Y: 095 Weekend Lyskontakt benyttet Dagtemp: 18 X: 215 Nattemp : 15 Y: 225 Dagstart: 1200 Natstart: 0000 Logning hver 300. sekund 7.6.1 Slaveplacering: Der er ændret på alle koordinater og fluebenene er blevet fjernet. Dialogboksen lukkes og åbnes igen. Dialogboksen lukkes og computeren genstartes. Herefter åbnes dialogboksen igen. Der indtastes en koordinatværdi, som ikke ligger i intervallet (0,0)- (700,500) Felterne har samme talværdi og fluebenene har samme status som før boksen blev lukket. Felterne har samme talværdi og fluebenene har samme status som før computeren blev genstartet. Der udskrives en fejlmeddelelse på skærmen. Intelligent House Control Side 7-37

7.6.2 Varmestyring Der er ændret på alle koordinater. Dialogboksen lukkes og Felterne har samme talværdi åbnes igen. Dialogboksen lukkes og computeren genstartes. Herefter åbnes dialogboksen igen. Der indtastes en temperaturværdi uden for intervallet 0-40 grader eller et klokkeslet uden for intervallet 00:00-23:59 som før boksen blev lukket. Felterne har samme talværdi som før computeren blev genstartet. Der udskrives en fejlmeddelelse på skærmen. 7.6.3 Logning Der er ændret på logningsintervallet Dialogboksen lukkes og åbnes igen. Dialogboksen lukkes og computeren genstartes. Herefter åbnes dialogboksen igen. Comboboksen har samme talværdi som før boksen blev lukket. Comboboksen har samme talværdi som før computeren blev genstartet. 7.6.4 Læsnetværk Der klikkes på knappen Hele netværket scannes, en Hent Slaver tæller tæller op fra 0-63 og slave nr. 5 vises i listboksen Dialogboksen lukkes og Listboksen indeholder slaven åbnes igen. Dialogboksen lukkes og computeren genstartes. Herefter åbnes dialogboksen igen. Endu en slave kobles på bussen med tilfældig adresse og knappen Hent Slaver aktiveres. med adressen 5. Listboksen indeholder slaven med adressen 5. Netværket scannes igen og begge slaver identificeres med korrekt adresse. Fejl. Systemet låser når LUK-knappen aktiveres efter ny slave er fundet. **) **) Det formodes, at pointeren til den nye slave ikke er korrekt når skærmbilledet skal gentegnes med nyfundet slave. Fejlen opstår ikke, hvis slaven tidligere har været til stede uden genstart af masteren imellem læsnetværk-rutinerne. Intelligent House Control Side 7-38

Efter genstart af det låste system er den nye slave kendt af systemet og kan konfigureres som under normale omstændigheder. 7.6.5 Modultest af skjulte hjælpe-funktioner: 7.6.5.1 Ugedag Denne funktion kaldes med dag, måned og år for en dag imellem 1. januar 1970 og dags dato og returnerer ugedagen som et tal imellem 1 og 7, hvor 1 er mandag, 2 er tirsdag osv. Funktionenen benyttes til at fastsætte om dags dato er hverdag eller weekend. For at isolere funktionen kopieres kildekoden til en main()-rutine og lidt kode til in- og output skrives. Herefter køres programmet og tre kendte dage indtastes: 14. juli 1975 indtastes Funktionene returnerer et 1- tal, da dagen er en mandag. 11. september 2001 indtastes Funktionene returnerer et 3- tal, da dagen er en onsdag. 30. april 2002 indtastes Funktionene returnerer et 2- tal, da dagen er en tirsdag. Se screendumps af modultesten herunder for de tre testede datoer. fig. 7.37 - svar fra ugedagrutine fig. 7.38 - svar fra ugedagrutine fig. 7.39 - svar fra ugedagrutine Intelligent House Control Side 7-39

7.6.5.2 Tidspunkt Denne funktion kaldes med aktuel dag, måned og år, og returnerer et tal imellem 1 og 4, der repræsenterer de fire tidsintervaller dag-hverdag, nat-hverdag, dag-weekend og nat-weekend. Hjælpefunktionen ugedag() benyttes til at se, om det er hverdag eller weekend og herefter sammenligner klokslet med de i dialogboksen varmestyring indtastede værdier. Samme opsætning som beskrevet for slave nr. 5 tidligere er også benyttet i denne modultest. For at detektere hvilket interval systemet befinder sig i, indsættes en betinget exit-kommando i kildekoden efter funktionskaldet for at se om funktionen returnerer det forventede. Hvis det forventes, at funktionen returnerer et 1-tal, indsættes denne betingede exitkommando og programmet afsluttes hvis det var tilfældet se eksempel herunder: <header> if ( Funktion returnerer 1 ) then else exit fig. 7.40 - NS-diagram over betinget exit-kommando Som forenklet C-kode vil det se således ud: if(tidspunkt()==1) exit(1); Dette 1-tal kan derved udskiftes med 2, 3 eller 4 for at detektere disse returværdier. Det testes i nedenstående skema om funktionen returnerer det rigtige resultat. Intelligent House Control Side 7-40

(nat-hverdag) Programmet afsluttes 2 indsætttes i if-sætningen. System-uret sættes til: onsdag den 1. maj kl. 05:00 (dag-hverdag) Programmet afsluttes 1 indsætttes i if-sætningen. System-uret sættes til: onsdag den 1. maj kl. 12:00 (nat-hverdag) Programmet afsluttes 2 indsætttes i if-sætningen. System-uret sættes til: onsdag den 1. maj kl. 18:00 (nat-weekend) Programmet afsluttes 4 indsætttes i if-sætningen. System-uret sættes til: lørdag den 27. april kl. 05:00 (dag-weekend) Programmet afsluttes 3 indsætttes i if-sætningen. System-uret sættes til: lørdag den 27. april kl. 12:00 (nat-weekend) 4 indsætttes i if-sætningen. System-uret sættes til: lørdag den 27. april kl. 18:00 Programmet afsluttes Delkonklusion Alle enkelte funktioner i PC-programmet er blevet testet; både direkte- og skjulte hjælpefunktioner. De testede funktioner i dialogboksene virker alle som forventet, dog låste programmet efter LæsNetværk-dialogboksen lukkes hvis nye slaver var fundet som følge af en forventet ukorrekt klasse-pointer. Dialogboksens data gemmes selv om systemet genstartes og der meldes fejl hvis de indtastede data er uden for det lovlige område. Hjælpefunktionen til at bestemme ugedagen returnerede den forventede dag for de testede datoer og tidspunkt-funktionen afsluttede ved de forventede afslut-punkter, der var indsat til test. Intelligent House Control Side 7-41

7.7 Modultest af PC-program, 2. iteration I denne iteration, hvor en webserver er koblet på systemet testes kun de nye funktioner. Der testes funktionaliteten af dialogboksen for opsætning af webserver og TCP/IP forbindelsen til serverens protokol-stack og webserver, samt dennes håndtering af password og præsentation af skærmbillede. 7.7.1 Webserver-dialogboks: Der er ændret på kode, IP-adresse og fluebenet er blevet fjernet. Dialogboksen lukkes og åbnes igen. Dialogboksen lukkes og computeren genstartes. Herefter åbnes dialogboksen igen. Der indtastes en IP-adresse, som ikke ligger i intervallet [0;255] Der indtastes en kode, som har mere end 8 tegn Felterne har samme værdi og fluebenene har samme status som før boksen blev lukket. Felterne har samme værdi og fluebenet har samme status som før computeren blev genstartet. Der udskrives en fejlmeddelelse på skærmen. Der udskrives en fejlmeddelelse på skærmen. 7.7.2 Webserver-tråd: I stedet for at starte WebserverMonitortråden, der skal starte Webservertråden, startes Webservertråden ved programstart, for at teste om opsætning af netcontroller og adresser forløber korrekt. Serveren har IP-adressen 130.225.184.249. Efterfølgende test udføres på en PC på samme netværk med TCP/IP-protokollen installeret. Test af TCP/IP-stack: Weberveren pinges fra Command-prompt Test af webserver: I en browser intastes webserverens IP-adresse og siden hentes Webserveren svarer *) se screendump herefter Der opnås forbindelse til webserveren og html-siden vises på klient-browseren *) se screendump herefter *) Der er under udvinkling og test af webserveren oplevet en del ustabilitet i OnTimes TCP/IP-stack. Følgende scenarie er mere regel end undtagelse: 1. Serverene pinges fra computer01 og der modtages svar. 2. Serveren pinges fra computer01 få minutter efter og der svares ikke. 3. Serveren pinges fra computer02 og der modtages svar. 4. Serveren pinges igen fra computer01 og der modtages igen svar. Intelligent House Control Side 7-42

Dvs. at en computer kan få stacken til at gå ned og en anden computer kan få stacken op igen. Dette medfører, at der skal bruges to computere ud over serveren for at holde stacken i live. fig. 7.41 - pingresultater fra webserver fig. 7.42 -webserverbillede fra webserver Intelligent House Control Side 7-43

7.7.3 Webserver-trådens webside Her testes om websiden har samme udseende som skærmbilledet på den tilsluttede monitor mht. placering af følere og status på disse. Ligeledes testes det om data-siden kun vises når korrekt password indtastes. Password for webserver er sat til password. Test af korrekt login: Korrekt password intastes og knappen login aktiveres Test af inkorrekt login: Ikke korrekt password intastes og knappen login aktiveres. Visuelt kontrolleres temp.- vindues- og lys-følers placering på websiden. Data sikkerhed testes: Med alle data vist aktiveres klientens browserens genindlæs-knap (refresh/reload) Skærmbillede hvor temperaturer og følerstatus er identisk med data på masterens monitor. Samme login skærmbillede som før login bliver vist igen. Ingen data vises på skærmen Følerne har samme placering i grundplanet som på den tilkoblede computers monitor Login-skærmbilledet uden data for huset vises. - se fig. 7.43 herefter fig 7.43 - webside Intelligent House Control Side 7-44