Implementatie van een domotica- systeem

advertisement
Implementatie van een domoticasysteem gestuurd via lokaal netwerk en
Internet
Studiegebied
Industriële wetenschappen en technologie
Opleiding
Elektronica
Afstudeerrichting
Elektronica
Academiejaar
2006 – 2007
Eindwerk
Vandenbroucke Steven (OT)
Vandooren Isabelle (ICT)
Implementatie van een domoticasysteem gestuurd via lokaal netwerk en
Internet
Studiegebied
Industriële wetenschappen en technologie
Opleiding
Elektronica
Afstudeerrichting
Elektronica
Academiejaar
2006 – 2007
Eindwerk
Vandenbroucke Steven (OT)
Vandooren Isabelle (ICT
Voorwoord
Nadat wij ons diploma Bachelor ICT en Bachelor Elektronica behaald hadden,
startten wij het brugprogramma Industrieel Ingenieur Elektronica optie ICT en OT
aan de Hogeschool West-Vlaanderen, departement PIH te Kortrijk. In het laatste
jaar kregen wij de kans om de verworven kennis toe te passen in een eindwerk. Dit
eindwerk is een belangrijke factor voor het behalen van het diploma Industrieel
Ingenieur.
Om het eindwerk tot in de puntjes te voltooien is niet alleen een grote portie inzet
vereist, maar ook de nodige hulp van anderen. Het lijkt ons dan ook gepast om nu
een dankwoord te richten tot hen.
Eerst en vooral willen wij HOWEST-PIH danken, die ons de mogelijkheid
geschonken heeft om ons eindwerk binnen de school te laten maken. Wij danken
hiervoor De Heer Johan Beke, die daarvoor zijn toestemming gaf.
Wij danken alle docenten en medewerkers die ons geholpen hebben.
Wij danken in het bijzonder onze promotors De Heer. Johan Beke en De Heer
Benjamin Samyn voor de steun en de tips bij het realiseren van ons eindwerk.
Wij mogen uiteraard onze vrienden en familie niet vergeten. Wij konden bij hen
steeds terecht tijdens de soms stresserende dagen.
Deze thesis vormt het sluitstuk van onze 5 jaar durende opleiding. Tijdens de studie
Master Elektronica optie ICT en OT probeer je als student de werkelijkheid van het
‘echte werk’ in de industrie zoveel mogelijk te benaderen en te bevatten. De school
reikt hiertoe de handvatten aan. Als de student ze aanneemt kan hij een aantal
vaardigheden verwerven die nodig zijn om een goede beroepsbeoefenaar te worden.
Deze thesis is zo’n handvat.
I
Inhoudsopgave
Voorwoord...................................................................................................................I
Inhoudsopgave............................................................................................................II
Gebruikte symbolen en afkortingen .......................................................................... V
Lijst tabellen, figuren en kaarten .............................................................................. VI
Inleiding...................................................................................................................... 1
Hoofdstuk 1 Hardware ............................................................................................... 2
1.1 FPGA ................................................................................................................ 2
1.1.1 PicoBlaze.................................................................................................... 3
1.1.2 Spartan3E ................................................................................................... 5
1.1.3 Spartan3...................................................................................................... 7
1.2 LAN-socket modem.......................................................................................... 9
1.2.1 Wat is een LAN-socket modem ................................................................. 9
1.2.2 Instellingen................................................................................................. 9
Hoofdstuk 2 Netwerken............................................................................................ 12
2.1 Soorten Netwerken ......................................................................................... 12
2.1.1 LAN-netwerk ........................................................................................... 12
2.1.2 Internet ..................................................................................................... 13
2.1.2.1 Ontstaan............................................................................................. 13
2.1.2.2 Wat is het Internet ............................................................................. 14
2.1.2.3 Verbindingen met het Internet........................................................... 15
2.1.3 Ethernet .................................................................................................... 15
2.2 OSI-referentie model ...................................................................................... 17
2.3 TCP/IP stack ................................................................................................... 19
2.4 Protocollen ...................................................................................................... 22
2.4.1 IP-protocol................................................................................................ 22
2.4.2 TCP/IP...................................................................................................... 23
2.4.3 TCP .......................................................................................................... 23
2.4.4 UDP.......................................................................................................... 29
II
Hoofdstuk 3 Communicatie...................................................................................... 31
3.1 RS232.............................................................................................................. 31
3.2 Communicatie tussen 2 borden....................................................................... 33
Hoofdstuk 4 Domoticasysteem................................................................................. 34
4.1 Communicatieprotocol.................................................................................... 34
4.2 Hardwarebeschrijving..................................................................................... 35
4.2.1 PicoBlaze.................................................................................................. 36
4.2.2 VHDL-beschrijving ................................................................................. 38
4.2.2.1 Inlezen data........................................................................................ 38
4.2.2.2 Uitlezen data...................................................................................... 40
4.2.2.3 Inlezen ingangen................................................................................ 42
4.2.2.4 Aansturen uitgangen.......................................................................... 43
4.2.2.5 Benodigde resources van de FPGA................................................... 44
4.3 Software GUI.................................................................................................. 45
4.3.1 Inleiding ................................................................................................... 45
4.3.2 Project van het programma ...................................................................... 45
4.3.3 Socket in het programma ......................................................................... 46
4.3.4 Threads..................................................................................................... 47
4.3.5 Threads van het programma..................................................................... 48
4.3.5.1 Thread LAN_versturen...................................................................... 48
4.3.5.2 Thread LAN_Ontvangen................................................................... 49
4.3.5.3 Thread inladen................................................................................... 50
4.3.6 Delegate van het programma ................................................................... 51
4.3.7 Adres of tabel versturen naar de LAN-modem........................................ 52
4.3.8 Forms van het programma ....................................................................... 54
4.3.8.1 Hoofdprogramma .............................................................................. 54
4.3.8.2 Toevoegen plaats en mogelijkheid .................................................... 56
4.3.8.3 Bekijken van de instellingen ............................................................. 57
4.3.8.4 Instellingen door de installateur ........................................................ 59
4.3.8.5 Bekijken instellingen installateur ...................................................... 60
4.3.9 Opstarten van het programma .................................................................. 61
III
4.3.10 Instellen van het programma.................................................................. 62
4.3.11 Afsluiten van het programma................................................................. 62
4.3.12 Blokschema ............................................................................................ 63
4.4 Randcomponenten .......................................................................................... 64
4.4.1 Relaiskaart................................................................................................ 64
4.4.2 Anti-dender schakeling ............................................................................ 66
Besluit....................................................................................................................... 67
Literatuurlijst ............................................................................................................ 69
Bijlage 1: Instellen van de gebruikersprogramma.................................................... 70
Opstarten programma ........................................................................................... 70
Verschillende menu’s ........................................................................................... 72
Configuratie van het programma .......................................................................... 74
Plaats en mogelijkheid toevoegen..................................................................... 74
Plaats en mogelijkheid verwijderen .................................................................. 75
Bekijken van de instellingen ............................................................................. 76
Instellingen door de installateur............................................................................ 77
Afsluiten programma ............................................................................................ 79
Bijlage 2: Projectfiche .............................................................................................. 80
IV
Gebruikte symbolen en afkortingen
LAN
Local Area Network
UTP
Unshielded Twisted Pair
Wi-Fi
Wireless-Fidelity
WAN
Wide Area Network
TCP/IP
Transmission Control Protocol/ Internet Protocol
UDP
User Datagram Protocol
ARP
Address Resolution Protocol
ICMP
Internet Control Message Protocol
DHCP
Dynamic Host Configuration Protocol
PPP
Point-To-Point
ISO
International Organization for Standardization
OSI
Open Systems Interconnection Basic Reference
ARPA
Advanced Research Projects Agency
NCP
Network Control Program
RFC
Requests For Comments
FPGA
Field Programmable Gate Array
IC
Integrated Circuits
RAM
Random Access Memory
GUI
Graphic User Interface
FTP
File Transfer Protocol
DDR-RAM Double Data Rate – Random Access Memory
SDRAM
Synchronous Dynamic Random Access Memory
VGA
Video Graphics Array
LED
Light Emitting Diode
ASCII
American Standard Code for Information Interchange
V
Lijst tabellen, figuren en kaarten
Figuur 1-1: PicoBlaze................................................................................................. 4
Figuur 1-2: Spartan3E ................................................................................................ 5
Figuur 1-3: Spartan3................................................................................................... 7
Figuur 1-4: Starter kit ................................................................................................. 9
Figuur 1-5: LAN-socket modem ................................................................................ 9
Figuur 1-6: Instellingen via hyperterminal............................................................... 10
Figuur 1-7: Instellingen via Webpagina ................................................................... 11
Figuur 2-1: LAN-netwerk......................................................................................... 13
Figuur 2-2: Ethernet netwerk.................................................................................... 16
Figuur 2-3: OSI-model ............................................................................................. 17
Figuur 2-4: TCP/IP stack.......................................................................................... 19
Figuur 2-5: Inkapseling TCP-berichten.................................................................... 24
Figuur 2-6: Three-Way-Handshake.......................................................................... 25
Figuur 2-7: Gelijktijdige synchronisatie................................................................... 26
Figuur 2-8: Verbreking Three-Way-Handshake ...................................................... 27
Figuur 2-9: hertransmissie TCP-pakket.................................................................... 28
Figuur 2-10: Inkapseling UDP ................................................................................. 30
Figuur 4-1: FPGA..................................................................................................... 35
Figuur 4-2: write_strobe ........................................................................................... 39
Figuur 4-3: read_strobe ............................................................................................ 40
Figuur 4-4: Hoofdprogramma .................................................................................. 54
Figuur 4-5: Plaats en mogelijkheid toevoegen ......................................................... 56
Figuur 4-6: Bekijken instellingen............................................................................. 57
Figuur 4-7: Instellingen installateur ......................................................................... 59
Figuur 4-8: Bekijken instellingen installateur .......................................................... 60
Figuur 4-9: Blokschema GUI ................................................................................... 63
Figuur 4-10: Relaisschakeling.................................................................................. 65
Figuur 4-11: anti-denderschakeling.......................................................................... 66
VI
Figuur 1: Opstartscherm ........................................................................................... 70
Figuur 2: LAN-modem niet aangesloten.................................................................. 71
Figuur 3: Menu - programma ................................................................................... 72
Figuur 4: Menu - configuratie .................................................................................. 73
Figuur 5: Menu - installateur.................................................................................... 73
Figuur 6: Locatie toevoegen..................................................................................... 74
Figuur 7: Tabel verzonden naar FPGA .................................................................... 75
Figuur 8: Verwijderen locatie en mogelijkheid........................................................ 75
Figuur 9: Bekijken instellingen ................................................................................ 76
Figuur 10: Instellingen door de installateur ............................................................. 77
Figuur 11: Opslaan instellingen................................................................................ 78
Figuur 12: Bekijken van de instellingen die door de installateur zijn gedaan ......... 78
Figuur 13: Afsluiten van het programma ................................................................. 79
VII
Inleiding
De doelstelling van dit eindwerk is het bouwen van een flexibel en multifunctioneel
domoticasysteem dat kan worden aangesloten op een lokaal netwerk. De
configuratie van het domoticasysteem gebeurt via een computer die aangesloten
wordt op het lokaal netwerk. De sturing kan via een computer worden gedaan. Ook
schakelaars/drukknoppen kunnen het domoticasysteem aansturen.
De data wordt vanuit een GUI verstuurd die de informatie doorstuurt naar een LANmodem. Deze stuurt de data op zijn buurt door naar de FPGA waar alle data
verwerkt wordt.
De instellingen voor het systeem worden in een tabel opgeslagen. Deze bevindt zich
in hart van het systeem. Het is ook belangrijk dat de instellingen bij een
stroomonderbreking bewaard blijven. Dit is nodig om de gebruiker niet op te
zadelen met nodeloos werk en problemen.
Het is de bedoeling dat het domoticasysteem ingebouwd wordt in een FPGA, in
tegenstelling tot de hedendaagse domoticasystemen die in een PLC zijn verwerkt.
Dit eindwerk bestaat uit zowel een hardware- als een softwaregedeelte. De
hardware wordt door Steven Vandenbroucke ontwikkeld, de software wordt door
Isabelle Vandooren ontwikkeld in een Microsoft .NET omgeving.
1
Hoofdstuk 1 Hardware
1.1 FPGA
Een FPGA behoort tot de programmeerbare logica. Daar wordt onder verstaan dat
de logica door de gebruiker zelf kan worden geconfigureerd. Hierbij bevindt de
logica zich meestal in eenzelfde behuizing, een IC of chip.
Vroeger, voor de komst van de programmeerbare logica werden alle digitale
schakelingen opgebouwd uit vele kleine logische bouwstenen. Bij het bouwen van
deze schakelingen werd er veel ruimte in beslag genomen. Ook de te besteden tijd
was geen onbelangrijke factor. De programmeerbare logica is ontstaan uit de
behoefte om deze grote digitale schakeling te reduceren tot een klein aantal IC’s en
een kleinere oppervlakte.
Met de programmeerbare logica verwerkt de gebruiker zijn digitale schakeling als
een programma dat in de chip wordt geladen. Op deze manier kan de gebruiker de
werking van de schakeling op een eenvoudige wijze veranderen zonder een nieuwe
print te maken. Het beschrijven van de schakeling is echter nog altijd zeer
arbeidsintensief.
Een nieuwe trend bestaat erin de logische blokken en verbindingen van een
traditionele FPGA te combineren met een microprocessor. Deze microprocessor
wordt in vele gevallen ook in de FPGA geprogrammeerd. Dit resulteert in een
“system on a programmable chIP” of SoC. Afhankelijk van de fabrikant zijn deze
microprocessoren anders opgebouwd en/of anders van naam. Een voorbeeld van
deze microprocessoren is de PowerPC van Xilinx. Een alternatief voor deze
microprocessoren is een “soft core”. Van deze “soft core” processors zijn er ook
verschillende types, zoals de MicroBlaze en PicoBlaze van Xilinx. Bij andere
fabrikanten hebben deze microprocessors en “soft core” processors een andere
naam.
2
1.1.1 PicoBlaze
De PicoBlaze is een gratis soft-core processor van Xilinx voor het gebruik in
FPGA’s. De originele naam van PicoBlaze was KCPSM, dit staat voor Ken
Chapman’s Programmable State Machine. Ken Chapman was bij Xilinx de
uitvinder van deze microcontroller. Anderen geven de voorkeur aan (K)constant
coded programmeble state machine.
De PicoBlaze is een efficiënte 8 bit microcontroller voor de Spartan3 en andere
testborden die uitgevoerd zijn met een Xilinx FPGA. Deze controller is een reduced
instruction set computer of kortweg RISC. Dit wil zeggen dat deze controllers met
een compacte groep basisinstructies werken. De tegenhanger van de RISCprocessor is de CISC processor of complex instruction set computer. Deze
gebruiken dan weer een omvangrijke set instructies.
Door een kleiner aantal instructies, gebruikt de RISC-processor minder logica. Op
deze manier kan deze zeer klein worden uitgevoerd. Bij een CISC-processor is er
nog een groot stuk microcode nodig om alle instructies uit te voeren waardoor deze
meer logica in beslag neemt.
Voor hetzelfde aantal opdrachten uit te voeren, moet een RISC-processor veel meer
instructies uitvoeren in vergelijk met een CISC-processor. Door een hogere
werksnelheid van een RISC-processor zal de nodige tijd niet veel van elkaar
verschillen. Wel is er een belangrijk verschil bij het gebruik van deze 2 processors.
Namelijk het energieverbruik ligt bij de RISC-processor veel lager.
Na het beschrijven van de PicoBlaze kan deze met een eenvoudige assembler
gesynthetiseerd worden tot VHDL-bestanden, Verilog-bestanden en andere
bestandtypes. Deze VHDL-bestanden of Verilog-bestanden worden in het design
ingeladen. De andere bestandtypes moeten in een geheugen blok worden
geprogrammeerd alvorens deze in het design in te laden.
Deze microcontroller heeft volgens zijn datasheet een snelheid van 44 tot 100
miljoen instructies per seconde afhankelijk van de gebruikte FPGA en
3
klokfrequentie. De processor verwerkt per 2 klokpulsen 1 instructie, bij een
klokfrequentie van 50MHz zal de soft-core slechts 25 miljoen instructies uitvoeren.
Een voordeel bij het gebruik van een system on chIP is het feit dat er geen externe
verbindingen moeten gemaakt worden tussen de microcontroller en de FPGA. Dit
resulteert in een groter aantal in- en uitgangen op de FPGA die vrij kunnen gebruikt
worden door de gebruiker.
Verder bezet een PicoBlaze slechts 192 logische cellen, dit komt overeen met 5%
van de FPGA op een Spartan3 bord. Nog een voordeel bij het gebruik van een softcore is, dat er geen extra randcomponenten moeten worden voorzien om de
PicoBlaze te laten werken. Door zijn kleine plaatsinname kunnen meerdere van
deze controllers in een FPGA worden geconfigureerd.
Figuur 1-1: PicoBlaze
In een PicoBlaze kunnen tot 1024 lijnen code worden geschreven, dit is voor vele
projecten ruim voldoende. Indien dit aantal overschreden wordt, moet overgegaan
worden op een groter type, een MicroBlaze of PowerPC.
Verder bezit de PicoBlaze een 8 bit adresbus, een 8 bit databus om de data in te
lezen en een 8 bit databus om de data uit te lezen. Hierdoor heeft de PicoBlaze 256
ingangen en 256 uitgangen die elk 8 bit breed zijn. Dit aantal wordt bekomen door
het aantal mogelijke adressen, hierdoor kunnen 256 ingangen en uitgangen in- of
uitgelezen worden. Daar het adres 0 ook gebruikt kan worden kunnen alle mogelijke
4
adressen benut worden. Maar doordat de ingangen en uitgangen van elkaar gesplitst
zijn, kan er niet tegelijk in- en uitgelezen worden. Dit omdat de adreslijnen zowel
voor de ingangen als uitgangen dezelfde zijn. Verder bezit de Picoblaze nog 16
registers van elk 8bit en een 64 byte RAM.
Wanneer de PicoBlaze in een FPGA beschrijving wordt ingevoegd, is het nodig om
gebruik te maken van het blok kcpsm3. Dit blok zorgt voor de communicatie tussen
de PicoBlaze en de VHDL-beschrijving. Dit blok zet de 2 databussen die afkomstig
zijn uit de PicoBlaze om naar een reeks andere databussen die beter begrijpbaar zijn
voor de gebruiker. Zo heeft de PicoBlaze een instructiebus van 18 bits breed en een
databus van 10 bits breed, het blok KCPSM3 zorgt ervoor dat deze 2 bussen
omgezet worden in verschillende signalen zoals een 8 bits adresbus en twee 8 bits
databussen. Verder zijn nog enkele signalen voorhanden voor lees en schrijf
instructies.
1.1.2 Spartan3E
Figuur 1-2: Spartan3E
Op figuur 1-2 is een Spartan3E bord te zien. Dit bord heeft een FPGA met meer dan
10000 logische cellen aan boord. Daarnaast kan de gebruiker tot 232 van de 320
5
pinnen zelf configureren. Een aantal van deze 232 pinnen zijn reeds verbonden met
enkele randcomponenten die op het bord zijn geplaatst. Deze randcomponenten
kunnen gebruikt worden voor het in- en uitlezen van data in de FPGA.
Voor het inlezen van data in de FPGA, bevinden er zich verschillende soorten
schakelaars op het bord.
Een eerste soort is de schuifschakelaar. Er zijn er 4 rechts onderaan het bord.
Een andere soort zijn de drukknoppen, hiervan zijn er eveneens 4 aanwezig.
Daarbij staat ook nog een Rotary Push Button Switch.
Deze knoppen bevinden zich links van het LCD-display. Met de draaiknop kan
bepaald worden in welke richting en op hoeveel graden de knop is verdraaid.
Er zit ook nog een drukknop ingewerkt in deze knop. Voor het ingeven van nog
meer data is er ook een PS/2 poort aanwezig. Hierop kan een toetsenbord of muis
worden aangekoppeld.
Om data zichtbaar te maken op het bord zelf is er een LCD-display aanwezig alsook
8 LEDs. Deze uitleesmogelijkheden zijn rechtstreeks op de FPGA aangesloten.
Door juiste instellingen voor het LCD-display te doorlopen kan er data op de
display worden geplaatst. Op de display kunnen zowel patronen als tekens worden
weergegeven. Via de LEDs kan enkel 1 uitgang getoond worden. Als de uitgang
hoog is licht de LED op, als de uitgang laag is, is de LED gedoofd.
Verder zijn er nog 3 bijna identieke connectoren te vinden bovenaan het Spartan3
bord. De uiterst linkse connector is de VGA-connector. Op deze connector kan een
beeldscherm worden aangesloten. Via de FPGA kan dan een beeld op het
beeldscherm worden getoond. De andere 2 connectoren zijn RS232 connectoren.
Er zitten ook meerdere verschillende geheugenlocaties op het Spartan3 bord.
Er is een SDRAM chip van 32Mbyte aanwezig en verder is ook nog flash RAM.
Als laatste groot onderdeel is er ook nog een ethernet connector en chip op het bord
aanwezig. Hiermee kan het bord rechtstreeks aangesloten worden op een netwerk.
De ethernet chip verzorgt alle communicatie tussen het netwerk en de FPGA.
De snelheid van deze aansluiting kan oplopen tot 100 megabits per seconde.
6
Er is wel een probleem met Spartan3E, al deze bijhorende componenten zijn door
de vele instellingen moeilijk aanspreekbaar. Hierdoor is dit bord zeer ingewikkeld
om alles goed te laten functioneren.
Door deze moeilijkheden is besloten om met het Spartan3 bord verder te werken.
Op de Spartan3 is bovendien een grote connector aanwezig waarop andere borden
kunnen worden aangesloten.
1.1.3 Spartan3
Figuur 1-3: Spartan3
De Spartan3 is in tegenstelling tot het Spartan3E bord vrij van instellingen. Op het
Spartan3 bord staat een FPGA met 4320 logische cellen. Dit is merkelijk minder
dan deze op het Spartan3E bord. Bij deze FPGA zijn slechts 173 van de 256 pinnen
door de gebruiker zelf in te stellen. Deze FPGA heeft dan weer 4 digitale klok
managers, deze kunnen met de gegeven klokfrequentie andere klokfrequenties
maken zonder dat deze afhankelijk zijn van de helft, een vierde, … van de
klokfrequentie. Ook is er RAM aanwezig in de FPGA zelf, bij de Spartan3E is dit
niet het geval en is deze RAM enkel buiten de FPGA te vinden. Net zoals bij de
Spartan3E zijn er rond de FPGA een aantal andere componenten geplaatst, deze
kunnen gebruikt worden om data in te geven of de data uit te lezen.
Voor het ingeven van data zijn 4 drukknoppen en 8 schuifschakelaars voorzien. Ook
is er nog een PS/2-poort op het bord voorzien. Op deze poort kan de gebruiker een
muis of toetsenbord aansluiten. Om uitgestuurde data zichtbaar te maken, zijn er op
7
het bord acht LED’s voorzien. Daarnaast staan er ook nog vier 7-segment displays
op het bord om tekens of getallen zichtbaar te maken. De gebruiker kan via een
VGA-poort een beeldscherm aansluiten op de FPGA om beelden zichtbaar te
maken.
Voor het opslaan van grote hoeveelheden data is er op het bord S-RAM aanwezig.
In deze S-RAM kan er tot 512 Mbyte aan data worden opgeslagen.
Via een DB-9 connector kan er een RS232 communicatie worden opgezet met een
ander bord of met een computer via hyperterminal. Er zijn nog 3 connectoren
voorzien waar de pinnen van de FPGA aan verbonden zijn. Via deze connectoren
kan men een verbinding maken met andere FPGA-borden of een zelfgemaakte print
aansluiten op het bord. Zo kunnen de overgebleven in- en uitgangen ook hun nut
bewijzen.
8
1.2 LAN-socket modem
1.2.1 Wat is een LAN-socket modem
Een LAN-socket modem (figuur 1-5) is een embedded LAN modem die we kunnen
inpluggen op een moederbord, de starter kit (figuur 1-4).
De LAN-socket heeft een autodetectie waarmee kan nagegaan worden of we op een
10BaseT of 100BaseT netwerk aangesloten zijn en of we half of full duplex werken,
…
Er is ook een volledige protocol stack voorzien: TCP/IP, UDP, ARP, ICMP en
DHCP.
De LAN-socket modem kan zowel serieel aangestuurd worden als via ethernet.
Figuur 1-4: Starter kit
Figuur 1-5: LAN-socket modem
1.2.2 Instellingen
De LAN-socket modem kunnen we volledig zelf instellen. Dit kan zowel met een
hyperterminal of via een webpagina. Dit is enorm handig, want als je niet
verbonden bent met het Internet, kan je toch nog aanpassingen doen.
9
Als je aanpassingen wilt doen via een webpagina, moet je surfen naar het IP-adres
van de LAN-modem. Éénmaal daar, kan je zowel het serieel gedeelte als het
Internetgedeelte aanpassen.
Voor het serieel gedeelte van de LAN-modem, moeten we voor ons eindwerk
volgende instellingen doen. Baudrate:115200, Startbits: 8 bit, Pariteit: geen,
Stopbit: 1 bit, Flow control: geen
Deze instellingen kan men via hyperterminal (figuur 1-6), of via de webpagina
(figuur 1-7) uitvoeren.
Figuur 1-6: Instellingen via hyperterminal
Voor de communicatie tussen de LAN-modem en het programma over het netwerk
of Internet, moeten volgende instellingen gedaan worden. Het IP-adres stellen we in
op 172.23.7.101, Subnetmask: 255.255.0.0, Default gateway: 172.23.0.1
10
Figuur 1-7: Instellingen via Webpagina
11
Hoofdstuk 2 Netwerken
2.1 Soorten Netwerken
2.1.1 LAN-netwerk
[1] Een LAN-netwerk is een netwerk waar minimaal 2 computers, rechtstreeks of
via een gedeeld medium, met elkaar verbonden zijn.
De verbindingen in een netwerk kunnen op verschillende manieren gebeuren. Dit
kan zowel gebeuren door middel van kabels (meestal UTP), via de ether (vb. Wi-Fi)
alsook via glasvezel. Een LAN beperkt zich maar tot een klein gebied of een
gebouw, zoals bv. een bedrijf.
Indien er grotere afstanden moeten overbrugd worden spreekt met van een WANnetwerk.
Een LAN wordt vaak opgezet op een locatie waar veel computers in één ruimte of
gebouw aanwezig zijn en waar een snelle overdracht van informatie tussen
verschillende computers nodig is. Dit is meestal het geval in bedrijven, in scholen
en overheidsinstellingen. Via een LAN heeft een computer toegang tot andere
resources die aan het netwerk zijn gekoppeld, zoals andere computers, printers en
eventueel andere netwerken. In figuur 2-1 is te zien hoe een LAN-netwerk is
opgebouwd.
12
Figuur 2-1: LAN-netwerk
2.1.2 Internet
2.1.2.1 Ontstaan
[2] Het Internet is rond 1969 ontstaan met een computernetwerk onder de naam
ARPANET. Binnen ARPANET werden onderzoeksbijdragen opgenomen op het
gebied van gedecentraliseerde netwerken, wachtrijtheorie en packet-switching. In de
jaren zeventig bestond ARPANET uit verscheidene samengekoppelde netwerken.
1973 was een belangrijke mijlpaal, namelijk de ontwikkeling van “The Internet and
Transmission Control Procols (TCP)”. Dit was een onderdeel van één van de toen
lopende ARPA-projecten.
In 1974 werd voor het eerst de term “Internet” gebruikt.
In 1983 stapte ARPANET over van NCP (protocol van ARPANET) naar TCP/IP
als netwerkprotocol, en daarmee was de geboorte van het Internet in haar huidige
technische vorm een feit.
Pas in de jaren 90 werd het Internet door het grote publiek ontdekt. Met de
introductie van klikbare aan elkaar gekoppelde pagina's (HTML/WWW) werd het
Internet klaar gemaakt voor iedereen.
In 1993 werd de Mosaic-webbrowser gepubliceerd en eind 1994 werd de groeiende
belangstelling voor Internet merkbaar.
13
In 1996 was het Internet algemeen bekend, het werd gebruikt als synoniem voor het
World Wide Web.
2.1.2.2 Wat is het Internet
[3] De naam Internet is afkomstig van het woord Interconnected Networks en is
een netwerk van computernetwerken. Om het Internet goed te laten functioneren is
het nodig dat er afspraken gemaakt zijn in verband met protocollen. Het bijna
universeel gebruikte protocol is het Internet Protocol (IP). Computers in
verschillenden netwerken kunnen dankzij die afspraken met elkaar communiceren.
Ondertussen is het Internet een wereldomvattend fenomeen dat het karakter van een
massamedium heeft gekregen. Het is ook het meest gebruikte communicatiemiddel
ooit.
Voor de meeste gebruikers is het Internet vaak een synoniem voor het World Wide
Web (WWW), maar WWW is slechts één van de vele diensten die kunnen worden
gebruikt via het Internet. Andere bekende diensten zijn e-mail, FTP, usnet, …
In tegenstelling tot oudere communicatieprotocollen is de set van protocollen die
het Internet gebruikt zoveel mogelijk onafhankelijk van het gebruikte fysieke
medium. Hierdoor kan bijvoorbeeld TCP/IP-communicatie plaatsvinden over
glasvezel-, koper- of via radioverbindingen.
Het ontstaan van protocollen gebeurt via publieke discussies. Als een protocol
goedgekeurd is, wordt deze vastgelegd door de Internet Engineering Taskforce
(IETF). Deze bewaart dan deze standaarden in documenten die de RFC’s worden
genoemd.
Sommige van deze protocollen worden door de Internet Architecture Board (IAB)
verheven tot Internetstandaard.
De meest gebruikte protocollen binnen Internet zijn op dit moment IP, TCP, UDP,
DNS, PPP, SLIP, ICMP, POP3, IMAP, SMTP, HTTP, HTTPS, SSH, Telnet, FTP,
LDAP, SSL en TLS.
14
2.1.2.3 Verbindingen met het Internet
Om met het Internet te kunnen werken moet er een verbinding met een netwerk
worden opgezet. Die verbinding kan op verschillende manieren gebeuren:
• Een permanente verbinding:
Deze verbinding wordt het meest gebruikt bij bedrijven. In de praktijk is dit
een huurlijn, een soort telefoonlijn die altijd open ligt. Deze huurlijn kan
verschillende bandbreedtes hebben, bv. 100Mbps.
• Point-to-Point-Protocol:
Dit soort verbinding wordt vooral gebruikt door particuliere Internetgebruikers. Er wordt ingebeld op een computer van een provider, waar de
gebruiker zich identificeert met het opgeven van een gebruikersnaam en
wachtwoord. Er wordt dan automatisch een verbinding opgebouwd.
2.1.3 Ethernet
[4] Ethernet (IEEE 802.3) is het onderliggende netwerk waarmee computers met
elkaar communiceren als ze hardwarematig met elkaar in een LAN verbonden zijn
met behulp van netwerkkaarten en netwerkkabels. Bovenop Ethernet draaien
verschillende protocollen, waarvan TCP/IP de meest bekende en meest gebruikte is.
In figuur 2-2 is de opbouw van een Ethernet netwerk te zien.
15
Figuur 2-2: Ethernet netwerk
De Ethernet-specificaties bevatten functies die je tegenkomt in de fysieke- en
datalinklaag van het OSI-model (zie verder). Deze laag maakt pakketjes aan waarin
data aanwezig is om ze zo te transporteren over een netwerk.
Ethernet maakt gebruik van CSMA/CD (Carrier Sense MultIPle Access with
Collision Detection) toegangscontrole om te bepalen welk station er op wel moment
data kan transporteren over het netwerk. In een Ethernet-netwerk luistert elk station
(computer, printer enz.) naar het netwerk en begint pas met versturen van data als er
geen ander station op dat moment gebruik maakt van het netwerk. Indien het
netwerk vrij is kan ieder station dat dat wenst, proberen de controle over te nemen
om data te transporteren. Ethernet-netwerken werken dus volgens het principe van
wie het eerst komt, wordt het eerst bediend. In het geval dat twee stations op
hetzelfde moment proberen data te versturen, ontstaat er een collision (botsing).
Beide stations stoppen dan met het versturen van data. Ze wachten dan een
willekeurige tijd (in milliseconden) vooraleer ze opnieuw proberen om hun data te
versturen.
Hoe meer stations op een netwerk zijn aangesloten, hoe meer collisions zich kunnen
voordoen. Dit resulteert in een slechtere prestatie van het netwerk. In de plaats van
hubs is het gebruik van switches, die het netwerk in kleinere segmenten opdelen,
een manier om dit probleem op te lossen. Doordat het netwerk in segmenten wordt
16
opgedeeld, zijn er per segment minder stations aanwezig. Dit resulteert in een
kleinere kans op collisions. Bij broadcast krijgt ieder segment dit pakket. Om dit te
voorkomen moet een router in het netwerk worden geplaatst; deze kan een
scheiding tot stand brengen tussen de IP (sub-) netten.
2.2 OSI-referentie model
[5]
Het OSI-referentiemodel is gebaseerd op een voorstel van ISO. Het bestaat uit 7
lagen. Elk van deze lagen heeft een welomschreven functie. (figuur 2-3)
Het OSI-model is geen netwerkarchitectuur; het beschrijft alleen wat elke laag moet
doen.
Figuur 2-3: OSI-model
1 De fysieke laag houdt zich bezig met het verzenden van bits over een
communicatiekanaal.
17
2 De datalinklaag heeft als hoofdtaak de transmissiefaciliteiten te transformeren tot
een lijn die voor de netwerklaag vrij lijkt te zijn van ongedetecteerde
transmissiefouten. Ook moet de datalinklaag in staat zijn het begin en het einde van
de frames aan te brengen en te herkennen. De problemen die veroorzaakt worden
door beschadigde, verloren en dubbele frames moeten opgelost worden door deze
laag.
3 De netwerklaag houdt zich bezig met het regelen van de werking van het subnet.
Een belangrijke ontwerpkwestie is het bepalen van de route waarlangs de pakketten
van de bron naar de bestemming moeten gaan. De routes zijn gebaseerd op
dynamische tabellen die in het netwerk zitten. Deze laag moet er ook voor zorgen
dat ongelijksoortige netwerken met elkaar kunnen verbonden worden.
4 De transportlaag heeft als hoofdtaak het in ontvangst nemen van de data uit de
sessielaag. Indien nodig deze data in kleinere delen splitsen, deze aan de
netwerklaag doorgeven en ervoor zorgen dat alle stukken correct bij de ontvanger
aankomen.
Onder normale omstandigheden creëert deze laag een aparte netwerkverbinding
voor
elke
transportverbinding
die
de
sessielaag
nodig
heeft.
Als
de
transportverbinding een grote doorstroming vereist, kan de transportlaag meerdere
netwerkverbindingen opzetten.
Deze laag bepaalt ook welke soort transportdienst er aan de sessielaag, en
uiteindelijk aan de gebruikers van het netwerk, wordt geleverd.
5 De sessielaag stelt de gebruikers op verschillende machines in staat gezamenlijk
een sessie tot stand te brengen. In een sessie kan data worden overgebracht.
Er zijn ook enkele nog verdergaande diensten die voor bepaalde toepassingen
kunnen gebruikt worden. Één van die diensten is het regelen van verkeer in beide
richtingen, verkeer in één richting, …
6 De presentatielaag voert bepaalde functies uit die zo vaak worden aangevraagd
dat het de moeite waard is dat er een algemene oplossing voor gezocht wordt zodat
18
elke gebruiker de problemen niet zelf moet oplossen. In tegenstelling tot de lagere
lagen, die er alleen in geïnteresseerd zijn om bits op een betrouwbare manier heen
en weer te sturen, houdt deze laag zich bezig met de syntaxis en de semantiek van
de verzonden informatie.
7 De applicatielaag staat het dichtst bij de gebruiker en communiceert direct met de
applicatie en geeft de gevraagde opdracht door aan de presentatielaag. E-mail, FTP
e.d. communiceren op deze laag.
Deze laag onderscheidt zich van de andere lagen doordat ze geen services biedt naar
de andere OSI-lagen, maar alleen naar de applicatie buiten het OSI-model.
2.3 TCP/IP stack
In tegenstelling met OSI-referentie model heeft de TCP/IP stack maar 5 lagen.
(figuur 2-4)
Figuur 2-4: TCP/IP stack
De fysieke laag is verantwoordelijk voor de encodering en de transmissie van data
over het netwerk. De data wordt in de vorm van bits over de fysieke laag verzonden
van de zender naar ontvanger.
19
Ethernet, token ring, hubs, … maken standaard gebruik van de fysieke laag.
De datalinklaag bepaalt het pad dat een pakket moet volgen om van bron naar
bestemming te geraken. Om een pakket te verplaatsen van een node (een host of een
pakketswitch) naar de volgende node op het pad moet de netwerklaag vertrouwen
op de diensten van de datalinklaag. De datalinklaag ontvangt de data uit de
netwerklaag, die het datagram op zijn beurt weer doorstuurt naar de volgende node
op het pad. Bij deze volgende node geeft de datalinklaag het IP-datagram door aan
de netwerklaag.
De
diensten
van
de
datalinklaag
variëren
volgens
het
specifieke
datalinklaagprotocol dat door de link wordt gebruikt. Sommige protocollen bieden
bv. betrouwbare bezorging op het datalinkniveau. Aangezien de datagrammen
verschillende links passeren vooraleer aan te komen bij de ontvanger, kan een
datagram door verschillende datalinklaagprotocollen worden afgehandeld bij
verschillende links op het pad. Bij een bepaalde link kan het datagram bv. worden
verwerkt door Ethernet en bij de volgende link door PPP.
De netwerklaag is verantwoordelijk voor het bepalen van het pad van datagrammen
van de ene host naar de andere. Deze laag bestaat uit 2 componenten.
Het heeft een protocol waarin de velden in het IP-datagram zelf worden
gedefinieerd, maar ook hoe eindsystemen en routers daarmee omgaan. (IPprotocol). Er is slechts één IP-protocol en alle Internetcomponenten met een
netwerklaag moeten het IP-protocol gebruiken.
Naast het IP-protocol zijn er ook routingprotocollen. Deze routingprotocollen
bepalen het pad van de datagrammen tussen de bron en de bestemming.
De transportlaag zorgt voor het transport van berichten van de applicatielaag tussen
client en server van een toepassing. De 2 transportprotocollen zijn TCP en UDP, die
elk berichten van de applicatielaag kunnen transporteren.
TCP werkt met connection-oriented service, dat wil zeggen, dat deze dienst
garandeert dat de berichten de bestemming bereiken.
20
UDP is een connectionless service, alle berichten worden verstuurd, maar er wordt
niet gegarandeerd dat alle berichten toekomen.
De
protocollen
van
de
transportlaag
in
een
bronhost
geven
een
transportlaagsegment en een bestemmingsadres door aan de netwerklaag. De
netwerklaag zorgt vervolgens voor de dienst waarmee het pad kan worden bepaald
naar de bestemming. Wanneer het pakket op de bestemming aankomt, geeft de
netwerklaag het segment door naar de transportlaag op de ontvanger.
De applicatielaag zorgt voor de ondersteuning van netwerktoepassingen. De
applicatielaag werkt met een groot aantal protocollen, waaronder http voor het web,
SMTP voor e-mail en FTP voor bestandsoverdracht
De data wordt door het programma in een specifiek formaat van de applicatielaag
gecodeerd en dan in het transport layer protocol geëncapsuleerd.
21
2.4 Protocollen
2.4.1 IP-protocol
Het IP-protocol is een onderdeel van de netwerklaag van het Internet. Een
netwerklaag in een netwerk werkt met datagrammen en heeft 3 belangrijke
componenten:
• Netwerklaagprotocol
Het netwerklaagprotocol is een adressering op de netwerklaag. Ook de
verschillende velden in het datagram en de reactie van routers en
eindsystemen op deze netwerklaag worden hier gedefinieerd op basis van de
waarden in deze velden.
Het netwerkprotocol op Internet is het Internet Protocol of IP-protocol.
Momenteel zijn er 2 versies. IPv4 en IPv6.
• Padbepalingscomponent
Dit bepaalt het pad dat een datagram volgt vanaf de verzender naar de
ontvanger.
• ICMP
Hiermee kunnen eventuele fouten in het datagram worden gemeld. Er kan
ook bepaalde informatie over de netwerklaag afgehandeld worden.
Het IP-protocol zorgt voor de communicatie tussen de verschillende machines.
Maar met IP is er echter nog geen communicatie tussen processen mogelijk. Om
communicatie tussen processen mogelijk te maken is er een extra laag software
boven IP nodig, het transportprotocol. In de TCP/IP protocolsuite wordt gebruik
gemaakt van 2 protocollen: TCP en UDP.
22
2.4.2 TCP/IP
TCP/IP is een verzamelnaam voor de reeks netwerkprotocollen die voor een grote
meerderheid van de netwerkcommunicatie tussen computers instaat. Het Internet is
het grootste en meeste bekende TCP/IP-netwerk. De naam TCP/IP is een
samentrekking van de twee bekendste protocollen die deel uit maken van de
TCP/IP-protocolstack: het Internetprotocol en het Transmission Control Protocol.
TCP/IP is een pakketgeschakeld protocol waarbij de gegevens in kleine pakketjes
onafhankelijk van elkaar worden verzonden. De communicatiesoftware plaatst de
pakketten weer in de juiste volgorde, detecteert eventuele fouten in de ontvangen
data om, indien nodig, bepaalde pakketten opnieuw te vragen tot alles OK is. Bij
een overbelasting van een bepaalde lijn wordt zelfs aangeraden pakketjes weg te
gooien. Over dit onbetrouwbare netwerk wordt met behulp van het TCP-protocol
een ogenschijnlijk betrouwbare dienst gelegd, waarbij TCP in de gaten houdt of
pakketjes (in de juiste volgorde) aankomen en, indien niet, geen bevestiging
(acknowledge) stuurt. Nadat bij de zender een welbepaalde wachttijd (time-out)
verstreken is, zonder dat er een bevestiging binnen is, wordt het pakketje opnieuw
gestuurd.
Vanwege deze kenmerken is TCP/IP erg geschikt voor netwerkdiensten waar geen
garantie over de zekerheid en timing vereist is en wanneer bepaalde data dient aan
te komen. Bijvoorbeeld, bij het downloaden van een foto van Internet, maakt het
niet uit dat er door pakketverlies enige data verloren gaat, zolang dit door TCP maar
gecorrigeerd wordt.
2.4.3 TCP
TCP is een vereiste TCP/IP-standaard, die gedefinieerd is in RFC 793, en die een
betrouwbare,
verbindingsgeoriënteerde
pakketafleveringsservice
garandeert.
(connection oriented)
Algemeen kan er gezegd worden dat TCP volgende kenmerken heeft:
23
• Garandeert de aflevering van IP-datagrammen
• Verzorgt het segmenteren en opnieuw samenvoegen van grote blokken
gegevens die door programma's worden verzonden
• Zorgt voor aflevering in de juiste volgorde van de gesegmenteerde gegevens
• Controleert de integriteit van de verzonden gegevens met behulp van een
controlesom
• Verzendt positieve bevestigingen als de verzonden gegevens correct zijn
ontvangen. Met behulp van selectieve bevestigingen worden er ook
negatieve bevestigingen verstuurd voor gegevens die niet zijn ontvangen
• Biedt een voorkeursmethode voor gegevensoverdracht voor programma's die
gebruik
moeten
maken
van
betrouwbare,
sessiegeoriënteerde
gegevensoverdracht, zoals programma's voor client/server-databases en email
TCP-berichten worden ingekapseld en binnen IP-datagrammen verzonden.
(figuur 2-5)
Figuur 2-5: Inkapseling TCP-berichten
De werking van TCP is gebaseerd op een point-to-point communicatie tussen twee
netwerkhosts. TCP ontvangt gegevens van programma's en verwerkt deze gegevens
als een stroom bytes. De bytes worden in segmenten gegroepeerd. Vervolgens
worden deze segmenten genummerd en in de juiste volgorde geplaatst voor
aflevering.
Twee TCP-hosts moeten eerst onderling een sessie tot stand brengen voordat ze
gegevens kunnen uitwisselen. Een TCP-sessie wordt geïnitialiseerd via een
24
zogeheten three-way handshake (figuur 2-6). Bij dit proces worden de
volgnummers gesynchroniseerd en wordt besturingsinformatie gedefinieerd die
nodig is om een virtuele verbinding tussen beide hosts tot stand te brengen.
Figuur 2-6: Three-Way-Handshake
De sequentie nummers worden willekeurig gekozen, afhankelijk van de waarde van
de ISN. Zoals in figuur 2-6 wordt geïllustreerd, wordt tijdens de opbouw van de
verbinding onderhandeld naar een ISN. Zo geeft TCP A aan dat zijn ISN=100 is in
zijn SYN-segment. TCP B ontvangt het SYN-segment van TCP A, en verstuurd een
SYN-RECVD-segment met zijn ISN=200 samen met een bevestiging van het SYNsegment (ACK=101). Dus hiermee geeft TCP B aan dat het eerst volgende
pakketnummer welke hij verwacht van TCP A dus 101 is.
De TCP-connectie kan zich in een bepaalde toestand (state) bevinden. Zo staat
tijdens de opbouw van de verbinding TCP A in de state CLOSED en staat TCP B in
de state LISTEN. De verschillende TCP toestanden hangen af van de applicaties die
op deze hosts draaien.
Het kan ook gebeuren dat er 2 hosts tegelijk een verbinding opzetten. Als dit
gebeurt, is het de taak van TCP dat er maar één connectie behouden wordt. Op dit
punt onderscheid TCP zich van andere connectie georiënteerde protocollen, die
twee verbindingen zouden opgezet hebben. (figuur 2-7)
25
Figuur 2-7: Gelijktijdige synchronisatie
TCP A en TCB B zitten beiden in de CLOSED state.
In stap 2 wordt door TCP A een SYN-segment verstuurd naar TCB B, en terwijl
deze nog onderweg is wordt in stap 3 door TCP B een SYN-segment verstuurd naar
TCP A. Het segment van TCP B komt aan bij TCP A en deze gaat van de SYNSENT state naar de SYN-RECVD state.
In stap 4 gebeurt hetzelfde bij TCP B, deze ontvangt de SYN-segment van TCP A
en gaat van SYN-SENT state naar SYN-RECVD state.
In stap 5 verstuurt TCP A een bevestiging van het SYN-segment naar TCP B terwijl
de bevestiging van TCP A nog onderweg is, wordt door TCP B ook een bevestiging
van het SYN-segment verstuurd naar TCP A.
In stap 6 krijgt TCP A de bevestiging van TCP B binnen en gaat naar de
ESTABLISHED state.
In stap 7 komt even later de bevestiging van TCP A binnen, en gaat deze ook naar
de ESTABLISHED state.
Nadat het handshake-proces is voltooid, worden de gegevenssegmenten in de juiste
volgorde verzonden en bevestigd door de verzendende en de ontvangende host.
26
Voordat een verbinding wordt afgesloten, wordt een soortgelijk handshake-proces
toegepast om te controleren of beide hosts klaar zijn met het verzenden en
ontvangen van gegevens. (figuur 2-8)
Figuur 2-8: Verbreking Three-Way-Handshake
Omdat TCP full-duplex communicatie toelaat is het zo dat: als één kant de
verbinding verbreekt, dit niet wil zeggen dat dan automatisch de andere kant ook
klaar is met het versturen van data. De TCP CLOSE operatie betekent dus meer 'Ik
heb geen data meer te versturen' dan 'Ik wil geen data meer ontvangen'. Dit betekent
dus dat als de ontvangende TCP de connectie moet blijven open houden totdat hij
alle data binnen heeft en van de zendende TCP de melding krijgt dat de verbinding
verbroken mag worden. Ook al is het proces aan de ontvangende TCP klaar en heeft
aan de operating system doorgegeven dat het klaar is met versturen van data, moet
de verbinding open blijven totdat de zendende TCP ook klaar is met het versturen
van data.
Er zijn drie manieren waarop een verbinding gesloten kan worden:
1. De lokale TCP voert een close uit als response op de applicatie.
2. De remote TCP doet een close (segment waarbij het FIN control veld '1' is)
3. Beide TCP's sluiten tegelijkertijd (Simultane close)
In figuur 2-6 wordt in stap 2 door TCP A een FIN-segment verstuurd naar TCP B .
Hiermee geeft TCP A dat het klaar is met het versturen van data. TCP A gaat dan
27
naar het FIN-WAIT toestand, en wacht op bevestiging van zijn FIN-segment of op
een FIN-segment van TCP B.
In lijn 3 krijgt TCP A een bevestiging van TCP B van zijn FIN-segment en gaat nu
in de TIMEWAIT toestand, en wacht op een FIN van TCP B.
In lijn 4 ontvangt TCP A een FIN-segment van TCP B, in lijn 5 verstuurt TCP A
dan een bevestiging van het FIN-segment van TCP B. TCP B gaat naar de
CLOSED toestand zodra het de bevestiging van TCP A heeft ontvangen, dus in
lijn 5. In lijn 5 wacht TCP A een tijd van 2 x de MSL (Maximum Segment
Lifetime) voordat het de verbinding daadwerkelijk verbreekt. Deze manier van
connectie verbreking gebeurt dus op manier 1 zoals hierboven vermeld. Voor
manier 2 geldt hetzelfde als manier 1 maar dan zijn de rollen van TCP A en TCP B
verwisseld.
Ook kan het gebeuren dat er een segment niet toekomt bij de ontvanger. TCP zorgt
voor een hertransmissie van het pakket, bij het niet aankomen ervan. Dit is te zien
op figuur 2-9.
Figuur 2-9: hertransmissie TCP-pakket
Het kan ook voorkomen dat een snelle zender communiceert met een trage
ontvanger. De ontvanger kan daardoor overspoelt worden met data, zodat data
28
verloren kan gaan. Door gebruik te maken van flow control zal de ontvanger zijn
snelheid regelen naar de snelheid van de zender op basis van de vulling van zijn
eigen buffer. De ontvanger kan de stroom van de segmenten niet aan van de snelle
zender. De ontvanger zal kijken in hoeverre zijn buffer gevuld is en zal aan de
zender zijn vrije bufferruimte meegeven. De zender zal daarop het uitgaand verkeer
door middel van een zendvenster beperken. Het zendvenster is de hoeveelheid data
die de zender nog mag versturen binnen de beperkingen van zijn eigen buffer.
Dit betekent: hoeveel reeds verzonden, maar nog niet bevestigde data, nog
gebufferd moet worden.
2.4.4 UDP
UDP is ook een TCP/IP-standaard, die is gedefinieerd in RFC 768.
In plaats van TCP wordt UDP door een aantal programma's gebruikt voor snelle en
onbetrouwbare overdracht van gegevens tussen TCP/IP-hosts.
UDP laat een beperkte foutdetectie toe. UDP biedt een verbindingsloze
datagramservice waarmee datagrammen naar beste vermogen (best effort) worden
afgeleverd. Dit houdt in dat UDP de aflevering niet garandeert en dat UDP niet
controleert of de aflevering in de juiste volgorde plaatsvindt. Een bronhost
waarvoor betrouwbare communicatie is vereist, moet gebruikmaken van TCP of van
een programma dat zelf services biedt waarmee gegevens in de juiste volgorde
worden afgeleverd en worden bevestigd.
UDP-berichten worden ingekapseld en binnen IP-datagrammen verzonden,
(figuur 2-10).
29
Figuur 2-10: Inkapseling UDP
30
Hoofdstuk 3 Communicatie
3.1 RS232
[6] De RS232-standaard beschrijft een seriële communicatiemethode waarbij de
informatie bit voor bit over een fysisch kanaal wordt verstuurd. De volledige
informatie wordt opgedeeld in datawoorden met een lengte tussen de 5 en 8 bits.
Voor een goede overdracht moeten zowel de zender als de ontvanger op dezelfde
baudrate ingesteld zijn. Deze baudrate is de frequentie waarmee de databits worden
verzonden. Verder worden aan de bittrein nog een aantal bits toegevoegd voor de
synchronisatie en de foutdetectie.
Bij synchrone communicatie is een klok- of triggersignaal naast de datalijn
aanwezig. De trigger is nodig om de start van de dataoverdracht aan te geven.
De afwezigheid van dit signaal maakt asynchrone communicatie mogelijk. De
asynchrone communicatie is goedkoper te implementeren aangezien er minder
lijnen nodig zijn in de kabel. Een nadeel is, dat de ontvanger op een verkeerd
moment met de ontvangst kan starten. In dit geval is er een hersynchronisatie nodig
en dit is tijdrovend. Alle gegevens die in dit tijdsinterval verzonden worden gaan
verloren.
Een bijkomend nadeel is dat extra bits noodzakelijk zijn in de bittrein om het begin
en einde van de nuttige informatie aan te geven.
Bij RS232 kan de lijnspanning in twee toestanden verkeren: de aan-stand, ook
bekend onder de Engelse naam mark, en de uit-stand als space.
Andere lijntoestanden zijn niet mogelijk. Indien er geen gegevens worden
verzonden wordt de lijn in de mark toestand gehouden.
De extra bits zijn de startbit, pariteitsbit en stopbits.
Door de asynchrone manier van communiceren kan het datawoord op elk moment
beginnen. Dit zorgt voor problemen aan de ontvangstzijde bij het detecteren welke
bit de eerste bit is van het datawoord. Dit probleem wordt opgelost door het
bijvoegen van een signaleringsbit of startbit. Deze bit is herkenbaar aan het space
niveau. Na de startbit volgt het datawoord.
31
Een pariteitsbit wordt toegevoegd om transmissiefouten te kunnen detecteren; deze
komt net na de databits. De zender berekent de waarde van deze bit. Bij de
ontvanger wordt dezelfde berekening uitgevoerd en vergeleken met de ontvangen
pariteitsbit.
Indien de ontvanger de startbit gemist heeft, start hierdoor de ontvangst met de
eerstvolgende databit die een space-waarde heeft. Door deze fout wordt er
verminkte data ontvangen en zal de synchronisatie niet meer kloppen. Een
mechanisme
moet
daarbij
aanwezig
zijn
om
een
hersynchronisatie
te
bewerkstelligen. Daarvoor is het begrip framing geïntroduceerd. Framing betekent,
dat de databits en pariteitsbit worden omringd door een startbit en stopbits. De tijd
tussen de start- en stopbits is constant en wordt door de baudrate en het aantal bits
tussen start- en stopbits bepaald. De startbit is altijd een space niveau en stopbit een
mark niveau. Als de ontvanger op de plaats van de stopbit geen mark ontvangt, dan
is er een framing error gedetecteerd. Hierdoor wordt een foutconditie in het
ontvangstgedeelte
geplaatst.
Vervolgens
wordt
geprobeerd
om
op
de
binnenkomende bits te hersynchroniseren. Deze hersynchronisatie werkt goed
zolang er genoeg variatie is in de bitpatronen.
De stopbit op het einde van de bittrein kan verschillende lengtes hebben. De stopbit
is geen echte bit maar de periode waarop de lijn in de mark (uit) stand moet zijn na
ieder datawoord. Deze tijd kan 1, 1,5 of 2 bit zijn.
Een stopbit met lengte 1 kan voor alle lengtes worden gebruikt; 1,5 bits kan alleen
gebruikt worden bij datawoorden van 5 bit lang; 2 bits kan enkel gebruikt worden
bij langere woorden.
32
3.2 Communicatie tussen 2 borden.
Om de communicatie tussen de LAN-modem en de FPGA mogelijk te maken,
wordt gebruik gemaakt van de RS232-standaard.
Zowel bij de LAN-modem als bij de FPGA kan men de baudrate, gebruikt bij de
data-uitwisseling, instellen.
In de LAN-modem is deze baudrate via een webpagina, die ingewerkt zit in de
LAN-modem, in te stellen. Ook kan die bautrate via de RS232-connector en/of via
de hyperterminal worden ingesteld.
In de FPGA is de bautrate in de programmacode vast ingesteld.
Om data te versturen van een FPGA-bord naar een ander bord gebruiken we ook de
RS232 standaard. Deze RS232-communicatie kan niet over dezelfde connector
gebeuren waarlangs de data van de LAN-modem komt. Die data naar een ander
bord zal over één van de zijdelingse connectoren worden verstuurd.
Door data te versturen van het ene bord naar het ander is het mogelijk om alle
dataverwerking binnen 1 FPGA te doen. Het inlezen van de ingangen en uitsturen
van de uitgangen kan dan in andere FPGA-borden plaatsvinden.
33
Hoofdstuk 4 Domoticasysteem
4.1 Communicatieprotocol
Om een correcte werking te verkrijgen van het systeem, is een duidelijke afspraak
nodig i.v.m. het versturen van de data. Dit moet eerst afgesproken worden om
problemen en veranderingen op het einde te vermijden.
Voor dit protocol wordt de ASCII-tabel gebruikt. Hieruit zijn verschillende tekens
geselecteerd die een handeling voorstellen. Verder zijn er ook verschillende tekens
die data voorstellen.
Voorafgaand het inlezen van de data in de tabel wordt eerst een uitroepteken
verzonden waarna de data wordt doorgestuurd. Als laatste teken wordt een komma
doorgestuurd. De komma is het teken voor het einde van de verzending.
Voor het uitlezen van de tabel wordt het dubbele aanhalingsteken verstuurd naar de
FPGA. Na ontvangst van het dubbele aanhalingsteken, wordt alle data vanuit de
tabel teruggestuurd. Dit tot alle data verzonden is.
De data bestaat uit de getallen van 0 tot 9 en de letters van A tot F, deze tekens
worden in de FPGA omgezet naar de hexadecimale code die ze voorstellen en in de
tabel opgeslagen. Op deze manier worden telkens 4 bits ingelezen per datateken.
Bijvoorbeeld 7 wordt dan 0111 in de FPGA.
Het gebruik van ASCII tekens is voor het gemak van ingeven. Bij het direct ingeven
van de hexadecimale code, zou de gebruiker onzichtbare tekens moeten ingeven
en/of via commando’s op het toetsenbord moeten werken. Deze moeilijkheden
worden vermeden door gebruik te maken van de ASCII tekens en kan er op een
eenvoudiger manier een controle worden uitgevoerd.
Bij het sturen van onbekende tekens, worden deze tekens verworpen. Het systeem is
ook hoofdlettergevoelig. Alle tekens die letters voorstellen moeten in hoofdletters
worden ingegeven. Bij het ingeven van kleine letters verwerpt het systeem de letters
die data zijn. Hierdoor is de kans op fouten veel kleiner.
34
4.2 Hardwarebeschrijving
In dit onderdeel geven wij een toelichting van de hardware die zich in de FPGA
bevindt. In het eerste stuk wordt de code in de PicoBlaze toegelicht.
Daarna wordt de VHDL-beschrijving besproken. Deze VHDL-beschrijving is
beperkt tot een stuk van het centrale gedeelte.
Figuur 4-1: FPGA
In de figuur 4-1 is een schema te zien hoe alle blokken aan elkaar gekoppeld zijn.
Via de ingangen worden de schakelaars en de RS232 ingelezen. De schakelaars
worden rechtstreeks in het verdelings- en verwerkingsblok ingelezen. De RS232
informatie wordt via de uart_rx ingelezen. Dit blok zorgt voor de omzetting van de
seriële RS232-communicatie naar een signaal van 8 bits vooraleer het wordt
doorgegeven aan het verdelings- en verwerkingsblok. Vanuit dit centrale blok wordt
alle informatie verspreid naar de omliggende blokken.
Alle informatie die samenhangt met de RS232-communicatie wordt rechtstreeks
doorgestuurd naar of uitgestuurd vanuit de PicoBlaze. Het kcpsm3 blok zorgt
ervoor dat alle data die van en naar de PicoBlaze gaat, begrijpbaar is voor beide
zijden van dit blok.
35
De data die via de RS232 terug komt, wordt via uart_tx verstuurd. Deze zet de
signalen om in een seriële datastroom. Alles wat met de andere uitgangen van de
FPGA te maken heeft wordt via het blok uitgangen naar buiten gestuurd.
4.2.1 PicoBlaze
In de PicoBlaze wordt een beschrijving opgesteld om een RS232-communicatie op
te zetten met de buitenwereld en de FPGA.
Wanneer er geen data over de seriële kabel wordt verstuurd, kan de PicoBlaze geen
data inlezen. Maar de data kan op ieder ogenblik worden verzonden.
Daarom is het van belang om de RS232-communicatie altijd in het oog te houden.
Bij het versturen van data wordt er een signaal gegeven dat er data aanwezig is om
binnen te lezen. Dit signaal wordt binnengelezen via de data_present. Na het
inlezen van het eerste teken wordt nagegaan welke actie uitgevoerd moet worden.
Het is dus belangrijk dat de eerste databyte een teken is die een actie doet starten.
Indien het eerste teken niet een actieteken is dan wordt dit teken verworpen en
wordt gewacht op een nieuw teken.
Na het controleren van het eerste teken wordt overgegaan op het inlezen van de
data.
loop:
INPUT
sF, data_present
XOR
JUMP
INPUT
OUTPUT
COMPARE
JUMP
COMPARE
JUMP
JUMP
sF, all_clear
z, loop
s0, uart_data_rx
s0, uart_data_tx
s0, ascii_EXCLAIM
z, inlezendata
s0, ascii_DBLQUOT
z, uitlezendata
loop
;wordt gezet bij aanwezigheid
;data
;inlezen
;data uitlezen ter controle
;teken-inlezen
;teken-uitlezen
Na het kiezen van de inleesactie worden de volgende databytes ingelezen in de
PicoBlaze waar ze verwerkt worden tot 4 bits. Bij de cijfers 0 tot 9 wordt
hexadecimaal 30 afgetrokken. Dit omdat het cijfer 0 in hexadecimale code 30
voorstelt en 9 wordt voorgesteld door 39H. Bij de letters van A tot F wordt hiervoor
36
37 afgetrokken dit omdat de letter A gelijk is aan 41 in hexadecimale omzetting.
Door het verschil te maken tussen 41 en 37, in hexadecimale code wordt A (1010)
verkregen. Daarna worden de omgezette tekens verstuurd binnen de FPGA om dan
verder gebruikt te worden. Op deze manier is het niet nodig onzichtbare tekens te
versturen, wat het controleren van de tekens voor verzending iets makkelijker
maakt.
inlezendata:OUTPUT
sE, (s0)
OUTPUT sA, uart_data_tx
inputdata: INPUT
sF, data_present
XOR
sF, all_clear
JUMP
z, inputdata
INPUT
s1, uart_data_rx
COMPARE
s1, ascii_COMMA
JUMP
z , cold_start
getal:
COMPARE
s1, ascii_0
JUMP
c, inputdata
COMPARE
s1, ascii_COLON
JUMP
SUB
OUTPUT
JUMP
geen_getal: COMPARE
JUMP
COMPARE
JUMP
SUB
OUTPUT
JUMP
fout:
LOAD
OUTPUT
eindeinput: OUTPUT
JUMP
nc, geen_getal
s1, 30
s1, (s0)
eindeinput
s1, ascii_A
c, inputdata
s1, ascii_G
nc, inputdata
s1, 37
s1, (s0)
eindeinput
; byte signalen op 0 zetten
; signaal klaar inlezen data
; is er nieuwe data aanwezig
; data inlezen
; indien komma geen data meer
; teken groter of gelijk aan 0
; teken kleiner dan : (1 hoger
; dan 9)
; 0 = 30
; data sturen naar design
; teken groter of gelijk aan A
; teken kleiner dan G (1 hoger
; dan F)
; A = 41 -> A = 10
; data sturen naar design
s1, ascii_PERCENT ; bij fout een % uitsturen
s1, uart_data_tx
sA, uart_data_tx ; signaal klaar volgende data
inputdata
Bij het inlezen van het uitleesteken, wordt de data uit de tabel opgehaald en
doorgestuurd naar de LAN-modem. Hiervoor wordt omgekeerd gewerkt in
vergelijking met het inlezen van de data. Bij ieder teken wordt er nu 30 of 37 bij
opgeteld om weer het bijhorende ASCII-teken te verkrijgen.
Er moet ook rekening gehouden worden met de buffer die de uit te lezen data
opvangt vooraleer deze te verzenden. De snelheid waarmee de data wordt
verzonden van de PicoBlaze naar de buffer is groter dan de snelheid waarmee de
buffer de data uitstuurt. Daarvoor moet telkens gecontroleerd worden of de buffer
37
nog niet vol is. Wanneer deze buffer vol is wordt gewacht tot de buffer terug halfvol
is alvorens de volgende tekens te versturen. Zo wordt alle data correct verzonden.
Indien de buffer niet zou gecontroleerd worden zou de data nooit correct worden
verzonden. Na verloop van tijd raakt de buffer overbelast.
Door deze overbelasting kan de buffer de binnenkomende data niet meer bijhouden
waardoor deze verloren gaat.
uitlezendata:
buffertofull:
eindeoutput:
INPUT
COMPARE
JUMP
OUTPUT
INPUT
COMPARE
JUMP
INPUT
COMPARE
JUMP
JUMP
JUMP
s1, (s0)
s1, FF
z, eindeoutput
s1, uart_data_tx
s2, buffer_full
s2, 01
nz, uitlezendata
s2, buffer_half_full
s2, 01
z, buffertofull
uitlezendata
cold_start
4.2.2 VHDL-beschrijving
4.2.2.1 Inlezen data
Bij het ingeven van de tabel in de FPGA, wordt deze telkens volledig ingelezen. Er
kan niet tussenin iets gewijzigd worden. Om bij een nieuwe ingave te beginnen met
de bovenste lijn van de tabel, is het nodig om alle signalen die aangeven welke
plaats in de tabel wordt aangeduid te resetten. Dit gebeurt door een code uit de
PicoBlaze op de bovenste 4 uitgangen te plaatsen. Hierdoor worden alle signalen
die verband houden met de tabel op 0 geplaatst.
Het inlezen van de bitcodes gebeurt via een state-machine, die werkt op de flank
van de write_strobe (schrijfsignaal). Hierdoor wordt een goede timing bekomen om
de data in te lezen. Aangezien de write_strobe enkel hoog wordt als de schrijfactie
al volop bezig is en als de data al op de uitgang van de PicoBlaze aanwezig is, kan
met zekerheid de data worden ingelezen in de tabel.
38
In figuur 4-1 is duidelijk te zien dat bij de stijgende flank van de write_strobe de
data al aanwezig is op de uitgang (out_port).
Figuur 4-2: write_strobe
Op de dalende flank wordt dan overgegaan naar de volgende toestand in de statemachine, om de volgende 4 bits van de 16 bit code in te lezen.
De port_id (poort adres), de out_port (data) en de write_strobe (schrijfactie) zijn
reeds aanwezig. Dus is het mogelijk om een adres te selecteren waar de data naartoe
moet.
De port_id en write_strobe worden tot 1 signaal herleid: de write_to_table. Dit
nieuw signaal geeft dan weer wanneer de data aanwezig is voor dit adres.
Bij het inlezen van de data in de tabel wordt telkens de 4 bit code vanuit de
PicoBlaze na elkaar in een rij geplaatst op de stijgende flank van de write_to_table.
Dit gebeurt 4 maal tot een 16 bit code is gevormd. Als de 16 bit code is
samengesteld wordt deze op de dalende flank van de write_strobe in de aangeduide
rij (a) van de tabel geplaatst.
Daarna kan de volgende inleescyclus van 16 bits beginnen. Deze inlezing gaat zo
verder tot er geen pulsen meer aanwezig zijn op de write_to_table.
tabel_1:
PROCESS
(write_to_table, out_port, x)
BEGIN
IF
END
out_port(7 DOWNTO 4) = "0000" THEN
-- 4 bovenste bits moeten 0 zijn
IF rising_edge(write_to_table) THEN -- inlezen op stijgende flank
CASE x IS
WHEN 0 => data(15 DOWNTO 12) <= out_port(3 DOWNTO 0); w <= 1;
WHEN 1 => data(11 DOWNTO
8) <= out_port(3 DOWNTO 0); w <= 2;
WHEN 2 => data( 7 DOWNTO
4) <= out_port(3 DOWNTO 0); w <= 3;
WHEN 3 => data( 3 DOWNTO
0) <= out_port(3 DOWNTO 0); w <= 0;
WHEN OTHERS => w <= 0;
END CASE;
END IF;
END IF;
PROCESS tabel_1;
39
tabel_2:
BEGIN
IF
PROCESS
(clk, out_port, w, data)
falling_edge(write_to_table)
IF
out_port(7
a <= 0;
x <= 0;
DOWNTO
4) = "0001"
ELSE
END
ELSE
THEN
x <= w;
IF (x = 3) AND (w = 0)
tabel (a) <= data;
a <= a + 1;
END IF;
IF;
THEN
THEN
-----
-- dalende flank klaarzetten
-- volgende
-- bij 0001 alles resetten
anders
w wordt x
inlezen 4 bits overzetten
naar table op a-de rij
x <= x;
END IF;
END PROCESS
tabel_2;
4.2.2.2 Uitlezen data
Voor het uitlezen van de data wordt ook gebruik gemaakt van een state-machine.
Deze behoort tot een groter stuk. Dit om tijdsproblemen uit te sluiten. Aangezien
alle data die naar de PicoBlaze moet, op dezelfde 8 bit ingangen moet worden
ingelezen, is het nodig dat dit niet allemaal in een keer gebeurt maar één voor één.
De state-machine voor het inlezen uit de tabel werkt op de read_strobe. Bij de
falling_edge van dit signaal wordt de data binnengelezen in de PicoBlaze.
Figuur 4-3: read_strobe
Wanneer port_id het adres weergeeft waarop moet worden ingelezen, wordt de data
klaargezet. Zo is men zeker dat de data correct wordt ingelezen in de PicoBlaze. Na
de dalende flank van de read_strobe worden alle signalen die bij het inlezen uit de
tabel horen klaargezet voor de volgende inleesactie. Nadat de volledige tabel is
40
verzonden, wordt er nog een teken doorgezonden dat de tabel ten einde is. Op deze
manier wordt aan de PicoBlaze duidelijk gemaakt dat er niks meer te verzenden
valt.
PROCESS (clk,rst)
BEGIN
IF rising_edge(clk) THEN
IF rst = '1' THEN
in_port <= "00000000";
read_from_uart <= '0';
ELSE
CASE (port_id) IS
WHEN X"02" =>
WHEN X"04" =>
in_port <= rx_data;
-- inlezen rs232
in_port <= "0000000" & data_present;
-- data aanwezig
WHEN
X"05" => in_port <= "0000000" & buffer_full;
-- volle en half
WHEN
X"06" => in_port <= "0000000" & buffer_half_full;
-- volle buffer
WHEN X"22" =>
IF b < 16 THEN
CASE z IS
WHEN 0 =>
-- kleiner dan grootte van tabel
-- inlezen naar PicoBlaze
in_port <= "0000" & tabel(b)(15 downto 12);
y <= 1;
WHEN 1 => in_port <= "0000" & tabel(b)(11 downto
8);
y <= 2;
WHEN 2 => in_port <= "0000" & tabel(b)( 7 downto
4);
y <= 3;
WHEN 3 => in_port <= "0000" & tabel(b)( 3 downto
0);
y <= 0;
WHEN OTHERS => in_port <= "00000000"; y <= 0;
CASE;
in_port <= "11111111"; -- teken voor einde tabel
END
ELSE
END IF;
WHEN OTHERS
END CASE;
END IF;
=> in_port <= "00000000";
read_from_uart <= read_strobe and port_id(2);
END IF;
END PROCESS;
PROCESS(read_strobe,port_id)
BEGIN
IF port_id = X"22" THEN
IF falling_edge(read_strobe) THEN
z <= y;
IF b < 16 THEN
IF z = 3 AND y = 0
ELSE
END IF;
END IF;
END IF;
END PROCESS;
THEN
b <= b + 1;
b <= 0;
END IF;
41
4.2.2.3 Inlezen ingangen
Voor het inlezen van de ingangen worden de schakelaars parallel ingelezen. Voor
de goede gang van zaken mag er niet meer dan 1 schakelaar ingedrukt worden. Bij
het indrukken van meerdere schakelaars zal het systeem deze ingangen niet
verwerken.
Als één van de schakelaars wordt ingedrukt, worden de desbetreffende adressen van
de uitgangen uit de tabel uitgelezen. Als de schakelaar terug in zijn rustpositie
geplaatst wordt, kan er een andere schakelaar worden ingedrukt om een andere
uitgang aan te sturen.
Bij het gebruik van een groot aantal schakelaars worden deze omgezet tot een code
die op zijn beurt een rij uit de tabel neemt. Het adres van de uitgangen wordt dan
uitgestuurd naar een ander deel van de FPGA. Hier worden deze verwerkt tot de
eigenlijke uitgang.
WITH SWITCH SELECT
UITGANG <=
TABEL( 0) WHEN "0000000000000001",
TABEL( 1) WHEN "0000000000000010",
TABEL( 2) WHEN "0000000000000100",
TABEL( 3) WHEN "0000000000001000",
TABEL( 4) WHEN "0000000000010000",
TABEL( 5) WHEN "0000000000100000",
TABEL( 6) WHEN "0000000001000000",
TABEL( 7) WHEN "0000000010000000",
TABEL( 8) WHEN "0000000100000000",
TABEL( 9) WHEN "0000001000000000",
TABEL(10) WHEN "0000010000000000",
TABEL(11) WHEN "0000100000000000",
TABEL(12) WHEN "0001000000000000",
TABEL(13) WHEN "0010000000000000",
TABEL(14) WHEN "0100000000000000",
TABEL(15) WHEN "1000000000000000",
(OTHERS => '0') WHEN OTHERS;
42
4.2.2.4 Aansturen uitgangen
Het effectief aansturen van de uitgangen gebeurt in een afzonderlijk deel binnen de
design. Dit is zo uitgevoerd om de dataverwerking en het aansturen volledig van
elkaar gescheiden te houden. Op deze manier kan het design indien nodig op een
eenvoudige manier gesplitst worden om dan in 2 afzonderlijke FPGA te
implementeren. Zo kan men dan één FPGA behouden voor de dataverwerking en de
andere FPGA of een ander component kan de uitgangen bedienen.
Dit blok heeft dus als functie het aansturen van de uitgangen. Doordat telkens het
adres vanuit de tabel of van uit de computer wordt verstuurd naar dit blok, kan dit
blok de gepaste uitgang aansturen. Door het binnenkomende adres te vergelijken
met de adressen van de uitgangen, wordt de uitgang uitgestuurd. Telkens het adres
verandert, wordt een andere uitgang aangestuurd. Indien er door omstandigheden
een onbekend adres binnenkomt, wordt dit door het design verworpen.
De adressen voor elke uitgang zijn in dit systeem vast bepaald, alleen de plaats in de
tabel moet correct gekozen worden voor elke schakelaar.
IF
uit = '1' THEN
IF rising_edge(clk) THEN
CASE uitgang IS
WHEN X"0123" => uit_gangen(0)
WHEN X"4567" => uit_gangen(1)
WHEN X"89AB" => uit_gangen(2)
WHEN X"CDEF" => uit_gangen(3)
WHEN X"FEDC" => uit_gangen(4)
WHEN X"BA98" => uit_gangen(5)
. . .
WHEN X"8796" => uit_gangen(12)
WHEN X"A5B4" => uit_gangen(13)
WHEN X"C3D2" => uit_gangen(14)
WHEN X"E1F0" => uit_gangen(15)
WHEN X"FFFF" => uit_gangen
WHEN OTHERS
=> uit <= '1';
END CASE;
END IF;
-- adres moet een van deze zijn
<= NOT uit_gangen(0); uit <= '0';
<= NOT uit_gangen(1); uit <= '0';
<= NOT uit_gangen(2); uit <= '0';
<= NOT uit_gangen(3); uit <= '0';
<= NOT uit_gangen(4); uit <= '0';
<= NOT uit_gangen(5); uit <= '0';
<= NOT uit_gangen(12);
<= NOT uit_gangen(13);
<= NOT uit_gangen(14);
<= NOT uit_gangen(15);
<= (OTHERS => '0');
uit
uit
uit
uit
<=
<=
<=
<=
'0';
'0';
'0';
'0';
ELSE
IF
uitgang = X"0000" THEN
uit <= '1';
END IF;
END IF;
uitgangen <= uit_gangen;
43
4.2.2.5 Benodigde resources van de FPGA.
Number of Slices:
564
out of 1920 29%
Number of Slice Flip Flops:
510
out of 3840 13%
Number of 4 input LUTs:
914
out of 3840 23%
Number used as logic:
810
Number used as Shift registers:
36
Number used as RAMs:
68
Number of IOs:
40
Number of bonded IOBs:
40
out of 173
23%
Number of BRAMs:
1
out of 12
8%
Number of GCLKs:
3
out of 8
37%
Maximale frequentie: 48,952 MHz minimale periodetijd: 20,428 ns
Bij het gebruik van het design zoals het nu is afgesteld kunnen slechts 16 ingangen
en 16 uitgangen verwerkt worden. Dit kan op enkele eenvoudige manieren worden
uitgebreid. Zo kan de tabel uitgebreid worden door enkele getallen in het design te
veranderen.
Zoals vooropgesteld kunnen lichtpunten en rolluiken bediend worden. Dit kan
bijvoorbeeld nog verder worden uitgebreid naar sensoren als ingang. Alle sensoren
die een schakelende uitgang hebben kunnen worden aangesloten aan het systeem.
Als uitgang kunnen ook nog bijvoorbeeld nog verwarming of zonnewering worden
aangestuurd. Indien nodig kunnen zelfs de stopcontacten worden uitgeschakeld. Een
alarminstallatie behoort eveneens tot de mogelijkheden.
44
4.3 Software GUI
4.3.1 Inleiding
De software is tweedelig. Enerzijds kan de gebruiker het systeem aansturen via een
lokaal netwerk of het Internet. Deze aansturing gebeurt door het adres dat
overeenkomt met een lichtpunt of een rolluik door te sturen naar de LAN-modem
via een TCP/IP verbinding. De LAN-modem stuurt dit adres serieel door naar de
FPGA, die het adres verwerkt. De gebruiker kan ook lichtpunten, rolluiken en
locaties in het huis toevoegen. Hij kan ze ook verwijderen via de GUI.
Er is mogelijkheid om de toegekende adressen te bekijken.
Anderzijds moet de installateur het domoticasysteem kunnen instellen via de GUI.
De installateur stelt bij de plaatsing van het domoticasysteem bepaalde locaties van
lichtpunten en/of rolluiken in, zodat de gebruiker het systeem direct kan gebruiken.
Deze instellingen kan men terug opvragen. De tabel, die zich in de FPGA bevindt,
wordt ingesteld door de volledige tabel vanuit de computer via de LAN-modem
door te sturen, naar de FPGA.
4.3.2 Project van het programma
In het project Domotica komen alles forms voor die gebruikt worden in het
programma.
We hebben in het project Domotica één Parentform; dit is het hoofdprogramma.
Alle andere forms zijn Childforms.
45
4.3.3 Socket in het programma
Socket programmeren is mogelijk gemaakt in .NET door een Socket class die
aanwezig is binnen de System.Net.Sockets Namespace.
Vooreerst moeten we een object van deze klasse creëren.
m_socClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.TCP);
Wanneer dit object aangemaakt is, moet er een connectie opgezet worden met de
server. We moeten het IP-adres van de server kennen, alsook de poort waarop deze
bereikbaar is. Het IP-adres en de poort die men gebruikt kan vast ingesteld zijn,
zoals hieronder, maar deze kunnen ook manueel ingevuld worden door de gebruiker
zelf.
String IPadres = "172.23.7.101";
String Poortnr = "8000";
Er kan hierbij ook gebruik gemaakt worden van een klasse onder de System.Net
Namespace namelijk IPEndPoint. Deze klasse stelt een netwerk computer voor als
een IPadres en poortnummer.
System.Net.IPAddress remoteIPAddress =
System.Net.IPAddress.Parse(IPadres);
System.Net.IPEndPoint remoteEndPoint = new
System.Net.IPEndPoint(remoteIPAddress, alPort);
Wanneer deze IPEndPoint ingesteld is, kan er een verbinding opgezet worden met
de LAN-modem.
m_socClient.Connect(remoteEndPoint);
Indien de LAN-modem niet reageert op de aanvraag voor een connectie,
bijvoorbeeld als de LAN-modem niet is ingeschakeld, zal dit worden weergegeven
46
op het scherm door middel van de SocketExeption. Er wordt eveneens weergegeven
waarom de connectie niet voltooid kon worden.
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
Wanneer de connectie wel tot stand komt kan er, door middel van een Send
methode, data vanuit het programma naar de LAN-modem en zo naar de FPGA
worden verzonden.
Deze Send methode kan verschillende overloads hebben. Deze worden allemaal in
een byte array geplaatst. Dit wordt gedaan wanneer men een adres van een locatie
naar de FPGA wil sturen, dit komt later aan bod.
Wanneer het programma wordt afgesloten, moet ook de verbinding met de LANmodem stopgezet worden. Dit gebeurt door een Close methode.
m_socClient.Close();
4.3.4 Threads
Een Thread op een computer is een proces dat binnen een proces uitgevoerd wordt.
Met behulp van Threads kan een computerprogramma verschillende taken
"tegelijkertijd" uitvoeren net zoals in een besturingssysteem met multitasking
meerdere processen tegelijk kunnen draaien. Het gebruik van meerdere Threads
wordt multithreading genoemd.
Voordelen van Threads zijn onder andere de mogelijkheid om een proces over
meerdere processoren te verdelen.
Ook op een machine met één processor kunnen Threads voordeel bieden: zo kan
één Thread rekentaken uitvoeren terwijl andere wachten op invoer of uitvoer.
Onmerkbaar voor de gebruiker krijgen de Threads op een machine met één
processor afwisselend een stukje processortijd zodat de taken tegelijkertijd gedaan
47
lijken te worden. Een webbrowser kan bijvoorbeeld met behulp van Threads
meerdere taken tegelijk uitvoeren zoals het ophalen van een webpagina van een
server en het afhandelen van de acties van de gebruiker in menu's of
dialoogvensters. Vaak moeten de Threads die de communicatie met de server
verrichten wachten tot boodschappen zijn overgekomen en beantwoord
4.3.5 Threads van het programma
In het programma zijn er 3 Threads aanwezig.
Threads hebben het voordeel dat wanneer er iets verandert, het programma nog
altijd kan werken zonder dat het programma er last van heeft. Het programma wacht
tot de data er is om door te gaan.
Voordat er van Threads gebruik kan worden gemaakt, moeten deze eerst
gedeclareerd worden en moet het programma ook weten dat er Threads worden
gebruikt.
Dit doet men door een Namespace toe te voegen bovenaan het programma.
using System.Threading;
//voor gebruik van Threads
In het programma zelf moet iedere Thread, zijn eigen naam hebben
Thread LAN_versturen;
Door een Abort boodschap te versturen, stopt men de Thread.
LAN_versturen.Abort();
4.3.5.1 Thread LAN_versturen
Er is ook gebruik gemaakt van de Thread LAN_versturen. Deze Thread wordt
gestart wanneer het adres of de tabel waarin zich alle adressen bevinden moet
worden doorgestuurd naar de FPGA.
48
De Send methode is een Blocking methode. Dit wil zeggen dat bij het versturen van
de byte er gewacht wordt tot de data verzonden is of totdat er een Execption is
toegekomen.
void Threads_LAN_versturen()
{
try
{
//declareren van een object, de text die zich in deze textBox
//bevindt.
Object objData = textBox_versturen_byte.Text;
//een array maken van alles wat zich in deze textbox bevindt
byte[]VerstuurData=
System.Text.Encoding.ASCII.GetBytes(objData.ToString());
//zenden naar de LAN
m_socClient.Send(VerstuurData);
}
//wanneer het mislukt is van te zenden, dit weergeven, alsook hoe
//het komt dat er niet verzonden kon worden.
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
4.3.5.2 Thread LAN_Ontvangen
Deze Thread wordt gestart wanneer er een byte verzonden wordt naar de LANmodem. We gaan na of we iets ontvangen van de LAN-modem. Wat we ontvangen
van de LAN-modem is afkomstig van de FPGA. Het is mogelijk dat we een
karakter van de LAN-modem ontvangen maar het is ook mogelijk dat we niets
ontvangen. Indien we niets ontvangen, blijven we voor een bepaalde tijd het
karakter sturen in de hoop dat het karakter toch nog verstuurd wordt.
void Threads_LAN_ontvangen()
{
try
{
//wat er ontvangen wordt van de LAN-modem, wordt in een
// buffer geplaatst
byte[] buffer = new byte[1024];
//receive, ontvangen van de LAN, van wat in de buffer zit
//wordt in iRX geplaats
int iRx = m_socClient.Receive(buffer);
49
char[] chars = new char[iRx];
System.Text.Decoder d =
System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
System.String OntvangenData = new System.String(chars);
//tonen van de ontvangendata. Dit wordt wel nog doorgegeven
//naar een delegate.
this.DisplayMessage(OntvangenData);
}
//indien er niets ontvangen is, dit ook tonen
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
4.3.5.3 Thread inladen
De tekstbestanden die aangemaakt geweest zijn bij het opslaan van de form
“instellingen installateur” moet men terug kunnen uitlezen. Er is aan iedere
plaats/mogelijkheid het woord “locatie” toegevoegd en voor het adres is het woord
“code” toegevoegd. Dit om makkelijker te kunnen controleren of het om het adres
of de plaats/mogelijkheid gaat. Deze woorden moeten er terug uitgefilterd worden
want deze mogen niet voorkomen in de SetText.
void Threads_inladen()
{
string Tekst, bestand, locatie, code, Tekst2, bestand2, gebeuren,
code2;
//welk bestand er moet ingeladen worden
using (StreamReader sr = new
StreamReader(@"c:\Domotica\installateur_locatie.ir",
System.Text.Encoding.Default))
{
bestand = "";
locatie = "";
code = "";
gebeuren = "";
code2 = "";
for (int I = 1; I == 1; )
{
//lezen van het bestand
Tekst = sr.ReadLine();
50
if (Tekst != null)
{
//als lengte van de tekst >=8 is gaan we verder
//onderzoeken
if (Tekst.Length >= 8)
{
bestand = bestand + Tekst + "\r\n";
//nagaan wanneer het woord locatie voorkomt
if (Tekst.Substring(0, 7) == "locatie")
{
string loc;
//uitfilteren van het woor locatie,
//alles wat erna komt, wordt getoond.
loc = Tekst.Substring(7);
//onthouden van vorige lijn, nieuwe
//locatie erbijvoegen en nieuwe lijn
//nemen
locatie = locatie + loc + "\r\n";
}
//idem locatie maar nu met het woord code
if (Tekst.Substring(0, 4) == "code")
{
string cod;
cod = Tekst.Substring(4, 4);
code = code + cod + "\r\n";
}
}
}
else
{
I = 0;
}
// gebruik dit sub-routine om de text van de Thread over te zetten op
// een variable die adresseerbaar is in de Form
}
//schrijven van de uitgefilterde locatie en code naar de SetText
this.SetText2(bestand);
this.SetText3(locatie);
this.SetText4(code);
}
}
4.3.6 Delegate van het programma
Met deze delegate wordt er weergegeven wat er effectief ontvangen is vanuit de
LAN-modem. De delegate wordt eerst aangemaakt in het programma.
delegate void DisplayDelegate(string message);
De delegate wordt aangeroepen in een routine. Deze routine start wanneer de
Thread LAN_ontvangen gestart wordt. In deze Thread werd de DisplayMessage
51
opgeroepen van de OntvangenData. Deze OntvangenData wordt dan verder
afgewerkt in de routine van de delegate (zie volgende code). Wat er ontvangen
wordt van de LAN-modem wordt in de textBox_ontvangen geplaatst. Er wordt
nadien vergeleken met wat er moest ontvangen worden.
private void DisplayMessage(string message)
{
// InvokeRequired required compares the Thread ID of the
// calling Thread to the Thread ID of the creating Thread.
// If these Threads are different, it returns true.
if (textBox_ontvangen.InvokeRequired)
{
Invoke(new DisplayDelegate(DisplayMessage), new object[] {
message });
}
else
{
textBox_ontvangen.Text += message;
}
}
4.3.7 Adres of tabel versturen naar de LAN-modem
Het versturen van het adres van de plaats-en-mogelijkheid (locatie) naar de LANmodem gebeurt op dezelfde manier als deze om de tabel te versturen. Er zal dus
maar één mogelijkheid besproken worden.
Wanneer we een locatie hebben gekozen, bijvoorbeeld het sluiten van de
garagepoort of het licht laten branden in de living, zal het adres waarop deze zich
bevindt worden doorgestuurd naar de LAN-modem en zo naar de FPGA. Dit lijkt
misschien gemakkelijk, maar men moet er rekening mee houden dat er data kan
verloren gaan. Als het adres bijvoorbeeld ABCD is, dan wordt eerst de A verstuurd
en er wordt gewacht op het antwoord van de FPGA. Als het antwoord overeenstemt
met wat we verwachten, wordt het volgende karakter verstuurd. Indien dit niet
overeenkomt, wordt het karakter opnieuw verstuurd.
52
Wanneer er op OK wordt geklikt, wordt het adres verstuurd. Het adres wordt in een
string opgeslagen. Omdat er maar één karakter mag verstuurd worden, wordt deze
string van karakters omgezet naar een Array van Char.
De integer counter wordt gelijk gesteld aan 0. Deze integer telt het aantal te
versturen karakters. Er wordt ook een Timer gestart.
counter = 0;
string sample = textBox_versturen.Text;
letters = sample.ToCharArray();
timer1.Start();
Wanneer de Timer start, wordt de volgende code uitgevoerd.
private void timer1_Tick(object sender, EventArgs e)
{
//Starten van de Thread
LAN_versturen = new System.Threading.Thread(new
System.Threading.Threadstart(this.Threads_LAN_versturen));
LAN_versturen.Start();
//Zolang de counter kleiner blijft dan de lengte van het te
//versturen adres, wanneer het te versturen character niet gelijk
//is aan de komma (dit wijst het einde aan van het te versturen
//adres), wanneer we een ~ of !~ontvangen, wordt het volgende
//character doorgestuurd
if(counter<=textBox_versturen.Text.Length &&
textBox_versturen_byte.Text != "," &&
textBox_ontvangen.Text=="~" || textBox_ontvangen.Text=="%~")
{
textBox_versturen_byte.Text = "";
textBox_ontvangen.Text = "";
textBox_versturen_byte.Text += letters[counter];
counter++;
}
else
//wanneer we een ‘o’ ontvangen, mogen we stoppen met zenden
//de Threads worden gestop, alsook de timer en de counter=0
if (textBox_ontvangen.Text == "o")
{
LAN_ontvangen.Abort();
LAN_versturen.Abort();
timer1.Stop();
counter = 0;
}
}
53
4.3.8 Forms van het programma
4.3.8.1 Hoofdprogramma
Figuur 4-4: Hoofdprogramma
Op de Parentform van het hoofdprogramma (figuur 4-4) kan de gebruiker kiezen
welk systeem hij in werking wenst te stellen. Door op de knop OK te klikken wordt
het adres waarop het systeem is aangesloten op de FPGA doorgestuurd naar de
LAN-modem. De LAN-modem verwerkt deze data en geeft deze door aan de
FPGA. Van de FPGA komt er dan een antwoord of de data correct is.
Verder kunnen de verschillende Childforms opgeroepen worden vanuit het
hoofdprogramma. Als het hoofdprogramma afgesloten wordt, worden alle
openstaande forms ook gesloten.
54
Alle andere forms die gebruikt worden zijn eigenlijk Childforms. Deze Childforms
kunnen informatie doorgeven naar de Parentform. De andere Childforms werken
onafhankelijk van de Parentform.
Het hoofdprogramma kan alleen maar weten dat er een andere form moet geopend
worden door dit te declareren. In de designer van het hoofdprogramma moeten de
verschillende Childforms gegenereerd worden.
//referentie naar instellingen door de installateur
private installateurInstellingen ChildInstallateurInstellingen;
Aan de naam van de form installateurInstellingen wordt een verwijzing gemaakt
naar de Childform childInstallateurInstellingen. Dit wordt gedaan voor iedere
Childform die wordt opgeroepen.
Wanneer de Childform effectief wordt opgeroepen in het hoofdprogramma maken
we gebruik van de benaming childInstallateurInstellingen ipv. de naam van de form
installateurInstellingen.
//creëren van form Installateur Instellingen
this. ChildInstallateurInstellingen = new installateurInstellingen ();
//openen form locatie_toevoegen
this. ChildInstallateurInstellingen.Show();
55
4.3.8.2 Toevoegen plaats en mogelijkheid
Figuur 4-5: Plaats en mogelijkheid toevoegen
Wanneer de gebruiker zelf nog een locatie en mogelijkheid wil opgeven
(figuur 4-5) kan hij dit ingeven. Het adres waarop de locatie en mogelijkheid zich
bevindt moet wel gekend zijn door de gebruiker en moet doorgestuurd worden.
Wanneer deze GroupBox wordt afgesloten moet de volledige tabel terug naar de
FPGA gestuurd worden, zodat deze geüpdatet wordt. Dit kan wel een tijdje duren
want alle bytes moeten doorgestuurd worden. Wanneer de tabel volledig verzonden
is, komt er een MessageBox op het scherm dat de tabel verzonden is.
De inhoud van de textBox_locatie wordt aan een van de items van de
comboBox_locatie gekoppeld en eraan toegevoegd wanneer er op Toevoegen wordt
geklikt.
Dit wordt ook gedaan als het adres wordt toegevoegd. Dan wordt de inhoud van de
textBox_adres gekoppeld aan comBobox_locatie_code.
56
comboBox_locatie.Items.Add(textBox_locatie.Text);
comboBox_locatie_code.Items.Add(textBox_adres.Text);
Op hetzelfde moment wordt dit adres ook doorgegeven naar de tabel.
textBox_verstuur_tabel.Text += textBox_adres.Text;
Wanneer
er
op
de
knop
sluiten
wordt
geklikt,
wordt
de
groupBox_locatie_toevoegen niet meer zichtbaar en wordt de aangepaste tabel
doorgestuurd naar de FPGA
4.3.8.3 Bekijken van de instellingen
Figuur 4-6: Bekijken instellingen
Op deze form kan de gebruiker de instellingen bekijken, die gedaan zijn zowel door
de installateur als door zichzelf. (figuur 4-6) Hier kan hij zien welke locatie en
mogelijkheid gekoppeld is aan welk adres.
57
Dit gebeurt door het inladen van het bestand waar de locaties en adressen naar toe
zijn geschreven. Deze bestanden worden dan in de ListBox geladen..
FileStream file = new FileStream(@"c:\Domotica\locatie3.ir",
FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(file);
while (sr.Peek() >= 0)
{
listBox_locatie.Items.Add(sr.ReadLine());
}
De FileStream zorgt ervoor dat het bestand geopend wordt. De plaats waar het
bestand zich bevindt wordt opgegeven. Het bestand moet dan alleen nog geopend
worden om te lezen.
De StreamReader is verantwoordelijk voor het lezen van de inhoud van het bestand.
De Peek methode geeft het volgend beschikbaar karakter weer dat in het bestand
staat. Dit karakter wordt toegevoegd aan de listBox_locatie. Zolang er een woord of
code aanwezig is, wordt dit herhaald.
Eens op het einde van het bestand gekomen wordt er niets meer weggeschreven
naar de listBox_locatie.
58
4.3.8.4 Instellingen door de installateur
Figuur 4-7: Instellingen installateur
De installateur kan op deze form (figuur 4-7) instellingen doen om het de gebruiker
gemakkelijk te maken. De installateur geeft een plaats en mogelijkheid in, alsook
het adres waarop deze zich bevindt op de FPGA.
Wanneer de gebruiker op opslaan klikt, wordt alles wat in de TextBox staat
opgeslagen in een bestand. Ook wordt er een nieuwe form geopend “bekijken
instellingen”. Deze form geeft de locaties en mogelijkheden alsook het adres weer
van wat de installateur heeft toegevoegd. De codes, de plaats/mogelijkheid worden
in een apart bestand bewaard zodat deze later gemakkelijker te openen en bij te
sturen zijn.
Dit gebeurt opnieuw met de FileStream en de StreamWriter.
59
4.3.8.5 Bekijken instellingen installateur
Figuur 4-8: Bekijken instellingen installateur
Wanneer de installateur de instellingen heeft uitgevoerd, wordt deze form (figuur 48) automatisch geopend. Zo kan de installateur zien welk adres is toegekend aan
welke locatie. Om dit te realiseren is er terug gebruik gemaakt van de
Thread _inladen. (zie paragraaf 4.3.4.3).
Deze Thread zorgt ervoor dat wanneer er een code uitgevoerd wordt, er ook nog
andere codes kunnen uitgevoerd worden zonder dat deze elkaar storen.
De volgende code wordt uitgevoerd wanneer de form geladen wordt. De Thread
wordt gestart.
inladen = new System.Threading.Thread(
new System.Threading.Threadstart(this.Threads_inladen));
inladen.Start(); // Start de Thread
Deze “uitgefilterde bestanden” komen nu terecht in een SetText, zodat we duidelijk
kunnen zien welk adres er gekoppeld is aan welke locatie.
Om de SetText op te vullen maakt men gebruik van een delegate. Met deze delegate
kan alles in één keer ingeladen worden.
60
delegate void SetTextCallback(string text);
Iedere SetText moet op zijn beurt ingevuld worden. Dit gebeurt door de string die in
de Thread geschreven is, nu te koppelen aan de respectievelijke SetText.
private void SetText2(string text)
{
// de InvokeRequierd wijst naar het Tread ID van de calling Thread.
if (this.richTextBox_file.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SetText2);
this.Invoke(d, new object[] { text });
}
else
{
this.richTextBox_file.Text = this.richTextBox_file.Text +
text;
}
}
4.3.9 Opstarten van het programma
Volgende taken worden uitgevoerd bij het opstarten van het programma:
• Inladen van het bestand om de ComboBox te kiezen van een locatie en
mogelijkheid op te vullen
• Opstarten van de connectie met de LAN-modem
• Inladen van het bestand met de tabel van de adressen die eventueel naar de
FPGA moet verstuurd worden
De connectie met de LAN-modem kan in Visual C# worden gegenereerd door het
toevoegen van de Namespace System.Net.Socket. Door deze Namespace toe te
voegen, worden alle members herkend en kunnen deze gebruikt worden bij het
connecteren met de LAN-modem.
Het inladen van de bestanden gebeurt door gebruik te maken van de Namespace
System.IO. en gebruik te maken van de members, StreamReader en FileStream
61
4.3.10 Instellen van het programma
Verschillende instellingen zijn mogelijk. Zowel de installateur als de gebruiker
kunnen deze uitvoeren.
• Toevoegen van een locatie en mogelijkheid en het adres
• Verwijderen van locatie en mogelijkheid.
• Bekijken van de instellingen die al gedaan zijn
• Instellingen gedaan door de installateur
• Versturen van de tabel, indien deze niet correct is doorgestuurd.
4.3.11 Afsluiten van het programma
Afsluiten van het programma:
• Wegschrijven van de inhoud van de ComboBox naar een bestand.
• Afsluiten van de connectie met de LAN-modem.
Wanneer we het programma afsluiten wordt er een MessageBox getoond. Deze
vraagt dan of we de instellingen willen opslaan of niet. Als er een
plaats/mogelijkheid aan het programma is toegevoegd, dan kan dit opgenomen
worden in het bestand, zodat deze de volgende keer niet meer opnieuw moeten
ingeven worden.
Het wegschrijven van en naar een bestand kan door gebruik te maken van de
Namespace System.IO.
62
4.3.12 Blokschema
Laden items combobox
locatie en mogelijkheid
Opstarten programma
Laden tabel om
eventueel te versturen
Laden IP-adres en
poortnr
Hoofdprogramma
Opstarten connectie
LAN-modem
Connectie LAN-modem
afsluiten
programma
Connectie LAN-modem
opzetten
Vernieuwen van de
hoofdprogramma
Afsluiten van programma
configuratie
Installateur
Plaats en mogelijkheid
toevoegen
Wordt in combobox
geplaats
Plaats en mogelijkheid
verwijderen
Wordt verwijdert uit
combobox
Bekijken instellingen
Form “Bekijken
Instellingen” wordt
geopend
Instellen van plaats en
mogelijkeheid
Form “Instellingen door
de installateur” wordt
geopend
Verstuur tabel naar LAN
Tabel wordt verstuurd
naar LAN-modem
Opslaan
Form “Bekijken
instellingen” wordt
geopend
Figuur 4-9: Blokschema GUI
63
4.4 Randcomponenten
In dit deel behandelen we kort de opbouw van de randcomponenten.
4.4.1 Relaiskaart
Er komt slechts een kleine spanning uit de FPGA. Alle toestellen werken met een
spanning van 240V. Dus is het nodig dat de spanning van de FPGA een element
doet schakelen dat op zijn beurt de 240V schakelt. Een element dat hiervoor
geschikt is, is een relais. Er kan eveneens gebruik gemaakt worden van optocouplers met een triac uitgang maar het probleem hierbij is dat deze slechts een zeer
beperkte stroom kunnen sturen.
Een bijkomend voordeel van een relais en opto-coupleris, dat de te sturen spanning
nooit in contact komt met de laagspanning. Dit is zeer gunstig omdat de
laagspanningselementen niet stuk gemaakt kunnen worden..
Deze relais worden samen geplaatst op een print. Er zijn verschillende relais nodig.
Dit komt omdat de te sturen punten niet op dezelfde manier werken. Een lichtpunt
kan enkel aan- of uitgeschakeld worden, terwijl een rolluik een op- en neergaande
beweging kan maken of ergens blijven stilstaan.
Bij het aansturen van een relais wordt niet rechtstreeks de uitgang van de FPGA
aangesloten op de relais. Dit kan niet worden gedaan omdat de spanning van de
uitgang in de eerste plaats te klein is. Ook kan dit niet omdat de stroom die kan
geleverd worden door de FPGA onvoldoende is om het relais te doen schakelen.
Om dit op te lossen wordt er tussen de uitgang van de FPGA en de relais een
transistor geplaatst. Deze zorgt ervoor dat de uitgangsspanning en –stroom groot
genoeg is om de relais te laten schakelen.
64
VCC
D2
K1
R2
R2
ingang
D1
Q1
Figuur 4-10: Relaisschakeling
Per relaiskaart worden telkens 8 uitgangen geschakeld via het principeschema te
zien in figuur 4-10. Verder worden per kaart ook nog 8 ingangen ingelezen. Door 8
ingangen en 8 uitgangen te combineren op 1 print kan iedere uitgang door 1 ingang
geschakeld worden. Op deze manier moet men geen extra printen voorzien voor
ingangen en uitgangen.
Door het gebruik van spoelen, in de relais en rolluikmotor, kunnen er storingen
ontstaan op de signaaldraden door het schakelen van deze spoelen. Door deze
stoorsignalen kunnen er onverwachte zaken voorkomen in het systeem of in het
slechtste geval zaken stuk gaan.
Bij spoelen op gelijkspanning, de relais, kan dit eenvoudig worden opgelost met een
diode over de spoel te plaatsen. Deze diode zal dan bij het uitschakelen de energie
die nog in de spoel aanwezig is kortsluiten. Bij wisselspanning kan dit natuurlijk
niet worden gedaan. Hier kunnen condensatoren of smoorspoelen een oplossing
bieden.
65
4.4.2 Anti-dender schakeling
Bij het gebruik van schakelaars ontstaan er stoorsignalen op de contacten bij het
schakelen. Het ontstaan van deze stoorpulsen wordt het denderen van de schakelaar
genoemd. Hiermee wordt bedoeld dat een schakelaar niet in een keer sluit maar
vooraleer deze gesloten is al een aantal pulsen uitgestuurd heeft.
Om deze pulsen weg te werken bestaan er verschillende oplossingen. Deze
oplossing kunnen zowel in software zitten als in hardware. Bij een hardware
oplossing worden een aantal componenten bijgeplaatst om de dender op te vangen.
Via een RC-netwerk met een voldoende grote tijdsconstante kan de dender
uitgeschakeld worden. Zo een opstelling is te zien in figuur 4-11.
VCC
R1
S1
C1
R1
Figuur 4-11: anti-denderschakeling
Een andere oplossing in hardware is het plaatsen van een flip-flop. Dit component
schakelt bij een stijgende flank van een kloksignaal. Hierdoor wordt de dender door
de frequentietijd van het kloksignaal weggewerkt. Deze flip-flop kan bij
programmeerbare logica geïmplementeerd worden in het design.
In software kunnen ook timers worden gebruikt om deze dender weg te werken.
Een schakelaar zonder dender bestaat niet. Hierdoor moet de gebruiker altijd
indachtig zijn dat deze niet voor storing kan zorgen binnen de schakeling.
66
Besluit
Wij kozen als eindwerk voor de implementatie van een domoticasysteem gestuurd
via lokaal netwerk en Internet.
Het was voor ons een uitdaging om onze kennis verworven binnen de richting
ontwerptechnieken en binnen de richting ICT in eenzelfde project uit te werken.
Maar vooraleer we echt konden starten moest er eerst opzoekwerk worden verricht.
De periode september 2006 tot december 2006 werd hieraan besteed.
In eerste instantie werd het Spartan3E-bord bekeken omdat hierop een ethernetchip
aanwezig was. Na wat experimenteren bleek dat het een veel te ingewikkelde
procedure zou worden om deze aan te sturen. We verloren tijd en moesten op zoek
naar een andere mogelijkheid. Een alternatief was het overstappen op 2 bordjes: de
Spartan3 en een bijkomende LAN-modem. Deze 2 borden kunnen serieel met
elkaar communiceren.
Gelijklopend werd de GUI van het domoticasysteem ontworpen.
Tijdens de eindwerkweek, in februari 2007, werd de communicatie tussen de GUI
en de LAN-modem opgezet. Eens dit werkte waren we vetrokken.
In maart 2007 kon de tabel worden ingelezen. De data werd op de displays van het
Sparten3-bord weergegeven. Het aansturen van de uitgangen was nog volop in
ontwikkeling alsook het terugsturen van de data naar de computer. En verder werd
de GUI uitgebreid. Het installateurgedeelte kreeg stilaan vorm.
Na de paasvakantie werkte ons project voor een groot deel: het aansturen van een
lichtpunt of rolluik kon gebeuren via een lokaal netwerk. Maar niet alles was zo
evident.
Bij het inlezen van de data ontstonden bijvoorbeeld problemen door de timing van
de signalen. Een signaal mag slechts één maal ingelezen en verwerkt worden binnen
één timing. Wanneer meerdere tijdssignalen gebruikt worden bij het inlezen van één
67
signaal dan kunnen er problemen ontstaan doordat de tijd van de tijdssignalen niet
overeenstemt.
Het aansturen van de lichtpunten via de schakelaars en de computer is veelvuldig
getest. Dit werkt nagenoeg zonder fouten. Maar de bytes, waarmee het adres
overeenkomt waarop het lichtpunt/rolluik zich bevindt, mogen niet te vlug na elkaar
gestuurd worden. Anders kan er een byte verloren gaan en het lichtpunt/rolluik
wordt in dit geval niet aangestuurd.
Uiteindelijk blijven er nog een aantal te verbeteren punten.
Zo kan een lichtpunt of rolluik slechts door één schakelaar bediend worden. Dit kan
opgelost worden door de tabel te veranderen en het uitlezen van de adressen op een
andere manier te laten verkopen. Het inlezen van de tabel zou eveneens moeten
veranderen. Zo moet een code meegestuurd worden om te melden dat er adressen
volgen voor een andere schakelaar.
Het visualiseren van welke lichtpunten er aan- of afliggen, is ook nog niet
gerealiseerd. Dit kan opgelost worden door de adressen bij te houden van de punten
die aangestuurd zijn en deze op geregelde tijdstippen uit te sturen via de LANmodem naar de computer.
Het domoticasysteem dat we gerealiseerd hebben is een prototype. Uiteraard
kunnen nog andere uitbreidingen gemaakt worden zoals bijvoorbeeld het aansturen
van de verwarming tot eventueel het aansluiten van een webcam.
Onze doelstelling werd bereikt: we kunnen ons domoticasysteem aansturen via een
lokaal netwerk en de gevraagde informatie wordt doorgestuurd naar de FPGA.
Spijtig genoeg hebben we niet alles kunnen testen, zoals bijvoorbeeld de
communicatie over het Internet. Dit laatste zal na de examenperiode gebeuren.
Daarnaast voorzien wij nog een volledige test op het zelfgemaakt schaalmodel.
68
Literatuurlijst
[1] Local Area Network - Wikipedia, beschikbaar op het World Wide Web:
http://nl.wikipedia.org/wiki/Local_Area_Network
[2]
Internet
-
Wikipedia,
beschikbaar
op
het
World
Wide
Web:
op
het
World
Wide
Web:
op
het
World
Wide
Web:
http://nl.wikipedia.org/wiki/Internet
[3]
Internet
-
Wikipedia,
beschikbaar
http://nl.wikipedia.org/wiki/Internet
[4]
Ethernet
–
Wikipedia,
beschikbaar
http://nl.wikipedia.org/wiki/Ethernet
[5] Computernetwerken, een ‘top-down’-benadering, James F. Kurose & Keith W.
Ross. Pearson Education, 2e editie
[6] RS232 seriële spionage monitor kabel, beschikbaar op het World Wide Web:
http://www.lammertbies.nl/comm/cable/nl_RS-232-spy-monitor.html
[februari 2007]
Danaë Delbeke, Computernetwerken, cursus gedoceerd in het kader van het vak
“Computernetwerken en Protocollen”, HOWEST-PIH.
Visual C# 2005 How to program, Deitel, Pearson Education, 2e editie.
C# Grand Cru; Matthew Telles, Easy Computing, 1e druk
C# and the .NET Platforms, Andrew Troelsen, Apress.
C# for students, Douglas Bell & Mile Parr, Pearson Education
TCP/IP Sockets in C#: Practical guide for programmers, David B. Makofske,
Michael J. Donahoo & Kenneth L.Calvert, Elsevier
MICROSOFT CORPORATION, MSDN Home Page, Internet
CODEPRJECT, The Code Project, Internet
DIGILENT INC., Digital Design Engineer’s Source, Internet
XILINX: The Programmable Logic Company, Internet
69
Bijlage 1: Instellen van de gebruikersprogramma
Opstarten programma
Als het programma start, wordt het startscherm getoond (figuur 1). Links ziet men
een combobox waar er een locatie en mogelijkheid geselecteerd kan worden. Ook
een knop met OK. Deze dient om het adres van de locatie en mogelijkheid door te
sturen naar de FPGA en zo een actie uit te voeren.
Figuur 1: Opstartscherm
70
Ook is er een mogelijkheid om het IP-adres en het poortnummer van de LANmodem op te geven. Standaard staat het IP-adres van de LAN-modem op
172.23.7.101, en het poortnummer op 8000. Het kan zijn dat deze niet
overeenstemmen met uw LAN-modem. Als dit zo is, krijgt u een foutmelding te
zien (figuur 2).
Figuur 2: LAN-modem niet aangesloten
Het IP-adres of het poortnummer van de LAN-modem kunnen in het startscherm
aangepast worden. Bij het afsluiten van het programma worden de instellingen van
het IP-adres en het poortnummer bewaard, zodat dit foutloos verloop bij de
volgende opstart.
71
Verschillende menu’s
Via het menu “programma”, kan de gebruiker de connectie met de LAN-modem
afsluiten en terug opzetten indien er een fout is opgetreden. Ook kan men het
programma afsluiten. (figuur 3)
Figuur 3: Menu - programma
Via het menu “configuratie” (figuur 4), kan het programma ingesteld worden. Zo
kan er een locatie en mogelijkheid toegevoegd worden, alsook verwijderd worden.
De instellingen die gedaan zijn, locatie en mogelijkheid en ook het adres waarop
deze zich bevinden, kan getoond worden.
72
Figuur 4: Menu - configuratie
Via het menu “installateur” (figuur 5), kan de installateur al instellingen doen bij het
installeren van het domoticasysteem. Dit maakt het de gebruiker makkelijker, zodat
deze niets meer hoeft in te stellen. Ook het versturen van de tabel naar de FPGA kan
gedaan worden. Dit kan nodig zijn, als er iets verkeerd loopt en de tabel opnieuw
doorgestuurd wordt naar de FPGA.
Figuur 5: Menu - installateur
73
Configuratie van het programma
Plaats en mogelijkheid toevoegen
Als we op configuratie plaats en mogelijkheid toevoegen klikken, krijgen we
volgende beeld te zien op onze GUI (figuur 6)
Figuur 6: Locatie toevoegen
Wanneer we op “toevoegen” klikken, wordt de locatie en mogelijkheid toegevoegd
aan het programma. Ook het adres waarop deze locatie en mogelijkheid zich
bevindt wordt opgeslagen.
Er kunnen meerdere locatie en mogelijkheden toegevoegd worden.
74
Wanneer we alles hebben toegevoegd, moet de volledige tabel van de FPGA
geüpdatet worden omdat er nieuwe adressen bijgekomen zijn. Door op “sluiten” te
klikken wordt dit gedaan. Dit kan een tijdje duren. Wanneer de volledige tabel
doorgestuurd is, komt er een scherm (figuur 7) waarop staat dat de tabel verzonden
is.
Figuur 7: Tabel verzonden naar FPGA
Plaats en mogelijkheid verwijderen
Wanneer we een plaats en mogelijkheid willen verwijderen, selecteren we een
plaats en mogelijkheid. We gaan in het menu configuratie naar “plaats en
mogelijkheid verwijderen”. Er verschijnt een scherm (figuur 8), met de vraag of we
zeker zijn dat we deze willen verwijderen. Als we deze niet willen verwijderen
klikken we op “Nee”, anders op “Ja”.
Figuur 8: Verwijderen locatie en mogelijkheid
75
Bekijken van de instellingen
Via configuratie bekijken van de instellingen, krijgen we een overzicht van de
locaties en mogelijkheden die aanwezig zijn in ons programma, alsook de adressen
waarop deze zijn aangesloten (figuur 9)
Figuur 9: Bekijken instellingen
76
Instellingen door de installateur
Om het de gebruiker makkelijker te maken, kan de installateur bij het aansluiten van
het domoticasysteem al instellingen doen (figuur 10).
Figuur 10: Instellingen door de installateur
Zo geeft deze al de verschillende locaties en mogelijkheden alsook de adressen in.
Deze worden opgeslagen wanneer er op opslaan wordt geklikt. Er wordt ook weer
eerst om een bevestiging gevraagd. (figuur 11).
77
Figuur 11: Opslaan instellingen
Ook wordt er een overzicht gegeven van wat de installateur juist heeft ingesteld.
(figuur 12) Indien er iets niet juist is ingesteld, kunnen we deze hier nog aanpassen.
Figuur 12: Bekijken van de instellingen die door de installateur zijn gedaan
78
Afsluiten programma
Het programma kan afgesloten worden via programma afsluiten alsook via de X
bovenaan.
Wanneer we het programma afsluiten, wordt er gevraagd of we zeker zijn dat we
het programma willen afsluiten en dat de instellingen worden opgeslagen.
(figuur 13). Bij bevestiging wordt het programma afgesloten.
Figuur 13: Afsluiten van het programma
79
Bijlage 2: Projectfiche
Projectfiche
Donderdag 9 november 2006
Projecttitel:
Implementatie van een domoticasysteem gestuurd via lokaal netwerk en
Internet
Projecttype:
Studie & product
Organisatie/bedrijf:
HOWEST departement PIH
Graaf Karel De Goedelaan 5, 8500 Kortrijk
Projectteam:
Vandooren Isabelle, Vandenbroucke Steven, Beke Johan, Samyn Benjamin
Doelstellingen:
-
-
Studie
o Studie van de werking van communicatie
ethernetmodule
o Studie FPGA met softcore PicoBlaze
o Studie van het ethernet & Internet
module
vb.
Implementatie
o Programmeren van de stuurblokken voor rolluiken, lichtpunten,
e.a.
o Programmeren van de interface voor de aansturing via Internet en
ethernet
o Implementeren van de stuurblokken en interface voor de
aansturing via Internet en ethernet in een lokaal netwerk
o Hardware ontwikkelen
80
Kwaliteitseisen:
-
Wettelijke voorzieningen: n.v.t.
-
Veiligheidsnormen: ja
Als we met elektronische onderdelen in aanraking komen, dienen we
op te letten voor het ElectroStatic Discharge-verschijnsel (ESD;
elektrostatische ontlading). In ons dagelijks leven beter bekent als
bijvoorbeeld het knetteren bij het uittrekken van een trui.
-
Milieuvereisten: n.v.t.
Input:
-
Raadgeving van de interne promotoren Johan Beke en Benjamin Samyn
(wekelijks)
Studie en implementatie (Vandooren Isabelle, Vandenbroucke Steven)
Kennis van VHDL-taal (Vandenbroucke Steven)
Kennis van ethernet en Internet (Vandooren Isabelle)
Cursus projectmanagement van Norbert Peirs
Handboek m.b.t. VHDL
Handboek m.b.t. ethernet/Internet
Bronnen op het world wide web
Output:
-
Uitvoeren en realiseren van de geformuleerde doelstelling
Scriptie als bron van informatie over de studie en implementatie van het
domoticasysteem
Evaluatie van de werking van het project
Belangrijke prestatie indicatoren:
-
Kennis van de werking van de ethernetchip
Kennis van een FPGA
Kennis en werking van ethernet/Internet
Kennis van netwerken programmeren
Efficiënt werken van het domoticasysteem
o Correcte werking van de stuurlogica bij ieder punt
o Correcte werking van de interface voor de aansturing via Internet
en ethernet
o Correcte werking van het volledige domoticasysteem
81
Projectbeperkingen:
-
Geen studie over andere embedded CPU’s zoals MicroBlaze en PowerPC
Enkel studie van het aansturen van de rolluikmotoren en lichtpunten
Goedkeuring van de
Goedkeuring van de
projectleider
projectleider
naam: Vandenbroucke Steven
naam: Vandooren Isabelle
datum: 2006-11-09
datum: 2006-11-09
handtekening:
handtekening:
Goedkeuring van de
Goedkeuring van de
interne promotor
interne promotor
naam: Beke Johan
Naam: Samyn Benjamin
datum: 2006-11-09
datum: 2006-11-09
handtekening:
handtekening:
82
Mijlpalen doorheen het eindwerk:
Nr.
1
Mijlpaal
Studie printbord Spartan 3E
2
Studie van de werking van de LAN-chip
3
4
Studie PicoBlaze
Experimenteren met FPGA
Studie netwerken/Internet
Verantwoordelijke
Vandooren Isabelle
Vandenbroucke Steven
Vandooren Isabelle
Vandenbroucke Steven
Vandooren Isabelle
Vandenbroucke Steven
Vandooren Isabelle
5
Ontwikkelen software FPGA
Vandenbroucke Steven
6
9
Ontwikkelen
software
ethernet/Internet Vandooren Isabelle
communicatie
Controleren werking en bijsturing
Vandenbroucke Steven
Vandooren Isabelle
Schrijven scriptie
Vandenbroucke Steven
Vandooren Isabelle
Reserve
10
Eindwerk verdediging
Vandenbroucke Steven
Vandooren Isabelle
Ontwikkelen software FPGA
Ontwikkelen software
reserve
Controle werking en
bijsturing
eindwerkverdediging
netwerkcommunicatie
Studie netwerken
17-05
24-05
14-06
26-04
29-03
22-02
23-11
Schrijven scriptie
16-11
12-10
28-09
Studie spartan 3E
Studie van LAN-chip
8
Studie PicoBlaze + experimentern
7
Datum
2006-09-28
t.e.m. 2006-10-12
2006-09-28
t.e.m. 2006-10-12
2006-10-12
t.e.m. 2006-11-16
2006-10-12
t.e.m. 2006-11-16
2006-11-23
t.e.m. 2007-03-29
2006-11-23
t.e.m. 2007-03-29
2007-02-22
t.e.m. 2007-04-26
2006-11-23
t.e.m. 2007-05-17
2007-05-24
t.e.m. 2007-06-14
2007-06
83
Download