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