Mededeling. Simulatie PLC voor opleiding visualisatie 2



Vergelijkbare documenten
MODBUS remote I/O-unit type MODBUS4S110

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

Locobuffer Handleiding

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

LocoServo Handleiding

Foundation Fieldbus. Er zijn 2 soorten Foundation Fieldbus: FF HSE FF-H1

IO-Link: de industriële communicatiestandaard. De basis van IO-Link

LocoServo Handleiding

ADRESSEERBARE ZONE UITBREIDING int-adr_nl 05/14

KNX INTEGRATIE MODULE int-knx-2_nl 03/15

06-RIS-02: Een inleiding in LogoSoft. VTI Brugge Realisaties Industriële Sturingen

Wireless PC Interface installatie handleiding

KEYSTONE. OM8 - EPI 2 AS-Interface module Handleiding voor installatie en onderhoud.

Handleiding HCS VB5248

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

Hand-out Introductieworkshop LED programmeren

De TRUST 2 PORT USB 2.0 PCI CARD werkt niet op MAC.

SPRAAK MODULE INT-VG. 1. Eigenschappen. 2. Specificaties

ifm electronic Edwin Slot Marketing director ifm electronic b.v. Deventerweg 1e 3843 GA Herderwijk

In- en uitgangssignalen van microprocessoren

RTC Opleidingen Beckhoff TwinCAT. Voorbereiding

B3C 70cm converter besturing. v PE5PVB bar.net bar.net

APT-200. Tweeweg handzender. Firmware versie 1.00 apt-200_nl 03/19

PIC Callgever Door PA1RUM

Installatie & Snelstart Gids iais Wireless(draadloos) AIS Ontvanger en NMEA Server

Modbuskoppeling Verdyn - Priva (engineering in Priva)

Gedecentraliseerde I/O

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

Wat is communicatie het begrip Algemeen Het uitwisselen van informatie (van Dale) Opzettelijk of onopzettelijk zenden van een boodschap met als doel d

Remote Powercontrol for TCP/IP networks

Revisie geschiedenis. [XXTER & KNX via IP]

ES1 Project 1: Microcontrollers

De Arduino-microcontroller in de motorvoertuigentechniek (4)

De Arduino-microcontroller in de motorvoertuigentechniek (2)

Montagevoorschriften

Oefeningen Interpretatie I Reeks 6 : Registermachines

Handleiding HCS VB5224

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (8)

led 0 aan Opdracht: 1 Opdracht: 4

Handleiding HCS VB5238

Handleiding HCS VB5118

Het koppelen van een FC51, via Modbus RTU, aan een AC500-eco.

MBUS-64 TCP. VF64 over MODBUS / TCP

GEINTEGREERDE PROEF DE COMPUTER ALS TV AFSTANDSBEDIENING

VMB1BLS 1-kanaals rolluiksturing voor universele montage. Handleiding

TRUST 5 PORT USB 2.0 UPGRADE KIT & HUB

Hoofdstuk 6: Digitale signalen

Serieel Protocol voor Robotica v1.3. David Vollmar 13 augustus 2013

1945, eerste DC. Eigen logo

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

Logische bit-instructies

Logo quiz Project Inleiding op de Logo!

Gebruikershandleiding

Klas : 5 Industriële ICT Herhalingsvragen reeks 1 PC-techniek

2-poort USB naar RS232 RS422 RS485 Seriële Adapter met COM-behoud. StarTech ID: ICUSB

Logische Schakelingen

Installatiehandleiding

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan Lokeren info@vti-lokeren.

RTC Opleidingen Beckhoff TwinCAT. Voorbereiding

Het koppelen van de u-remote aan de AC500-eco via Modbus TCP. A quick start guide. Jaap Ruiten

MIDI_PAR. MIDI_PAR_Instructie

LMX800. Open telecontrol onderstation. smart telecontrol

Terugmeld module in combinatie met andere merken 13. Aansluiten van de meldingangen 14. In gebruik nemen en testen van de terugmeld module 16

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

Netwerk Interfacing Data Logging.

Besturingspaneel v Raam E-systeem functie omschrijving v109

Temperatuur logger synchronisatie

Arduino CURSUS. door Willy - 09-juni-2017

WAGO-TRAININGEN. Programma

2 Algemene opbouw van een computersysteem

LocoIO Handleiding HDM08

Draadloos embedded meetsysteem via Bluetooth

De Arduino-microcontroller in de motorvoertuigentechniek (3)

SI-Profinet. Unidrive M200-M400 en Siemens S PLC (TIA portal)

Een intelligent DMX netwerk

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

Movicon 11. Visualisatie op VIPA Touch Screens Van de VIPA PLC: CPU315 & CPU313. F. Rubben Movicon 11 op VIPA Touch Screens 1

LMX800-serie. Open telecontrol onderstation

DIN-RAIL UITBREIDING int-iors_nl 10/14

Inhoudsopgave. SNI handleiding. Inhoudsopgave

Inleiding elektronica Presentatie 1

Deze applicatie nota legt uit hoe u een Net2 datalijn verbonden aan een TCP/IP netwerk, via een TCP/IP interface moet verbinden.

Installatie & Configuratiehandleiding. Socket Server. OpenAT applicatie

Digitaal is een magisch woord

Het Versacom systeem is gedefinieerd in DIN 43861, deel 301 als "transfer protocol A".

Technisch ontwerp positiebepaling Smart Blocks

Delmation Products BV Tel: +31 (0)

Velbus DIN-rail RS232 & USB interface

De print van de centrale is hardwarematig aangepast waardoor een upgrade is niet mogelijk is.

NEDERLANDS AP22. Atrium door handle controller. De keuze van de installateur cdvibenelux.com

DATALOGGERS. Technolog - Cello 8-kanaals CELLO 8 KANAALS SMS/GPRS DATALOGGER

Technische Opleidingen

Machinebeheer op afstand. Efficiënt. Wereldwijd. Intuïtief

versie: 1.0 status: vrijgegeven door: J.Eberson datum: 15 augustus 2005 aangepast: 19 februari 2006 concept beschrijving

Dossier RAILBUS. Pagina 1

GSM500 PROGRAMMATIE HANDLEIDING

Hfdst. 2: COMBINATORISCH PROGRAMMEREN

Stappenmotor Interface. Controller

Transcriptie:

Simulatie PLC voor opleiding visualisatie 2 Mededeling Deze eindverhandeling was een examen. De tijdens de verdediging geformuleerde opmerkingen werden niet opgenomen.

Simulatie PLC voor opleiding visualisatie 3 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.

Simulatie PLC voor opleiding visualisatie 4 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.

Simulatie PLC voor opleiding visualisatie 5 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

Simulatie PLC voor opleiding visualisatie 6 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

Simulatie PLC voor opleiding visualisatie 7 Lijst van gebruikte afkortingen DIP CPU IC KHBO LED PCB PIC PLC SCADA USB VDAB 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

Simulatie PLC voor opleiding visualisatie 8 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.

Simulatie PLC voor opleiding visualisatie 9 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.

Simulatie PLC voor opleiding visualisatie 10 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!

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. Seriële verbinding PLC S7-200 Paneel met ingangen

Simulatie PLC voor opleiding visualisatie 12 PLC S7-200 Uitgangen Paneel met ingangen Fig. 1 Fig. 2 Drukknoppen Schakelaar

Simulatie PLC voor opleiding visualisatie 13 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

Simulatie PLC voor opleiding visualisatie 14 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. 4.1.2 Werking Fig. 3 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.

Simulatie PLC voor opleiding visualisatie 15 4.1.3 Programmeren Fig. 4 Principeschema 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.).

Simulatie PLC voor opleiding visualisatie 16 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.

Simulatie PLC voor opleiding visualisatie 17 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.

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

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.

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 Outputs Communication Stop RB0 Vulventiel RA0 Receive data RB4 Start RB1 Rechts RA1 Transmit data RB5 Automatisch RB2 Links RA2 Manueel RB3 Lossen RA3 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.

Simulatie PLC voor opleiding visualisatie 21 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

Simulatie PLC voor opleiding visualisatie 22 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.

Simulatie PLC voor opleiding visualisatie 23 5.4 Prijsvergelijking Materiaallijst: naam component Prijs( )/stuk datum aantal Totaal ( ) 1/2 europrintplaat 2,85 9/03/09 1/2 1,43 C5 33nF 0,15 9/03/09 1 0,15 IC1 PIC 16F628A 3,03 26/02/09 1 3,03 IC2 FT232BM 5,54 26/02/09 1 5,54 IC voet 18 pins DIP 0,4 26/02/09 1 0,4 X1 USB connector type A 1,19 26/02/09 1 1,19 Q1,2 (C6-9) 6MHz kristal (+2x22pF cond.) 0,86 26/02/09 2 1,72 schakelaar / 12/03/09 1 drukknop / 12/03/09 2 LED1-4 3mm LED red / 12/03/09 4 R1-4 220Ω / 12/03/09 4 R5,6 27Ω / 12/03/09 2 4,41 R7 1500Ω / 12/03/09 1 R9 470Ω / 12/03/09 1 C1-3 0,1µF / 12/03/09 3 C4 10µF / 12/03/09 1 Totale kostprijs voor 1 print: 17,87 Euro (incl. BTW) 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 Prijs april 2008 (incl. BTW) Voeding 24Volt 51euro PLC S7-200 209euro OF PLC S7-200 met ingebouwde voeding 225euro Interfacekabel 119euro Totaal = ± 400euro ( met schakelaars, bekabeling, ) Als we de prijs van een PIC-processor en een PLC S7-200 vergelijken met elkaar bemerken we een duidelijk prijsverschil.

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.

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).

Simulatie PLC voor opleiding visualisatie 26 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.

Simulatie PLC voor opleiding visualisatie 27 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).

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 V CC 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 Fig. 16 Type A USB connector Type B USB connector Een mini-usb B-stekker

Simulatie PLC voor opleiding visualisatie 29 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.

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 Apparaat adres Functie code Data Foutcontrole Omschrijving Adres van de ontvanger Code die het bericht type definieert Data blok met additionele informatie 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.

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

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 Modbus adres Omschrijving 1...10000 * adres - 1 Coils (uitgangen) 10001...20000 * adres - 10001 Ingangen 40001...50000 * adres - 40001 Holding registers * Maximale waarde is apparaat afhankelijk

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 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

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 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

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 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

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.

Simulatie PLC voor opleiding visualisatie 37 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.

Simulatie PLC voor opleiding visualisatie 38 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.

Simulatie PLC voor opleiding visualisatie 39 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 <p16f628a.inc> 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 movwf movlw movwf b'00000000' TRISA b'00101111' 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 ;select bank0 ENDM BANK1 MACRO BSF STATUS,RP0 ;select bank1 ENDM

Simulatie PLC voor opleiding visualisatie 40 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.

Simulatie PLC voor opleiding visualisatie 41 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 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.

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

Simulatie PLC voor opleiding visualisatie 43 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 delay5 startintr inlezen een nul call inlezen call delay6 btfss PORTB,5 goto nul goto een rlf temp,1 bsf temp,0 rlf temp,1 bcf temp,0

Simulatie PLC voor opleiding visualisatie 44 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.

Simulatie PLC voor opleiding visualisatie 45 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.

Simulatie PLC voor opleiding visualisatie 46 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.

Simulatie PLC voor opleiding visualisatie 47 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 movwf adres return

Simulatie PLC voor opleiding visualisatie 48 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 nop retfie

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.

Simulatie PLC voor opleiding visualisatie 50 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?

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 byte# Hex Start with 16 trues 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 F7 0000000011110111 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 xor the 2 lines above 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 shift xor 1 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 shift xor 2 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 shift xor 3 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 shift xor 4 1 0 1 0 1 1 1 1 1 1 1 1 0 0 0 1 shift xor 5 1 1 1 1 0 1 1 1 1 1 1 1 1 0 0 1 shift xor 6 1 1 0 1 1 0 1 1 1 1 1 1 1 1 0 1 shift xor 7 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 1 shift xor 8 1 1 0 0 0 1 1 0 1 1 1 1 1 1 1 0 1 FEC6 2 03 0000000000000011 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 xor the 2 lines above 1 1 0 0 0 1 1 0 1 1 1 1 1 1 0 1 shift xor 1 1 1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 shift xor 2 1 1 0 0 0 0 0 1 1 0 1 1 1 1 1 0 shift xor 3 0 1 1 0 0 0 0 0 1 1 0 1 1 1 1 1 shift xor 4 1 0 0 1 0 0 0 0 0 1 1 0 1 1 1 0 shift xor 5 0 1 0 0 1 0 0 0 0 0 1 1 0 1 1 1 shift xor 6 1 0 0 0 0 1 0 0 0 0 0 1 1 0 1 0 shift xor 7 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 1 shift xor 8 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 1 2 0781 3 02 0000000000000010 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 xor the 2 lines above 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 1 shift xor 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 shift xor 2 1 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 shift xor 3 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 0 shift xor 4 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 0 shift xor 5 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 0 shift xor 6 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 0 shift xor 7 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 shift xor 8 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 3 4103 4 64 0000000001100100 0 0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 xor the 2 lines above 0 0 0 0 0 0 1 1 0 0 1 0 0 1 0 1 shift xor 1 1 0 1 0 0 0 0 1 1 0 0 1 0 0 1 1 shift xor 2 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 0 shift xor 3 0 1 1 1 1 0 0 0 0 1 1 0 0 1 0 0 shift xor 4 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 0 shift xor 5 0 0 0 1 1 1 1 0 0 0 0 1 1 0 0 1 shift xor 6 1 0 1 0 1 1 1 1 0 0 0 0 1 1 0 1 shift xor 7 1 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 shift xor 8 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 0 4 C2DB CRC

Simulatie PLC voor opleiding visualisatie 52 5 00 0000000000000000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 xor the 2 lines above 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 0 shift xor 1 0 1 1 0 1 1 0 1 1 1 1 0 0 0 0 1 shift xor 2 1 0 0 1 0 1 1 0 1 1 1 1 0 0 0 1 shift xor 3 1 1 1 0 1 0 1 1 0 1 1 1 1 0 0 1 shift xor 4 1 1 0 1 0 1 0 1 1 0 1 1 1 1 0 1 shift xor 5 1 1 0 0 1 0 1 0 1 1 0 1 1 1 1 1 shift xor 6 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 0 shift xor 7 0 1 1 0 0 0 1 0 1 0 1 1 0 1 1 1 shift xor 8 1 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 5 5A91 6 08 0000000000001000 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 xor the 2 lines above 1 0 0 1 0 0 0 1 0 1 0 1 0 0 1 0 shift xor 1 0 1 0 0 1 0 0 0 1 0 1 0 1 0 0 1 shift xor 2 1 0 0 0 0 1 0 0 0 1 0 1 0 1 0 1 shift xor 3 1 1 1 0 0 0 1 0 0 0 1 0 1 0 1 1 shift xor 4 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 shift xor 5 0 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 shift xor 6 0 0 1 1 0 1 0 0 0 1 0 0 0 1 0 1 shift xor 7 1 0 1 1 1 0 1 0 0 0 1 0 0 0 1 1 shift xor 8 1 1 1 1 1 1 0 1 0 0 0 1 0 0 0 0 6 10FD

Simulatie PLC voor opleiding visualisatie 53 10.2 Programma list P=16F628A #include <p16f628a.inc> CONFIG _XT_OSC&_WDT_OFF&_CP_OFF ERRORLEVEL -302 ;turn off message ID 302 #define vulventiel PORTA,0 ;definiëren van snelnamen #define rechts PORTA,1 ; #define links PORTA,2 ; #define cilinder PORTA,3 ; #define stopknop PORTB,0 ; #define startknop PORTB,1 ; #define autostand PORTB,2 ; #define manustand PORTB,3 ; STAP equ 20h ;benaming van registers COUNT equ 21h ; TELLER equ 22h TELLER1 equ 23h TELLER2 equ 24h temp equ 25h bitteller equ 26h leesvolgorde equ 27h tempcrch equ 28h tempcrcl equ 29h crcconstanth equ 2ah crcconstantl equ 2bh temph equ 2ch templ equ 2dh inleeswaardeteller equ 2eh aantaldatablokken equ 2fh n equ 30h ;******************************************************** ;* 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 * ;********************************************************

Simulatie PLC voor opleiding visualisatie 54 BANK0 org 0x00 ;start van het programma movlw 07h ; Load 7 into W register movwf CMCON ; CMCON = contents of W register 7h movlw b'00001111' movwf PORTA ;zet de uitgangen uit door de poort hoog te zetten bsf INTCON,4 ;activeerd de interrupt on edge op RB0 bsf INTCON,7 ;Globel interrupt enable(we are using interr.) bsf INTCON,3 ;RB4-RB7 interrupt on change is enabled bcf INTCON,0 ;Clear RB4-RB7 interrupt flag so, that another interr. can occur. BANK1 movlw b'00000000' ; movwf TRISA ;poort a is geset als uitgang movlw b'00101111' ;poort b (eerste 4 ingangen) is geset als ingang movwf TRISB bcf OPTION_REG,6 ;interrupt op een neergaande flank op RB0 bcf OPTION_REG,7 ;moet op 0 staan als de ingangen naar massa gelegt worden BANK0 goto start org 0x04 ;bij interrupt springt het programma naar hier intr clrf aantaldatablokken ;legen van de teller voor de datablokken clrf temp ;zorg dat het tijdelijk register leeg is movlw 40h ;laad het eerste adres in om de databyte te stockeren movwf FSR call delay5 ;wacht tot in de helft van de startbit startintr movlw b'00001000' ; movwf bitteller ;laad de bitteller met 8 call inlezen movfw temp ;laad de ingelezen byte in het werkregister call schrijfwaarde ; call delay7 ;wacht tot de stopbits verstreken zijn btfsc aantaldatablokken,3 ;bepaald het aantal waarden die ingelezen moeten worden voor het ; berekenen van de crc fout goto crcfout goto startintr inlezen call delay6 ; wacht tot het ideale moment om te samplen btfss PORTB,5 ;kijken welk niveau er op de ingang staat goto nul ;ingang is 0 goto een ;ingang is 1 een rlf temp,1 ;doorschuiven van tijdelijk register bsf temp,0 ;zet de waarde in een tijdelijk geheugen decfsz bitteller ;verminder bitteller goto inlezen ;keer terug om de volgende waarde in te lezen return

Simulatie PLC voor opleiding visualisatie 55 nul rlf temp,1 ;doorschuiven van tijdelijk register bcf temp,0 ;zet de waarde in een tijdelijk geheugen decfsz bitteller ;verminder bitteller goto inlezen ;keer terug om de volgende waarde in te lezen 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 ;leest de modbusfunctie addwf PCL,f ;springt naar de juiste functie 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 ;laad de bitteller met 11111111 zodat een teller van 8 ontstaat movwf bitteller movlw b'00000000' ;eerste waarde die bewerkt moet worden is altijd adres, hierbij is de ; hoogste byte = 00000000 xorwf tempcrch,1 ;deze xor met de vorige waarde call leeswaarde ;eerste waarde die bewerkt moet worden is altijd adres xorwf tempcrcl,1 ;deze xor met de vorige waarde shift btfss bitteller,0 ;kijkt hoeveel keer er al is doorgeschoven goto volgende ;als er 8 keer is doorgeschoven wordt de volgende waarde ingelezen ; en xor functie toe gepast

Simulatie PLC voor opleiding visualisatie 56 rrf bitteller ;verminder bitteller, deze houdt bij hoeveel keer er is doorgeschoven bcf bitteller,7 btfsc tempcrcl,0 ;kijkt of de laatste bit een 1 is bsf temp,0 ;als de laatste bit een 1 is setten we bit 0 van temp (soort van vlag) btfss tempcrch,0 ;kijkt als de laatste bit van de hoogste byte een 1 is goto rotate1 ; goto rotate2 ; rotate1 rrf tempcrch,1 ;shift de hoogste byte bcf tempcrch,7 rrf tempcrcl,1 ;shift de laagste byte bcf tempcrcl,7 btfss temp,0 ;kijken als de vlag geset is door een 1 op de laagste bit te hebben goto shift ;zoniet keert het programma terug voor een volgende shift movfw crcconstanth ; in geval van een vlag wordt de xor functie uitgevoerd xorwf tempcrch,1 ;xor functie met de hoge bytes movfw crcconstantl ; xorwf tempcrcl,1 ;xor functie met de lage bytes bcf temp,0 ;reset de vlag goto shift rotate2 rrf tempcrch,1 bcf tempcrch,7 rrf tempcrcl,1 bsf tempcrcl,7 btfss temp,0 goto shift movfw crcconstanth xorwf tempcrch,1 movfw crcconstantl xorwf tempcrcl,1 bcf temp,0 goto shift ;schuift de laatste bit van de hoogste byte die '1' is door naar de ; hoogste bit van de lagere byte leeswaarde movfw INDF ;schrijf de waarde uit het register in het werkregister incf FSR ;verhoog de adrespointer decfsz n,1 ;wanneer al de databytes gebruikt zijn stopt de crcfout code return ; goto juist ; juist movlw 3eh ;steld het startadres van de databytes in addwf aantaldatablokken,0 ;telt het aantal databytes op bij dat startadres movwf FSR ;ga naar dat adres, daar zit de hoge byte van de ontvangen crc movfw INDF ;steek de inhoud van dat register in het werkregister xorwf tempcrcl,0 ;xor functie met het resultaat van de crc berekening movwf temp ; call crctest ;kijken of het dezelfde waarde is incf FSR ;verminder het adres, daar zit de lage byte van de ontvangen crc movfw INDF ;steek de inhoud van dat register in het werkregister xorwf tempcrch,0 ; xor functie met het resultaat van de crc berekening movwf temp ; call crctest ; kijken of het dezelfde waarde is goto stop ; als ze overeen komen wordt er verder gegaan in het programma

Simulatie PLC voor opleiding visualisatie 57 crctest incf temp decfsz temp goto stop return stop bcf INTCON,0 ;Clear RB4-RB7 interrupt flag so, that another interr. can occur. retfie ; keer terug naar het geautomatiseerd proces start movlw 04 ;laad het aantal movwf STAP ;stappen in stap bcf INTCON,1 ;reset interrupt goto begin begin btfsc startknop ;kijkt wanneer er op start wordt geduwd goto begin proces movf STAP,W goto routine routine addwf PCL,f goto rechtsrijden goto wachttijd goto lossen goto linksrijden goto vullen ;laad de stapwaarde in het werkregister ;kijkt wat de waarde is van stap en springt dan naar de gewenste stap vullen bcf vulventiel ;LED vullen aan movlw 12h ;bepaal de tijd voor het vullen (6sec) movwf COUNT call delay bsf vulventiel ;LED vullen uit decf STAP btfss autostand ;kijken of het proces automatisch of manueel moet verlopen goto proces ;ga naar proces bij automatisch btfss manustand ;als het manueel is goto begin ;ga naar begin en wacht op een startimpuls goto fout ;niet automatisch en niet manueel dus is er een error linksrijden bcf links ;LED linksrijden aan movlw 2Ch ;bepaal de tijd voor het rijden (11sec) movwf COUNT call delay bsf links ;LED linksrijden uit decf STAP btfss autostand ;kijken of het proces automatisch of manueel moet verlopen goto proces ;ga naar proces bij automatisch btfss manustand ;als het manueel is goto begin ;ga naar begin en wacht op een startimpuls goto fout ;niet automatisch en niet manueel dus is er een error lossen bcf cilinder ;LED lossen aan movlw 12h ;bepaal de tijd voor het lossen (6sec) movwf COUNT call delay

Simulatie PLC voor opleiding visualisatie 58 bsf cilinder decf STAP btfss autostand goto proces btfss manustand goto begin goto fout ;LED lossen 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 wachttijd movlw 12h ;bepaal de tijd voor het wachten movwf COUNT ; (instelbaar, hier in dit voorbeeld 6sec) call delay decf STAP btfss autostand ;kijken of het proces automatisch of manueel moet verlopen goto proces ;ga naar proces bij automatisch btfss manustand ;als het manueel is goto begin ;ga naar begin en wacht op een startimpuls goto fout ;niet automatisch en niet manueel dus is er een error rechtsrijden bcf rechts ;LED rechtsrijden aan movlw 2Ch ;bepaal de tijd voor het rijden (11sec) movwf COUNT call delay bsf rechts ;LED rechtsrijden uit btfsc INTCON,1 ;als er op stop geduwd is als de interruptflag geset door neergaande ; flank op RB0 goto start ;ga naar start btfss manustand ;als het manueel is goto start ;ga naar start btfsc autostand ;als er ook geen automatisch verloop is goto fout ;is er een error movlw 04 ;anders movwf STAP ;laad stap met 4 goto proces ;ga naar proces om het hele verloop opnieuw te starten delay movlw B'00000010' ;instellen derde deler movwf TELLER ; delay1 movlw B'11111010' ;instellen tweede deler movwf TELLER2 ; delay2 movlw B'11111010' ;instellen eerste deler movwf TELLER1 ; check decfsz TELLER1 ;wachten tot er een vlag is( de teller is aan de bekomen waarde goto check ; gekomen) decfsz TELLER2 ; goto delay2 ; decfsz TELLER ; goto delay1 ; decfsz COUNT ;als deze waarde nul bereikt stopt de wachttijd goto delay return fout end nop goto begin ;voorlopig heeft error nog geen doel

Simulatie PLC voor opleiding visualisatie 59 10.3 Datasheet PIC16F628A

Simulatie PLC voor opleiding visualisatie 60

Simulatie PLC voor opleiding visualisatie 61

Simulatie PLC voor opleiding visualisatie 62

Simulatie PLC voor opleiding visualisatie 63

Simulatie PLC voor opleiding visualisatie 64

Simulatie PLC voor opleiding visualisatie 65

Simulatie PLC voor opleiding visualisatie 66

Simulatie PLC voor opleiding visualisatie 67

Simulatie PLC voor opleiding visualisatie 68

Simulatie PLC voor opleiding visualisatie 69

Simulatie PLC voor opleiding visualisatie 70

Simulatie PLC voor opleiding visualisatie 71

Simulatie PLC voor opleiding visualisatie 72

Simulatie PLC voor opleiding visualisatie 73

Simulatie PLC voor opleiding visualisatie 74