Simulatie PLC voor opleiding visualisatie
Mededeling Deze eindverhandeling was een examen. De tijdens de verdediging geformuleerde opmerkingen werden niet opgenomen.
Mei 2009
Pieter Meersdom
2
Simulatie PLC voor opleiding visualisatie
Woord vooraf Vooreerst wil ik graag enkele mensen bedanken voor hun bijdrage aan dit eindwerk. Zonder hun steun, hulp en tijd zou ik er namelijk niet in geslaagd zijn om dit werk af te leveren in de huidige vorm. Mijn dank gaat uit naar mijn buitenpromotor de heer Jean Pierre Vandecandelaere voor het aanbieden van de stageplaats bij de VDAB te Brugge, en zijn hulp en uitleg. Daarnaast een welgemeende dank aan volgende KHBO-docenten: mijn binnenpromotor mevrouw Iris Vandecasteele, voor haar raad en steun tijdens het verwezenlijken van dit eindwerk; de heer Franky Loret, die mij bijstand gaf bij keuzes en problemen; de heer Luc Vanhee, opleidingshoofd en verantwoordelijke voor de stages Ten slotte wil ik ook mijn ouders bedanken voor hun morele steun en hun vertrouwen om dit eindwerk te realiseren. Mei 2009 Pieter Meersdom
Mei 2009
Pieter Meersdom
3
Simulatie PLC voor opleiding visualisatie
Samenvatting Eén van de opleidingen die de VDAB aanbiedt, is SCADA – Citect. Hier leert de cursist werken met het programma Citect, een visualisatieprogramma dat een geautomatiseerd proces visualiseert. De verwezenlijking van dit proces gebeurt momenteel in de VDAB met behulp van een Siemens PLC S7-200. Tot op heden wordt deze opleiding aangeleerd via het ―open leren‖ principe; dit houdt in dat de cursisten naar het centrum komen waar het materiaal voor hen ter beschikking staat. Een andere aanleermethode die binnen de VDAB gehanteerd wordt, is webleren. Hierbij studeren de cursisten de opleiding op afstand, maar krijgen ze het nodige materiaal mee naar huis. Om de opleiding SCADA – Citect aan te bieden via het webleren principe wordt de aankoop van de nodige PLC‘s om mee te geven met de cursisten naar huis een dure aangelegenheid. Dit eindwerk moet hiervoor een oplossing bieden. De bedoeling is een ―goedkope‖ PIC – processor board te ontwerpen, die dezelfde functionaliteiten vervult van de PLC in de opleiding SCADA – Citect.
Mei 2009
Pieter Meersdom
4
Simulatie PLC voor opleiding visualisatie
Inhoudsopgave Pg. Mededeling…………………...……………………………………………………………….2 Woord vooraf………………...…………………………………………………………..........3 Samenvatting………………...…………………………………………………………..........4 inhoudsopgave………………...………………………………………………………………5 Lijst van gebruikte afkortingen...……………………………………………………………...7 1.Inleiding…………………...………………………………………………………………...8 2.Situering bedrijf…...……...…………………………………………………………………9 2.1Algemene beschrijving…..……..…………………………………………………………9 2.2 Opleidingen VDAB...………………..………………………………………………….10 3.Doel van het eindwerk...……………………………………………………………………11 3.1 Situatieschets…….……………………………………………………………………...11 4.Toelichtingen…………………………………………………………………………….....14 4.1 PLC…....………………………………………………………………………………..14 4.1.1 Wat is een PLC……...…..…………………………………………………………..14 4.1.2 Werking……………….....…………………………………………………………..14 4.1.3 Programmeren………....……..………………………………………………………15 4.1.4 Het gebruik van een PLC….....……………………………………………………...16 4.2 SCADA………………………....………………………………………………………17 5. Ontwerpen hardware……………...……………………………………………………….18 5.1 PIC16F628A…………………………...……………………………………………….20 5.2 FT232BM……………………………...………………………………………………..21 5.3 Volledige schakeling…………………...……………………………………………….22 5.4 Prijsvergelijking…………………………………………………………………………23 6. Communicatie…………………………...………………………………………………...24 6.1 USB…………………………………...………………………………………………..27 6.2 Modbus……………………………………...………………………………………….29 6.2.1 Geschiedenis van het Modbus protocol…...………………………………………...29 6.2.2 Modbus berichten structuur………………………………………………………….29 6.2.3 Modbus seriële transmissie modes: Modbus/ASCII en Modbus/RTU……………...30 6.2.4 Modbus adressering………………………………………………………………….32 6.2.5 Modbus functie codes………………………………………………………………..33 6.2.6 CRC foutcontrole…………………………………………………………………….37 7. Software……………………………………………………………………………………38 7.1 Geautomatiseerd proces…………………………………………………………………38 7.1.2 Code …………………………………………………………………………………39 7.2 Communicatie…………………………………………………………………………...42 7.2.1 Code …………………………………………………………………………………43
Mei 2009
Pieter Meersdom
5
Simulatie PLC voor opleiding visualisatie Pg 8. Testen……………………………………………………………………………………...47 8.1 Hardware….…………………………………………………………………………….47 8.2 Software………………………………………………………………………………...47 8.2.1 Geautomatiseerd proces………………………………….…………………………..47 8.2.1 Communicatie…………...…………………………………………………………...47 9. Besluit……………………………………………………………………………………...50 10. Bijlagen…………………………………………………………………………………...51 10.1 CRC voorbeeld………………………………………………………………………....51 10.2 Programma……………………………………………………………………………..53 10.3 Datasheet PIC16F628A………………………………………………………………..59 11. Literatuurlijst……………………………………………………………………………...77
Mei 2009
Pieter Meersdom
6
Simulatie PLC voor opleiding visualisatie
Lijst van gebruikte afkortingen DIP CPU IC KHBO LED PCB PIC PLC SCADA USB VDAB
Mei 2009
Dual Inline Package Central Processing Unit Integrated Circuit Katholieke Hogeschool Brugge Oostende Light Emitting Diode Printed Circuit Board Programmable Integrated Circuit Programmable Logic Controller Supervisory Control And Data Acquisition Universal Serial Bus Vlaamse Dienst voor Arbeidsbemiddeling en Beroepsopleiding
Pieter Meersdom
7
Simulatie PLC voor opleiding visualisatie
1. Inleiding De VDAB beschikt over heel wat competentiecentra, waar ze opleidingen voor werknemers en werkzoekenden aanbiedt. Een voorbeeld van een opleiding die wordt aangeboden, is SCADA – Citect. Hier leert men werken met het visualisatieprogramma Citect, dat als doel heeft het visualiseren van een geautomatiseerd proces. Deze opleiding wordt gegeven volgens het open leren principe, waarbij de cursisten aanwezig zijn in het centrum, waar het nodige materiaal aanwezig is, met name een Siemens PLC S7-200. Een andere methode waarop een opleiding kan aangeleerd worden, is webleren. De cursist krijgt het nodige materiaal ter beschikking en studeert de opleiding buiten het centrum. De ondersteuning van de instructeur gebeurt bij webleren via e-mail De opleiding SCADA – Citect wordt niet aangeboden volgens het principe van webleren, dit omdat het materiaal voor deze cursus zeer prijzig is. Dit kunnen we oplossen door de PLC te vervangen door een goedkoper alternatief dat voldoet aan de eisen van de cursus. Het doel van dit eindwerk is het ontwerpen en ontwikkelen van een PIC-processor board die een PLC vervangt. De hardware ervan bestaat uit een PIC16F628A, die het hart vormt van de schakeling; deze is zo geprogrammeerd, dat er geen verschil is in het aanleren van de cursus met een PLC of met een PIC- processor. Verder wordt er gebruik gemaakt van een FT232BM IC die een USB communicatie mogelijk maakt. Daarnaast zijn er nog enkele componenten die dienst doen als in- en uitgangen en enkele om de processor correct in te stellen voor een optimale werking.
Mei 2009
Pieter Meersdom
8
Simulatie PLC voor opleiding visualisatie
2.Situering bedrijf 2.1 Algemene beschrijving De Vlaamse Dienst voor Arbeidsbemiddeling en Beroepsopleiding (V.D.A.B.) wordt globaal gezien opgesplitst in twee diensten. -Arbeidsbemiddeling -Competentiecentra In het centrum werkt vooral instructiepersoneel dat een opleiding geeft aan werknemers of werkzoekenden. Dit instructiepersoneel bestaat uit: Instructeur Werkt in een opleidingscentrum en verstrekt theoretische en/of praktische opleidingen. Eerste instructeur Is een technisch specialist die instaat voor het technische beheer van de opleidingscentra en verstrekt technische adviezen bij de realisatie van de initiatieven van de beroepsopleiding. Trainingsmanager *Trainingsmanager A regio: Organiseert, superviseert en controleert de werkzaamheden van de instructeurs die hem of haar zijn toegewezen. Hij of zij heeft de technischpedagogische leiding over een opleidingseenheid, door het beheerscomité gedefinieerd als type A. *Trainingsmanager B regio: Organiseert, superviseert en controleert de werkzaamheden van de instructeurs die hem of haar zijn toegewezen. Hij of zij heeft de technischpedagogische leiding over een opleidingseenheid, door het beheerscomité gedefinieerd als type B. Het beheercomité definieert een opleidingseenheid als type A of B op basis van de aan de opleidingseenheid gestelde objectieven, het aantal interne en externe instructeurs, het niveau en de rotatie van de op te leiden doelgroepen en eventuele andere door het beheerscomité vast te leggen criteria.
Mei 2009
Pieter Meersdom
9
Simulatie PLC voor opleiding visualisatie
2.2 Opleidingen VDAB De VDAB biedt 2716 opleidingen aan in 73 verschillende competentiecentra over heel België. Deze opleidingen kunnen op verschillende manieren aangeboden worden, waarvan er twee besproken zullen worden. Bij het open leren principe moet de cursist aanwezig zijn in het centrum, waar deze al het nodige lesmateriaal aangeboden krijgt. De cursus van de opleiding wordt door elke cursist individueel doorgenomen, bij vragen of problemen zal de instructeur, die verantwoordelijk is voor de opleiding, ondersteuning geven. Op het eind wordt er een test afgenomen, waarna de cursist afhankelijk van de resultaten, een attest krijgt van de opleiding. Een andere manier waarop een opleiding aangeboden wordt, is via webleren. Bij dit principe leert de cursist de opleiding buiten het centrum, meestal thuis. Daar neemt de cursist individueel de cursus door, al dan niet met lesmateriaal aangeboden door het centrum. Wanneer er vragen of problemen opduiken, zal deze via elektronisch contact met de verantwoordelijke instructeur ondersteuning krijgen. Bij webleren is de cursist niet meer afhankelijk van de openingsuren van het centrum; dit kan uiteraard een belangrijke rol spelen!
Mei 2009
Pieter Meersdom
10
Simulatie PLC voor opleiding visualisatie
11
3. Doel van het eindwerk Bij de VDAB worden de SCADA (Supervisiory Control and Data Acquisition) opleidingen momenteel gegeven met een in een PLC gesimuleerd proces. Gezien het feit dat deze opleidingen allemaal via contactleren doorgaan, is dat geen probleem. Maar gezien de kostprijs van een PLC, is het niet echt opportuun om deze opleidingen om te vormen naar webleren, daar dan een aantal PLC‘s exclusief moeten voorzien worden om mee te geven met de cursisten. De bedoeling van dit eindwerk is een simulatie van een proces te verwezenlijken in een relatief goedkope PIC-processor en die dan te voorzien van een gestandaardiseerd communicatieprotocol. Zo kan op een goedkope manier voorzien worden in een gesimuleerd proces en kunnen de SCADA - cursussen in de nabije toekomst ook aangeboden worden in afstandsleren.
3.1 Situatieschets Het nodige lesmateriaal voor de opleiding SCADA – Citect is een computer en een PLC S7-200 met de nodige ingangen. De PLC wordt via een seriële verbinding verbonden met de computer. Dit materiaal voorziet het centrum voor de cursist maar in een beperkt aantal, omdat het aanschaffen van een PLC niet goedkoop is. Het geautomatiseerd proces dat wordt toegepast bij deze opleiding is al voorgeprogrammeerd in de PLC. De ingangen die dienen om het proces te sturen zijn een schakelaar en 2 drukknoppen, deze zitten gemonteerd op een paneeltje dat met de PLC verbonden is. Voor de uitgangen maken we gebruiken van de ingebouwde LED‘s die voorzien zijn in de outputmodules van een PLC, deze lichten op wanneer de uitgang gestuurd wordt.
PLC S7-200
Paneel met ingangen
Mei 2009
Pieter Meersdom
Seriële verbinding
Simulatie PLC voor opleiding visualisatie
12
PLC S7-200
Uitgangen
Fig. 1
Paneel met ingangen
Fig. 2
Drukknoppen
Mei 2009
Schakelaar
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie De opstelling die net werd voorgesteld, wordt gebruikt bij open leren. Als we deze opstelling wensen te gebruiken bij webleren, moet iedere cursist voorzien worden van dit materiaal, wat een kostbaar gedoe wordt. Het nut van dit eindwerk is de PLC met toebehoren vervangen door een goedkope PIC-processor. Het principe blijft hetzelfde, het visualisatieprogramma zal de indruk hebben dat er een PLC verbonden is en zal uiterlijk hetzelfde weergeven. De PIC-processor zal dezelfde visualisatie eigenschappen hebben als een PLC, hier spreken we over de LED aanduiding als er een uitgang gestuurd wordt en zal beschikken over identiek dezelfde ingangen. Wat wel verandert, is de verbinding met de computer. In de vorige opstelling was dit met een seriële verbinding. Tegenwoordig worden deze verbindingen vervangen door USB verbindingen, dit zal ook zo zijn bij dit ontwerp.
Serieel
USB
Mei 2009
Pieter Meersdom
13
Simulatie PLC voor opleiding visualisatie
4. Toelichtingen 4.1 PLC 4.1.1 Wat is een PLC De afkorting PLC staat voor Programmable Logic Controller (programmeerbare logische sturing). Dit toestel worden gebruikt om machines en processen geheel of gedeeltelijk te automatiseren. Een PLC bestaat in principe uit: • Een voedingseenheid(1) Dit blok voorziet de ideale werkspanning en de stroom voor de CPU, deze kan eventueel gebruikt worden voor in- en uitgangen. • Een centrale verwerkingseenheid CPU.(2) De CPU is het hart van de PLC, hierin wordt het hele proces verwerkt. Op dit blok zijn er 3 LED’s zichtbaar, deze duiden aan in welke status de PLC zich bevindt. • Een aantal in- en uitgangbouwgroepen.(3) Hierop worden de in en uitgangen aangesloten. De status van een in of uitgang wordt weergegeven door LED’s, de ingangen worden aangeduid met een I vb. I 0.0 en de uitgangen met een Q vb. Q 0.2.
Fig. 3
4.1.2 Werking Via de ingangen wordt het systeem geïnformeerd over de procestoestand en de bedieningsbevelen. Deze signalen worden verwerkt door de CPU tot de nodige uitgangsbevelen en meldingen. Zowel digitale als analoge signalen zijn hierbij mogelijk. De algemene blokken van een PLC en ook hun relatie t.o.v. elkaar is grafisch voorgesteld in het principeschema op de volgende pagina.
Mei 2009
Pieter Meersdom
14
Simulatie PLC voor opleiding visualisatie
15
Fig. 4 Principeschema
4.1.3 Programmeren Het programmeren gebeurt met een speciaal ontworpen software, De software om Siemens PLC‘s te programmeren is afhankelijk van de gebruikte PLC: de S5 reeks wordt geprogrammeerd met STEP 5, de S7-300 en 400 reeksen met STEP 7 en de hier gebruikte S7-200 met STEP 7 MicroWIN. Hier volgen 3 veel toegepaste manieren om een PLC programma te schrijven. o LAD : Een ladderdiagram is een programmeertaal die zeer veel gelijkenis vertoond met relaisschema‘s. Je maakt gebruik van genormaliseerde tekenkundige symbolen. o STL : De ―Statement list is een programmeertaal, een soort machinetaal die gebaseerd is op Booleaans Algebra, ze maakt gebruik van logische functies zoals AND, OR, NOT… o FBD : Function Blok Diagram is een programmeertaal met de symbolen uit de digitale technieken (EN, OFpoorten e.d.).
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
4.1.4 Het gebruik van een PLC Vroeger werd er in de industrie voor elk project afzonderlijk een elektrische, pneumatische of hydraulische sturing ontwikkeld. Alleen in uitzonderlijke gevallen kon de ontwerper gebruik maken van voorgemonteerde componenten. Individueel printontwerp en correct afgestemde bedrading waren dus noodzakelijk in een dergelijk geval. Hierbij moet er stilgestaan worden bij het feit dat wijzigingen en uitbreidingen tijdens en na het in bedrijf stellen een ingewikkelde en kostbare operatie is. Iedere technicus weet dat wijzigingen een constante zijn bij het ontwikkelen van een besturings - en visualisatiemechanisme. In de praktijk blijkt meestal dat het probleem niet volledig juist werd geanalyseerd en dit impliceert meestal dat het besturingsmechanisme aangepast of uitgebreid moet worden. In veel gevallen komen er ook eisen bij na verloop van tijd. Bij individueel ontwikkelde systemen is het echter niet gemakkelijk nadien of tijdens de installatie nog aanpassingen aan te brengen. Men krijgt conflicten met de al geplaatste en voorziene installatie of men stoot op de beperkingen van het systeem. Individueel ontwikkelde systemen schieten daarom ook tekort en zijn vaak te duur. PLC ‘s zijn daarom veelgebruikte elektronische systemen in de industrie. Dit vanwege de vele voordelen die ze bieden. Door het gebruik van de PLC creëert men een enorme flexibiliteit en een brede waaier aan mogelijkheden. De PLC kan heel gemakkelijk uitgebreid worden en de programma‘s die ze draaien, worden in een handomdraai aangepast aan alle eisen van het project. De mogelijkheid bestaat om aan online programmeren en diagnose te doen zonder onderbreking van het proces.
Mei 2009
Pieter Meersdom
16
Simulatie PLC voor opleiding visualisatie
4.2 SCADA Een SCADA - systeem wordt gebruikt voor de bediening en visualisatie van een fabriek of van een proces. Dit is in tegenstelling tot een normale Human Machine Interface (HMI), zoals een operatorpaneel of tekstdisplay, die meestal alleen bedoeld zijn voor de lokale bediening van een machine of deel van een proces. SCADA is de afkorting voor Supervisory Control and Data Acquisition. Dit zijn ook de twee gebieden waarin SCADA opgedeeld kan worden: Supervisory Control; Data Acquisition. Supervisory Control Supervision staat voor toezien of visualiseren, control voor bedienen. Supervisory control is het visualiseren van productieprocessen met de bijbehorende alarmeringen. Deze informatie kan direct gebruikt worden bij het ingrijpen in het proces. Ook valt de mogelijkheid tot het besturen van het proces onder de supervisory control. Maar dit onderdeel wordt meestal overgelaten aan de PLC. Data Acquisition Data acquisition is het verzamelen en opslaan van bij elkaar horende gegevens uit het proces. Deze gegevens kunnen gebruikt worden voor het maken van rapporten over het proces. Door het analyseren van deze rapportage kan het proces worden geoptimaliseerd, dit wordt ook wel proces-tuning genoemd. Een SCADA systeem communiceert net als PLC‘s, bussystemen met programmeerbare logica en andere controllers, met een controllerlaag. Hierdoor kan het systeem proceswaarden uit het veld inlezen of commando‘s en parameters naar het veld sturen. De opbouw van de installatie of het proces wordt schematisch door de graphics weergegeven op het PC - scherm. Vanaf dit scherm kan alles bediend worden. De besturing vindt normaal gesproken niet in het SCADA systeem plaats, maar in de controller - laag. Alsook de alarmbewaking. Maar het alarmmanagement zoals signalering, het zichtbaar maken en het protocolleren, is een typische SCADA functie. Ook historische dataopslag is een typische SCADA - functionaliteit. De opgeslagen proceswaarden in de database, worden doorgaans niet alleen gevisualiseerd in trends, maar ze kunnen ook geanalyseerd worden. Ook kan SCADA gebruikt worden om gegevens tussen controllers uit te wisselen en als koppelvlak voor verdere verticale integratie zoals het doorsturen van productiegegevens naar administratieve systemen. Tegenwoordig wordt er steeds meer aandacht besteed aan het beheren en zichtbaar maken van informatie. Hierdoor worden operatoren beter en sneller in staat gesteld om beslissingen te nemen. Een SCADA - systeem heeft een gebruikerssysteem, waarbij aan verschillende groepen gebruikers verschillende rechten toegekend kunnen worden. Ook kunnen op een SCADA systeem andere server taken draaien: Een webserver die kan dienen voor het doorgeven van procesgraphics via een browser; Een server die kan dienen voor het doorgeven van procesgraphics naar een PDA (bijv. Compac iPag of Palm); Een SMS op WAP service voor het doorgeven van alarmen naar mobiele telefoons; Andere services voor het doorsturen van alarmen.
Mei 2009
Pieter Meersdom
17
Simulatie PLC voor opleiding visualisatie
18
5. Ontwerpen hardware Om een type PIC te kunnen kiezen, moeten we bepalen welke eisen er aan gesteld worden, onder meer voor wat betreft de benodigde in- en uitgangen. Daarvoor bekijken we waartoe de processor allemaal in staat moet zijn en over welke eigenschappen deze moet bezitten om de opleiding SCADA-Citect te voldoen. Eisen voor de opleiding: 4 uitgangen:-Vullen; -Links rijden; -Lossen; -Recht rijden. 4 ingangen: -drukknop Start; -drukknop Stop; -stand Automatisch; -stand Manueel. Een ingang (read) en uitgang (transmit) voor de communicatie. Een voldoende hoge processnelheid zodat een communicatie mogelijk is. Bijkomende eisen: Een USB - verbinding i.p.v. een seriële verbinding, omdat niet alle hedendaagse computers nog beschikken over een seriële poort. Deze zijn vervangen door USB connector. Goedkoop. Tegenwoordig is er een groot aanbod PIC‘s op de markt. Als we de PIC‘s, die voldoen aan de eisen van hierboven, er uit selecteren en deze selectie naderbij bekijken bemerken we 2 bruikbare types. Het eerste type is de PIC18F2xxx, deze PIC bezit een voldoende aantal I/O‘s en beschikt intern over registers die het mogelijk maakt om een USB - verbinding te realiseren. Pin 15 en 16 zijn respectievelijk USBDM en USBDP die dienen voor de USB - communicatie.
Fig. 5
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
19
Omdat de PIC18F2xxx registers heeft die een USB - communicatie rechtstreeks mogelijk maakt, is het instellen van deze PIC zeer gecompliceerd, dit geldt ook voor de te schrijven code. Als we wensen het eindwerk te realiseren met deze PIC, vergt het zeer vele kennis en tijd om de PIC te programmeren. Dit verplicht ons om te werken met een ander type als we wensen de deadline te halen. Het tweede type is de PIC16Fxxx. Dit is een uitgebreide reeks met zeer eenvoudig te programmeren modellen tot zeer ingewikkelde met veel mogelijkheden. De keuze gaat naar de PIC16f628A, dit is een 18 pins IC met 2 uitgangspoorten, PORTA en PORTB. Verder bemerken we enkel nog de VDD - en de VSS - pin die dienen om de IC te voeden.
Fig. 6
Bij de keuze van de PIC moeten we ook rekening houden met het aanwezige geheugen; deze moet voldoende groot zijn zodat het programma vlot kan lopen. De PIC16F628A bezit 2kB geheugenruimte. Intern bezit het registers om de nodige interrups op te vangen, waardoor het mogelijk is een communicatie te maken met een PC. Merken we wel op dat deze PIC onmogelijk in staat is een communicatie te maken met een PC, er moet een bijkomend IC voorzien worden als we een communicatie wensen. In het geval van een seriële RS232 - verbinding kon een MAX232 gebruikt worden om de signalen op het juiste niveau te krijgen. Maar een bijkomende eis was een USB - verbinding wat onmogelijk is met een MAX – IC. Er werd ons aangeraden het IC FT232BM te gebruiken, dit is een IC die de communicatie signalen van RS232 - naar USB - signalen omzet en omgekeerd. Via een driver, die dient geïnstalleerd te worden op de pc/laptop, wordt de USB - poort verbonden met dit IC gezien als een COM - poort. Het gebruik van een USB - verbinding brengt nog een groot voordeel met zich mee, nl. dat we gebruik kunnen maken van de +5V, afkomstig van de PC of laptop. Zo hoeft er geen extra voedingsbron te worden voorzien. Tot hier is de belangrijkste hardware beslist, nu volgen nog enkele componenten zoals twee drukknoppen en een schakelaar die dienen als ingangen van de PIC, vier LED‘s die de toestand van de uitgangen weergeven, enkele componenten om de FT232B in ‗USB bus powered configuration‘ te schakelen en twee kristallen van 6MHz die de processnelheid bepalen.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
20
5.1 PIC16F628A Onderstaande figuur toont het schema van hoe de PIC16F628A geschakeld is.
Fig. 7
De PIC is verbonden met o.a. vier LED‘s die dienst doen als uitgangen, deze zijn verbonden met de poort A. aan poort B liggen vier open klemmen die bedoeld zijn als ingang, hier worden de drukknoppen en schakelaar aan verbonden. Eveneens aan poort B zijn er twee verbindingen naar het IC FT232BM, dit zijn de communicatielijnen TxD en RxD. Pin 4 wordt geschakeld aan de +5V omdat deze pin als MCLR (master clear) dient, wanneer deze pin aan massa ligt reset de PIC, in normale mode moet deze pin dus aan de +5V verbonden zijn. Het extern kristal van 6MHz is verbonden met pinnen 15 en 16. Onderstaande tabel toont ons de functie van elke poort. Inputs Stop RB0 Start RB1 Automatisch RB2 Manueel RB3
Outputs Vulventiel RA0 Rechts RA1 Links RA2 Lossen RA3
Communication Receive data RB4 Transmit data RB5
Voor de ingangen start en stop wordt een drukknop toegepast die de ingang aan de massa schakelt; de schakelaar die de stand automatisch of manueel selecteert is eveneens zo geschakeld. De poort RB0 heeft als extra functie dat deze een interrupt opwekt wanneer er een stijgende of dalende flank gedetecteerd wordt op de poort, dit is noodzakelijk bij ons ontwerp. De uitgangen zijn LED‘s die oplichten als de poort een logische ‗0‘ stuurt. Op deze manier van schakelen van in- en uitgangen wordt er een zo minimale stroom verbruikt. RB4 en RB5 worden gebruikt voor de communicatie, hiervoor gebruiken we de ‗interrupt on change‘ functie die mogelijk is op deze poorten. Hierbij wordt er een interrupt opgewekt bij een spanningswijziging op één van deze poorten.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
5.2 FT232BM Onderstaande figuur toont de opstelling van het IC FT232BM.
Fig. 8
Het IC is geschakeld volgens de “USB Bus Powered Configuration” waarvan de opstelling terug te vinden is in de datasheet ervan. Dit is een typische opstelling wanneer de voeding van de USB - verbinding gebruikt wordt. Op het schema is er bijkomend de verbindingen met de PIC te zien, met name de RxD en TxD. USB Bus Powered Configuration:
Fig. 9
Mei 2009
Pieter Meersdom
21
Simulatie PLC voor opleiding visualisatie
5.3Volledige schakeling Als we de 2 IC‘s aan elkaar koppelen bekomen we volgend schema:
Fig. 10
De bijkomende condensatoren moeten de rimpel op de voedingsspanning minimaliseren. Als we dit schema praktisch uitwerken met het softwarepakket EAGLE bekomen we volgende PCB lay-out:
Fig. 11
Op de volgende pagina vind u een lijst met de gebruikte componenten.
Mei 2009
Pieter Meersdom
22
Simulatie PLC voor opleiding visualisatie
23
5.4 Prijsvergelijking Materiaallijst: naam
component Prijs(€)/stuk datum aantal 1/2 europrintplaat 2,85 9/03/09 1/2 C5 33nF 0,15 9/03/09 1 IC1 PIC 16F628A 3,03 26/02/09 1 IC2 FT232BM 5,54 26/02/09 1 IC voet 18 pins DIP 0,4 26/02/09 1 X1 USB connector type A 1,19 26/02/09 1 Q1,2 (C6-9) 6MHz kristal (+2x22pF cond.) 0,86 26/02/09 2 / 12/03/09 schakelaar 1 / 12/03/09 drukknop 2 / 12/03/09 LED1-4 3mm LED red 4 / 12/03/09 R1-4 220Ω 4 / 12/03/09 R5,6 27Ω 2 / 12/03/09 R7 1500Ω 1 / 12/03/09 R9 470Ω 1 / 12/03/09 C1-3 0,1µF 3 C4 10µF / 12/03/09 1 Totale kostprijs voor 1 print: 17,87 Euro (incl. BTW)
Totaal (€) 1,43 0,15 3,03 5,54 0,4 1,19 1,72
4,41
Bijkomend zou nog de prijs zijn om een behuizing te laten maken waarin de print met componenten netjes kan opgeborgen worden.
Als we dit vergelijken met de aankoop van een PLC s7-200 en het daarbij horende materiaal dat nodig is voor de opleiding: Materiaal Voeding 24Volt PLC S7-200
Prijs april 2008 (incl. BTW) 51euro 209euro
OF PLC S7-200 met ingebouwde voeding Interfacekabel Totaal = ± 400euro ( met schakelaars, bekabeling,…)
225euro 119euro
Als we de prijs van een PIC-processor en een PLC S7-200 vergelijken met elkaar bemerken we een duidelijk prijsverschil.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
24
6. Communicatie Er is een verbinding die het mogelijk maakt het programma SCADA-Citect te laten communiceren met de PIC-processor en omgekeerd, met de bedoeling dat beide gelijk lopen in het geautomatiseerd proces. Het proces kan gestuurd worden door zowel de PLC inputs als in het programma voorziene variabelen. Bij een wijziging moet de ene het melden aan de ander, zodat beide terug gelijk lopen. Als we nu de hardware bekijken, en specifiek de PIC, is enkel een seriële communicatie mogelijk. Het aantal I/O‘s die nog beschikbaar zijn is 4, dit is niet genoeg voor een parallelle communicatie. Voor seriële communicatie zijn er minsten 2 verbindingen nodig, één om data te zenden vanuit de PIC ( Transmit data TxD ), en één voor het ontvangen van data in de PIC ( Receive data RxD ). Een veel gebruikte seriële verbinding is een RS232 verbinding. Deze verbinding bestaat uit 9 verschillende aansluitingen:
Fig. 12
Fig. 13
Het grote nadeel van de RS232 - verbinding is dat men deze tegenwoordig vervangt door een USB - verbinding. De hedendaagse computer wordt voorzien van voldoende USB connectoren die de seriële COM - poorten en parallelle poorten vervangt. Dit nadeel lossen we op door gebruikt te maken van het IC FT232BM die het mogelijk maakt om een USB verbinding toe te passen. Op de volgende pagina vindt u een principe schema.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
25
Principe schema:
PIC-processor
PIC FT232BM
2 communicatie lijnen namelijk TxD en RxD
USB verbinding
Wanneer we de PIC-processor aansluiten op een USB - poort van de computer wordt de hardware herkend en zal de bijhorende driver van het IC, dat gratis verkrijgbaar is op http://www.ftdichip.com/Drivers/VCP.htm, ervoor zorgen dat de computer die poort ziet als een virtuele COM poort.
Bekijken we de eigenschappen van deze COM – poort, dan merken we enkele herkenbare zaken op zoals het merk FTDI en de benaming USB Serial Port (COM4). Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie Via de eigenschappen zijn we ook in staat enkele instellingen door te geven aan het IC.
Zo kunnen we de baudrate instellen en doorgeven aan het IC hoe een dataframe samengesteld is. Wanneer we deze parameters foutief instellen, zal het IC verkeerd werken, waardoor er geen goede communicatie kan gebeuren. Als protocol werd het gebruik van Modbus aangeraden, enerzijds omdat het eenvoudig en duidelijk is en anderzijds omdat er zeer veel gratis informatie over verkrijgbaar is. Om dit protocol toe te passen zal de assembler - code van de PIC ervoor moeten geschreven worden. Dit wordt later in dit boek verder besproken.
Mei 2009
Pieter Meersdom
26
Simulatie PLC voor opleiding visualisatie
6.1 USB USB ( Universal Serial Bus of Universele Seriële Bus ) is een standaard voor de aansluiting van randapparatuur bij computers. Het vervangt de langzame parallelle en seriële poorten, voornamelijk doordat de snelheid van gegevensoverdracht met USB vele malen groter is. De standaard is uitgevonden door Intel en protocol versie 1.0 werd in 1996 geïntroduceerd op de markt. Terwijl sindsdien USB-poorten geleidelijk aan meer voorkwamen op PC‘s, alsmede haar volledige afhankelijkheid ervan, de standaard gepopulariseerd werd bij fabrikanten van randapparatuur. Dit is vooral herkenbaar door de vele USB-apparatuur uit deze tijd met transparant gekleurd plastic. Met behulp van de gestandaardiseerde USB-poort konden hardware fabrikanten producten maken die compatible waren met zowel PC‘s als Macs. Een bijkomend voordeel van USB is dat deze de stroomvoorziening van de aangesloten randapparatuur kan verzorgen. Ook kan USB-apparatuur aangesloten worden zonder de computer te hoeven herstarten — dit wordt ook hotplugging genoemd. Hoewel in de naam het woord bus voorkomt, is USB strikt genomen geen bus omdat er zonder hub maar één apparaat per poort aangesloten kan worden. De achterliggende doelstelling was alle afzonderlijke poorten van een PC door één enkele standaard te vervangen. Via de USB-kabel kan het aangesloten apparaat van voedingsstroom worden voorzien. USB 2.0 levert maximaal 500 mA (bij 5 V) en dat volstaat voor eenvoudige apparaten, zoals een muis. Apparaten die meer vermogen vergen dienen hun eigen voeding te hebben. Er zijn vier varianten van USB, waarvan alleen de eerste drie op dit moment in gebruik zijn: USB 1.0: 1,5 Mbit/s (low speed); USB 1.1: 12 Mbit/s (full speed); USB 2.0: 480 Mbit/s (high speed); USB 3.0: 4,8 Gbit/s (super speed; verwacht op 2009 - 2010). Inmiddels bestaat ook de draadloze variant van USB, genaamd Wireless USB (WUSB of USB 2.1), die een radio-frequentie gebruikt om te communiceren. WUSB is bruikbaar tot een afstand van 3 tot 10 meter en met een snelheid van 480 Mbit/s bij 3 meter tot 110 Mbit/s bij 10 meter. WUSB gebruikt encryptie. Enkele eigenschappen van USB zijn: De computer is de host. USB-kabels mogen maximaal 5 meter lang zijn. Deze lengte is door de tussenkomst van hubs te vergroten tot maximaal 30 meter. USB-apparaten kunnen worden aangesloten zonder de computer opnieuw te moeten opstarten en functioneren na aansluiting direct (hotplugging/hotswapping).
Mei 2009
Pieter Meersdom
27
Simulatie PLC voor opleiding visualisatie
28
Met USB is veel meer mogelijk dan met een parallelle poort of seriële poort terwijl er minder draden worden gebruikt. Dit wordt mogelijk gemaakt door het USB-protocol. Een USB-verbinding bestaat uit vier aders: Voeding (5 volt); Aarde; tweemaal Data (D- en D+).
USB1 VCC D- D+ GND
De twee data-aders worden als 'twisted pair' gebruikt om differentieel data te versturen: bij een '0' wordt de spanning op de D- pin hoger gemaakt dan de spanning op de D+ pin, en voor een '1' wordt de spanning op de D- pin lager gemaakt dan de spanning op de D+ pin. Voor low speed en high speed moet de zender zorgen voor een spanning van minstens 2,5 volt tussen de D- en D+ pinnen, terwijl voor full speed de zender moet zorgen voor een stroom van 17,8 mA. Deze bus wordt gebruikt om datapakketjes door te sturen, niet alleen voor de daadwerkelijke dataoverdracht, maar ook voor besturingsinformatie. De host is de baas over de bus en neemt het initiatief voor alle dataoverdracht. Enkele uitvoeringen:
Fig. 14
Fig. 15
Type A USB connector
Type B USB connector
Mei 2009
Pieter Meersdom
Fig. 16
Een mini-USB B-stekker
Simulatie PLC voor opleiding visualisatie
6.2 Modbus 6.2.1 Geschiedenis van het Modbus protocol Sommige communicatiestandaarden ontstaan uit het niets. Niet omdat ze worden gepromoot door een grote groep van verkopers of een standaardisatie organisatie. Deze standaarden zoals de Modbus interface ontstaan omdat ze goed zijn en eenvoudig te implementeren, waardoor ze worden overgenomen door vele fabrikanten. Hierdoor is Modbus de eerste breed geaccepteerde veldbus standaard geworden. Modbus heeft haar wortels in de late zeventiger jaren van de vorige eeuw. Het is 1979, wanneer PLC fabrikant Modicon nu een merknaam van Schneider Electric‘s Telemecanique de Modbus communicatie interface publiceerde voor een multidrop netwerk gebaseerd op een master/client architectuur. Communicatie tussen de Modbus nodes werd uitgevoerd met behulp van berichten. Het was een open standaard die de berichten structuur beschreef. De fysieke layer van de Modbus interface was vrij te kiezen. De originele Modbus interface werkte op RS-232, maar de meeste latere Modbus implementaties gebruikten RS-485, omdat het langere afstanden, hogere snelheden en de mogelijkheid van een echt multi-drop network toeliet. In een korte tijd implementeerden honderden fabrikanten het Modbus berichten systeem in hun apparatuur en Modbus werd de factor standaard voor industriële communicatie netwerken. De goede eigenschap van de Modbus standaard is de flexibiliteit, maar op hetzelfde moment een eenvoudige implementatie ervan. Niet alleen intelligente apparatuur zoals microcontrollers, PLC's en dergelijke zijn in staat via Modbus te communiceren, ook veel intelligente sensoren zijn uitgevoerd met een Modbus interface om hun data naar host systemen te verzenden. Waar Modbus in het begin voornamelijk werd gebruik op bedraadde seriële communicatie leidingen zijn er ook uitbreidingen op de standaard voor draadloze communicatie en TCP/IP netwerken.
6.2.2 Modbus berichten structuur De Modbus communicatie interface is gebouwd rond berichten. Het formaat van deze Modbus berichten is onafhankelijk van het type fysieke interface dat wordt gebruikt. Op eenvoudige ouderwetse RS232 worden dezelfde berichten gebruikt als op Modbus/TCP over ethernet. Dit geeft de Modbus interface definitie een zeer lange levensduur. Hetzelfde protocol kan worden gebruikt ongeacht het type verbinding. Hierdoor geeft Modbus de mogelijkheid om eenvoudig de hardware structuur van een netwerk te upgraden, zonder de noodzaak van grootschalige wijzigingen in de software. Een apparaat kan ook communiceren met meerdere Modbus knooppunten op hetzelfde moment, zelfs als zij verbonden zijn via verschillende soorten interfaces, zonder de noodzaak om een ander protocol voor elk van de verschillende verbindingen te gebruiken.
Mei 2009
Pieter Meersdom
29
Simulatie PLC voor opleiding visualisatie
30
Op eenvoudige interfaces zoals RS485 of RS232 worden de Modbus berichten in plat formaat over het netwerk gestuurd. In dit geval is het netwerk geheel ter beschikking voor Modbus. Wanneer een veelzijdiger netwerk systeem wordt gebruikt, zoals TCP/IP over ethernet, worden de Modbus - berichten ingebed in pakketten van het formaat dat noodzakelijk is voor de fysische interface. In dat geval kan Modbus met andere vormen van communicatie tegelijkertijd op de zelfde fysische interface aanwezig zijn. Hoewel de basis Modbus bericht structuur een peer-to-peer vorm is, is Modbus in staat op zowel op point-to-point, als op multidrop netwerken te functioneren. Elk Modbus - bericht heeft dezelfde structuur. Vier basiselementen zijn aanwezig in elk bericht. De volgorde van deze elementen is hetzelfde voor alle berichten waardoor het eenvoudig is om de inhoud van een Modbus bericht te ontleden. Een conversatie wordt altijd gestart door een master in het Modbus netwerk. Een Modbus - master verzendt een bericht en afhankelijk van de inhoud van het bericht, onderneemt een slave actie en beantwoordt het. Er kunnen meerdere masters in een Modbus netwerk zijn. De adressering in de berichtkop wordt gebruikt om te definiëren welk apparaat moet reageren op een melding. Alle andere knooppunten in het Modbus - netwerk negeren het bericht als het adresveld niet overeenkomt met hun eigen adres. Modbus berichtstructuur
Veld
Omschrijving
Apparaat adres
Adres van de ontvanger
Functie code
Code die het bericht type definieert
Data
Data blok met additionele informatie
Foutcontrole
Numerieke waarde om communicatiefouten te detecteren
6.2.3 Modbus seriële transmissie modes: Modbus/ASCII en Modbus/RTU Seriële Modbus - verbindingen kunnen twee basis transmissie modes gebruiken, ASCII of RTU, remote terminal unit. De transmissie mode in seriële communicatie definieert de wijze waarop de Modbus - berichten zijn gecodeerd. Met Modbus/ASCII zijn de berichten in een leesbaar ASCII - formaat. Het Modbus/RTU - formaat gebruikt binaire codering wat het bericht onleesbaar maakt als de communicatie gemonitored wordt, maar verkleint de afmetingen van elk bericht waardoor er meer data uitwisseling kan plaatsvinden in dezelfde tijdspanne. Alle knooppunten op een Modbus - netwerk segment moeten dezelfde seriële transmissie mode gebruiken. Een apparaat dat geconfigureerd is om Modbus/ASCII te gebruiken, kan geen Modbus/RTU berichten verwerken en vice versa.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
31
Als Modbus/ASCII gebruikt wordt, worden alle berichten gecodeerd in hexadecimale waarden, die gerepresenteerd worden met leesbare ASCII - karakters. Alleen de karakters 0...9 en A...F worden gebruikt voor de codering. Voor elk informatiebyte zijn twee communicatiebytes noodzakelijk, omdat elk communicatiebyte slechts 4 bits kan definiëren in het hexadecimale systeem. Met Modbus/RTU wordt de data uitgewisseld in binair formaat, waarbij elk informatiebyte is gecodeerd in één communicatiebyte. Modbus - berichten op seriële verbindingen worden niet zondermeer verzonden. Ze worden verpakt in een frame om de ontvanger een eenvoudige manier te geven om het begin en einde van een bericht te detecteren. Wanneer Modbus/ASCII wordt gebruikt, dan worden karakters toegepast om het begin en einde van een frame aan te geven. De dubbele punt ':' wordt gebruikt om het begin van een bericht te markeren en elk bericht wordt beëindigd met een CR/LF - combinatie. Modbus/RTU aan de andere kant gebruikt stilteperioden op de communicatieleiding voor de framing. Elk bericht moet worden vooraf gegaan door een stilteperiode met een minimale lengte van 3,5 karakters. Als een ontvanger een gat ontdekt binnen een frame van tenminste 1,5 karakters, dan neemt het aan dat er een nieuw bericht komt en de ontvangstbuffer wordt geleegd. Het belangrijkste voordeel van Modbus/ASCII is, dat het gaten tussen de afzonderlijke bytes van een bericht toestaat van maximaal 1 seconde. Met Modbus/RTU is het noodzakelijk om elk bericht als een continue bitstroom te verzenden. Eigenschappen van Modbus/ASCII en Modbus/RTU
Modbus/ASCII
Modbus/RTU
Karakters
ASCII 0...9 en A..F
Binair 0...255
Foutcontrole
LRC Longitudinal Redundancy Check
CRC Cyclic Redundancy Check
Frame start
karakter ':'
3,5 karakters stilte
Frame eind
karakters CR/LF
3,5 karakters stilte
Gaten in bericht
1 sec
1,5 maal karakterlengte
Start bit
1
1
Data bits
7
8
Pariteit
even/oneven
geen
even/oneven
geen
Stop bits
1
2
1
2
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
32
6.2.4 Modbus adressering De eerste informatie in elk Modbus - bericht is het adres van de ontvanger. Deze parameter bevat één byte informatie. In Modbus/ASCII wordt dit gecodeerd met twee hexadecimale karakters, in Modbus/RTU wordt één byte gebruikt. Toegestane adressen liggen in de range 0...247. De waarden 1...247 worden toegewezen aan individuele slaaf stations. Een slaaf beantwoordt altijd een Modbus adres. In zo'n antwoord bericht wordt hetzelfde adres gebruikt dat de master in zijn verzoek heeft toegepast. Op die manier kan de master zien dat de slave antwoord op het verzoek. Intern in een Modbus - apparaat zijn de holding registers, in - en uitgangen genummerd van 1 tot en met 10000. Men zou verwachten dat dezelfde adressen ook worden gebruikt in de Modbus - berichten om een verzameling waarden te zetten of uit te lezen. Helaas is dat niet het geval. In de Modbus - berichten worden adressen gebruikt met een waarde tussen 0 en 9999. Wanneer je bijvoorbeeld de waarde van uitgang (coil) 18 wilt lezen, dan moet de waarde 17 worden opgegeven in het Modbus - bericht. Nog meer verwarrend is, dat voor ingangen en holding registers een offset moet worden afgetrokken van het apparaat adres om het goede adres te verkrijgen dat in de Modbus bericht structuur moet worden geplaatst. Dit leidt veelvuldig tot vergissingen en er moet op gelet worden bij het ontwerpen van applicaties met Modbus. De volgende tabel laat de adres bereiken zien van coils, ingangen en holding registers en de wijze waarop het adres in het Modbus - bericht moet worden berekend wanneer het actuele adres van het gegeven in het apparaat bekend is. Apparaat en Modbus adres bereiken
Apparaat adres 1...10000*
Omschrijving
adres - 1
Coils (uitgangen)
10001...20000*
adres - 10001
Ingangen
40001...50000*
adres - 40001
Holding registers
*
Mei 2009
Modbus adres
Maximale waarde is apparaat afhankelijk
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
33
6.2.5 Modbus functie codes De tweede parameter in elk Modbus - bericht is de functiecode. Dit definieert het bericht type en het type actie dat van de slaaf verwacht wordt. De parameter bevat één byte aan informatie. In Modbus/ASCII is dit gecodeerd met twee hexadecimale karakters, in Modbus/RTU wordt één byte gebruikt. Toegestane functie codes liggen in het bereik 1...255. Niet alle Modbus apparaten herkennen dezelfde serie van functiecodes. De meest gebruikte codes worden hier beschreven. Normaliter, wanneer een Modbus slave een verzoek beantwoordt, gebruikte het dezelfde functiecode als in het verzoek. Echter, wanneer een fout is gedetecteerd, wordt de hoogste bit van de functiecode aangezet. Op die manier kan de master succesvolle en mislukte antwoorden eenvoudig onderscheiden. Algemene Modbus functie codes
Code
Mei 2009
Description
01
Lees coil status
02
Lees ingang status
03
Lees holding registers
04
Lees input registers
05
Forceer enkele coil
06
Preset enkel register
07
Lees uitzonderingsstatus
15
Forceer meerdere coils
16
Preset meerdere registers
17
Rapporteer slave ID
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
34
Functie 01: Lees coil status In Modbus taal is een coil een discrete uitgangswaarde. Modbus functie 01 kan worden gebruikt om de status van een dergelijke uitgang in te lezen. Dit is slechts mogelijk om één apparaat tegelijkertijd uit te vragen. Broadcast adressering wordt niet ondersteund door deze Modbus - functie. De functie kan worden gebruikt om de status van meerdere uitgangen tegelijkertijd op te vragen. Dit wordt gedaan door een uitgangsrange te definiëren in het dataveld van het bericht. Functie 01 verzoek structuur
Byte
Waarde
Omschrijving
1
1...247
Slave adres
2
1
Functie code
3
0...255
Startadres, hoge byte
4
0...255
Startadres, lage byte
5
0...255
Aantal coils, lage byte
6
0...255
Aantal coils, lage byte
7(...8)
LRC/CRC
Foutcontrole waarde
Een slave die een Modbus verzoek bericht ontvangt met functie 01 zal de nodige uitgangswaarden verzamelen en een antwoord bericht construeren. De lengte van dat bericht is afhankelijk van het aantal waarden dat moet worden teruggegeven. In het algemeen, wanneer N waarden worden opgevraagd, zijn ((N+7) mod 8) bytes noodzakelijk om deze waarden op te slaan. Het werkelijke aantal databytes in het datablok wordt geplaatst in de eerste byte van het dataveld. Daardoor kan de algemene structuur van een antwoord op Modbus functie 01 worden geschreven als: Functie 01 antwoord structuur
Byte
Mei 2009
Waarde
Omschrijving
1
1...247
Slave adres
2
1
Functie code
3
0...255
Aantal databytes N
4...N+3
0...255
Bitpatroon van de coil waarden
N+4(...N+5)
LRC/CRC
Foutcontrole waarde
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
35
Functie 02: Lees ingangsstatus Het lezen van ingangswaardes met Modbus wordt op dezelfde manier gedaan als het lezen van de status van coils. Het enige verschil is, dat voor ingangen Modbus functie 02 wordt gebruikt. Broadcast adresmode wordt niet ondersteund. Er kunnen slechts de ingangen van één apparaat tegelijkertijd worden opgevraagd. Net als met coils moeten het adres van de eerste ingang en het aantal te lezen ingangen worden geplaatst in het dataveld van het verzoekbericht. Ingangen op apparaten starten met de nummering bij 10001. Deze adreswaarde is equivalent met adres 0 in het Modbus bericht. Functie 02 verzoek structuur
Byte
Waarde
Omschrijving
1
1...247
Slave adres
2
2
Functie code
3
0...255
Startadres, hoge byte
4
0...255
Startadres, lage byte
5
0...255
Aantal ingangen, hoge byte
6
0...255
Aantal ingangen, lage byte
7(...8)
LRC/CRC
Foutcontrole waarde
Nadat een verzoekboodschap met Modbus functie 02 ontvangen is, plaatst de slave de opgevraagde ingangswaarden in een berichtstructuur en zendt dit bericht terug naar de Modbus master. De lengte van dit bericht hangt af van het aantal terug geleverde ingangswaarden. Hierdoor kan de lengte van een uitgangsbericht variabel zijn. Het aantal databytes in het dataveld dat de ingangswaarden bevat wordt doorgegeven als het eerste byte in het dataveld. Elk Modbus antwoordbericht heeft de volgende algemene structuur. Functie 02 antwoord structuur
Byte
Mei 2009
Waarde
Omschrijving
1
1...247
Slave adres
2
2
Functie code
3
0...255
Aantal databytes N
4...N+3
0...255
Bitpatroon van ingangswaardes
N+4(...N+5)
LRC/CRC
Foutcontrole waarde
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
36
Functie 03: Lees holding registers Interne waarden in een Modbus - apparaat worden opgeslagen in holding registers. Deze registers zijn twee bytes groot en kunnen voor velerlei doeleinden gebruikt worden. Sommige registers bevatten configuratie parameters, terwijl anderen worden gebruikt om meetwaarden, zoals temperaturen en dergelijke, terug te zenden naar een host. Registers in een Modbus compatibel apparaat beginnen te tellen bij 40001. Ze worden geadresseerd in de Modbus berichten structuur met adressen die beginnen bij 0. Modbus functie 03 wordt gebruikt om de waarde van één of meer holding registers op te vragen van een apparaat. Slechts één slave apparaat kan worden geadresseerd in een verzoekbericht. Broadcast verzoeken worden door functie 03 niet ondersteund. Functie 03 verzoek structuur
Byte
Waarde
Omschrijving
1
1...247
Slave adres
2
3
Functie code
3
0...255
Startadres, hoge byte
4
0...255
Startadres, lage byte
5
0...255
Aantal registers, hoge byte
6
0...255
Aantal registers, lage byte
7(...8)
LRC/CRC
Foutcontrole waarde
Nadat het verzoek verwerkt is, retourneert de Modbus slave de 16 bit waarden van de opgevraagde holding registers. Door de lengte van de holding registers is elk register gecodeerd in twee bytes in het antwoord bericht. Het eerste byte bevat het hoge byte van het register, en de tweede byte de lage byte. Het Modbus antwoord bericht start met het adres van de slaaf en de functiecode 03. De volgende byte is het aantal data bytes dat volgen. Deze waarde is twee, en maak het aantal geretourneerde registers. Een foutcontrole waarde is toegevoegd voor de host om te controleren of mogelijk een communicatiefout is opgetreden.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
6.2.6 CRC foutcontrole CRC staat voor ‗cyclic redundancy check‖. De CRC berekeningen worden hedendaags bij heel veel vormen van communicatie toegepast. Het is zo dat alle pakketten die over een netwerk verzonden worden, worden gecontroleerd met een CRC. Ook heeft elk datablok op een harde schijf een daarbij horende CRC. Het is dus duidelijk dat deze controle berekening dus heel erg veel gebruikt wordt. Maar waarom worden deze berekeningen zoveel gebruikt? Het antwoord is vrij simpel: Ze zijn efficiënt; Het is een zeer krachtige manier; Ze detecteren vele soorten fouten; Ze zijn snel te berekenen. Een voorbeeld van hoe men de CRC berekent, is toegevoegd in bijlage.
Mei 2009
Pieter Meersdom
37
Simulatie PLC voor opleiding visualisatie
7. Software Het schrijven van de software gebeurt in assembler code. Dit is machinetaal waarbij stap voor stap gekeken wordt, per programma cyclus wordt een commando uitgevoerd. Deze commando‘s zijn terug te vinden in de instructieset van de gebruikte PIC die terug te vinden is in de bijlage. De programmeur van deze code heeft het voordeel dat deze precies weet waar het programma mee bezig is. Bij andere programmeercodes bijvoorbeeld bij C kan er veel op de achtergrond gebeuren waardoor een fout in het programma moeilijker opgemerkt kan worden. Het software gedeelte kunnen we opsplitsen in 2 blokken, namelijk de code die het geautomatiseerd proces laat draaien in de PIC, en de code die op de achtergrond draait en de communicatie voorziet.
7.1 Geautomatiseerd proces Bij het aanleren van de cursus SCADA-Citect wordt er gebruik gemaakt van een voorbeeldprogramma waarbij het vullen en lossen van een wagon geautomatiseerd wordt. De volgende tekst met bijhorende flowchart moet dit proces verduidelijken:
Het programma begint past wanneer er op start gedrukt wordt, daarna begint het proces met het vullen van de wagon. Wanneer deze gevuld is moet de wagon naar links rijden waar er kan gelost worden. Het lossen gebeurt door middel van een cilinder die de wagon in een schuine positie duwt, De wachttijd is de tijd die nodig is om de wagon weer in horizontale positie te krijgen. Eenmaal deze tijd verstreken is, zal de wagon zich naar rechts verplaatsen tot onder de vulsilo, daarna kan het proces opnieuw beginnen. Bij bijna alles stappen wordt er gekeken of het proces automatisch of manueel moet verlopen. Als het automatisch moet hoeft er hardwarematig niets te gebeuren, in manuele toestand zal het proces pas doorgaan wanneer er op de startknop geduwd wordt. De stappen vullen, links rijden, lossen, wachttijd en rechts rijden zijn tijdsgebonden, deze stappen duren een welbepaalde tijd voor er naar de volgende stap overgegaan kan worden. Ze zijn in het programma dus niet afhankelijk van hardwaresensoren, deze worden wel weergegeven in de visualisatie maar worden gestuurd afhankelijk van de tijd en in welke stap het proces zich bevindt. De stappen vullen, links rijden, lossen en rechts rijden sturen hun overeenkomende LED, dit zou in de werkelijkheid een motor of een heel systeem kunnen zijn.
Mei 2009
Pieter Meersdom
38
Simulatie PLC voor opleiding visualisatie
7.1.2 Code Hier worden de belangrijkste code besproken, het volledig programma is terug te vinden in de bijlage. Eerst zullen we de gebruikte PIC moeten definiëren, dit gebeurt aan de hand van de eerste twee regels code in volgend venster: list P=16F628A #include
__CONFIG _XT_OSC&_WDT_OFF&_CP_OFF
De laatste regel dient om enkele functies aan of uit te schakelen, zoals hier de watchdog timer uitgeschakeld wordt door WDT_OFF. Vervolgens bekijken we hoe de I/O‘s van de PIC geconfigureerd worden. daarvoor gebruiken we het register TRISA of B om in te stellen of de poort dient als ingang of uitgang. Dit gebeurt door de overeenkomstige bit in het register een logische ‗0‘ voor uitgang of ‗1‘ voor ingang toe te wijzen. In het hoofdstuk over de hardware vinden we terug dat RA0 t.e.m. RA3 gebruikt worden als uitgangen, en RB0 t.e.m. RB5, behalve RB4, als ingang. movlw b'00000000' movwf TRISA movlw b'00101111' movwf TRISB
Hierbij moeten we rekening houden dat de LED‘s gekoppeld zijn aan de +5V en lichten op als de uitgang van de PIC deze doorverbindt met de massa, dus moeten de uitgangen hoog staan in rusttoestand. Voor het proces begint, worden de uitgangen hoog gezet door volgende code: movlw b'00001111' movwf PORTA
Tevens moet er voor de ingangen ook een speciale instelling gebeuren. De ingangen schakelen de +5v van de PIC door naar de massa, de volgende regel code stelt de PIC in, zodat er via pul-up weerstanden +5V aan de pin aanwezig is. bcf
OPTION_REG,7
Tijdens het instellen van de PIC wordt er regelmatig gesprongen tussen de banken om enkele registers in te stellen voor het proces begint. In het volgend blokje code worden er twee macro‘s gemaakt waardoor dit springen gemakkelijker te programmeren is. BANK0 MACRO BCF STATUS,RP0 ENDM BANK1 MACRO BSF STATUS,RP0 ENDM
Mei 2009
;select bank0
;select bank1
Pieter Meersdom
39
Simulatie PLC voor opleiding visualisatie Na de belangrijkste instellingen besproken te hebben, bekijken we de code die het geautomatiseerd proces voorstelt. U zult merken dat dit nauw aansluit met de flowchart van het proces. Het proces mag pas starten als er op de startdrukknop geduwd wordt, dit wordt gerealiseerd door een lus waarbij het programma er uit springt wanneer er op de drukknop geduwd wordt. begin
btfsc startknop goto begin
Na het startsignaal wordt er gekeken wat de volgende stap is in het proces. Bij de eerste start of wanneer het hele proces is afgerond nadat er op de stopdrukknop geduwd is, zal dit de stap vullen zijn, maar als het proces al bezig is kan dit een andere stap zijn. Dit selecteren gebeurt in de volgende blok code. proces movf STAP,W goto routine routine addwf PCL,f goto rechtsrijden goto wachttijd goto lossen goto linksrijden goto vullen
Het eerste wat gebeurt, is de waarde van het register STAP in het werkregister laden, de waarde van STAP wordt bij de PCL, dat het Program Counter's Least Significant Byte register is, opgeteld. Hierdoor springt het programma een aantal regels verder dat gelijk is aan de waarde van het register STAP. Daarna springt het programma naar de geselecteerde stap. vullen
bcf vulventiel movlw 12h movwf COUNT call delay bsf vulventiel decf STAP btfss autostand goto proces btfss manustand goto begin goto fout
Bekijken we een stap merken we op dat de eerste stap het oplichten van de LED is, door de uitgang op ‗0‘ te zetten. Daarna wacht het proces tot een ingestelde tijd verstreken is en wordt de uitgang weer ‗1‘, waardoor de LED dooft. Daarna wordt de variabele in STAP vermindert met één, waardoor het programma bij het selecteren van de volgende stap de juiste neemt. Vervolgens wordt er gekeken in welke stand de schakelaar staat, wat bepalend is voor de sprong die het programma moet maken. Als de schakelaar in de stand automatisch staat, springt het programma naar proces waar het vervolgens naar de volgende stap gaat, in de stand manueel springt het programma naar begin waar er eerst op de startdrukknop moet geduwd worden vooraleer het programma verder gaat. Mei 2009
Pieter Meersdom
40
Simulatie PLC voor opleiding visualisatie De stappen ―linksrijden‖ en ―lossen‖ hebben identiek dezelfde structuur als de stap ―vullen‖, enkel wordt een andere uitgang gestuurd, en wordt een andere tijd ingeladen, afhankelijk van de stap. Bij de stap ―wachttijd‖ hoeft er geen LED te branden, dus zullen de regels code om een uitgang te sturen hier niet terug te vinden zijn. Bij de stap‖ rechtsrijden‖ moet er iets extra bijkomen, dit is de laatste stap van het proces en hier moet er gekeken worden of er tijdens het proces op de stopdrukknop geduwd is. Omdat het een drukknop is, kan het signaal al weg zijn op het moment dat er gekeken wordt, dus zullen we dit moeten opvangen in een interrupt. De stopdrukknop is aangesloten op RB0, deze poort heeft als extra een interrupt op een neergaande of stijgende flank detectie, die je kan activeren door volgende code. De laatste regel bepaalt of het op een stijgende of dalende flank moet reageren. bsf bcf
INTCON,4 OPTION_REG,6
Deze interrupt zal bit 1 van het INTCON register hoog maken, hierdoor kunnen we dus nagaan of er op de stopdrukknop geduwd is. Dit gebeurt als volgt: btfsc goto
INTCON,1 start
Let wel dat deze bit manueel gereset moet worden, in het ander geval zal het proces steeds stoppen na de stap ―rechtsrijden‖, ook al is er niet op de stopdrukknop geduwd. bcf
INTCON,1
In elke stap wordt er een tijd gewacht om daarna door te gaan met het programma, deze tijd wordt bepaald door een hexadecimale waarde die we ingeven in het register COUNT. movlw 12h movwf COUNT call delay
De laatste regel roept de functie delay op, deze functie ziet er als volgt uit: delay
movlw B'00000010' movwf TELLER delay1 movlw B'11111010' movwf TELLER2 delay2 movlw B'11111010' movwf TELLER1 check decfsz TELLER1 goto check decfsz TELLER2 goto delay2 decfsz TELLER goto delay1 decfsz COUNT goto delay return
Mei 2009
In deze functie worden er eerst enkele waarden toegekend in registers, bij de eerste teller wordt per programma cyclus één afgetrokken tot deze teller de waarde nul heeft bereikt. Vervolgens wordt er van de volgende teller één afgetrokken waarna er terug overgesprongen wordt naar de eerste teller die terug begint af te tellen. Deze functie loopt tot het register COUNT de waarde nul heeft bereikt.
Pieter Meersdom
41
Simulatie PLC voor opleiding visualisatie
42
7.2 Communicatie De code zal een seriële communicatie tot stand moeten brengen volgens het Modbus protocol. Het moet dienen om het programma SCADA-Citect en het programma in de PIC synchroon te laten lopen. Globaal gezien zijn er 3 belangrijke stappen: Inlezen van data; Verwerken; Antwoorden. Het eindwerk is voorlopig in staat om een blok data in te lezen, de verwerking en het terug sturen van het antwoord moeten nog verder uitgewerkt worden. Een seriële communicatie heeft enkele typische snelheden:
Rekening houden met de kabellengte heeft bij onze toepassing niet veel nut, het is vooral de snelheid waarmee de communicatie gebeurt. Hoe rapper deze gebeurt hoe minder storing merkbaar is, voornamelijk met de PIC-processor. Er moet wel bekeken worden of de processnelheid van de PIC de communicatiesnelheid aankan. Er wordt een kristal van 6MHz gebruikt, deze snelheid wordt intern in de PIC gereduceerd tot een kloksnelheid van 1.5MHz. Dit is voldoende om te werken met een baudrate van 19200 voor de communicatie. Deze snelheid moet toegepast worden wanneer men communicatie met de PIC-processor wenst, dit komt omdat de samples die genomen worden door de PIC om de data in te lezen enkel op deze snelheid passen. In de code merken we enkele delay’s op die zo ingesteld zijn om op het juiste moment een sample te nemen. volgende figuur moet dit illustreren.
Delay 5 Delay 6 Delay 6 Delay 6
…
Sample1 Sample2 Sample3
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie Op de vorige figuur zijn er twee delay‘s van toepassing, delay 5 zorgt ervoor dat het sample in het midden van de databit genomen wordt, delay 6 is de tijd tussen de vorige en de volgende databit. Als er een snellere baudrate gebruikt wordt voor de communicatie, zullen er databits verzonden worden zonder dat deze gesampled worden. Bij een tragere baudrate zullen er meerdere samples op eenzelfde databit genomen worden.
7.2.1 Code De communicatie gebeurt met RB4 en RB5, die respectievelijk TxD en RxD zijn. Om inkomende data te detecteren op RB5, gebruiken we de functie interrupt on change, dat veranderingen op RB4 t.e.m RB7 opvangt en een interrupt opwekt. Deze functie kunnen we activeren door volgende regel code: bsf
INTCON,3
Als er data verzonden wordt naar de PIC, zal er een interrupt opgewekt worden en wordt in het register INTCON bit 0 geset. Wanneer dit gebeurt, is het de bedoeling dat het geautomatiseerd proces even onderbroken wordt en dat de PIC eerst de inkomende data inleest, verwerkt en een antwoord terug stuurt. Dit wordt geprogrammeerd door volgende regel code: org
0x04
Het adres 4 is de vector van de interrupts, bij een interrupt springt het programma naar deze regel code en loopt vanaf daar verder. Om dit af te sluiten en terug te keren naar het geautomatiseerd proces, gebruiken we het commando ‗retfie‘, dit reset alle interrupts en keert terug naar het oorspronkelijke programma waar het gestopt is door een interrupt. Wanneer het programma inkomende data opmerkt begint delay 5 te lopen, dit duurt een halve bittijd. Op dit moment zitten we halverwege de startbit, daarna begint delay 6 te lopen. wanneer delay 6 voorbij is wordt de eerste databit ingelezen, als dit een logische ‗1‘ is wordt er in een tijdelijke variabele temp een ‗1‘ opgeslagen, bij een logische ‗0‘ wordt dit een ‗0‘. call startintr inlezen
een
nul
Mei 2009
delay5
call inlezen call delay6 btfss PORTB,5 goto nul goto een rlf temp,1 bsf temp,0 rlf temp,1 bcf temp,0
Pieter Meersdom
43
Simulatie PLC voor opleiding visualisatie Een datablok bestaat uit 8 databits, dit wordt bij gehouden om te weten wanneer het inlezen moet eindigen. In de volgende blok code wordt er voor het inlezen de waarde acht in een register geladen, deze wordt na iedere databit verminderd met één. Wanneer deze de waarde nul bereikt, springt het programma naar een volgende functie. movlw b'00001000' movwf bitteller decfsz bitteller goto inlezen return
Na het inlezen van een volledige databyte, wordt deze gekopieerd van een tijdelijk naar een vast register met een aparte locatie zodat de verschillende ingelezen databyte elkaar niet overschrijven of spoorloos geraken. schrijfwaarde
movwf INDF incf FSR return
Het wegschrijven van de byte gebeurt door middel van INDF en FSR, dit is een functie die de naam indirect addressing meekrijgt. De waarde in FSR, file select register, is het adres van het register waar de byte in terecht komt. Dit register wordt dan voorgesteld door de naam INDF. Na het schrijven van een byte wordt de waarde van FSR vermeerderd met één. Tot hier toe hebben we enkel de databits per datablok beperkt tot 8. Uit het hoofdstuk over Modbus weten we dat er meerdere datablokken doorgestuurd worden met elk een aparte betekenis, zo dient het eerste blok voor het adres, het tweede blok voor de functie, enz. . Het aantal datablokken moeten we ook bijhouden en beperken tot 8. Daarvoor gebruiken we de variabele in het register aantaldatablokken. incf aantaldatablokken,1 btfsc aantaldatablokken,3 goto crcfout goto startintr
De eerste regel zorgt ervoor dat bij elke databyte, die weggeschreven wordt, het register vermeerdert met één. Wanneer het register de waarde 8 heeft, of dus binair 00001000, stopt het inlezen van de datablokken.
Mei 2009
Pieter Meersdom
44
Simulatie PLC voor opleiding visualisatie Na het inlezen van alle datablokken wordt de CRC code berekent en bekeken of deze overeenkomt met de code die van de zender komt. Daarbij starten we met het inlezen van een woord, dit bestaat uit twee bytes, waarbij de hoogste byte de hexadecimale waarde 00 heeft en de laagste byte een ingelezen byte is; bij het eerste woord is dat de eerst ingelezen databyte. Op dit woord wordt een xor functie uitgevoerd met het woord ffff. Dit gebeurt door volgende code. movlw 0xff movwf tempcrch movlw 0xff movwf tempcrcl movlw b'00000000' xorwf tempcrch,1 call leeswaarde leeswaarde
movfw INDF incf FSR
xorwf tempcrcl,1
De eerste vier regels maken het woord ffff, daarna wordt een 00 byte gevormd en wordt een xor - functie op een ff byte en een 00 byte uitgevoerd. Vervolgens wordt de eerst ingelezen byte opgehaald en wordt er eveneens een xor - functie uitgevoerd met een ff byte. Het resultaat is een nieuw woord dat acht maal naar rechts shift per bit. btfss tempcrch,0 goto rotate1 goto rotate2 rotate1 rrf tempcrch,1 bcf tempcrch,7 rrf tempcrcl,1 bcf tempcrcl,7 rotate2 rrf tempcrch,1 bcf tempcrch,7 rrf tempcrcl,1 bsf tempcrcl,7
Er zijn twee verschillende shift - functies, en dit omdat men maar kan doorschuiven met één byte. Dus wanneer de laatste bit van de hoogste byte een ‗1‘ is moet er bij het doorschuiven een ‗1‘ doorgegeven worden naar de hoogste bit van de laagste byte. Dit geldt ook in het geval er een ‗0‘ is als laatste bit, en hierdoor zijn er twee verschillende shift - functies.
Mei 2009
Pieter Meersdom
45
Simulatie PLC voor opleiding visualisatie Per shift wordt er gekeken welke waarde de laagste bit van de laagste byte heeft. btfsc tempcrcl,0 bsf temp,0
Is dit een ‗0‘ mag er vervolgens gewoon doorgeschoven worden, als dit een ‗1‘ is moet er bij de volgende shift, na het doorschuiven, een xor - functie toegepast worden op het woord en een constante. Deze constante is het woord met de waarde A001. btfss temp,0 goto shift movfw crcconstanth xorwf tempcrch,1 movfw crcconstantl xorwf tempcrcl,1 bcf temp,0
Dit doorschuiven moet acht keer gebeuren, dit wordt bijgehouden op volgende manier: btfss bitteller,0 goto volgende rrf bitteller bcf bitteller,7
In het register ‗bitteller‘ zit de binaire waarde 11111111, die bij iedere shift mee doorgeschoven wordt naar rechts. Na acht keer zal de waarde in het register 00000000 zijn en stopt het doorschuiven. Dan moet er met het resultaat een xor - functie uitgevoerd worden met terug een 00 byte en de volgende ingelezen byte. Daarna wordt er terug acht maal doorgeschoven. Er is eveneens een teller die bijhoudt hoeveel databytes er al gebruikt zijn. Deze moet aangeven wanneer het berekenen van de CRC ten einde is. decfsz n,1 return goto juist
In het register ‗n‘ zit de waarde van het aantal datablokken die ingelezen zijn. Telkens bij het uitlezen van een datablok wordt deze verminderd met één. Eens dit register de waarde nul heeft, springt het programma naar de functie ―juist‖. In de functie ―juist‖ wordt het resultaat van de CRC berekening vergeleken met de CRC waarde die ingelezen werd. Als deze waarden dezelfde zijn, klopt de ingelezen data. Bij verschillende waarden is er tijdens de verzending iets fout gelopen.
Mei 2009
Pieter Meersdom
46
Simulatie PLC voor opleiding visualisatie
8. Testen 8.1 Hardware Het testen van de hardware werd grotendeels gedaan met korte programmaatjes in de PIC te laden. Al snel viel er op te merken dat de PIC niet werkte, de oorzaak was te vinden bij het kristal. In eerste instantie werd een kristal van 20MHz gebruikt wat volgens de specificaties van de PIC een bruikbaar kristal is. Wanneer dit kristal vervangen werd door een 6MHz kristal werkte hetzelfde programma wel. Het IC FT232BM werd pas getest, wanneer er een blok code geschreven was om te communiceren. Bij het proberen van deze code bleek dat het IC niet reageerde op inkomende data. Via een testprogramma waarmee het mogelijk was om seriële data uit te sturen werden er verschillende testen gedaan, zo werd met alle mogelijke baudrate snelheden data verzonden en gekeken of het IC de data doorgaf. Maar bij geen enkele test reageerde het IC. Er werd een tweede print gemaakt waarop een nieuw IC gebruikt werd, maar ook hier werd er bij de eerste metingen geen positief resultaat geboekt. Het probleem kwam pas aan het licht door de hardware configuratie grondig te bekijken, waarbij er vastgesteld werd dat een condensator op een verkeerde verbinding geplaatst werd en zo de configuratie wijzigde. Na het corrigeren van deze fout reageerde het IC en werd de data doorgezonden naar de PIC.
8.2 Software 8.2.1 Geautomatiseerd proces Bij het begin was het zoeken om de PIC juist in te stellen volgens de hardware. Daarna was het testen en verbeteren waar nodig.
8.2.1 Communicatie De instellingen van de PIC zijn grotendeels in orde gebracht tijdens het testen van het geautomatiseerd proces, maar met het hardware probleem van het IC FT232BM is er heel wat tijd verloren gegaan. De communicatie code die reeds besproken werd, is enkel getest geweest met het programma MPLAB. Pas na het oplossen van de fout kon er praktisch getest worden. Daarvoor is er een programma opgemaakt waarbij het inlezen van één databyte gebeurt en deze waarde binair wordt weergegeven door de LED‘s op de printplaat. Het programma gebruikt dezelfde code als het eerder geziene programma voor de communicatie, maar hier wordt er geen CRC berekend. In plaats daarvan wordt de ingelezen data naar de LED‘s gestuurd. intr
org 0x04 bcf PORTA,0 bcf PORTA,1 bcf PORTA,2 bcf PORTA,3
Het eerste wat gebeurt na de interrupt is het oplichten van alle LED‘s, daarna wordt de ene databit ingelezen en opgeslagen in het register adres schrijfwaarde
Mei 2009
movwf adres return
Pieter Meersdom
47
Simulatie PLC voor opleiding visualisatie Na het opslaan springt het programma over naar de functie ―crcfout‖, crcfout movlw b'00001100' movwf COUNT call delay
Hier wordt de tijd bepaald voor het oplichten van alle LED‘s Als die tijd verstreken is, wordt er gekeken welke waarde er in het register adres zit en wordt deze binair weergegeven door de LED‘s. btfss adres,0 bsf PORTA,0 btfss adres,1 bsf PORTA,1 btfss adres,2 bsf PORTA,2 btfss adres,3 bsf PORTA,3
Vervolgens wordt er een tijd gewacht en springt het programma terug naar het geautomatiseerd proces. movlw b'00001100' movwf COUNT call delay bcf INTCON,0 goto stop stop
Mei 2009
nop retfie
Pieter Meersdom
48
Simulatie PLC voor opleiding visualisatie
49
Het programma dat gebruikt wordt om data vanuit de PC te verzenden, noemt Modbus Test Pro. Het programma ziet er als volgt uit:
Verzonden data Antwoord van de slave Commentaar over de communicatie
Data ingeven dat je wilt verzenden
Status van de poort
Dit programma stelt het mogelijk om de baudrate in te stellen zoals in de figuur hieronder te zien is.
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie
9. Besluit Dit eindwerk heeft mij heel wat kennis en ervaring bijgebracht op het gebied van microprocessoren en communicatie. Tevens leerde ik op zelfstandige wijze opzoekingswerk te verrichten, de verkregen informatie te filteren en te verwerken. Ik heb ondervonden dat de theorie omzetten in de praktijk niet altijd zo eenvoudig is. Bij ieder probleem dat opduikt, groeit er een oplossing die voornamelijk uit eigen initiatief vorm krijgt, zo worden de problemen, downs, goed gemaakt door de oplossing, ups, tijdens een project. Maar bij grote problemen kunnen er downs ontstaan die niet meer opgevuld kunnen worden wegens tijdsgebrek, waardoor het eindresultaat niet voldoet aan de vraag. Dat heb ik jammer genoeg moeten ervaren.
De verdere uitwerking kan eventueel in een nieuw eindwerk?
Mei 2009
Pieter Meersdom
50
Simulatie PLC voor opleiding visualisatie
51
10. Bijlagen 10.1 CRC voorbeeld input hex string F70302640008 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 xor constant 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 CRC byte# 1
Hex F7
2
03
3
02
4
64
Start with 16 trues 0000000011110111 xor the 2 lines above shift xor 1 shift xor 2 shift xor 3 shift xor 4 shift xor 5 shift xor 6 shift xor 7 shift xor 8 0000000000000011 xor the 2 lines above shift xor 1 shift xor 2 shift xor 3 shift xor 4 shift xor 5 shift xor 6 shift xor 7 shift xor 8 0000000000000010 xor the 2 lines above shift xor 1 shift xor 2 shift xor 3 shift xor 4 shift xor 5 shift xor 6 shift xor 7 shift xor 8 0000000001100100 xor the 2 lines above shift xor 1 shift xor 2 shift xor 3 shift xor 4 shift xor 5 shift xor 6 shift xor 7 shift xor 8
Mei 2009
1 0 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1 1
1 0 1 1 0 0 0 1 1 1 1 0 1 1 1 1 0 1 0 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 1 1
1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1 0
1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0 1 1
1 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0 1
1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 1 0
1 0 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 1 0 0 0 0 1 1 1 1
1 0 1 1 1 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 0 1 0 1 1 0 0 0 0 1 1 1
1 1 0 1 1 1 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 1 1 0 0 0 0 1 1
1 1 0 0 1 1 1 1 1 1 1 0 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 1
Pieter Meersdom
1 1 0 0 0 1 1 1 1 1 1 0 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0
1 1 0 0 0 0 1 1 1 1 1 0 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0 0
1 0 1 0 0 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 1 0 0
1 1 0 1 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 1 1 0 0 1 0 0 1 1 0
1 1 0 0 1 0 0 0 0 1 1 1 0 1 1 1 1 1 1 0 1 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 1
1 1 0 0 0 1 1 1 1 1 0 1 1 1 0 1 0 1 0 1 1 0 1 1 0 0 0 0 0 0 1 0 1 1 0 0 0 1 1 1 0
1
FEC6
2
0781
3
4103
4
C2DB
Simulatie PLC voor opleiding visualisatie 5
6
00
08
0000000000000000 0 xor the 2 lines above 1 shift xor 1 0 shift xor 2 1 shift xor 3 1 shift xor 4 1 shift xor 5 1 shift xor 6 1 shift xor 7 0 shift xor 8 1 0000000000001000 0 xor the 2 lines above 1 shift xor 1 0 shift xor 2 1 shift xor 3 1 shift xor 4 1 shift xor 5 0 shift xor 6 0 shift xor 7 1 shift xor 8 1
Mei 2009
0 1 1 0 1 1 1 1 1 0 0 0 1 0 1 1 1 0 0 1
0 0 1 0 1 0 0 0 1 0 0 0 0 0 1 0 1 1 1 1
0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 1 1
0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1 1
0 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 1
52 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0
0 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1 0 0 0 1
0 1 1 1 0 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0
0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1 0 0
Pieter Meersdom
0 0 1 1 1 1 0 1 1 0 0 0 1 0 1 0 0 0 1 0
0 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 0 1
0 0 0 0 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 0
0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 0 1 0 0
0 1 0 0 0 0 1 1 1 1 0 1 0 0 1 0 1 0 1 0
0 0 1 1 1 1 1 0 1 0 5 0 0 1 1 1 0 0 1 1 0 6
5A91
10FD
Simulatie PLC voor opleiding visualisatie
53
10.2 Programma list P=16F628A #include __CONFIG _XT_OSC&_WDT_OFF&_CP_OFF ERRORLEVEL -302 ;turn off message ID 302 #define #define #define #define #define #define #define #define
vulventiel rechts links cilinder stopknop startknop autostand manustand
STAP COUNT TELLER TELLER1 TELLER2 temp bitteller leesvolgorde tempcrch tempcrcl crcconstanth crcconstantl temph templ inleeswaardeteller aantaldatablokken n
PORTA,0 PORTA,1 PORTA,2 PORTA,3 PORTB,0 PORTB,1 PORTB,2 PORTB,3
;definiëren van snelnamen ; ; ; ; ; ; ;
equ 20h equ 21h equ 22h equ 23h equ 24h equ 25h equ 26h equ 27h equ 28h equ 29h equ 2ah equ 2bh equ 2ch equ 2dh equ 2eh equ 2fh equ 30h
;benaming van registers ;
;******************************************************** ;* Macro's om gemakkelijker van bank te switchen. * ;******************************************************** BANK0 MACRO BCF STATUS,RP0 ;select bank0 ENDM BANK1 MACRO BSF STATUS,RP0 ;select bank1 ENDM ;******************************************************** ;* Einde Macro programma's * ;********************************************************
Mei 2009
Pieter Meersdom
Simulatie PLC voor opleiding visualisatie org
0x00
;start van het programma
BANK0 movlw movwf movlw movwf bsf bsf bsf bcf
07h CMCON b'00001111' PORTA INTCON,4 INTCON,7 INTCON,3 INTCON,0
; Load 7 into W register ; CMCON = contents of W register 7h ;zet de uitgangen uit door de poort hoog te zetten ;activeerd de interrupt on edge op RB0 ;Globel interrupt enable(we are using interr.) ;RB4-RB7 interrupt on change is enabled ;Clear RB4-RB7 interrupt flag so, that another interr. can occur.
BANK1 movlw b'00000000' movwf TRISA movlw b'00101111' movwf TRISB bcf OPTION_REG,6 bcf OPTION_REG,7
; ;poort a is geset als uitgang ;poort b (eerste 4 ingangen) is geset als ingang ;interrupt op een neergaande flank op RB0 ;moet op 0 staan als de ingangen naar massa gelegt worden
BANK0 goto
start org
intr
0x04
clrf aantaldatablokken clrf temp movlw 40h movwf FSR call delay5
startintr
movlw b'00001000' movwf bitteller call inlezen movfw temp call schrijfwaarde call delay7 btfsc aantaldatablokken,3
;bij interrupt springt het programma naar hier ;legen van de teller voor de datablokken ;zorg dat het tijdelijk register leeg is ;laad het eerste adres in om de databyte te stockeren ;wacht tot in de helft van de startbit ; ;laad de bitteller met 8 ;laad de ingelezen byte in het werkregister ; ;wacht tot de stopbits verstreken zijn ;bepaald het aantal waarden die ingelezen moeten worden voor het ; berekenen van de crc fout
goto crcfout goto startintr inlezen
een
Mei 2009
call delay6 btfss PORTB,5 goto nul goto een rlf temp,1 bsf temp,0 decfsz bitteller goto inlezen return
; wacht tot het ideale moment om te samplen ;kijken welk niveau er op de ingang staat ;ingang is ‗0‘ ;ingang is ‗1‘ ;doorschuiven van tijdelijk register ;zet de waarde in een tijdelijk geheugen ;verminder bitteller ;keer terug om de volgende waarde in te lezen
Pieter Meersdom
54
Simulatie PLC voor opleiding visualisatie nul
rlf temp,1 bcf temp,0 decfsz bitteller goto inlezen return
schrijfwaarde
movwf INDF ;schrijf de waarde van temp in een register incf FSR ;verhoog de adrespointer incf aantaldatablokken,1 ;vermeerdert teller van datablokken met 1 return
functie
movfw functie addwf PCL,f goto functie1 goto fucntie2 goto fucntie3 goto fucntie4 goto fucntie5 goto fucntie6 goto fucntie7 goto fucntie8 goto fucntie9 goto fucntie10 goto fucntie11 goto fucntie12 goto fucntie13 goto fucntie14 goto fucntie15 goto fucntie16
crcfout
clrf temp ;legen van register clrf n ;legen van register movlw 0x01 subwf aantaldatablokken,0 movwf n ;slaat het aantal datablokken op in register n movlw 40h ;zet het startadres van FSR terug juist movwf FSR movlw 0xff ;start met 11111111 movwf tempcrch movlw 0xff ;start met 11111111 movwf tempcrcl
volgende
movlw 0xff movwf bitteller movlw b'00000000' xorwf tempcrch,1 call leeswaarde xorwf tempcrcl,1
shift
btfss bitteller,0 goto volgende
Mei 2009
;doorschuiven van tijdelijk register ;zet de waarde in een tijdelijk geheugen ;verminder bitteller ;keer terug om de volgende waarde in te lezen
;leest de modbusfunctie ;springt naar de juiste functie
;laad de bitteller met 11111111 zodat een teller van 8 ontstaat ;eerste waarde die bewerkt moet worden is altijd adres, hierbij is de ; hoogste byte = 00000000 ;deze xor met de vorige waarde ;eerste waarde die bewerkt moet worden is altijd adres ;deze xor met de vorige waarde ;kijkt hoeveel keer er al is doorgeschoven ;als er 8 keer is doorgeschoven wordt de volgende waarde ingelezen ; en xor functie toe gepast
Pieter Meersdom
55
Simulatie PLC voor opleiding visualisatie rrf bitteller bcf bitteller,7 btfsc tempcrcl,0 bsf temp,0 btfss tempcrch,0 goto rotate1 goto rotate2 rotate1 rrf tempcrch,1 bcf tempcrch,7 rrf tempcrcl,1 bcf tempcrcl,7 btfss temp,0 goto shift movfw crcconstanth xorwf tempcrch,1 movfw crcconstantl xorwf tempcrcl,1 bcf temp,0 goto shift rotate2 rrf tempcrch,1 bcf tempcrch,7 rrf tempcrcl,1 bsf tempcrcl,7
;verminder bitteller, deze houdt bij hoeveel keer er is doorgeschoven ;kijkt of de laatste bit een 1 is ;als de laatste bit een 1 is setten we bit 0 van temp (soort van vlag) ;kijkt als de laatste bit van de hoogste byte een 1 is ; ; ;shift de hoogste byte ;shift de laagste byte ;kijken als de vlag geset is door een 1 op de laagste bit te hebben ;zoniet keert het programma terug voor een volgende shift ; in geval van een vlag wordt de xor functie uitgevoerd ;xor functie met de hoge bytes ; ;xor functie met de lage bytes ;reset de vlag
;schuift de laatste bit van de hoogste byte die '1' is door naar de ; hoogste bit van de lagere byte
btfss temp,0 goto shift movfw crcconstanth xorwf tempcrch,1 movfw crcconstantl xorwf tempcrcl,1 bcf temp,0 goto shift leeswaarde
juist
movfw INDF incf FSR decfsz n,1 return goto juist
movlw 3eh addwf aantaldatablokken,0 movwf FSR movfw INDF xorwf tempcrcl,0 movwf temp call crctest incf FSR movfw INDF xorwf tempcrch,0 movwf temp call crctest goto stop
Mei 2009
;schrijf de waarde uit het register in het werkregister ;verhoog de adrespointer ;wanneer al de databytes gebruikt zijn stopt de crcfout code ; ; ;steld het startadres van de databytes in ;telt het aantal databytes op bij dat startadres ;ga naar dat adres, daar zit de hoge byte van de ontvangen crc ;steek de inhoud van dat register in het werkregister ;xor functie met het resultaat van de crc berekening ; ;kijken of het dezelfde waarde is ;verminder het adres, daar zit de lage byte van de ontvangen crc ;steek de inhoud van dat register in het werkregister ; xor functie met het resultaat van de crc berekening ; ; kijken of het dezelfde waarde is ; als ze overeen komen wordt er verder gegaan in het programma
Pieter Meersdom
56
Simulatie PLC voor opleiding visualisatie crctest incf temp decfsz temp goto stop return stop
bcf retfie
INTCON,0
;Clear RB4-RB7 interrupt flag so, that another interr. can occur. ; keer terug naar het geautomatiseerd proces
start
movlw 04 movwf STAP bcf INTCON,1 goto begin
;laad het aantal ;stappen in stap ;reset interrupt
begin
btfsc startknop goto begin
;kijkt wanneer er op start wordt geduwd
proces movf STAP,W goto routine
;laad de stapwaarde in het werkregister
routine addwf PCL,f goto rechtsrijden goto wachttijd goto lossen goto linksrijden goto vullen
;kijkt wat de waarde is van stap en springt dan naar de gewenste stap
vullen
;LED vullen aan ;bepaal de tijd voor het vullen (6sec)
bcf vulventiel movlw 12h movwf COUNT call delay bsf vulventiel decf STAP btfss autostand goto proces btfss manustand goto begin goto fout
linksrijden
lossen
bcf links movlw 2Ch movwf COUNT call delay bsf links decf STAP btfss autostand goto proces btfss manustand goto begin goto fout
bcf cilinder movlw 12h movwf COUNT call delay
Mei 2009
;LED vullen uit ;kijken of het proces automatisch of manueel moet verlopen ;ga naar proces bij automatisch ;als het manueel is ;ga naar begin en wacht op een startimpuls ;niet automatisch en niet manueel dus is er een error ;LED linksrijden aan ;bepaal de tijd voor het rijden (11sec)
;LED linksrijden uit ;kijken of het proces automatisch of manueel moet verlopen ;ga naar proces bij automatisch ;als het manueel is ;ga naar begin en wacht op een startimpuls ;niet automatisch en niet manueel dus is er een error ;LED lossen aan ;bepaal de tijd voor het lossen (6sec)
Pieter Meersdom
57
Simulatie PLC voor opleiding visualisatie bsf cilinder decf STAP btfss autostand goto proces btfss manustand goto begin goto fout wachttijd
rechtsrijden
;kijken of het proces automatisch of manueel moet verlopen ;ga naar proces bij automatisch ;als het manueel is ;ga naar begin en wacht op een startimpuls ;niet automatisch en niet manueel dus is er een error
movlw 12h movwf COUNT call delay decf STAP btfss autostand goto proces btfss manustand goto begin goto fout
;bepaal de tijd voor het wachten ; (instelbaar, hier in dit voorbeeld 6sec)
bcf rechts movlw 2Ch movwf COUNT call delay bsf rechts btfsc INTCON,1
;LED rechtsrijden aan ;bepaal de tijd voor het rijden (11sec)
goto start btfss manustand goto start btfsc autostand goto fout movlw 04 movwf STAP goto proces delay
movlw B'00000010' movwf TELLER delay1 movlw B'11111010' movwf TELLER2 delay2 movlw B'11111010' movwf TELLER1 check decfsz TELLER1 goto check decfsz TELLER2 goto delay2 decfsz TELLER goto delay1 decfsz COUNT goto delay return fout
;LED lossen uit
nop goto begin
;kijken of het proces automatisch of manueel moet verlopen ;ga naar proces bij automatisch ;als het manueel is ;ga naar begin en wacht op een startimpuls ;niet automatisch en niet manueel dus is er een error
;LED rechtsrijden uit ;als er op stop geduwd is als de interruptflag geset door neergaande ; flank op RB0 ;ga naar start ;als het manueel is ;ga naar start ;als er ook geen automatisch verloop is ;is er een error ;anders ;laad stap met 4 ;ga naar proces om het hele verloop opnieuw te starten ;instellen derde deler ; ;instellen tweede deler ; ;instellen eerste deler ; ;wachten tot er een vlag is( de teller is aan de bekomen waarde ; gekomen) ; ; ; ; ;als deze waarde nul bereikt stopt de wachttijd
;voorlopig heeft error nog geen doel
end
Mei 2009
Pieter Meersdom
58
Simulatie PLC voor opleiding visualisatie
10.3 Datasheet PIC16F628A
Mei 2009
Pieter Meersdom
59
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
60
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
61
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
62
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
63
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
64
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
65
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
66
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
67
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
68
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
69
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
70
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
71
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
72
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
73
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
74
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
75
Simulatie PLC voor opleiding visualisatie
Mei 2009
Pieter Meersdom
76
Simulatie PLC voor opleiding visualisatie
11. Literatuurlijst Boeken: Martin Bates (2004) PIC Microcontrollers An introduction to microelectronics ISBN 0 7506 6267 0 Elektronische bronnen: Datasheetcatalog http://www.datasheetcatalog.com/ Engeneering / SCADA http://www.engineering-online.nl/?subj=energietechniek&content=scada
FTDI chips http://www.ftdichip.com/ Lammerbies / Modbus http://www.lammertbies.nl/comm/info/nl_modbus.html Modbus Test Pro http://www.archive.org/details/tucows_372720_Modbus_Test_Pro Microchip http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=64
PLC-automatisatie http://www.plcautomatisatie.be/Deel%20B/Fund%20opbouw%20PLC/frame%20Hoofd%20B1.htm VDAB site http://vdab.be/
VDAB Brugge – Sectie PLC http://home.scarlet.be/sectieplc.brugge/default.htm Vrije encyclopedie. http://nl.wikipedia.org
Mei 2009
Pieter Meersdom
77