Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Voorwoord Het afgelopen jaar is een zeer leerrijk geweest. Ik heb de kans gekregen om zeer veel kennis en praktijkervaring op te doen. De samenwerking met Latexco, die mij deze kans gegeven heeft, is vruchtbaar geweest. Daarbij zijn mijn promotoren een grote hulp geweest. Graag wil ik mijn externe stagepromotor Ronald Wyseur ontzettend bedanken voor de tijd en energie die hij in dit eindwerk heeft geïnvesteerd. Ondanks zijn drukke job stond hij steeds klaar om obstakels weg te werken en voor het ter beschikking stellen van al het nodige materiaal. Verder wil ik Dieter Vandenhoeke, mijn interne stagepromotor, bedanken voor de correcte en flexibele begeleiding tijdens het ganse jaar. Een speciaal woord van dank richt ik aan de mensen van de technische dienst van Latexco voor de aangename sfeer die ik mocht ervaren tijdens mijn stage en naar Olivier Van Eenoo ( IT ) voor zijn bijdrage aan het welslagen van dit eindwerk. Tenslotte betuig ik een woord van dank aan mijn ouders voor hun steun en het ter beschikking stellen van een wagen voor de verplaatsing.
Jorgo Dewilde Juni 2007
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
I
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Inhoudstafel Voorwoord I Inhoudstafel II Lijst van figuren IV Bijlagen V 1. Inleiding ....................................................................................................................................... IV 2. Voorstelling Latexco N.V. ............................................................................................................. 2 3. Situering van het eindwerk............................................................................................................. 4 4. Aanpak ........................................................................................................................................... 5 5. Communicatie met S5 PLC’s vanuit VB6 ..................................................................................... 6 5.1. Capteren van dataverkeer tussen een S5 PLC en Step5 .......................................................... 6 5.2. Verbinding met de PLC........................................................................................................... 7 5.3. Merkerwoord lezen ................................................................................................................. 7 5.3.1. Werking van “S5 MW lezen”........................................................................................... 8 5.3.2. Problematiek rond het getal 16......................................................................................... 9 5.4. Databouwstenen lezen............................................................................................................. 9 5.4.1. Databouwstenen lezen...................................................................................................... 9 5.4.2. VB programma............................................................................................................... 10 5.4.3. Data ontleden en bewaren .............................................................................................. 11 5.5. Databouwstenen schrijven..................................................................................................... 11 5.5.1. Problemen met Databouwstenen schrijven .................................................................... 12 5.6. Stopzetting S5-communicatie ............................................................................................... 12 5.7. Opmerkingen bij de programma’s voor S5-communicatie ................................................... 12 6. Communicatie met S7 PLC's vanuit VB6 .................................................................................... 13 6.1. Inleiding ................................................................................................................................ 13 6.2. DB’s lezen en schrijven via MPI ( m.b.v. Prodave Mini ) .................................................... 14 6.2.1. Prodave Mini .................................................................................................................. 14 6.2.2. Lay-out ........................................................................................................................... 14 6.2.3. Lezen van DB’s.............................................................................................................. 14 6.2.4. Schrijven naar DB’s ....................................................................................................... 15 6.3. DB’s lezen en schrijven via ethernet ( m.b.v. IPS7LNK.dll ) ............................................... 15 6.4. IPS7LNK.dll: driver voor S7 communicatie via het netwerk ............................................... 16 6.4.1. Een logische verbinding maken ..................................................................................... 16 6.4.2. Databouwstenen lezen of overschrijven......................................................................... 16 6.4.3. Lay-out ........................................................................................................................... 18 6.4.4. Lezen van gewone DB’s ................................................................................................ 18 6.4.5. Schrijven naar gewone DB’s.......................................................................................... 18 6.4.6. Lezen van grote DB’s..................................................................................................... 18 6.4.7. Schrijven naar grote DB’s .............................................................................................. 19 7. Algemene visualisatie .................................................................................................................. 20 7.1. Soorten data........................................................................................................................... 20 7.1.1. Bit................................................................................................................................... 20 7.1.2. Woord............................................................................................................................. 20 7.1.3. Statuswoord.................................................................................................................... 21 7.2. De visualisatie ....................................................................................................................... 21
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
II
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
7.2.1. Visualisatie van een bit .................................................................................................. 21 7.2.2. Visualisatie van een woord............................................................................................. 21 7.2.3. Visualisatie van een statuswoord ................................................................................... 22 7.2.4. Opmerking...................................................................................................................... 23 7.3. Zelf een visualisatie samenstellen ......................................................................................... 23 7.3.1. Stap 1: Benodigde elementen kopiëren .......................................................................... 24 7.3.2. Stap 2: Naam & index instellen...................................................................................... 25 7.3.3. Locatie van de PLC instellen.......................................................................................... 27 7.3.4. Locatie in de PLC toewijzen .......................................................................................... 28 7.3.5. Overige instellingen ....................................................................................................... 29 8. Logging en visualisatie waterverbruik ......................................................................................... 31 8.1. Situering ................................................................................................................................ 31 8.2. Versie 1: Logging naar Excel / Excel als GUI ...................................................................... 31 8.2.1. Onderdelen ..................................................................................................................... 31 8.2.2. Waterlogging_A.xls ....................................................................................................... 32 8.2.3. Waterlogging_B.xls........................................................................................................ 34 8.2.4. Programma voor de logging van de tellerstand.............................................................. 36 8.2.5. Besluit ............................................................................................................................ 38 8.3. Versie 2: Logging naar Excel / Eigen ontwikkelde GUI....................................................... 39 8.3.1. Onderdelen ..................................................................................................................... 39 8.3.2. Waterlogging_C.xls........................................................................................................ 39 8.3.3. Programma voor de logging van de tellerstand.............................................................. 39 8.3.4. Programma voor de visualisatie ..................................................................................... 40 8.3.5. Besluit ............................................................................................................................ 44 8.4. Versie 3: Logging naar database / Eigen ontwikkelde GUI .................................................. 45 8.4.1. Onderdelen ..................................................................................................................... 45 8.4.2. SQL Server..................................................................................................................... 45 8.4.3. Programma voor de logging van de tellerstand.............................................................. 46 8.4.4. Programma voor de Visualisatie .................................................................................... 47 8.4.5. Toevoegen van een waterteller....................................................................................... 50 9. Besluit .......................................................................................................................................... 51
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
III
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Lijst van figuren Figuur 2.1: Productieproces ............................................................................................................... 3 Figuur 5.1: Opstelling capteren dataverkeer tussen pc en PLC ......................................................... 6 Figuur 5.2: S5 merkerwoord lezen ( na opstart )................................................................................ 8 Figuur 5.3: S5 merkerwoord lezen ( na connectietest )...................................................................... 8 Figuur 5.4: S5 merkerwoord lezen ( na lezen ) .................................................................................. 9 Figuur 5.5: S5 DB’s lezen na opstart ............................................................................................... 10 Figuur 5.6: DB bereik aanpassen ..................................................................................................... 10 Figuur 6.1: DB’s lezen en schrijven via MPI................................................................................... 14 Figuur 6.2: DB’s lezen en schrijven via ethernet ............................................................................. 18 Figuur 7.1: Visualisatie van een bit.................................................................................................. 21 Figuur 7.2: Visualisatie van een woord............................................................................................ 21 Figuur 7.3: Visualisatie van tankniveau........................................................................................... 22 Figuur 7.4: Visualisatie van een statuswoord................................................................................... 22 Figuur 7.5: Voorbeeld algemene visualisatie................................................................................... 23 Figuur 7.6: Beginscherm algemene visualisatie............................................................................... 24 Figuur 7.7: Benodigde elementen kopiëren ..................................................................................... 25 Figuur 7.8: Naam van een element wijzigen.................................................................................... 25 Figuur 7.9: Index van een element wijzigen .................................................................................... 26 Figuur 7.10: Afbeelding op de form toevoegen ............................................................................... 27 Figuur 8.1: Het rekenblad “Cijfergegevens”.................................................................................... 32 Figuur 8.2: Voorbeeld van een grafiek............................................................................................. 33 Figuur 8.3: Selectie van waterverbruiker en tijdsbereik................................................................... 33 Figuur 8.4: “Selector” voor selectie van waterverbruiker en tijdsbereik ......................................... 35 Figuur 8.5: Resultaat na opvragen van cijfergegevens van “Waswals KL2”................................... 36 Figuur 8.6: “Waterlogging.exe” ....................................................................................................... 37 Figuur 8.7: Gemiste logging op 07/12/06 21:00 .............................................................................. 40 Figuur 8.8: “Waterverbruik.exe” na opstart ..................................................................................... 41 Figuur 8.9: Schematische weergave van de werking van “Waterverbruik.exe” .............................. 43 Figuur 8.10: Weergave van het huidig gemiddeld verbruik............................................................. 44 Figuur 8.11: Relatie van de database ............................................................................................... 46 Figuur 8.12: Dataflow van “Waterlogging.exe” en “Waterverbruik.exe” ....................................... 47 Figuur 8.13: “Waterverbruik.exe” na opstart ................................................................................... 48
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
IV
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Bijlagen A. LANCon module A.1. Bij rechtstreekse communicatie A.1.1. IP-adres opvragen A.1.2. Tabblad “Content” A.1.3. Tabblad “Network” A.1.4. Tabblad “RFC1006” A.1.5. Tabblad “MPI/PROFIBUS” A.1.6. Tabblad “S7_to_S5/S7_Bridge” A.1.7. Tabblad “Tuning”, “Display”, “VarModif” & “Password” A.2. Communicatie tussen twee LANCon modules A.2.1. PLC programma voor communicatie A.2.2. Instellingen voor de master
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
V
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
1. Inleiding Het eindwerk bestaat erin de verschillende mogelijkheden voor communicatie tussen Siemens PLC’s en pc’s te bestuderen en daarna een visualisatie van de procesdata te ontwikkelen m.b.v. VB6. Om een beter inzicht te krijgen in het eindwerk en deze thesis volgt een korte voorstelling van het bedrijf en een situering van het eindwerk.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
1
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
2. Voorstelling Latexco N.V. Latexco is een industrieel productie- en toeleveringsbedrijf, gespecialiseerd in de vervaardiging van hoogwaardige componenten in latexschuim, bestemd voor de bedding industrie. Het productaanbod van de onderneming bestaat uit matraskernen, kussenvullingen en comfortplaten om op (zakjes)verenmatrassen aan te brengen. De onderneming, gevestigd in het West-Vlaamse Tielt, is Europees marktleider en stelt bijna 500 mensen tewerk die in 2005 samen een omzet van 92,26 miljoen Euro realiseerden. Latexco N.V. werd in 1955 door Sylvain Maes opgericht en is tot vandaag nog steeds een familiebedrijf. In 1986 legt een hevige brand de volledige fabriek in as. Zeven maanden later wordt er een nagelnieuwe ingehuldigd. Sindsdien zijn er tal van nieuwe afdelingen opgericht: in 1995, Latexco Handling, het logistieke centrum van Latexco. In 1998 wordt Latexco Recycling B.V.B.A. opgericht, een zusterbedrijf dat zich toelegt op het recycleren van productieafval. In 2001 ziet PT Latexco Indonesia het licht, een kleine productie-eenheid die hoofdzakelijk voor de lokale markt produceert. In datzelfde jaar wordt ook Latexco Asia Pacific PTE Ltd. gesticht, een verkoopskantoor in Singapore dat verantwoordelijk is voor alle commerciële activiteiten in het Verre Oosten. In 2002 wordt er een waterzuiveringsinstallatie geïnstalleerd die 90% van het proceswater recupereert. Dit laatste zorgt samen met de recyclageafdeling voor verschillende nominaties en prijzen in duurzame ontwikkeling. In 2005 wordt een nieuwe afdeling in Zaragoza, Spanje geopend. Op de volgende pagina wordt het productieproces van Latexco afgebeeld. Om een latex matras of kussen te maken, wordt er eerst een matrijs gevuld. Daarna wordt die gevulkaniseerd. Na het vulkanisatieproces wordt het product ontvormt, gewassen en gedroogd.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
2
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 2.1: Productieproces
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
3
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
3. Situering van het eindwerk Er was binnen het bedrijf vraag naar visualisatie van uiteenlopende gegevens. Een deel van de bestaande visualisatie software om de PLC-data weer te geven was verouderd, waaronder dat voor de visualisatie van het waterverbruik. Andere programma’s waren dan weer niet compatibel met Windows 2000 of Windows XP. Daarnaast waren ook sommige van de datatransmissie programma’s verouderd. Zo was er bijvoorbeeld een programma dat enkel onder Windows 95 kon draaien. Latexco wou zich van deze problemen ontdoen zonder al te grote kosten te maken. Aangezien het om verschillende kleine projecten ging, werd er bij voorkeur geen gebruik gemaakt van OPC technologie. Indien OPC wel zou toegepast worden, zou iedere pc die gebruik wenst te maken van een van de toepassingen geconfigureerd moeten worden. Er werd daarom uitgekeken naar alternatieve, goedkopere manieren om te communiceren met Siemens PLC’s. Er werden uiteindelijk twee verschillende mogelijkheden geselecteerd om communicatie tussen een pc en een Siemens PLC op te zetten. Het betreft twee drivers die het mogelijk maken om via VB6 gegevens uit de PLC te lezen of er naar toe te schrijven. De eerste driver communiceert met de PLC via de MPI kabel, de tweede driver via het netwerk. Latexco heeft ook nog een aantal S5 PLC’s van Siemens in gebruik. De vraag bestond binnen Latexco om ook deze gegevens te kunnen lezen en manipuleren. Visualisatie van gegevens uit S5 PLC’s was eveneens gewenst.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
4
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
4. Aanpak Het doel van deze thesis is zoeken naar mogelijkheden om te communiceren met een Siemens PLC. Een theoretische studie van de werking van de onderlinge communicatie is niet nodig. Het hoofddoel van dit eindwerk is tot concrete toepassingen komen, die onmiddellijk inzetbaar zijn binnen Latexco.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
5
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
5. Communicatie met S5 PLC’s vanuit VB6 Latexco heeft een aantal S5 PLC’s van Siemens in gebruik. De wens bestond om gegevens te lezen, te manipuleren en te visualiseren. Op deze manier hoeven er geen dure touchpanels aangekocht worden. Om te communiceren met een S5 PLC moest er eerst een driver vanuit een VB6 applicatie worden ontwikkeld. Om dit te realiseren, werd het dataverkeer tussen een S5 PLC en het programmeer programma Step5 gecapteerd. Wanneer een VB6 applicatie de berichten die Step5 verstuurd nabootst, moet dezelfde respons van de PLC verkregen worden. Op deze manier kan de data in de PLC worden opgevraagd en aangepast.
5.1. Capteren van dataverkeer tussen een S5 PLC en Step5 Om het dataverkeer tussen een PLC en Step 5 te capteren, waren volgende zaken nodig: een S5 PLC, een pc met het programma Step5, een extra pc (met 2 COM poorten) voorzien van een programma dat alle inkomende data van de COM poorten weergeeft, een speciale kabel en een programma dat het dataverkeer op de COM poorten weergeeft. Volgende figuur verduidelijkt de opstelling:
Figuur 5.1: Opstelling capteren dataverkeer tussen pc en PLC
Om van op een pc te communiceren met een S5 PLC is een COM-poort nodig. Aangezien een S5 communiceert volgens het current loop ( TTY ) principe, is een RS232 - TTY omzetter nodig. Op de RS232 stekker werden drie draden afgetakt: het zendsignaal, ontvangstsignaal en de massa. Het afgetakte zendsignaal en massa worden op de Rx en GND klem van de eerste COM poort van de tweede pc aangesloten. Het afgetakte ontvangstsignaal en massa worden op de Rx en GND klem van de tweede COM poort van de tweede pc aangesloten. Met een programma dat ComSpy heet, kan de data die de pc op zijn COM poorten ontvangt, afgelezen worden op het scherm. De kabel en het programma ComSpy waren bij Latexco reeds ter beschikking. Van ComSpy was de broncode beschikbaar. Dit programma werd aangepast zodat alle data hexadecimaal getoond werd. Er werd ook een extra tekstvak toegevoegd waarin alle data die
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
6
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
ontvangen werd in volgorde wordt weergegeven. Dit wil zeggen dat de data die eerst wordt ontvangen eerst wordt weergegeven. Zo kan de volgorde van de boodschappen tussen pc en PLC nagegaan worden.
5.2. Verbinding met de PLC Zoals eerder vermeld was het de bedoeling om een VB-applicatie te creëren die de boodschappen van Step5 naar de PLC nabootst. Op deze manier kan dan dezelfde informatie van de PLC verkregen worden. Een eerste stap hierin is de verbinding tussen pc en PLC testen. Het dataverkeer om dit te bewerkstelligen ziet er als volgt uit: Zender bericht pc PLC pc PLC pc PLC pc PLC pc PLC
pc PLC pc PLC pc
Bericht (hexadecimaal) 2 10 6 18 2 10 6 16 10 3 10 6 10 4 10 6 2 10 6 0 0 0 0 0 EF 0 EF 80 EE 0 EC 0 ED 0 EA 0 8B 5 CF FF 0 0 2 0 2 0 2 0 2 0 2 0 0 0 0 0 0 0 CF 1 0 A 0 0 10 3 10 6 2 10 6 12 10 3 10 6
De grootste boodschap die de PLC verstuurt, bevat een aantal gegevens omtrent de status van de PLC.
5.3. Merkerwoord lezen Er werd eerst getracht om een merkerwoord uit de PLC te lezen. Daarvoor dient de pc aan de PLC mee te delen welk merkerwoord hij wenst te lezen. Dit brengt twee problemen met zich mee. Ten eerste moet er gezocht worden naar de boodschap waarin de pc aan de PLC meedeelt wel merkerwoord hij wenst te lezen. Ten tweede moet uit de antwoordboodschap de waarden gefilterd worden. Om dit te ontdekken werden twee soorten tests uitgevoerd. • •
verschillende merkerwoorden met dezelfde inhoud uitlezen Hetzelfde merkerwoord uitlezen met telkens een andere inhoud.
De boodschappen die hiervoor verstuurd en ontvangen worden kunnen opgedeeld worden in vier stukken. Het eerste en laatste stuk is identiek aan dat om de verbinding te testen. In het tweede stuk
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
7
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
deelt de pc aan de PLC mee welke data hij wil verkrijgen. Het derde stuk bevat onder andere de gewenste data. Er werd in Visual Basic 6 een programma ontworpen die het mogelijk maakt om een zelf te bepalen merkerwoord te lezen. Dit programma is een louter experimentele toepassing. Het is niet de bedoeling om dit verder in de praktijk in te zetten.
Figuur 5.2: S5 merkerwoord lezen ( na opstart )
5.3.1. Werking van “S5 MW lezen” Eerst moet de verbinding met de PLC worden getest via “Test connection”. Het programma verstuurt vervolgens de datapakketten zoals in punt 5.2 en controleert als de PLC correct antwoord. Wanneer de verbinding correct is, zal het lampje naast de knop groen worden en de tweede knop actief:
Figuur 5.3: S5 merkerwoord lezen ( na connectietest )
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
8
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Wanneer het nummer van het merkerwoord dat ingegeven is en er op de knop met “=” geklikt wordt, zal het programma de waarde van dat merkerwoord opvragen en weergeven in het vak rechts van de knop.
Figuur 5.4: S5 merkerwoord lezen ( na lezen )
De onderste drie lampjes worden groen als de verschillende onderdelen van de communicatie correct zijn verlopen. Er is ook een mogelijkheid om het merkerwoord cyclisch uit te lezen. Daarvoor dient er op “Cyclisch aan/uit” geklikt te worden. Om dit uit te schakelen volstaat het om nog eens te klikken.
5.3.2. Problematiek rond het getal 16 Tijdens het capteren van dataverkeer om een merkerwoord uit te lezen werd iets vreemds vastgesteld bij merkerwoord 16; of wanneer de inhoud van een ( willekeurig ) merkerwoord 16 was. De plaats waar het getal 16 ( of in hexadecimale code 10 ) werd verwacht, stond er 10 10. De reden is de hexadecimale code 10 6 gebruikt wordt als acknowledge. Door de hexadecimale waarde 10 twee maal na elkaar te versturen wanneer het geen acknowledge betreft, zal de code 10 6 steeds uniek zijn. Wanneer de hexadecimale waarden 10 en 6 na elkaar zouden worden verstuurd, wordt er 10 10 6 verstuurd, wat niet als een acknowledge wordt aanzien. Deze uitzondering wordt opgevangen in de code van het programma.
5.4. Databouwstenen lezen Na het succesvol lezen van een merkerwoord werd overgestapt op het lezen van een databouwsteen of DB. De uitlezing ervan gebeurt woord per woord. Het moest mogelijk zijn om een bereik van DB’s in te geven om één voor één uit te lezen.
5.4.1. Databouwstenen lezen Door gebruik te maken van dezelfde opstelling uit punt 5.1, werden de boodschappen om een DB te lezen gecapteerd.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
9
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Een bericht is opnieuw op te delen in vier verschillende stukken. Het eerste stuk om de connectie te testen. In het tweede stuk deelt de pc de PLC mee welke data hij wenst te ontvangen. Het derde stuk is de data die de PLC doorstuurt naar de pc. Op het einde volgt er een bevestiging van ontvangst.
5.4.2. VB programma Er werd een programma ontworpen dat een ingegeven bereik van DB’s leest uit de S5 PLC. De inhoud ervan wordt bewaard in een Excel-bestand.
Figuur 5.5: S5 DB’s lezen na opstart
Het biedt de gebruiker de mogelijkheid om een bereik van DB’s in te geven. Zo de inhoud van alle DB’s in één klik worden uitgelezen en bewaard op de pc. Het bereik kan worden veranderd door op “Verander DB bereik” te klikken. Hierdoor wordt er een nieuw venster zichtbaar.
Figuur 5.6: DB bereik aanpassen
Wanneer er op “OK” wordt geklikt, controleert het programma als er geen ongeldige waarden voor DB nummers ingegeven zijn. Voorbeelden hiervan zijn negatieve getallen, getallen groter dan 256 of ingaven die geen getallen zijn. Het tweede getal dient ook groter te zijn dan het eerste. Wanneer er aan deze voorwaarden voldaan is, zal dit venster verdwijnen. Verder zijn er op het hoofdvenster twee lampjes en een label aanwezig. Het bovenste lampje geeft aan als de verbinding met de PLC in orde is. Dit wordt gecontroleerd door de boodschappen van de PLC te vergelijken met deze die normaal moeten verstuurd worden bij een correcte verbinding.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
10
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Wanneer alles correct verloopt, kleurt deze groen ( rood in het andere geval ). Het onderste lampje wordt groen wanneer alle DB’s zijn uitgelezen. In de label ernaast wordt het DB nummer weergeven die het programma aan het verwerken is. Onderaan is er een label die de status van het programma weergeeft. Er zijn vier mogelijke statussen: • Wachtend op commando • Bezig met lezen PLC • Klaar met lezen PLC • Fout met de verbinding
5.4.3. Data ontleden en bewaren De DB’s worden één voor één uit de PLC gehaald en in een string geplaatst. Ieder woord wordt byte-gewijs uitgelezen. Alle data wordt hexadecimaal binnengenomen. Hierdoor bestaat ieder woord uit twee groepen van één of twee hexadecimale karakters. Het programma zal deze twee groepen samenvoegen tot een hexadecimale waarde van exact vier karakters. VB zelf vermeld niet onmiddellijk een methode voor het omzetten van hexadecimaal naar decimaal. Op het Internet werd echter het volgende gevonden:
= Val("&H" & ) Door de Val van een hexadecimale waarde in string-vorm op te vragen, met de tekens “&H” ervoor, retourneert VB de decimale waarde. De inhoud van een DB kan nu achterhaald worden. Deze gegevens moeten nog bewaard worden in een Excel-document. Het heeft de naam “DB.xls” en is te vinden in de zelfde map als het programma. Iedere keer dat de PLC wordt gelezen, zal het programma het Excel-rekenblad leeg maken alvorens de nieuwe data erin te schrijven. Alle DB’s komen op één Excel-rekenblad, waarbij iedere kolom een DB is. In de bovenste cel van iedere kolom komt de tekst “DB “ gevolgd door het nummer van de DB die in de kolom staat. Bij het afsluiten van het programma wordt “DB.xls” opgeslagen.
5.5. Databouwstenen schrijven Na het bekijken van het dataverkeer om een DB in de PLC te overschrijven moest het met een eenvoudige uitbreiding van het hierboven besproken programma mogelijk zijn om via een VBapplicatie een DB in de PLC te overschrijven met gegevens uit een Excel-document. Voor het opsturen van een DB naar een PLC konden de boodschappen ook opgedeeld worden in vier stukken. Vier delen die sterk overeenkwamen met deze om een DB uit de PLC te halen. De communicatie begon hier ook zoals gezien in punt 5.2. In het tweede stuk werd onder andere meegedeeld welke DB er moet overschreven worden. Het derde stuk bevat de datawoorden die in de PLC moeten komen en op het einde volgt er een bevestiging van ontvangst van de data. Er werd een venster aan het project toegevoegd dat gelijkaardig is aan dat voor het lezen van een DB. Via een menubalk kan geswitched worden tussen de twee vensters. In die menubalk staat slechts één item, namelijk “Venster”. Hieronder bevinden zich twee mogelijkheden: “PLC Lezen” en “PLC Overschrijven”.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
11
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Ook hier was er de mogelijkheid om meerdere DB’s in de PLC te overschrijven door een bereik van DB nummers in te geven. De gegevens die bestemd zijn voor de PLC worden net zoals de gelezen gegevens in een Excel-bestand bewaard. De naam van het bestand dat de gelezen data bewaart, werd veranderd in “DBs_van_PLC.xls”. Het bestand dat de data bestemd voor de PLC bevat, heet “DBs_voor_PLC.xls”.
5.5.1. Problemen met Databouwstenen schrijven Het overschrijven van een PLC verliep niet zo vlot als verwacht. In het tweede stuk van de communicatie liep het fout. De laatste boodschap die het programma verstuurd voordat de gegevens voor de DB mogen doorgegeven worden blijft onbeantwoord. Het vreemde hierbij is dat er ook geen error-boodschap ontvangen wordt. Want wanneer de PLC een verkeerde boodschap ontvangt stuurt deze onmiddellijk een error-boodschap terug. In dit geval volgde er echter er niets. Er mag dus geconcludeerd worden dat er correcte boodschappen worden verstuurd. Omdat die laatste boodschap niet werd ontvangen, kon de data voor de PLC ook niet worden verstuurd. Het dataverkeer om een DB op te sturen werd nog vele malen gecapteerd maar bevatte steeds dezelfde boodschappen. Er werd geprobeerd om de data toch door te sturen, maar iedere verzonden byte werd beantwoord met een error-boodschap. De reden voor het vastlopen van de communicatie werd niet achterhaald.
5.6. Stopzetting S5-communicatie Door de aanhoudende problemen bij het overschrijven van een DB, werd er in samenspraak met de externe stagepromotor beslist het onderzoek hiernaar stop te zetten. Een eerste reden is dat de kennis van het S5 protocol zeer beperkt is. Ten tweede kwam een interessante mogelijkheid beschikbaar voor communicatie met een S7-PLC ( ook een doelstelling van dit eindwerk ). Een mogelijkheid die bij het slagen ervan zeer interessante toepassingen als gevolg kan hebben.
5.7. Opmerkingen bij de programma’s voor S5-communicatie Door het gebrek aan informatie over het S5 communicatieprotocol, moest deze achterhaald worden door middel van de opstelling beschreven in punt 5.1. Deze communicatie werd steeds toegepast op dezelfde S5 PLC. Het is dan ook de vraag als deze identiek blijft op een andere S5 PLC. Er worden ook gegevens ontvangen over de status van de PLC, maar deze kunnen niet ontcijferd worden door een gebrek aan informatie hierover. Dit is zeer nuttig naar foutmelding toe. Als er iets fout loopt tijdens het opstarten van de communicatie kan zo achterhaald worden wat de oorzaak is. Door het stopzetten van het S5 deel konden de hierboven beschreven programma’s nog niet helemaal foutvrij gemaakt worden. Wegens tijdsgebrek en de lagere prioriteit werd dit niet verder afgewerkt.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
12
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
6. Communicatie met S7 PLC’s vanuit VB6 6.1. Inleiding Er was in Latexco grote belangstelling voor het uitlezen en overschrijven van databouwstenen in een S7-PLC. Er werd dan ook gezocht naar mogelijkheden om dit te verwezenlijken. Aangezien er geen gebruik kon gemaakt worden van OPC technologie werd er uitgekeken naar andere mogelijkheden. De eerste mogelijkheid is via de IPS7LNK.dll driver. Deze driver is in staat om data uit een databouwsteen te lezen of schrijven. De enige voorwaarde is dat de PLC moet aangesloten zijn op het netwerk. Enkele, maar niet alle PLC’s in Latexco beschikken over een netwerkkaart. Omdat het niet haalbaar is om iedere PLC te voorzien van een netwerkkaart werd er gezocht naar een alternatief. Dit werd gevonden bij de firma Wöhrle die een Belgische afdeling heeft in Mechelen. Wöhrle biedt een koppelstuk aan die op de MPI-poort kan geplugd worden. De module kan via een netwerkkabel aangesloten worden op het netwerk. Meer informatie over het koppelstuk is te vinden in de bijlage. Door dit koppelstuk kan de driver IPS7LNK.dll toch data uit de PLC halen via het netwerk. De prijs van het koppelstuk ligt een stuk lager dan van een netwerkkaart, maar blijft economisch niet verantwoord om voor iedere PLC een koppelstuk aan te schaffen. Daarom werd er gezocht naar oplossingen om vanuit een applicatie DB’s te lezen en te schrijven via MPI. Hiervoor biedt Siemens een driver aan: Prodave ( twee versies ). De eerste is Prodave en is in staat om alle data (ingangen, uitgangen, merker, timers, counters en DB’s) te manipuleren. De tweede versie is Prodave Mini en kan enkel bytes uit een DB lezen of schrijven. Er werd gekozen om Prodave Mini aan te schaffen omdat er enkel DB’s gelezen of overschreven moesten worden. De beperking die enkel toelaat om bytes te lezen of schrijven kan immers omzeild worden. Om te bepalen welke DB’s er moesten gelezen of overschreven worden, werd er een principe toegepast dat Latexco eerder toepaste. Er worden twee tekstbestanden aangemaakt. Het eerste bevat alle nummers van de databouwstenen die gelezen moeten worden, het tweede deze die overschreven moeten worden. De nummers staan onder elkaar en er mogen geen lege lijnen voorkomen. Het is niet de bedoeling om de gelezen data visueel voor te stellen. De gelezen data wordt weggeschreven in een tekstbestand. Ook de data die voor de DB’s in de PLC is bestemd, wordt bijgehouden in een apart tekstbestand. Er zijn dus in totaal vier verschillende tekstbestanden nodig om een programma correct te laten werken. Twee ervan bevatten nummers van DB’s. De andere twee bevatten de data uit de PLC of data die bestemd is voor de PLC. Het DB nummer dat bovenaan staat in het tekstbestand met de nummers zal eerst gelezen worden. De data uit die DB zal bijgevolg bovenaan komen in het tekstbestand dat daarvoor bedoeld is. Omgekeerd moet er rekening worden gehouden dat de data bovenaan in het tekstbestand ( met de data voor de PLC ) terecht komt in het DB nummer dat bovenaan staat in het tekstbestand met de DB nummers die overschreven moeten worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
13
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
6.2. DB’s lezen en schrijven via MPI ( m.b.v. Prodave Mini ) 6.2.1. Prodave Mini Prodave Mini is een product van Siemens. Het is een driver die het mogelijk maakt om vanuit een applicatie te communiceren met een PLC via MPI. De mogelijkheden van Prodave Mini zijn sterk beperkt ten opzicht van de volledige versie. Er kunnen enkel bytes uit een DB worden gelezen of overschreven. Dit vormt een probleem, daar praktisch alle DB’s woorden bevatten. Er werd dan ook gezocht naar een manier om de gelezen bytes uit een DB terug samen te stellen tot woorden. Omgekeerd moeten de woorden die voor de DB bestemd zijn, opgesplitst worden in twee bytes. Punt 6.2.3. en punt 6.2.4. beschrijven hoe dit gerealiseerd wordt.
6.2.2. Lay-out
Figuur 6.1: DB’s lezen en schrijven via MPI
De applicatie bezit enkel twee knoppen die de gebruiker de keuze bieden tussen lezen of schrijven. Dit komt omdat de nummers van de DB’s die moeten gelezen of overschreven worden reeds vast gelegd zijn in twee tekstbestanden. Het aantal woorden dat gelezen of overschreven wordt, ligt op vraag van Latexco vast in de code. Onder de twee knoppen zijn er een label en een progressbar voorzien. Wanneer het programma bezig is met een DB zal de label het nummer van die DB weergeven. Wanneer het lezen of schrijven voltooid is, of wanneer de communicatie onderbroken wordt, zal de label dit aangeven. De progressbar geeft weer hoever het programma staat met lezen of schrijven van DB’s. Wanneer het programma aan het communiceren is, zijn de twee knoppen niet bedienbaar.
6.2.3. Lezen van DB’s Wanneer de opdracht wordt gegeven om te lezen, worden de knoppen inactief en zal er een connectie met de PLC gemaakt worden. Wanneer deze connectie niet slaagt, zal het programma dit melden. Indien wel succesvol, worden eerst de nummers van de DB’s die moeten gelezen worden uit het tekstbestand gehaald. Hierna wordt DB per DB gelezen uit de PLC en weggeschreven naar het tekstbestand. Daarbij wordt de DB eerst gelezen. Indien deze niet aanwezig zou zijn in de PLC of niet groot genoeg is, wordt er een melding gegeven en stopt het programma met lezen. Door de beperking van Prodave Mini zullen er enkel bytes gelezen worden. Wanneer dat succesvol is opgehaald moeten de originele woorden terug worden samengesteld. Dit gebeurt door twee opeenvolgende bytes om te zetten in een hexadecimale code van twee karakters. Deze twee hexadecimale getallen worden vervolgens samengevoegd tot één hexadecimaal getal van vier
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
14
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
karakters. Dit getal wordt dan op zijn beurt omgezet naar een decimaal getal, wat de waarde voorstelt van het woord dat in de PLC staat. Punt 5.4.3. geeft meer uitleg over de omzetting van hexadecimaal naar decimaal. Ieder woord wordt tijdelijk bewaard in een array tot het programma alle woorden uit één DB achterhaald heeft. Wanneer dit het geval is, zullen alle woorden in het tekstbestand worden weggeschreven. Alle woorden uit één DB komen op één lijn te staan, gescheiden door een tab. Hierna worden de label en de progressbarr aangepast, zodat de gebruiker ziet met welke DB het programma bezig is en ofdat het programma nog steeds actief is. Dit wordt herhaald totdat alle DB’s, waarvan het nummer in het tekstbestand staat, gelezen zijn. Hierna wordt het tekstbestand met de data uit de PLC bewaard. De progressbarr wordt gereset en de knoppen worden terug bedienbaar. Wanneer er een tweede keer opdracht gegeven wordt om te lezen, zal de data die in het tekstbestand aanwezig is eerst gewist worden voordat de nieuwe data erin komt.
6.2.4. Schrijven naar DB’s De acties die ondernomen worden nadat het commando om te schrijven gegeven werd, zijn gelijkaardig aan deze om te lezen. Eerst worden de knoppen inactief en wordt er getracht een verbinding te maken met de PLC. Daarna worden de nummers van de DB’s die overschreven moeten worden opgehaald. Na het overschrijven zal de progressbar ook gereset worden en de knoppen terug bedienbaar. Enkel het middelste deel waarin de DB’s worden geschreven krijgt een andere invulling. Het overschrijven gebeurt DB per DB. Om één DB te overschrijven wordt eerst één regel uit het tekstbestand met data gelezen. Eén regel komt overeen met alle data voor één DB. De woorden zijn gescheiden door een tabteken. Uit de gelezen regel worden de woorden gehaald en bijgehouden in een array. Dit gebeurt door telkens tussen twee opeenvolgende tabtekens te lezen. Doordat Prodave Mini enkel met bytes kan werken, moeten deze woorden worden opgesplitst in twee bytes. Dit gebeurt door woord per woord om te zetten in een hexadecimaal getal van vier karakters en dit te splitsen in twee hexadecimale getallen van telkens twee karakters. Deze karakters worden met de functie, besproken in punt 5.4.3., omgezet van hexadecimaal naar decimaal. Het zijn deze bytes die naar de PLC worden geschreven.
6.3. DB’s lezen en schrijven via ethernet ( m.b.v. IPS7LNK.dll ) De driver IPS7LNK.dll die wordt besproken in punt 6.2 is ook in staat om DB’s te lezen of overschrijven via ethernet. Er werd gevraagd om een analoog programma te maken als bij Prodave Mini. De voorwaarde is wel dat de PLC gekoppeld is op het bedrijfsnetwerk. Slechts enkele PLC’s in Latexco beschikken over een netwerkkaart. Zoals eerder vermeld werd dit probleem opgelost door middel van de connector van Wöhrle ( bijlage A ). Aangezien deze driver, in tegenstelling tot Prodave Mini, niet beperkt is in mogelijkheden om te lezen of schrijven, zijn er meerdere versies van gemaakt. De eerste versie leest en schrijft woorden, de tweede versie dubbelwoorden. Er werd gevraagd om een derde versie te maken die grote ( lange ) DB’s kan lezen en de inhoud kan wegschijven in kolommen in het tekstbestand. De reden hiervoor is dat één regel in een tekstbestand maximaal 1 kB kan bevatten. Het is niet ondenkbaar dat een grote DB deze waarde overschrijdt. Wanneer een dergelijke DB zou worden weggeschreven naar een regel in het tekstbestand, zou deze twee of meer regels beslaan. Een tweede reden is dat deze tekstbestanden soms worden binnengenomen in Excel om de gegevens te kunnen analyseren. Als het tekstbestand meer dan 256 kolommen bevat, kunnen de gegevens niet
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
15
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
worden binnengenomen aangezien Excel-rekenbladen maximaal 256 kolommen kunnen bevatten. Omgekeerd moet het mogelijk zijn om deze grote DB’s te overschrijven met data uit een tekstbestand. Hier bevat één kolom in het tekstbestand opnieuw de inhoud van één DB.
6.4. IPS7LNK.dll: driver voor S7 communicatie via het netwerk IPS7LNK.dll is een driver die Latexco reeds voor handen had. Deze maakt het mogelijk om met een S7-PLC te communiceren die gekoppeld is op het bedrijfsnetwerk. De driver staat bij voorkeur in de map system32. Bij de driver hoort ook een module kan worden gebruikt vanuit een VB project. Op deze manier kunnen functies opgeroepen worden die gebruik maken van de driver.
6.4.1. Een logische verbinding maken Voordat er gegevens kunnen worden uitgewisseld, moet er eerst een logische verbinding worden gelegd. Dit gebeurt door één van de functies uit de module. Om een verbinding te openen heeft de functie zes gegevens nodig. De eerste drie over de locatie van de PLC, namelijk het IP-adres, het racknummer en slotnummer waarop de PLC geplaatst is. De laatste drie gegevens zijn drie getallen die de tijd in milliseconden aangeven voor een receive time-out, een transmit time-out en een connection time-out. [ = IPS7Open(, , <SlotNr>, , , ) Wanneer de functie IPS7Open wordt aangesproken zal deze een logische verbinding proberen te maken met de aangeduide PLC. De functie geeft daarna het nummer van de verbinding. Dit nummer moet groter of gelijk zijn aan 0. Indien dit niet het geval is, betekent dit dat er een probleem is opgetreden bij het maken van de verbinding. Om de fout te achterhalen, is er een “GetError” functie voorzien. Hieronder is een voorbeeld opgegeven van hoe een verbind kan geopend worden. Voorbeeld: Ref = IPS7Open("10.1.0.140", 0, 3, 500, 500, 500) In dit voorbeeld zal er geprobeerd worden een connectie te maken met een PLC met IP-adres 10.1.0.140 die op een rack zit met nummer 0, op het 3e slot van die rack. De connectie zal succesvol zijn als ze binnen de 500 milliseconden gemaakt is. Opmerking: Wanneer er voor de drie time-out waarden 0 wordt meegegeven, betekent dit dat de standaard instellingen worden gebruikt. Deze zijn 500ms, 500ms, 5000ms.]
6.4.2. Databouwstenen lezen of overschrijven Wanneer er geen fouten zijn opgetreden bij het maken van een logische verbinding, kan er data uit de PLC worden gelezen of er naartoe geschreven. De driver is in staat om ingangen, uitgangen, timers, counters, merkers en databouwstenen te lezen en te overschrijven.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
16
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Lezen: = IPS7RdDW(<StatusVerbinding>, , , <StartAdres>, , ) Schrijven: = IPS7WrDW(<StatusVerbinding>, , , <StartAdres>, , ) Ook voor deze functies dienen er uiteraard een aantal parameters worden meegeven. Merk op dat deze voor beide functies identiek zijn. Het enige verschil tussen het lezen en overschrijven is de functie die wordt gebruikt. IPS7RdDW leest dubbelwoorden, IPS7WrDW, overschrijft dubbelwoorden. Indien er andere datatypes (bits, bytes of woorden ) gelezen of overschreven moet worden, dienen andere functies gebruikt te worden. De informatie die de functies nodig hebben is ( behalve voor bits ) telkens. De functie heeft in totaal zes gegevens nodig voor het lezen of overschrijven van data. De eerste parameter is het nummer van de verbinding. Dit nummer werd verkregen via de functie IPS7Open. Bij de tweede parameter vraagt de functie naar het soort gegevens dat overschreven moet worden. De verschillende mogelijkheden hier zijn “E” voor ingangen, “A” voor uitgangen, “M” voor merkers, “D” voor databouwstenen, “Z” voor counters en “T” voor timers. Aangezien er enkel getallen kunnen worden meegegeven, wordt gewerkt via ANSI code. Indien er DB’s gelezen of schreven moeten worden, zal het nummer van de DB meegeven worden in de derde parameter. In alle andere gevallen wordt er hier 0 ingevuld. De vierde parameter is de startpositie voor het lezen of schrijven. Voor een DB of een merker is dit de eerste byte van het eerste dubbelwoord dat gelezen of overschreven moet worden. In het geval van tellers en counters is dit het nummer van de eerste teller of counter. De voorlaatste parameter die een functie vraagt, is het aantal data-eenheden dat gelezen moeten worden, ( hier dubbelwoorden ). Het zesde en laatste element is een array. Wanneer er data uit de PLC gelezen wordt, zal de functie de gegevens in deze array plaatsen. Voor het schrijven moet de array gevuld zijn met de data voor de PLC. In alle uitgewerkte toepassingen wordt enkel gebruik gemaakt van het lezen of overschrijven van databouwstenen. De ene toepassing werkt met dubbelwoorden de andere met woorden. Voorbeeld: Res = IPS7RdDW(0, Asc(“D”), 600, 4, 35, DWbuffer(0)) In het voorbeeld hierboven zullen 35 dubbelwoorden uit DB 600 startend vanaf byte 4 ( dus vanaf het tweede dubbelwoord ), gelezen worden en in de array DWbuffer geplaatst worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
17
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
6.4.3. Lay-out
Figuur 6.2: DB’s lezen en schrijven via ethernet
De lay-out is identiek aan de lay-out van het vorige programma.
6.4.4. Lezen van gewone DB’s De inhoud van een “gewone” DB komt in het tekstbestand in één rij te staan. Om DB’s te lezen via ethernet zullen zeer gelijkaardige stappen ondernomen worden als bij het programma dat werkt via MPI. Eerst worden de knoppen inactief, en ondertussen zal de applicatie een verbinding proberen te maken met de PLC. Hierna zullen de nummers van de DB’s die gelezen moeten worden uit het tekstbestand worden gehaald en tijdelijk bewaard in een array. Uit het aantal DB’s die moeten gelezen worden, kan de maximumwaarde van de progressbar gehaald worden. Nu zal DB per DB uit de PLC worden gelezen. Na het succesvol lezen van iedere DB zal deze in een rij in het tekstbestand worden geplaatst. Ieder woord is gescheiden van het volgende door een tab. Na het wegschrijven van een DB zal de label en de progressbar worden aangepast. Wanneer het lezen voltooid is, zal het programma de verbinding met de PLC verbreken en aangeven via de label dat het lezen voltooid is. De progressbar wordt gereset en de knoppen worden terug bedienbaar.
6.4.5. Schrijven naar gewone DB’s Terug gelijkaardige stappen als bij het schrijven via MPI. De knoppen worden inactief en een connectie met de PLC wordt gemaakt. Het bestand waar de data voor de DB’s in staat, wordt geopend. Rij per rij wordt de data gelezen. Om de waarden uit een rij te kunnen halen wordt er gezocht naar twee opeenvolgende tabs. Tussen deze twee tabs staat een waarde voor de DB. Wanneer alle getallen voor één DB achterhaald zijn, schrijft het programma deze naar de PLC. Na iedere DB worden de label en de progressbar aangepast. Wanneer alle DB’s zijn overschreven, wordt de verbinding met de PLC verbroken. De progressbar wordt gereset en het label geeft aan dat het schrijven is voltooid.
6.4.6. Lezen van grote DB’s Doordat een regel in een tekstbestand beperkt is tot 1024 karakters, kunnen lange DB’s niet op één regel in een tekstbestand en worden ze gespreid over twee of meer regels. De gegevens worden hierdoor onoverzichtelijk. Om die reden werd gevraagd om gegevens uit lange DB’s in kolommen te plaatsen.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
18
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Er werden enkele aanpassingen gemaakt aan het programma dat woorden leest uit een gewone DB. Het begin en einde van het programma is identiek. Het verschil ligt in het verwerken van de data na het lezen. De inhoud van één DB wordt hier tijdelijk bewaard in een rij van een tweedimensionale array. Wanneer alle DB’s gelezen zijn, zal het programma de data in de array kolom per kolom lezen. Vervolgens worden deze gegevens na elkaar geplaatst, gescheiden door een tabteken. Het resultaat wordt in het tekstbestand weggeschreven. Wanneer alle kolommen uit de array in een rij van het tekstbestand staan, zal één kolom in het tekstbestand de gegevens uit één DB bevatten.
6.4.7. Schrijven naar grote DB’s Voor het overschrijven van grote DB’s wordt er terug met de tweedimensionale array gewerkt. Deze wordt gevuld met de inhoud van het tekstbestand dat de gegevens voor de DB’s bevat. Wanneer de array het volledige tekstbestand heeft overgenomen, zal het programma de DB per DB overschrijven met de data van één kolom uit de array.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
19
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
7. Algemene visualisatie Binnen Latexco bestond de wens om zelf eenvoudige visualisaties te kunnen maken. Daarom werd er gevraagd een programma te ontwikkelen dat het mogelijk maakt om via kopiëren van gewenste elementen, een uitlezing en visualisatie van een eenvoudig proces op te bouwen. Hierbij werd er vooral gedacht aan het aansturen van een motor of de uitlezing van niveau in een tank. De visualisatie moest zowel via MPI als ethernet kunnen communiceren. Daarvoor werden twee programma’s ontwikkeld. Aangezien het principe achter beide programma’s identiek is, worden ze samen besproken.
7.1. Soorten data Er kunnen twee soorten data worden uitgelezen, bits of woorden. In de visualisatie wordt nog onderscheid gemaakt tussen twee woorden. De eerste is een “normaal” woord, dat waarden kan aannemen van -32768 tot 32767. De tweede soort is een status woord ( wordt gebruikt om de status van een proces weer te geven. Deze kunnen zijn automatisch, handbediening, ... ) en kan waarden van 0 tot 5 aannemen. Voor de PLC is er geen wezenlijk verschil tussen de twee, het zijn beide woorden die twee bytes geheugen innemen. Voor ieder van de drie soorten is er een nieuw datatype aangemaakt. Dit type bevat de locatie van de data in de PLC en de waarde ervan.
7.1.1. Bit Het datatype dat werd gecreëerd voor een bit ziet er als volgt uit: Private Type BitType DBnr As Integer DBByteNr As Integer BitPos As Integer value As Boolean ToonStatus As Boolean End Type De eerste drie elementen van BitType duiden de plaats van de bit aan die gevisualiseerd wordt. Het eerste element is het nummer van DB waarin de bit staat, het tweede het nummer van de byte in de DB en het derde het nummer van de bit in de byte ( van 0 tot 7 ). “value” bevat de waarde van een bit ( true of false ). “ToonStatus” bepaalt dan weer ofdat de status van de bit op het scherm moet worden weergegeven.
7.1.2. Woord Het datatype dat werd gecreëerd om een woord te visualiseren: Private Type WoordType DBnr As Integer DBWnr As Integer value As Integer
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
20
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
ToonStatus As Boolean End Type Hier wijzen de eerste twee elementen de plaats in de PLC aan. Het eerste element bevat het nummer van de DB waarin het woord staat, het tweede element is de startbyte van het woord. Het derde element is de waarde van het woord. Met “ToonStatus” wordt er bepaald ofdat de waarde van het woord op het scherm moet worden weergegeven.
7.1.3. Statuswoord Het datatype dat hiervoor werd gecreëerd is identiek aan dat van een woord. Private Type StatusWoordType DBnr As Integer DBWnr As Integer value As Integer ToonStatus As Boolean End Type Dit aangezien er in de PLC geen verschil is tussen beide.
7.2. De visualisatie 7.2.1. Visualisatie van een bit
Figuur 7.1: Visualisatie van een bit
Om een bit te visualiseren is er een lampje nodig dat groen of rood kleurt, wanneer de bit respectievelijk hoog of laag is. Verder is er een label voorzien waarin de naam of functie van de bit kan geplaatst worden, bijvoorbeeld: “Motor aan/uit”. Er is een “SET”- en “RESET”-knop voorzien om de waarde van de bit aan te passen. Wanneer “ToonStatus” onwaar is, zal de kleur van het lampje niet worden aangepast. Dit kan nuttig zijn indien de bit bijvoorbeeld dient om de draairichting van een motor in te stellen. De knoppen “SET” en “RESET” kunnen dan veranderd worden in “LINKS” en “RECHTS”. In dat geval mag het lampje gewist worden. De andere elementen ( label met de bitnaam en de twee knoppen ) mogen weggelaten worden zonder verdere aanpassingen in het programma.
7.2.2. Visualisatie van een woord
Figuur 7.2: Visualisatie van een woord
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
21
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Om de waarde van een woord te visualiseren, staat er een label op het venster waar de waarde van het woord in komt. Deze waarde wordt in het vet afgebeeld. In een ander label kan een naam aan het woord worden gegeven, bijvoorbeeld “hoogte tank” of “snelheid motor”. Naast het uitlezen kan er ook een waarde worden geschreven in het woord. Dit gebeurt door een waarde in te geven in het tekstvak en vervolgens op de knop “Transfer” te klikken of door “Enter” te bedienen. Daar Latexco dit programma graag had gebruikt om de hoogte van enkele tanks uit te lezen en te visualiseren, werd er specifiek hiervoor een kleine uitbreiding gemaakt.
Figuur 7.3: Visualisatie van tankniveau
Er werden twee rechthoeken toegevoegd ( één doorzichtig en één blauw ) die samen het niveau in een tank voorstellen. Er is ook een ronddraaiend schoepenwerk aanwezig. In de PLC wordt het niveau van de tank niet weergegeven als een getal tussen 0 en 32767, maar als een getal tussen 0 en 1000 of 0 en 10.000. Dit om het werkelijke niveau eenvoudiger te kunnen interpreteren. Om het programma duidelijk te maken wat de bovengrens is, is er een variabele voorzien die “VatMax” heet. Hierin moet de maximumwaarde voor het niveau van de tank komen, bij het koppelen van de hoogte van de ( afgebeelde ) tank met de waarde van het woord ( werkelijke hoogte ), moet er enkel voor gezorgd worden dat de index van de blauwe rechthoek dezelfde index heeft als het label waarin de waarde staat. Wanneer “ToonStatus” onwaar is, zal de label met de waarde van het woord niet worden aangepast en mag de label worden gewist. De andere elementen mogen worden weggelaten zonder verdere ingrepen in de code van het programma.
7.2.3. Visualisatie van een statuswoord
Figuur 7.4: Visualisatie van een statuswoord
Hier is er enkel een label voor de naam voorzien en vierkant dat voor iedere waarde een andere kleur aanneemt. De waarde van het woord hoeft niet afgebeeld worden. Dit omdat er binnen Latexco een afspraak is over de kleur die aan een statuswoord wordt gegeven. 1 betekent bijvoorbeeld automatisch en wordt door een groene kleur weergegeven. Wanneer “ToonStatus” hier als onwaar wordt ingesteld, zal het vierkant niet van kleur veranderen. Op die manier heeft de visualisatie echter niet veel zin.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
22
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
7.2.4. Opmerking In plaats van het wissen van elementen kunnen ze ook onzichtbaar worden gemaakt. In dat geval heeft de waarde van “ToonStatus” geen invloed meer, omdat het element niet wordt afgebeeld.
7.3. Zelf een visualisatie samenstellen Wat volgt is een beschrijving hoe er zelf een visualisatie kan gemaakt worden. Dit gebeurt aan de hand van een fictief voorbeeld. In dit voorbeeld zullen vijf bits, drie woorden en één statuswoord uit gelezen of gemanipuleerd worden. • • • • •
bit 1: Motor roerwerk (Aan / Uit ) bit 2: Draairichting roerwerk ( Links / Rechts ) bit 3: Klep toevoer ( Open / Dicht ) bit 4: Klep afvoer ( Open / Dicht ) bit 5: Motor pomp ( Aan / Uit )
read & write write read & write read & write read & write
• • •
woord 1: Snelheid roerwerk woord 2: Snelheid pomp woord 3: Niveau tank ( met tank )
read & write read & write read ( label + tank )
•
statuswoord 1: Status proces
read
Hieronder volgt een beeld van het beoogde resultaat:
Figuur 7.5: Voorbeeld algemene visualisatie
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
23
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Het is een voorstelling van een tank waarvan het niveau wordt gevisualiseerd, samen met de bijhorende kleppen en motoren. De stand van de kleppen, motoren en de snelheid ervan kan ook gewijzigd worden. De draairichting van het roerwerk wordt niet weergegeven, maar kan wel ingesteld worden. Voor de draairichting is er één bit voorzien. Indien deze hoog is, zal het roerwerk links draaien en vice versa. Bovenaan wordt de status van het proces weergegeven.
7.3.1. Stap 1: Benodigde elementen kopiëren Bij het openen van het Visual Basic project is de volgende lay-out te zien:
Figuur 7.6: Beginscherm algemene visualisatie
De eerste stap is ieder datatype ( bit, woord, statuswoord ) kopiëren totdat het benodigde aantal bereikt is. Daarbij dienen dat alle elementen ( figuren, labels en knoppen ) van dat datatype gekopieerd worden. Op deze manier krijgen alle figuren, labels en knoppen dezelfde index. Wanneer dit niet het geval is, zal bij een druk op een knop niet de corresponderende waarde aangepast worden. In dit voorbeeld is dit niet van toepassing. Indien er echter meerdere tankniveaus moeten worden afgebeeld, worden deze hier best gekopieerd. Voor dit voorbeeld zijn vijf bits nodig, een statuswoord en drie woorden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
24
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 7.7: Benodigde elementen kopiëren
7.3.2. Stap 2: Naam & index instellen Iedere bit, woord of statuswoord dient een naam te krijgen die overeenstemt met de functie. Eenmaal de functie van de bits is toegekend, kan de naam van de knoppen worden aangepast aan de functie ervan. Dit is aan en uit voor de motoren, open en dicht voor de kleppen en rechts en links voor de draairichting van het roerwerk. Deze namen kunnen aangepast worden in de eigenschap “Caption”.
Figuur 7.8: Naam van een element wijzigen
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
25
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
De bit die de draairichting van het roerwerk bepaalt, heeft geen lamp nodig ( dit moet manueel gewist worden ). Het niveau van de tank mag niet overschreven worden vanuit de applicatie, dus moeten de knop en het tekstvak van het woord verwijderd worden. In plaats van de elementen te wissen, kunnen deze ook onzichtbaar worden gemaakt door de eigenschap “Visible” False te maken. Wanneer tijdens het kopiëren steeds alle elementen mee gekopieerd werden, zullen de indexen van deze bij elkaar horende elementen gelijk zijn. Indien dit niet het geval is, moeten deze nog manueel gelijk gesteld worden ( via de eigenschap “Index” ). Om het niveau van de afgebeelde tank mee te laten veranderen met de waarde van het woord, moeten er op één of andere manier een link komen. Dit gebeurt door de index van het blauwe vierkant gelijk te stellen aan de index van het woord dat ermee overeenstemt.
Figuur 7.9: Index van een element wijzigen
Met behulp van enkele lijnen en een cirkel kan het symbool van een klep of pomp worden gemaakt. Dit kan de visualisatie nog duidelijker maken. Na het herschikken van de elementen kan de lay-out uit punt 7.3 bekomen worden. Wanneer er complexere symbolen of figuren moeten afgebeeld worden, kan er eventueel een afbeelding op het scherm geplaatst worden. Een afbeelding kan op het scherm geplaatst worden via “Image”. Na het maken van een kader waarin de afbeelding zal komen, moet via de eigenschap “Picture” het bestand met de figuur aangeduid worden. Om de afmetingen ervan te veranderen, moet de eigenschap “Stretch” ( onder “Picture” ) op True geplaatst worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
26
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 7.10: Afbeelding op de form toevoegen
7.3.3. Locatie van de PLC instellen Voordat de elementen op het venster gelinkt kunnen worden met een data-element in de PLC, moet de locatie van de PLC zelf aangewezen worden. Deze locatie wordt vastgelegd in de code. Hier wordt natuurlijk wel een onderscheid gemaakt tussen communicatie via MPI en ethernet. 7.3.3.1. Via MPI ( Prodave Mini ) Om een PLC aan te duiden die verbonden is met de pc via MPI, moet het MPI-adres PLC, racknummer, segmentnummer en slotnummer van de CPU meegegeven worden. MPIadres = 2 RackNr = 0 SegmentNr = 0 SlotNr = 2
7.3.3.2.
‘MPI-adres van de PLC ‘Racknummer ( meestal = 0 ) ‘Segmentnummer ( meestal = 0 ) ‘Slotnummer (meestal = 2 )
Via ethernet ( IPS7LNK.dll )
Om een PLC aan te duiden die met de pc verbonden is via het netwerk moet het IP-adres, racknummer en slotnummer van de CPU worden meegegeven. Als de PLC met het netwerk is verbonden via een CP-kaart, moet het IP-adres van de kaart worden meegegeven. Als deze verbonden is via de LANCon-module, moet het IP-adres van deze connector meegegeven worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
27
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
IPadres = "10.1.0.151" RackNr = 0 SlotNr = 2
'Ipadres CP-kaart/LANCon-module 'Racknummer (meestal = 0) 'Slotnummer (meestal = 2)
7.3.4. Locatie in de PLC toewijzen Eenmaal alle elementen op het venster geplaatst zijn, moeten ze gelinkt worden aan een dataelement in de PLC. Voor iedere bit, woord en statuswoord op het venster moet er een datatype ( punt 7.1 ) ingevuld worden. Dit zorgt voor de verwijzing naar het data-element in de PLC. Bij het linken van elementen met een data-element in de PLC moet er goed worden gelet op het nummer van de bit. De bit ( woord / statuswoord ) met index 0 op het venster komt overeen met de bit die nummer 1 heeft in de code. Wat volgt is een voorbeeld van verwijzingen naar een dataelement in de PLC. '################## BITS ############################# 'Motor roerwerk BitNr = 1 Bit(BitNr).DBNr = 30 Bit(BitNr).DBByteNr = 0 Bit(BitNr).BitPos = 0 Bit(BitNr).ToonStatus = True 'Draairichting roerwerk BitNr = 2 Bit(BitNr).DBNr = 30 Bit(BitNr).DBByteNr = 0 Bit(BitNr).BitPos = 1 Bit(BitNr).ToonStatus = False 'Klep toevoer BitNr = 3 Bit(BitNr).DBNr = 40 Bit(BitNr).DBByteNr = 10 Bit(BitNr).BitPos = 0 Bit(BitNr).ToonStatus = True 'Klep afvoer BitNr = 4 Bit(BitNr).DBNr = 40 Bit(BitNr).DBByteNr = 12 Bit(BitNr).BitPos = 0 Bit(BitNr).ToonStatus = True 'Motor pomp
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
28
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
BitNr = 5 Bit(BitNr).DBNr = 35 Bit(BitNr).DBByteNr = 4 Bit(BitNr).BitPos = 0 Bit(BitNr).ToonStatus = True '################# WOORDEN ########################### 'Snelheid roerwerk WoordNr = 1 Woord(WoordNr).DBNr = 30 Woord(WoordNr).DBWnr = 70 Woord(WoordNr).ToonStatus = True 'Snelheid pomp WoordNr = 2 Woord(WoordNr).DBNr = 35 Woord(WoordNr).DBWnr = 50 Woord(WoordNr).ToonStatus = True 'Niveau tank WoordNr = 3 Woord(WoordNr).DBNr = 10 Woord(WoordNr).DBWnr = 0 Woord(WoordNr).ToonStatus = True3 '################ STATUSWOORDEN ###################### 'Status proces StatusWoordNr = 1 StatusWoord(StatusWoordNr).DBNr = 10 StatusWoord(StatusWoordNr).DBWnr = 40 StatusWoord(StatusWoordNr).ToonStatus = True ‘#####################################################
7.3.5. Overige instellingen Er is nog de mogelijkheid om twee parameters in te stellen. In punt 7.2.2. werd er al gesproken over de maximumwaarde die een volle tank voorstelt. Deze waarde wordt meegegeven met “VatMax”. Een tweede waarde die ingesteld kan worden, is de cyclustijd waarmee de elementen gepold worden. Deze waarde wordt in milliseconden meegegeven. Timer1.Interval = 100 VatMax = 1000
Jorgo Dewilde
'pol-tijd [ms] 'Max waarde van het vat
Industrieel ingenieur elektromechanica optie automatisatie
29
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Verder hoeft niets ingesteld worden. De applicatie is klaar om in gebruik te nemen.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
30
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
8. Logging en visualisatie waterverbruik 8.1. Situering Het waterverbruik is binnen Latexco een cruciaal punt. Het hebben van een eigen waterzuiveringsinstallatie is daar een mooi bewijs van. Verspreid over de het bedrijf zijn er op cruciale punten een aantal debietmeters geplaatst. Deze geven een puls door aan een S7-PLC per eenheid van debiet. In de PLC wordt het aantal ontvangen pulsen bijgehouden en omgerekend zodat het resultaat een waarde in m³ is. Daarom wordt er in Latexco en deze thesis gesproken van watertellers. Er was een systeem aanwezig om het waterverbruik bij te houden. Dat behoorlijk omslachtig is. Op de PLC is er een communicatiekaart van SIEMENS aangesloten die de PLC op het bedrijfsnetwerk koppelt. De kaart heeft ook een ingebouwde e-mail server. Het programma dat op de PLC draait, verstuurt na iedere shift een e-mail met een .csv bestand in bijlage waarin de laatste stand van de watertellers staat. Om het verbruik bij te houden, moest het .csv bestand geopend worden om de inhoud te kopiëren in een eigen Excel-bestand. Indien er grafieken van het verbruik gewenst waren, moesten deze zelf worden aangemaakt. Dit kon dus eenvoudiger en beter. Zeker omdat er een driver ter beschikking was die met een PLC, die op het netwerk is aangesloten, kan communiceren. Voor meer informatie over deze driver, zie punt 6.4. De idee was om een programma te schrijven dat iedere acht uur, na iedere shift, een logging maakt van de stand van de watertellers. Het waterverbruik moet ook grafisch kunnen geraadpleegd worden. De vermelde debietmeters meten de waterstroom van uiteenlopende punten. Zo zijn er onder andere geplaatst bij de stoomketels, de waswalsen, sproeiers en borstel. Voor de eenvoud wordt er verder in deze thesis gesproken van waterverbruikers.
8.2. Versie 1: Logging naar Excel / Excel als GUI In een eerste versie werd er een programma geschreven dat continue op een pc draait en na iedere shift de nieuwe stand van de watertellers in een Excel-bestand schrijft. Na iedere logging werden ook de grafieken aangepast zodat telkens het waterverbruik van de laatste vier weken weergegeven wordt.
8.2.1. Onderdelen Voor de eerste versie van de logging van de watertellers en de visualisatie van het waterverbruik zijn er drie onderdelen. Ten eerste het programma dat de logging van de watertellers uitvoert en de grafieken aanpast. Ten tweede het Excelbestand waarin de logging en de grafieken worden opgeslagen. Als laatste heb je de driver IPS7LNK.dll die zorgt voor de communicatie tussen de pc die de logging maakt en de PLC die de tellerstanden bevat. Hierna worden deze onderdelen uitvoerig besproken. Voor meer informatie over de reeds bespoken driver, zie punt 6.4.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
31
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
8.2.2. Waterlogging_A.xls Voor het bewaren van de tellerstanden werd er gekozen voor een Excel-bestand. Ten eerste omdat de gegevens vroeger ook werden bewaard in Excel, ten tweede omdat de grafieken van het waterverbruik hier kunnen worden aangemaakt. Dit bestand werd op een server geplaatst die niet-bevoegde accounts enkel read-only toegang geeft. Zo kan er zeker niet geknoeid worden met de gegevens. Omdat enkele pc’s toch inloggen als administrator, is het bestand zelf beveiligd met een paswoord tegen schrijven. Door de gegevens op een server te plaatsen zijn ze voor iedereen overal toegankelijk. Het Excel-bestand bevat één rekenblad met alle cijfergegevens en 35 grafieken van de waterverbruikers. Deze grafieken geven het gemiddeld verbruik weer van de laatste vier weken. 8.2.2.1. Het rekenblad De afbeelding hieronder is een klein stuk van het rekenblad “Cijfergegevens”. Hierin wordt het waterverbruik bijgehouden. Om het overzicht te bewaren in de grote hoeveelheid gegevens, zijn de eerste vijf rijen en de eerste kolom geblokkeerd. Dit betekent dat ze tijdens het doorlopen van de gegevens niet uit beeld verdwijnen. De bovenste vijf rijen bevatten immers informatie over de verbruiker: het nummer, de naam, de betekenis van de drie kolommen en het maximaal toegelaten gemiddeld waterverbruik per uur. De eerste kolom bevat de datum en uur van de logging. Er zijn in totaal 35 watertellers die worden gelogd. Van iedere verbruiker zijn er per logging drie gegevens. In de eerste kolom staat de stand van de waterteller. In de tweede kolom staat het totale waterverbruik van de shift. In de derde kolom staat het gemiddelde waterverbruik per uur van die ploeg. Het waterverbruik wordt door Excel berekend.
Figuur 8.1: Het rekenblad “Cijfergegevens”
Het rekenblad “Cijfergegevens” is ook nog eens extra beschermd tegen schrijven. Dit betekent dat de gegevens niet gewijzigd kunnen worden zonder eerst de bescherming op te heffen met behulp van een paswoord. 8.2.2.2. De grafieken Iedere verbruiker heeft een grafiek die het gemiddelde waterverbruik per ploeg weergeeft. In deze grafiek wordt het verbruik uitgezet in functie van de tijd. De x-as heeft zowel primaire als secundaire rasterlijnen. Iedere rasterlijn is een dag en de grafiek wordt zo samengesteld dat het punt op de rasterlijn steeds het tijdstip 5h voorstelt. De primaire
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
32
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
rasterlijnen zijn in het zwart uitgevoerd en de afstand tussen twee primaire rasterlijnen is zeven dagen. Om de grafieken snel te kunnen interpreteren en om ze vergelijkbaar te maken hebben ze op enkele uitzonderingen na dezelfde maximumwaarde. Er zijn vijf tellers die een hoger maximum hebben omdat hun verbruik veel hoger ligt dan 5 m³/h. De maximum y-waarde voor de stoomketels is 10 m³/h, dat voor de boorput ligt op 25 m³/h. Voor een aantal verbruikers is er een richtwaarde voor het maximum waterverbruik. Deze wordt op de grafiek voorgesteld door een rode horizontale lijn.
Figuur 8.2: Voorbeeld van een grafiek
8.2.2.3. Gegevensselectie Bovenaan op het rekenblad zijn er een aantal selectiemenu’s, optionbuttons en een knop toegevoegd waarmee het waterverbruik van een bepaalde verbruiker opgevraagd kan worden. De inhoud van de comboboxen wordt bij het openen van het bestand ingevuld.
Figuur 8.3: Selectie van waterverbruiker en tijdsbereik
Eerst dient een verbruiker geselecteerd te worden. Voor het ingeven van het tijdsbereik zijn er twee mogelijkheden. Indien de bovenste optie geselecteerd wordt, zal de grafiek het recentste verbruik weergeven. Er kunnen verschillende tijdspannes ingegeven worden. Er is de mogelijkheid om de laatste week, twee weken, drie weken, maand, twee maanden, drie maanden, vier maanden, zes maanden, negen maanden en het laatste jaar op te vragen. De tweede mogelijkheid is dat de gebruiker zelf twee datums vastlegt waartussen die het waterverbruik wenst te zien. Wanneer er
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
33
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
dan op de knop “Grafiek” wordt geklikt, zal Excel de grafiek van de gekozen verbruiker aanpassen zodat die het verbruik van de gevraagde tijdspanne weergeeft.
8.2.3. Waterlogging_B.xls Om het opvragen van een grafiek gebruiksvriendelijker te maken, werd deze aangepast in een nieuwe versie van het Excel-bestand. De objecten op het rekenblad “Cijfergegevens” werden gewist en er werd vooraan een nieuw rekenblad ingevoegd. Dit rekenblad kreeg de naam “SELECTOR”. “Waterlogging_B.xls” heeft nog een ander groot verschil ten opzichte van de vorige versie: de namen van de grafiekbladen hebben niet langer de naam van de verbruiker waarvan het verbruik wordt weergegeven. De reden voor deze aanpassing is dat de eerste versie van het Excel-bestand tijdens de stage werd ontwikkeld. Toen het Excel-bestand thuis werd geopend, traden er fouten op. Enkele van de grafiekbladen konden hun naam niet behouden, wat te wijten was aan het verschil in Excel versies. De hoogste versie ondersteunt geen werkbladen die in hun naam een “:” bevatten. Omdat binnen Latexco de versies van Excel ook kunnen verschillen, moest dit probleem vermeden worden. Omdat de grafieken eenvoudiger konden geraadpleegd worden via de nieuwe selector, werd er gekozen om de grafiekbladen niet langer te noemen naar de naam van de waterverbruiker waarvan zij het verbruik voorstellen. De nieuwe naam van de grafiekbladen werd: “Grafiek “, gevolgd door het nummer van de waterteller. De rest ( lay-out, grafieken ) is hetzelfde gebleven ten opzichte van de vorige versie. Verder is het bestand nog steeds beschermd tegen schrijven. Enkel met een paswoord kan dit bestand veranderd worden. Ook het rekenblad met de cijfergegevens is nog steeds extra bescherm tegen schrijven. 8.2.3.1. Gegevensselectie Vooraan werd een nieuw werkblad ingevoegd met daarop de nieuwe gebruikers interface. Door het invoegen van een nieuw werkblad vooraan, krijgt de gebruiker niet langer een overvloed aan cijfers te zien wanneer die het bestand opent. In plaats daarvan komt er een gebruiksvriendelijke interface om zijn gegevens op te vragen te voorschijn.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
34
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.4: “Selector” voor selectie van waterverbruiker en tijdsbereik
Om tot de gewenste gegevens te komen moeten er drie logische stappen worden gevolgd. De eerste stap is het selecteren van de waterverbruiker waarover informatie bekomen moet worden. In een tweede stap dient er gekozen te worden om de grafiek of de cijfergegevens te raadplegen. De mogelijkheid om hier ook cijfergegevens op te vragen kwam er op vraag van Latexco. Na het klikken op de knop “GO” wordt de laatste logging van de geselecteerde waterverbruiker op het rekenblad “Cijfergegevens” geselecteerd. Wanneer er cijfergegevens worden opgevraagd, kan er immers geen tijdbereik worden opgegeven. Als er gekozen wordt om de grafiek van het verbruik te raadplegen, kan er wel een tijdsbereik worden ingegeven. Hier is er terug de keuze tussen de recentste gegevens of een tijdsbereik naar keuze. Wanneer de gebruiker alle gegevens correct heeft ingevoerd kan deze op “GO” klikken. Als de gebruiker cijfergegevens wenst te zien, zal het rekenblad “Cijfergegevens” actief worden en zullen de laatste logging van de waterteller geselecteerd zijn. Als de gebruiker bijvoorbeeld cijfergegevens van de waswals van kussenlijn twee opvraagt, zal hij een volgend resultaat verkrijgen:
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
35
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.5: Resultaat na opvragen van cijfergegevens van “Waswals KL2”
Indien de gebruiker de grafiek van het waterverbruik wenst, zal Excel deze grafiek aanpassen aan het nieuwe tijdsbereik dat de gebruiker heeft geselecteerd. Wanneer bijvoorbeeld het verbruik van de laatste maand wordt gevraagd, zal de grafiek worden aangepast in een aantal stappen. Eerst wordt er gezocht naar de laatste ingevulde rij in het rekenblad. Wanneer dit gevonden is, zal Excel naar boven toe zoeken naar de rij met de datum van 1 maand daarvoor. Wanneer deze gevonden is, wordt nog twee rijen extra naar boven gegaan zodat de grafiek steeds begint met de logging op tijdstip 5h. De nieuwe brongegevens ( = x- en y-waarden ) voor de grafiek worden ingevoerd en de rasterlijnen, de titel en de assen worden heropgemaakt. Indien de geselecteerde grafiek een maximum heeft, zal dit op de grafiek worden weergegeven door een rode lijn. De waarde van dit maximum is afkomstig uit een cel op het rekenblad, opgegeven in de vierde rij.
8.2.4. Programma voor de logging van de tellerstand Met behulp van het Excel-bestand kunnen de verbruiksgegevens eenvoudig bekeken worden. Het up-to-date houden van de gegevens wordt verzorgd door een programma dat in Visual Basic 6.0 werd ontwikkeld. Dit programma heet “Waterlogging.exe”. Dit programma draait op een pc van de waterzuivering die 24h op 24 ingeschakeld is. Wanneer er een shift is afgelopen, zal het programma de tellerstand uit de PLC halen, deze in het Excel-bestand schrijven en de grafieken aanpassen zodat deze het verbruik van de laatste vier weken weergeven. 8.2.4.1. Lay-out Aangezien dit programma geen input van de gebruiker nodig heeft, is er geen noemenswaardige userinterface. Er zijn wel enkele visuele maatregelen genomen om ervoor te zorgen dat een gebruiker van de pc het programma niet per ongeluk afsluit.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
36
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.6: “Waterlogging.exe”
Zo staat op het venster de tekst “Bezig met watertellers de loggen, NIET AFSLUITEN” in het fel geel op een blauwe of rode achtergrond. In de titelbalk is ook de tekst “NIET AFSLUITEN: Waterlogging” te vinden. Dit programma is ook niet terug te vinden in de taakbalk. Op de bewuste pc draait er een WinCC-applicatie die instaat voor de bediening de pompen en kleppen. Deze applicatie staat steeds op de voorgrond. Zo krijgt een gebruiker van de pc geen enkele visuele aanduiding dat dit programma draaiende is en is de kans dat deze het programma per ongeluk afsluit heel klein. Er zijn ook maatregelen genomen in de code zodat dit niet zomaar kan gebeuren. Aangezien het voor sommige personen wel interessant is om te weten als het programma nog draait, wordt iedere seconde de achtergrondkleur gewisseld tussen blauw en rood. 8.2.4.2. Werking Bij de opstart van het programma worden enkele variabelen ingevuld die van belang zijn voor de communicatie met de PLC. Voor deze communicatie wordt er beroep gedaan op de driver IPS7LNK.dll uit punt 6.4 IPadres = "10.1.0.140" RackNr = 0 SlotNr = 3 DBNr = 600 StartAdres = 4 Aantal = 35 DataType = Asc("D") Ref = -1 Met de eerste vijf gegevens wordt de locatie van de data bepaald. Met “Aantal” kan er gekozen worden hoeveel data-eenheden ( in dit geval dubbelwoorden ) er gelezen moeten worden. Door de ANSI-waarde van “D” in “DataType” te stoppen, zullen er dubbelwaarden worden gelezen uit de PLC. “Ref” is het nummer van de logische verbinding die verkregen werd bij het opzetten van de verbinding met de communicatiepartner. Bij de opstart van het programma wordt er gecontroleerd als er een verbinding is met de PLC op de locatie die aangewezen wordt door het IP-adres, racknummer en slotnummer.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
37
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Als de connectie is geslaagd zal er een timer actief worden. De timer heeft een intervaltijd van één seconde. Iedere seconde zullen er twee zaken gebeuren. Eerst zal de kleur van de achtergrond veranderen om aan te geven dat het programma nog actief is. Daarnaast zal het programma kijken naar de systeemtijd. Wanneer het 8h, 13h of 21h is, zal er een logging worden uitgevoerd. Wanneer het middernacht is, worden drie bits gereset, zodat de logging de volgende dag opnieuw kan starten. De logging van de tellerstand van de watertellers gebeurt in vier stappen. In de eerste stap zal er een connectie gemaakt worden met het Excel-bestand “Waterlogging_B.xls”. Ten tweede zal met behulp van de driver de stand van de watertellers uit de PLC worden gehaald. Vervolgens kunnen de aanpassingen in het Excel-bestand worden gemaakt. Er wordt begonnen met de nieuwe tellerstanden toe te voegen. Daarna worden de formules om het verbruik te berekenen in het Excelwerkblad ingevuld. Het is dus niet het programma dat het verbruik berekent, maar wel Excel. Daarna wordt in de eerste kolom de datum en het uur van de logging ingevuld. Eenmaal alle gegevens zijn toegevoegd, worden hun cellen opgemaakt. Dit houdt in dat de randen van iedere cel worden opgemaakt en het tijdstip van de logging een groene achtergrond krijgt. Eens het rekenblad is opgemaakt, zijn de grafieken aan de beurt. De brongegevens worden zo geselecteerd zodat de grafieken het verbruik van de recentste vier weken weergeven. Pas daarna wordt de volledige grafiek gegenereerd. Dit houdt in dat assen worden opgemaakt en de rasterlijnen worden ingesteld. Indien nodig zal het maximum toegelaten gemiddelde waterverbruik toegevoegd worden aan de grafiek. Wanneer alle grafieken zijn geüpdatet, wordt het eerste blad met de selector terug geselecteerd. In de laatste stap wordt het Excel-bestand opgeslagen en wordt Excel zelf afgesloten. Bij deze laatste actie hoort een opmerking. Tijdens het testen werd er vastgesteld, dat nadat “Waterlogging.exe” Excel had afgesloten, dit toch actief bleef in de processen ( deze kunnen worden geraadpleegd via taakbeheer ). Excel verdween pas uit de processen wanneer het programma werd afgesloten. Na een behoorlijke tijd zoeken werd er een oplossing gevonden op het Internet, maar een duidelijke reden of oorzaak voor dit fenomeen was niet voorhanden. Ten slotte is het nuttig om te vermelden dat dit programma niet kan worden afgesloten op de normale manier; zijnde door op het kruisje rechts bovenaan te klikken, of via Alt + F4. Dit werd verhinderd via de code. Bij het afsluiten van een programma voorziet VB6 de mogelijkheid om het afsluiten ongedaan te maken, en het programma alsnog verder doen werken. Dit kan worden bewerkstelligd via het argument “Cancel”. De bedoeling hiervan is om het quasi onmogelijk te maken om het programma per ongeluk af te sluiten. De enige manier die overblijft om het programma te beëindigen, is via het taakbeheer.
8.2.5. Besluit Excel wordt in de eerste versie gebruikt om het waterverbruik grafisch voor te stellen. Deze manier van werken is niet zo ideaal omdat er rechtstreeks wordt gewerkt in het bestand waar de gegevens zijn opgeslagen. Aangezien het Excel-document code bevat, betekend dit dat Excel macro’s moet toestaan. Standaard staat het beveiligingsniveau voor macro’s in Excel op hoog, wat betekent dat alle macro’s die niet voorzien zijn van een digitale handtekening niet worden uitgevoerd. Bij het openen van dit bestand moet het niveau bijgevolg op middelmatig of laag worden gebracht. Bij het openen van het document van op een andere locatie werd dit nogal vaak vergeten. Een derde probleem was dat de pc waarop dit programma draaide uitzonderlijk toch werd afgesloten. Dit gebeurde zelden, maar had wel een behoorlijk grote inpakt. Hoofdzakelijk op het Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
38
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
verloop van de grafieken. Deze hun tijdsas raakte in de knoei, verbruiken schoten onlogisch hoog, etc … Een oplossing voor deze problemen drong zich op.
8.3. Versie 2: Logging naar Excel / Eigen ontwikkelde GUI Voor het oplossen van de gestelde problemen waren twee wijzigingen nodig. De eerste en grootste wijziging is het verwijderen van de selector uit het Excel-document en het ontwerpen van een GUI. Als tweede werd door een aanpassing aan het programma van de waterlogging het probleem van de gemiste loggingen opgelost.
8.3.1. Onderdelen Bij deze tweede versie is er één onderdeel bijgekomen: het GUI programma om het waterverbruik te visualiseren. Het Excel-bestand blijft behouden, maar dient enkel voor opslag van de gegevens. Ook het programma dat instaat voor de logging van de watertellers blijft behouden. Het werd echter wel uitgebreid om het probleem van de gemiste loggingen op te vangen. Om de gegevens uit de PLC te halen is er nog steeds nood aan de IPS7LNK.dll driver. Die werd besproken in punt 6.4
8.3.2. Waterlogging_C.xls Dit Excel-bestand is een gestripte versie van “Waterlogging_B.xls” uit punt 8.3.3 en bevat nog één rekenblad en 35 grafieken. Het rekenblad “SELECTOR” is verwijderd, samen met de bijhorende code. Op het rekenblad “Cijfergegevens” worden alle gegevens van de verbruikers bijgehouden. Deze gegevens zijn het tijdstip van de logging, de stand van de waterteller, het totale verbruik per ploeg, het gemiddelde verbruik per uur van de ploeg en het maximum toegelaten gemiddeld waterverbruik per uur. Wat de grafieken betreft, deze tonen nog steeds het verbruik van de recentste vier weken. De lay-out blijft ongewijzigd.
8.3.3. Programma voor de logging van de tellerstand Hoewel het zelden gebeurde, werden er soms toch loggingen gemist doordat de pc uitlag. Dit had een grote invloed op de grafieken. Om dit te verkomen werd er een controle aan het programma toegevoegd. Die werkt als volgt: nadat het programma een verbinding heeft gemaakt met het Excel-document, wordt de datum en het tijdstip van de laatste logging er uit gehaald. In Visual Basic zit er een functie die het verschil tussen twee tijdstippen kan berekenen. Wanneer dit verschil groter is dan acht uur, betekent dit dat er één of meerdere loggingen gemist zijn. Wanneer het tijdsverschil in uren gedeeld wordt door acht, wordt het aantal gemiste loggingen bekomen. Aangezien iedere acht uur er een logging wordt gemaakt, zal dit een geheel getal zijn. Om de grafieken correct te doen verlopen wordt de datum en tijdstip van de gemiste logging toegevoegd aan het document. Voor de tellerstand wordt er “geen logging” ingevuld. Wanneer het verbruik wordt berekend zal dit geen getal opleveren. Op de grafiek wordt er dan een verbruik van nul weergegeven. Een voorbeeld:
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
39
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.7: Gemiste logging op 07/12/06 21:00
8.3.4. Programma voor de visualisatie Vanwege de ongemakken die Excel met zich meebrengt om het verbruik te visualiseren, werd er geopteerd om een programma te schrijven in Visual Basic om het waterverbruik weer te geven. In het programma moet de gebruiker dezelfde gegevens ingeven als voorheen om het gewenste tijdsbereik te selecteren. Daarna past het programma de grafiek in Excel aan. Deze grafiek werd vanuit Excel statisch opgehaald en op het venster van het programma gebracht. Tijdens het ontwikkelen van dit programma werd het verlangen geuit om het voorlopige gemiddelde waterverbruik te kennen van de ploeg die aan de slag is.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
40
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
8.3.4.1. Lay-out
Figuur 8.8: “Waterverbruik.exe” na opstart
Op het venster zijn er drie frames voorzien. In het kader linksboven bepaalt de gebruiker tussen welke tijdsgrenzen hij het waterverbruik wil zien. In het kader rechtsboven zal het huidige gemiddelde verbruik worden weergegeven. Onderaan wordt de grafiek van het verbruik weergegeven. Bovenaan is terug het selectiemenu te zien waarmee de gewenste waterverbruiker geselecteerd kan worden. Daaronder kan er gekozen worden om de recentste gegevens te raadplegen, of om zelf een tijdsbereik in te geven. In het selectiemenu om het recentste tijdsbereik te bepalen, zijn er twee bereiken toegevoegd. Het eerste is dat voor de laatste drie dagen, het tweede dat voor gisteren en vandaag. Bij het opstarten van het programma staat de optie om de recentste gegevens te raadplegen aan. Het tijdsbereik bij opstart is drie dagen. Wanneer er gekozen wordt om zelf twee datums in te geven, staat de eerste datum standaard op gisteren, en de tweede datum op vandaag. Wanneer de optie “Laatste” is geselecteerd kunnen alle elementen in het frame “Van … t.e.m.” niet meer worden bediend. Wanneer de optie “Van … t.e.m.” geselecteerd is kan er geen tijdsbereik worden ingegeven bij de recentste gegevens.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
41
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
In het onderste kader is er een groot picturebox voorzien waarin de grafiek uit Excel zal komen. Onderaan links en rechts zijn er twee knoppen aanwezig. Met de rechtse knop kan de grafiek van de volgende verbruiker worden weergegeven. Met de knop links de grafiek van de vorige. In het midden tussen de twee knoppen is er een label voorzien waarin de naam van de waterverbruiker komt te staan. Bij de opstart zijn deze twee knoppen niet bedienbaar om dat de gebruiker nog niet heeft laten weten van welk tijdsbereik hij het verbruik wil zien. Bovenaan in het nieuwe kader, wordt het huidige verbruik van de ploeg weergegeven. Dit voorlopige verbruik kan op twee manieren worden weergegeven. De eerste is van toepassing op alle waterverbruikers. Deze is het berekenen van het huidig gemiddeld verbruik en de waarde weergeven op het scherm vlak onder “HUIDIG:”. De tweede manier is het verbruik visueel weergeven ten opzichte van zijn maximum gemiddelde verbruik. Deze manier van voorstellen is uiteraard enkel van toepassing op verbruikers die een maximum gemiddeld verbruik hebben. Voor deze voorstelling werd er een rode lijn en een rechthoek toegevoegd. De rode lijn stelt het maximum verbruik voor. De hoogte van de balk ten opzichte van de rode lijn stelt het waterverbruik voor. Wanneer dit verbruik onder het maximum ligt is de rechthoek groen van kleur. Wanneer dit erboven ligt, zal de balk een rode kleur krijgen. Hierdoor kan in een oogopslag het verbruik van een bepaalde afdeling worden ingeschat en beslist op eventueel in te grijpen. 8.3.4.2. Werking Om de werking van het programma te verduidelijken volgt een figuur. Merk op dat de commando’s van het programma om de grafieken aan te passen ook zijn opgenomen in deze schematische weergave. Wanneer het programma wordt gestart zullen eerst alle comboboxen worden ingevuld. Daarna worden alle elementen van default instellingen voorzien. Dit houdt in dat de eerste grafiek uit de combobox geselecteerd is, de optie “Laatste” actief is, het bereik op drie dagen staat en dat de knoppen om de volgende of vorige grafiek op het scherm weer te geven uitgeschakeld zijn. Nu het programma is opgestart, kan de gebruiker ingeven van welke teller hij het verbruik wil raadplegen en tussen welke tijdsgrenzen het verbruik moet worden weergegeven. Wanneer de gebruiker klaar is, kan hij op “GO” klikken. Het programma de grafiek toont op het scherm.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
42
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.9: Schematische weergave van de werking van “Waterverbruik.exe”
Eerst worden er twee connecties geopend. De eerste is met de PLC waarin de huidige stand van de watertellers staat. Deze is nodig om het huidige gemiddelde waterverbruik te berekenen. De tweede connectie is deze met het Excel-bestand waarin alle historische data wordt opgeslagen en waar de grafieken zich bevinden. Vervolgens worden de maximum waarden voor het gemiddeld verbruik uit het Excel-bestand gehaald. Alle maximumwaarden worden opgeslagen in een array. Voor de watertellers die geen maximumwaarde hebben, zal er in de array 0 komen. Wanneer de grafieken worden opgemaakt zal er, bij de grafieken waar het maximum verbruik volgens de array 0 is, geen rode lijn worden weergegeven. Nu zal “Waterverbruik” de laatste stand van de watertellers uit de PLC halen. Dit gebeurt via de IPS7LNK.dll. Ook deze waarden worden bewaard in een array. Met deze waarden zal het gemiddelde verbruik worden berekend. Hiervoor heeft het programma de stand, datum en tijd nodig van de laatste logging. Deze gegevens bevinden zich in de laatste regel van het Excelbestand. Om het gemiddeld verbruik te weten, moet de stand van de watertellers uit de PLC worden verminderd met de stand tijdens de laatste logging. De uitkomst moet worden gedeeld door het aantal uren dat is verstreken sinds de laatste logging. Alle huidige gemiddelde verbruiken worden in één keer berekend. Het huidige gemiddelde waterverbruik van de geselecteerde waterverbruiker wordt weergegeven op het scherm. Nu het gemiddelde verbruik van de verbruiker is gekend, kan de balk worden opgemaakt. De hoogte van de balk is gerefereerd ten opzichte van de hoogte van de rode lijn. Deze rode lijn stelt het maximum gemiddelde waterverbruik voor. Wanneer het huidige verbruik lager is dan het maximum, zal de balk zich volledig onder de lijn bevinden en een groene kleur hebben. Wanneer het verbruik groter is, zal de balk boven de lijn uit stijgen en het programma zal de balk rood in kleuren.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
43
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.10: Weergave van het huidig gemiddeld verbruik
De volgende stap is het aanpassen van de grafieken. Eerst worden alle verbruiksgegevens binnen het door de gebruiker vastgelegde tijdsbereik gezocht. Daarna worden alle grafieken in het Excelbestand “Waterlogging.xls” opgemaakt zodat ze het verbruik binnen dat tijdsbereik weergeven. Het maximum van de y-as is voor alle grafieken 5 m³/h, behalve voor enkele waterverbruikers die een hoger verbruik hebben. De reden waarom dit maximum wordt vastgelegd is omdat de grafieken vergelijkbaar zouden zijn. Wanneer de waterverbruiker een maximum waarde heeft voor het gemiddelde verbruik, zal dit op de grafiek worden weergegeven door een rode horizontale lijn. Alle grafieken worden in één keer opgemaakt. Wanneer dit voltooid is, zal de grafiek die gebruiker wenst te zien gekopieerd worden naar de picturebox van de GUI. Met de twee knoppen onderaan kan de grafiek van de vorige of volgende waterverbruiker worden weergegeven. Vooraleer het programma wordt afgesloten, zal eerst de verbinding met de PLC en daarmee de verbinding met Excel worden afgebroken.
8.3.5. Besluit Toen deze programma’s afgewerkt waren, werden deze verdeeld over de productievloer. Dit was echter niet het originele opzet en bracht bijgevolg enkele problemen met zich mee. Excel is namelijk niet in staat om meerdere gebruikers toegang te bieden tot hetzelfde document. Wanneer een tweede gebruiker toegang vraagt tot een Excel-bestand levert dit fouten op. Bij de programma’s voor de waterlogging is de kans dat dit voorkomt reëel aangezien “Waterverbruik” de verbinding opstart met Excel op het ogenblik er op “GO” wordt geklikt, en pas afsluit wanneer het programma wordt afgesloten. De kans bestaat dat er twee personen het programma op hetzelfde ogenblik gebruiken. Een andere mogelijkheid is dat één gebruiker het programma “Waterverbruik” open heeft staan, en dat “Waterlogging” een logging van de watertellers wil maken, of dat iemand “Waterverbruik” wil openen wanneer “Waterlogging” net de nieuwe tellerstand aan het wegschrijven is. Deze problemen waren natuurlijk onaanvaardbaar en moesten geëlimineerd worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
44
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
8.4. Versie 3: Logging naar database / Eigen ontwikkelde GUI Gezien de problemen die Excel met zich voortbracht, moest er worden overgestapt naar een database om de stand van de watertellers in te bewaren. De keuze van database viel op SQL Server omdat Latexco alle databases met SQL Server uitvoert. Een bijkomende uitdaging bij deze overgang is dat er een mogelijkheid moest voorzien worden om zo eenvoudig mogelijk watertellers moeten toe te voegen.
8.4.1. Onderdelen Deze versie bezit ook vier onderdelen. Een programma dat de logging van de tellerstand verzorgt, een GUI voor de visualisatie van het waterverbruik, de driver IPS7LNK.dll die het mogelijk maakt om vanuit Visual Basic gegevens uit een PLC te halen die is aangesloten op het netwerk en een SQL Server database die het Excel-bestand vervangt. Het spreekt voor zich dat door de omschakeling van Excel naar SQL Server, de programma’s voor de logging en de visualisatie grondige wijzigingen ondergingen. De driver werd al besproken in punt 6.4.
8.4.2. SQL Server Deze database, die zich op het netwerk bevindt, bewaart nu alle historische gegevens over het waterverbruik in Latexco. Deze database vervangt het Excel-bestand uit de vorige twee versies. 8.4.2.1. Tabellen De database bevat twee tabellen. De eerste heet “t_Tellers”, de tweede “t_Logging”. “t_Tellers” bevat vier kolommen. De eerste is het TellerID en is de sleutel van de tabel. Iedere teller heeft bijgevolg een uniek opeenvolgend nummer. De tweede kolom bevat de naam van de teller. De derde kolom bewaart het gemiddelde maximum verbruik van iedere waterverbruiker. De laatste kolom heet “Belangrijkheid” en bepaalt de volgorde van de tellers in het programma voor de visualisatie van het waterverbruik. De volgorde van de watertellers in deze tabel is zeer belangrijk. De teller die op de eerste plaats in de DB van de PLC staat moet het TellerID 1 hebben, de teller op de tweede plaats moet TellerID 2 krijgen, … Merk op dat, in tegenstelling tot het Excel-document, enkel de tellerstand wordt bijgehouden. Er worden geen verbruiken bijgehouden, omdat deze kunnen worden berekend uit het verschil van de logging met de vorige logging. Dit beperkt de grootte van de database. Om de gegevens in het Excel-document “Waterlogging_C” niet verloren te laten gaan werden deze geëxporteerd naar de SQL Server. 8.4.2.2. Relaties De velden “TellerID” hebben een één-op-veel relatie. Dat wil zeggen dat het TellerID slechts één keer kan voorkomen in de tabel met de tellers, maar meerdere keren in de tabel dat de loggingen bijhoudt. Immers in de tabel “t_Tellers” worden alle tellers gedefinieerd en kan de bijhorende TellerID slechts één keer voorkomen. In de tabel “t_Logging” worden de loggingen van de tellerstanden bijgehouden. Iedere keer er een logging wordt uitgevoerd zal er één record van iedere waterteller bijkomen.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
45
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.11: Relatie van de database
8.4.2.3. Toegankelijkheid Zoals reeds vermeld staat deze SQL Server op het bedrijfsnetwerk, op een voor databases bestemde server. Via een gebruikersnaam en wachtwoord kan de SQL Server database worden geraadpleegd.
8.4.3. Programma voor de logging van de tellerstand De omschakeling van Excel naar SQL Server zorgde ervoor dat bijna het volledige programma moest worden herschreven. Het programma werd wel iets eenvoudiger omdat er geen grafieken moesten worden opgemaakt. Alles wat met visualisatie te maken heeft, werd verplaatst naar het programma voor de visualisatie. Het programma voor de logging zorgt nu enkel nog voor het invoegen van gegevens in de database. Door een tip en de hulp van de IT-dienst van Latexco werd het programma aangepast zodat het bij openen één logging uitvoert en zich onmiddellijk daarna weer afsluit. Wanneer het programma op de gepaste tijdsstippen opgeroepen wordt, zal de database ook up-to-date blijven. Windows voorziet een dergelijke service. In het configuratiescherm is er een onderdeel “Geplande taken” aanwezig. Hiermee kan een programma op een ingesteld tijdstip of tijdsinterval uitgevoerd worden. Door deze ingreep hoeft het programma “Waterlogging” niet meer continu te draaien op de pc. Het belast de pc niet onnodig en het kan niet meer per ongeluk worden beëindigd. 8.4.3.1. Lay-out Wanneer Windows dit programma oproept, zullen de acties worden genomen voordat het venster op het scherm wordt weergegeven. De laatste actie van het programma is zichzelf afsluiten. Hierdoor zal het venster nooit worden weergegeven. Er is dan ook geen lay-out voorzien voor dit programma. 8.4.3.2. Werking Hieronder wordt de dataflow van Waterlogging.exe en Waterverbruik.exe in één figuur weergegeven.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
46
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Figuur 8.12: Dataflow van “Waterlogging.exe” en “Waterverbruik.exe”
Waterlogging.exe doorloopt een aantal stappen om een logging te maken van de watertellers. Eerst maakt Waterlogging een connectie met de SQL Server database. Hiervoor wordt een gebruikersnaam en paswoord gebruikt. Als de connectie geslaagd is, zal “Waterlogging.exe” in “t_Tellers” kijken hoeveel watertellers er aanwezig zijn. De volgende actie is het controleren op gemiste loggingen. Het is mogelijk dat er loggingen gemist zijn door netwerkproblemen, de server die uit lag, etc… . Indien één of meerdere loggingen zijn gemist, moet voor iedere waterteller het aantal gemiste loggingen worden toegevoegd aan de tabel “t_Logging”. Deze records bevatten het tijdstip van de gemiste logging. Het veld voor de tellerstand blijft leeg. Op deze manier blijven de grafieken die “Waterverbruik.exe” zal maken correct. Vervolgens haalt Waterlogging de stand van de tellers uit de PLC met behulp van de IPS7LNK.dll. Het aantal waarden dat uit de PLC wordt gelezen, werd bepaald door het aantal tellers dat in “t_Tellers” aanwezig is. Voor iedere waterteller zal er een record worden toegevoegd aan “t_Logging” met het TellerID, de tellerstand en het tijdstip van de logging. Na de logging rest enkel nog het verbreken van de verbinding met de PLC en de SQL Server. Om te bepalen als er een logging is gemist moeten de tijdsgegevens uit de kolom “DatumTijd” begrepen worden door Visual Basic. De gegevens in de SQL Server zijn van het type timestamp. Visual Basic heeft problemen om deze correct te interpreteren. Daarom moet er een omzetting gebeuren. De IT-dienst van Latexco beschikte over een functie die de datum en tijd uit SQL Server begrijpbaar maakt voor Visual Basic.
8.4.4. Programma voor de Visualisatie Nu de gegeven niet langer worden bewaard in een Excel-document, maar in een SQL Server database moest ook het programma voor de visualisatie volledig worden herbekeken.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
47
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
Het doel van dit programma is grafieken van het waterverbruik weergeven. Met SQL Server kunnen echter geen grafieken gemaakt worden. Er zal dus nog steeds een Excel-document nodig zijn om de grafieken te genereren. Het programma moet het voorlopige gemiddelde waterverbruik van de huidige ploeg visualiseren. Ook dit programma moet zó worden gemaakt dat er eenvoudig watertellers kunnen worden toegevoegd. 8.4.4.1. Lay-out
Figuur 8.13: “Waterverbruik.exe” na opstart
De lay-out bleef op een detail na ongewijzigd. Er is een knop toegevoegd met een printer erop, bedoeld om het scherm af te printen. Het huidige gemiddelde waterverbruik wordt nog steeds weergegeven door de hoogte van een balk ten opzichte van een lijn die het maximum verbruik voorstelt.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
48
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
8.4.4.2. Werking De figuur in punt 8.5.3.2 van de dataflow verduidelijkt de werking van Waterverbruik.exe. De reden waarom het Excel-bestand en Waterverbruik.exe in hetzelfde kader staan, is omdat ze op eenzelfde pc staan. Wanneer het programma’s wordt geopend, zullen eerst alle comboboxen ingevuld worden. Nog tijdens de opstart zal het programma enkele gegevens uit de database halen die hij later nodig zal hebben. Uiteraard zal er eerst een verbinding worden gemaakt met SQL Server. Het eerste wat uit de database wordt gehaald is de volgorde van de watertellers in de PLC. Deze volgorde wordt opgeslagen in een array. Dit is belangrijk omdat de volgorde van de waterverbruikers op het scherm niet overeenstemt met de volgorde in PLC. Dit omdat sommige waterverbruikers belangrijker zijn dan andere en daardoor meer geraadpleegd moeten worden. De volgorde van de waterverbruikers in de combobox op het scherm wordt bepaald door het belang ervan. Deze volgorde ligt vast in de kolom “Belangrijkheid” in de tabel “t_Tellers” van de SQL Server database. Hierna zal de naam van de teller en indien aanwezig het maximum waterverbruik uit dezelfde tabel worden gehaald. Beide gegevens worden in een aparte array bewaard. Ze worden bewaard in volgorde van hun TellerID, niet volgens belangrijkheid. Op het einde van de opstart zal Waterverbruik.exe de hoogtes van de balk berekenen. Zoals reeds vermeld is de hoogte van de balk een maat voor het gemiddelde waterverbruik van de ploeg die momenteel bezig is. Deze hoogte is gerelateerd ten opzichte van een lijn. De hoogte daarvan stelt het maximum toegelaten gemiddelde waterverbruik voor. Om de hoogte van de balk te kunnen berekenen, moet Waterlogging de huidige stand van de watertellers weten. Deze haalt hij uit de PLC met behulp van de IPS7LNK.dll driver. Het tweede gegeven dat moet gekend zijn, is de stand van de watertellers op de laatste logging. Deze kan Waterlogging uit de SQL Server database halen. Samen met deze stand zal ook het tijdstip van de laatste logging worden gelezen uit de database. Door de systeemtijd op te vragen kan Waterverbruik.exe de huidige tijd te weten komen. Het gemiddelde waterverbruik wordt becijferd door de huidige stand te verminderen met de laatste stand van de watertellers en de uitkomst te delen door het tijdsverschil tussen de laatste logging en nu. Met de regel van drie kan de hoogte van de balk ten opzichte van de lijn worden berekend. Nu “Waterverbruik.exe” is opgestart, kan de gebruiker een tijdsbereik in geven waarin hij het waterverbruik van een bepaalde verbruiker wil raadplegen. Het eerste wat Waterverbruik.exe doet is een connectie maken met het lokale Excel-document. Dit document moet aanwezig zijn op iedere pc die gebruik wil maken van Waterlogging.exe. Hierin worden de grafieken van het waterverbruik aangemaakt die later bestemd zijn voor het venster van de GUI. Als de connectie met het Excel-bestand slaagt, zal de hoogte van de balk worden ingesteld met de vooraf berekende waarde. Dit is op voorwaarde dat er voor de gevraagde waterverbruiker een maximum is opgegeven. Indien dit niet het geval is, wordt deze stap overgeslagen. In de volgende stap worden alle bewerkingen in Excel uitgevoerd. Dit kan terug opgesplitst worden in twee delen; namelijk het invoeren van de gegevens en het generen van de grafieken. De gegevens voor de grafieken worden gefilterd uit de SQL Server database. Voor iedere waterteller worden alle records uit de tabel met de logging die binnen het ingegeven tijdsbereik liggen opgehaald. Al deze gegevens worden niet in één keer opgehaald, maar teller per teller. De loggingen worden gerangschikt volgens datum. Iedere waterverbruiker beslaat twee kolommen in het Excel-rekenblad. In de eerste staat de stand van de watertellers, in de tweede het verbruik tijdens de shift. Dit verbruik wordt door Waterverbruik.exe berekend en niet door Excel. In de eerste kolom van het rekenblad komen de datums van de loggingen. Deze vormen de x-as van de grafieken. Nu de gegevens ingevoerd zijn in Excel, wordt er voor iedere waterverbruiker een Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
49
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
grafiekblad toegevoegd, want het Excel-bestand is standaard slecht van één enkel rekenblad voorzien. Daarna maakt Waterverbruik.exe voor iedere waterverbruiker een grafiek op. Alle grafieken krijgen opnieuw een even hoge y-as, zodat ze snel vergeleken kunnen worden. Deze regel is niet van toepassing op enkele grote waterverbruikers, waar het gemiddelde verbruik hoger ligt dan de standaard 5m³/h. Verder wordt de afstand tussen twee verticale rasterlijnen vergroot als het tijdsbereik een bepaalde waarde overschrijdt. Zo blijven de grafieken overzichtelijk. Indien er voor de waterverbruiker een maximum gemiddelde verbruik is opgegeven, zal dit worden toegevoegd aan de grafiek. Het maximum gemiddelde verbruik wordt weergegeven door een rode horizontale lijn. Nu alle grafieken zijn aangemaakt, kan het gevraagde worden overgebracht naar “Waterverbruik.exe”. Wanneer er op de knop “Volgende” of “Vorige” wordt geklikt, zal “Waterverbruik.exe” de grafiek van respectievelijk de volgende of vorige waterverbruiker afbeelden. “Volgende” en “Vorige” volgen ook de lijst volgens het belang van de verbruikers.
8.4.5. Toevoegen van een waterteller Op vraag van Latexco werden de programma’s “Waterlogging.exe” en “Waterverbruik.exe” zo ontworpen dat het zeer eenvoudig is om watertellers toe te voegen. Om een nieuwe toe te voegen, moet vooreerst zijn waarde in de databouwsteen komen. De plaats van de tellerstand moet aansluiten op de vorige. De eerste plaats in de databouwsteen moet wel vrij blijven. Daarna moet de waterverbruiker worden toegevoegd in de tabel “t_Tellers” in de SQL Server database. Het nummer van het “TellerID” dat de waterverbruiker meekrijgt, moet overeenkomen met de plaats in de databouwsteen in de PLC. Als de stand van een nieuwe verbruiker bijvoorbeeld op plaats 38 in de databouwsteen komt, moet deze “TellerID” 38 krijgen. Er moet rekening worden gehouden met het feit dat TellerID de sleutelwaarde is van de tabel “t_Tellers”. Dit betekent dat wanneer er een nieuwe teller wordt toegevoegd, die automatisch het eerst volgende vrije nummer krijgt. Er wordt dus best omgekeerd gewerkt; eerst de teller toevoegen in de SQL Server database, en daarna de teller een overeenstemmende plaats toewijzen in de PLC. Wanneer de teller in de PLC en in de SQL Server database staat, is de teller toegevoegd. Aan de programma’s hoeft niets gewijzigd te worden. Deze bepalen zelf hoeveel tellers er moeten gelogd worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
50
Procesvisualisatie en datacaptatie SIEMENS PLC’s zonder OPC technologie
9. Besluit Met uitzondering van de S5 toepassing zijn alle ontworpen applicaties waardevol gebleken voor Latexco. De programma’s voor het waterverbruik hebben eerst en vooral voor een tijdsbesparing bij het loggen gezorgd. Dit gebeurt nu automatisch en het verbruik kan snel gevisualiseerd worden. Het is nu ook voor iedereen mogelijk om deze gegevens te raadplegen. Op deze manier kan efficiënter gestreefd worden naar een beperking van het waterverbruik. Een bemerking bij deze laatste programma’s is dat ze sneller konden ontwikkeld worden indien er in het begin beter was afgesproken wat de eindbedoeling ervan was. Met de nieuwe programma’s voor het ophalen en opsturen van databouwstenen kunnen bestaande visualisatieprogramma’s gemoderniseerd worden. De programma’s die het mogelijk maken om zelf een visualisatie te creëren, zullen in de toekomst bijdragen tot een betere beheersing van het productieproces. Het concept vormt een basis waarop verder gewerkt kan worden.
Jorgo Dewilde
Industrieel ingenieur elektromechanica optie automatisatie
51