Datacaptatie, -archivering en -rapportering van een kristallisatieproces Alexander Dewaele 25 mei 2009
Voorwoord Een masterproef neemt veel tijd en energie in beslag. Maar eenmaal het gewenste resultaat bereikt is, brengt dit een zeer goed gevoel van tevredenheid met zich mee. Het is enkel een kwestie om de juiste verhouding tussen inspanning en ontspanning doorheen het jaar te vinden. Deze verhouding was reeds snel bekomen dankzij de ontspannen sfeer bij de collega’s. Er werd hard gewerkt maar er was zeker ook tijd om stoom af te blazen. Hierbij zou ik graag de collega’s bij Vandemoortele bedanken die mij doorheen het jaar geholpen hebben: Marc Crop, Henk Vandekerckhove, Emmanuel Seurinck en Christophe Soenen. Zeker wil ik ook Karel Delporte bedanken voor het testen van de applicatie. Dankzij zijn opmerkingen en voorstellen is de applicatie veel gebruiksvriendelijker geworden. Uiteraard heb ik de meeste steun van mijn promotoren gehad, namelijk mijn externe promotor Marc Crop en mijn interne promotor Henk Capoen. Door hun kritische ingesteldheid en evaluaties, wist ik telkens waar ik aan toe was en aan welke punten ik moest sleutelen. Zij stonden ook telkens voor mij klaar toen ik niet meer verder kon of iets niet begreep. Mede dankzij hen is de masterproef tot een goed einde gekomen. Als laatste zou ik Wesley Vandewalle willen bedanken. Het masterproefvoorstel kwam namelijk van meneer Vandewalle maar doordat hij van job veranderde, kon hij niet langer mijn promotor zijn. Niettemin bleef hij mij doorheen het jaar steunen. Hartelijk bedankt, Alexander Dewaele
i
Inhoudsopgave 1 Manufacturing Execution System 1.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 CIM piramide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 ANSI/ISA-95 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Models & Terminology . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Object Model Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Activity Models of Manufacturing Operations Management . . . . . . 1.3.4 Object Models and Attributes of Manufacturing Operations Management 1.3.5 Business to Manufacturing Transactions . . . . . . . . . . . . . . . . . 1.4 Besluit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10 12 12 13 14 15 15 15
2 Het 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8
. . . . . . . .
17 18 18 19 20 20 23 23 26
. . . . . . .
27 27 27 29 30 32 32 32
kristallisatieproces Werktank . . . . . . Centrifugaalpomp . . Pasteur . . . . . . . Hogedrukpomp . . . Koelmachine . . . . Rustbuis . . . . . . . Poefer . . . . . . . . Retour . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
3 Proces Control System 3.1 Inleiding . . . . . . . . . . . . . 3.2 Sensor . . . . . . . . . . . . . . 3.3 Meetomvormer . . . . . . . . . 3.4 Programmable Logic Controller 3.5 Voorbeeld . . . . . . . . . . . . 3.5.1 Formule Pt100 . . . . . 3.5.2 Volledig uitgerekend . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
ii
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
. . . . . . . .
. . . . . . .
Inhoudsopgave 4 OPC Server 4.1 Inleiding . . . . . . . . . . . . . . . . . . 4.2 De interface van het device configureren 4.3 Het virtueel bussysteem samenstellen . . 4.4 Configureren van de OPC Server . . . . 4.4.1 Een station toevoegen . . . . . . 4.4.2 De hardware configureren . . . . 4.4.3 Een verbinding toevoegen . . . .
. . . . . . .
34 34 34 35 36 36 37 38
. . . . . . . . . . . . . . . .
39 39 39 39 40 41 41 41 41 42 42 42 43 45 47 48 49
6 Oracle 6.1 Databases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Connectie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
50 50 51
7 Structured Query Language 7.1 Algemeen . . . . . . . . . . 7.2 Select statement . . . . . . 7.3 Insert statement . . . . . . 7.4 Update statement . . . . . 7.5 Delete statement . . . . . .
53 53 53 55 56 57
5 Proficy Historian 5.1 Inleiding . . . . . . . . . . . . . . . . . . 5.2 Datacollectoren . . . . . . . . . . . . . . 5.2.1 Inleiding . . . . . . . . . . . . . . 5.2.2 Architectuur . . . . . . . . . . . 5.3 Tags . . . . . . . . . . . . . . . . . . . . 5.4 Archieven . . . . . . . . . . . . . . . . . 5.4.1 Algemeen . . . . . . . . . . . . . 5.4.2 Archiefbeheer . . . . . . . . . . . 5.4.3 De groei van het archief schatten 5.5 Proficy Historian Administrator . . . . . 5.5.1 Algemeen . . . . . . . . . . . . . 5.5.2 Main . . . . . . . . . . . . . . . . 5.5.3 Tags . . . . . . . . . . . . . . . . 5.5.4 Collectors . . . . . . . . . . . . . 5.5.5 Archives . . . . . . . . . . . . . . 5.5.6 Messages . . . . . . . . . . . . .
Alexander Dewaele
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
iii
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . . . .
. . . . . . . . . . . . . . . .
. . . . .
. . . . .
Inhoudsopgave 8 TCP/IP 8.1 Inleiding . . . 8.2 OSI-model . . 8.3 Adressering . 8.4 Hardware . . 8.5 Routering . . 8.6 NAT protocol
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . en portforwarding
9 Server Applicatie 9.1 Gegevens opvragen . . . 9.1.1 ADO .NET . . . 9.1.2 Opbouw . . . . . 9.1.3 Code . . . . . . . 9.1.4 Resultaat . . . . 9.2 Gegevens opslaan . . . . 9.2.1 Microsoft Access 9.2.2 Opbouw . . . . . 9.2.3 Code . . . . . . . 9.3 Gegevens verzenden . . 9.3.1 Server & cli¨ent . 9.3.2 Opbouw . . . . . 9.3.3 Code . . . . . . . 10 Report Tool 10.1 Visual Basic .NET . 10.2 Componenten . . . . 10.2.1 Connect . . . 10.2.2 Global . . . . 10.2.3 Recipe . . . . 10.2.4 Comparison . 10.3 Extra . . . . . . . . 10.3.1 Interval . . . 10.3.2 Grafieken . . 10.3.3 Saves . . . . 10.3.4 Statusstrip . 10.3.5 Minimaliseren 10.3.6 Helpfile . . . 10.3.7 Installatie . . 10.4 Programmaopbouw .
Alexander Dewaele
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
iv
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . .
59 59 59 61 62 63 64
. . . . . . . . . . . . .
66 66 66 68 69 70 71 71 73 74 75 75 75 77
. . . . . . . . . . . . . . .
78 78 80 80 82 84 84 86 86 86 87 89 89 89 90 90
Inhoudsopgave 10.4.1 10.4.2 10.4.3 10.4.4 10.4.5 10.4.6
SDK . . . . . . . Opstarten . . . . Tab Connect . . Tab Global . . . Tab Recipe . . . Tab Comparison
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
90 92 93 94 95 96
A Binding
103
B Klassendiagramma Report Tool
104
C Klassendiagramma serverapplicatie
105
D SDK: Code tags opvragen
106
E SDK: Code values opvragen
107
F Objectbrowser Oraclecli¨ ent
108
G Installatie Report Tool
109
Alexander Dewaele
v
Abstract It concerns a project in Izegem (Belgium) in coorperation with the Vandemoortele Group. Group Vandemoortele is a Belgian food group with a European dimension. The Group focuses on three business segments: soy products, frozen dough products and margarines and fats. The crystallisation process of margarine is a part of the production process. This crystallisation process has a number of inputs and output parameters. A lot of these parameters depend on the produced recipe. The project objectives are to make reports of the parameters. In order to build these reports, it is necessary to collect and to archive the process parameters with a datacaptation system. The used datacaptation system is the historian database “Proficy Historian” from “GE Fanuc”. With the data from the historian database reports are produced, both time-based as recipebased. It is also possible to compare different batches from the same recipe. Keywords: process parameters, historian database, Proficy Histian, reports.
vi
Gebruikte afkortingen ADO: Active Data Object CIM: Computer Integrated Manufacturing CLR: Common Language Runtime CSV: Comma Separated Values COM: Component Object Model CSMA/CD: Carrier Sense Multiple Access/Collision Detection DB: Database/Datablock DBMS: DataBase Management System DCL: Data Control Language DCOM: Distributed Component Object Model DDL: Data Definition Language DML: Data Manipulating Language ERP: Enterprise Resource Planning GUI: Graphical User Interface IP: Internet Protocol ISA: Instrumentation, Systems and Automations Society ISO-OSI: ISO Reference Model for Open Systems Interconnection LAN: Local Area Network MB: MegaByte MES: Manufacturing Execution System
vii
Inhoudsopgave MPI: Multi Point Interface ODBC: Open DataBase Connectivity OLE: Object Linking and Embedding OLE DB: Object Linking and Embedding, DataBase OPC: OLE for Process Control PC: Personal Computer PCS: Proces Control System PLC: Programmable Logic Controller RTD: Resistive Temperature Device SDK: Software Development Kit SQL: Structured Query Language TCP: Transmission Control Protocol VB: Visual Basic VBA: Visual Basic for Applications VDM: Vandemoortele XML: Extended Markup Language
Alexander Dewaele
viii
Lijst van tabellen 1
VBA vs VB.NET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
3.1
Samenvattende tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
7.1 7.2 7.3 7.4 7.5
Voorbeeldtabel . . . . . . . . Resultatentabel van SELECT Tabel na INSERT statement Tabel na UPDATE statement Tabel na DELETE statement
. . . . .
54 55 56 57 58
8.1
Klasses IP adressen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
9.1 9.2
Tabel Recepten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Resultatentabel van SELECT statement . . . . . . . . . . . . . . . . . . . . .
70 71
. . . . . . statement . . . . . . . . . . . . . . . . . .
ix
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
Lijst van figuren 1 2 3 4 5 6 7 8
Organisatie[16] . . . . . . . Kaart Europa[16] . . . . . Excel Add-In . . . . . . . Software Development Kit Report Tool in Excel . . . Netwerken Vandemoortele Werking serverapplicatie . Vergelijking grafieken . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
2 2 4 5 6 7 8 9
1.1 1.2 1.3 1.4
CIM piramide . . . . . . . . . Functional Hierarchy Model . Information Exchange Model Production Activity Model .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
11 12 13 14
2.1 2.2 2.3 2.4 2.5 2.6
Proces . . . . . . . . . . . . . . . Platenpasteur . . . . . . . . . . . Koelcilinders met mesassen . . . Tussen 2 doseringen . . . . . . . Tijdens het doseren . . . . . . . . Bij stilstand van de afvulmachine
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
17 19 22 24 25 25
3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8
Lineair verband tussen temperatuur en Aansluiting Pt100 . . . . . . . . . . . Actieve en passieve meetomvormer . . Aansluiting sensor op meetomvormer[6] Instellingen analoge kaart . . . . . . . Hardware configuratie . . . . . . . . . Omzetting stroom in digitale waarde . Volledige berekening . . . . . . . . . .
weerstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
28 28 29 30 31 31 32 33
4.1 4.2
PG/PC Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Samenstelling virtuele bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35 36
. . . . . . . .
x
Lijst van figuren 4.3 4.4 4.5 4.6
Simatic Manager . Configuratie van de NetPRO . . . . . . S7 Connection . .
. . . . . . . . OPC Server . . . . . . . . . . . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
37 37 38 38
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8
Architectuur Proficy Historian . . . . . . . Proficy Historian Administrator: Main . . . Proficy Historian Server Login . . . . . . . Proficy Historian Administrator: Tags . . . How to add an OPC tag . . . . . . . . . . . Proficy Historian Administrator: Collectors Proficy Historian Administrator: Archives . Proficy Historian Administrator: Messages .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
40 43 45 45 46 47 48 49
6.1
Relationele Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
51
7.1 7.2 7.3 7.4
SQL SQL SQL SQL
8.1 8.2 8.3 8.4 8.5 8.6
OSI model en TCP/IP . . Adressering TCP/IP[13] . Netwerkelementen . . . . Voorbeeld routering . . . Voorbeeld NAT protocol . Voorbeeld port forwarding
9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11
ADO . . . . . . . . . . . . . . . ADO .NET[13] . . . . . . . . . Add Reference . . . . . . . . . ADO .NET Klassenset[13] . . . Opbouw gegevens opvragen . . Tabellen Access database . . . Dataverkeer bij receptenrequest Opbouw gegevens opslaan . . . Verbinding server-cli¨ent[13] . . . Opbouw gegevens verzenden . . Flowchart gegevens verzenden .
SELECT Statement[14] INSERT statement[14] UPDATE statement[14] DELETE statement[14]
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
54 55 56 57
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
60 61 63 63 64 65
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Access database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
67 67 68 68 69 72 73 74 75 76 76
10.1 Het .NET Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
Alexander Dewaele
. . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . zonder . . . . . . . . . . . . . . . .
xi
Lijst van figuren 10.2 Report Tool: Connect . . . . . . 10.3 Recepten manueel updaten . . . 10.4 Report Tool: Global . . . . . . . 10.5 Report Tool: Recipe . . . . . . . 10.6 Report Tool: Comparison . . . . 10.7 Selecteren vs Aanvinken . . . . . 10.8 Saves . . . . . . . . . . . . . . . . 10.9 Openen saves . . . . . . . . . . . 10.10De statusstrip . . . . . . . . . . . 10.11Tray door minimalisatie . . . . . 10.12Openen helpfile . . . . . . . . . . 10.13SDK: Opvragen tags en waardes 10.14Opbouw opstarten applicatie . . 10.15Flowchart recepten updaten . . . 10.16Opbouw connect . . . . . . . . . 10.17Interface connect . . . . . . . . . 10.18SDK Tags: Global . . . . . . . . 10.19Opbouw global . . . . . . . . . . 10.20Interface global . . . . . . . . . . 10.21Opbouw recipe . . . . . . . . . . 10.22Interface recipe . . . . . . . . . . 10.23Opbouw comparison . . . . . . . 10.24Interface comparison . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
80 82 82 84 85 86 88 89 89 89 89 90 92 93 93 94 94 95 95 96 96 97 97
A.1 Early binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Late binding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
103 103
B.1 Klassendiagramma Report Tool . . . . . . . . . . . . . . . . . . . . . . . . . .
104
C.1 Klassendiagramma serverapp . . . . . . . . . . . . . . . . . . . . . . . . . . .
105
F.1 Object browser provider Oracleclient . . . . . . . . . . . . . . . . . . . . . . .
108
G.1 Procedure installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
109
Alexander Dewaele
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
xii
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . .
Inleiding Bedrijfsvoorstelling Vandemoortele[16] is een Belgische voedingsgroep die actief is in Europa. De Vandemoortele groep omvat 3 business segmenten: 1. Sojaproducten; 2. Diepvries bakkerijproducten; 3. Margarines en vetten. De voornaamste activiteiten van de groep worden ontwikkeld en opgevolgd door twee divisies: 1. De Lipids & Dough divisie (hoofdzakelijk “business to business” met Diepvries bakkerijproducten en Margarines & Vetten); 2. de Soy Foods divisie (hoofdzakelijk “business to consumer” met Alpro en Provamel als merken). De Vandemoortele groep is opgericht in 1899. De eerste fabriek werd gebouwd in Izegem door de heer Constant Vandemoortele en zijn zoon Adh´emar. Al snel expandeert de groep en vandaag telt ze 3400 werknemers in 12 Europese landen. De groep schrijft het succes toe aan de waarden die ze nastreeft: 1. Creativiteit en Ambitie; 2. Ownership en Resultaatgerichtheid; 3. Integriteit en Vertrouwen. Vandaag ziet de organisatie van de groep Vandemoortele er als volgt uit:
1
Lijst van figuren
Figuur 1: Organisatie[16]
De groep bezit ook nog het transportbedrijf “Metro” dat werd opgericht in 1955 en een deelneming van 25 % in ’Lipidos Santiga’, marktleider in raffinage van vetten in Spanje. De volgende kaart verduidelijkt de verdeling van de verschillende sites over Europa. De gegevens datteren wel van voor de overname van “Panavi”.
Figuur 2: Kaart Europa[16]
Alexander Dewaele
2
Lijst van figuren
Doelstellingen Het kristallisatieproces van margarine is een onderdeel van het productieproces. Dit kristallisatieproces heeft een aantal input- en outputparameters. Veel van deze parameters zijn afhankelijk van het geproduceerd recept. De outputparameters van het proces zijn drukken, temperaturen, debieten van de pompen, aantal geproduceerde eenheden, draaitijden, stromen, aan/uit, ... De doelstellingen van dit project zijn: Het realtime capteren en historisch verzamelen van de parameters aan de hand van een datacaptatiesysteem. (OPC Server, Historian database, SQL); Het aanmaken van diverse rapporteringen (zowel tijds- als batchgestuurd) op het ge¨ınstalleerde datacaptatiesysteem. Koppelingen naar het proces zijn dus noodzakelijk; De mogelijkheid om verschillende runs van recepten te vergelijken.
Het project is zo opgebouwd dat het onderaan de CIM piramide begint en evolueert naar boven toe. Hoewel het grootste deel van het project zich afspeelt in de MES laag, komen ook de PLC laag en OPC Server aan bod.
Projectanalyse Datacaptatie en -archivering Het programma “Proficy Historian” van “GE Fanuc” staat in voor het capteren en archiveren van de procesdata. Dit programma was reeds aangekocht voor het begin van het project. Proficy Historian biedt de mogelijkheid om de gecapteerde data te rapporteren via: 1. Een Excel Add-In; 2. Een webportal; 3. De Software Development Kit (SDK). Opmerking: De webportal is niet getest geweest omdat er onmiddellijk werd geopteerd om zelf een applicatie te ontwikkelen.
Datarapportering Omtrent de applicatie, die instaat voor de datarapporteringen, waren er een paar mogelijkheden. Alexander Dewaele
3
Lijst van figuren Excel Add-In
Figuur 3: Excel Add-In
De rapportering gebeurde in Excel aan de hand van de programmeertaal VBA “Visual Basic for Applications” en de Excel Add-In van GE Fanuc. De eenvoud van de controls in Excel vormde een probleem. Vooral voor het gebruik van lijsten en treeviews was het verplicht een extra librarie toe te voegen. Zelf dan waren de verwachtingen nog niet voldaan. Ook het feit dat de gebruikers alles zelf konden wijzigen, was een groot risico. Zoals het verslepen van cellen, wijzigen van charts, wijzigen van celeigenschappen, ... waardoor de code in het honderd liep. Een wachtwoord bracht een tijdelijke oplossing maar dit was uit den boze. Een tweede probleem was dat de applicatie versieafhankelijk zou zijn. Bij het overstappen naar een nieuwe Excel-versie zou de mogelijkheid bestaan dat de applicatie niet meer correct zou functioneren. Het derde en tevens grootste probleem is namelijk dat de Excel Add-In steeds met arrays werkt. In Excel is een array ´e´en geheel en bij de kleinste wijziging moet de volledige array verwijderd en hermaakt worden. Het automatiseren en gebruiken van deze arrays was een onmogelijke opdracht. De SDK “Sofware Development Kit” verving al snel de Excel Add-In. SDK De SDK is een zogenaamd COM object. Een COM object bevat een interface van de functionaliteiten die het object biedt. Het is een soort blackbox, de mogelijkheden van het object zijn bekend maar de interne werking is verborgen. De SDK van Proficy Historian maakt het mogelijk om te connecteren met de Historian database en om tijdsgebasseerde waardes op te vragen. De output van de SDK is altijd een datarecordset. Met de SDK is het mogelijk om
Alexander Dewaele
4
Lijst van figuren elke individuele waarde apart aan te spreken wat van uiterst belang is bij het cre¨eren van samenvattingen en grafieken.
Figuur 4: Software Development Kit
De SDK bevat een servermanager. Aan de hand van deze servermanager kunnen de beschikbare Historian databases opgevraagd worden om dan uiteindelijk te connecteren met een database. Eenmaal geconnecteerd kunnen de tags, messages, data, archives en interfaces geraadpleegd worden.1 Herinner wel dat hier nog steeds met Excel (VBA) wordt gewerkt. De SDK vervangt enkel de Excel Add-In. De eerste versie van de applicatie in Excel zag er uit zoals in figuur 5. 1
Afhankelijk van de toegang van de ingelogde gebruiker.
Alexander Dewaele
5
Lijst van figuren
Figuur 5: Report Tool in Excel
VBA vs VB.NET Door de Excel Add-In te vervangen door de SDK was enkel het probleem van de arrays opgelost. Vooral de eenvoud van de controls in Excel leidde tot ergernis. De beslissing kwam er om een stand-alone VB.NET applicatie te ontwikkelen in Visual Studio waarmee alle problemen opgelost zijn. De controls voldoen volledig aan de gestelde eisen, de gebruikers kunnen niets veranderen aan de interface en er kan versieonafhankelijk2 geprogrammeerd worden. Het ziet er ook professioneler uit en het is veel gebruiksvriendelijker. De gebruikers moeten er namelijk niet aan denken om de Excel Add-In te laden en connecteren tot een Historian database is uiterst eenvoudig. Treedt er toch een probleem op dan is de helpfile altijd ter beschikking. Tabel 1 geeft de voordelen en de nadelen van zowel VBA als VB.NET. 2
Door gebruik te maken van late-binding. Zie bijlage A.
Alexander Dewaele
6
Lijst van figuren VBA
VB.NET
+ Excel is gekend + Print mogelijkheid
+ Controls hebben meer mogelijkheden + Excel onafhankelijk + .NET framework ter beschikking + Uitzicht is professioneler + Docking mogelijkheid - .NET framework verplicht - VB.NET kennis verplicht bij latere wijzigingen
-
Gebruikers kunnen wijzigingen aanbrengen Kennis VBA verplicht bij latere wijzigingen Excel versieafhankelijk Niet gebruiksvriendelijk Verplichte aanschaf Excel
Tabel 1: VBA vs VB.NET
Oracle vs Linked Tables De verschillende netwerken binnen de groep Vandemoortele kunnen vereenvoudigd voorgesteld worden zoals in figuur 6.
Figuur 6: Netwerken Vandemoortele
Elke afdeling bezit een Oracle database met de recepten van de producten. Elke afdeling zal de applicatie voor de datarapportering gebruiken en moet daarom toegang hebben tot
Alexander Dewaele
7
Lijst van figuren de Oracle database. Het probleem is dat deze Oracle databases beveiligd zijn en dat maar enkele, vaste IP adressen toegang hebben. Nu zou elke gebruiker van de applicatie toegang moeten hebben wat dus uiteraard onmogelijk is in het kader van de beveiliging. De eerste oplossing was gebruik maken van “Linked Tables”. Een linked table is een tabel in Access die een kopie voorstelt van een tabel van de Oracle database. De server waarop de linked tables zich bevonden had een vast IP en kon dus toegang krijgen tot de Oracle databases. Hiermee was het probleem van beveiliging opgelost.
Linked Tables vs Eigen serverapplicatie Al snel zorgden de linked tables voor andere problemen. Er was geen mogelijkheid om de gebruikersnaam en het wachtwoord van de Oracle database op te slaan in de linked tables. Dus bij iedere connectie en query naar de linked tables werd gevraagd naar een gebruikersnaam en wachtwoord. Op zich geen probleem maar de gebruikersnaam en het wachtwoord kon niet meegegeven worden vanuit de applicatie in VB.NET. Dit was wel een probleem want de VB.NET applicatie kon de gegevens van de linked tables dus niet opvragen. Een eigen serverapplicatie bracht de oplossing. Doordat deze applicatie zich op de server bevindt, bezit het een vast IP adres en kan het connecteren naar iedere Oracle database. De applicatie fungeert als een soort doorgeefluik. De rapporteringsapplicatie verbindt via TCP\IP met de serverapplicatie en vraagt de recepten van een bepaalde oracledatabase van een bepaalde afdeling op. De serverapplicatie connecteert met de oracledatabase en stuurt een query. Eenmaal de data van de oracledatabase is toegekomen bij de serverapplicatie, stuurt de serverapplicatie de data door naar de rapporteringsapplicatie. Een ander voordeel is dat de query van de serverapplicatie enkel twee kolommen van de totale tabel opvraagt, terwijl een linked table telkens de volledige tabel opvraagt. De query van de serverapplicatie is hierdoor veel sneller.
Figuur 7: Werking serverapplicatie
Grafieken De grafieken van de stand-alone applicatie in VB.NET werden in het begin ge¨exporteerd uit Excel. Later stelden de gebruikers een aantal eisen aan de grafieken:
Alexander Dewaele
8
Lijst van figuren Precieze aflezing van de co¨ ordinaten van de punten op de grafiek; Inzoomen op de grafiek; Afdrukken van de grafieken; Meerdere Y-assen afhankelijk van de engineering unit van de tag.
De grafieken uit Excel boden niet de mogelijkheid om hieraan te voldoen. De grafieken van ZedGraph waren de perfecte oplossing. Figuur 8 toont het verschil tussen beide grafieken.
Figuur 8: Vergelijking grafieken (ZedGraph bovenaan, Excel onderaan)
Alexander Dewaele
9
Hoofdstuk 1
Manufacturing Execution System 1.1
Inleiding
MES[3][22] “Manufacturing Execution System” is de laag die instaat voor de koppeling tussen de productievloer en de administratie. Deze koppeling heet de verticale integratie binnen een bedrijf. De integratiestandaarden uitgegeven door ISA, kunnen dienen als leidraad om deze verticale integratie te realiseren. Toch lijkt deze verticale integratie op het leggen van een puzzel tussen de “Enterprise Resource Planning” en het “Proces Control System”.
1.2
CIM piramide
CIM[21] “Computer Integrated Manufacturing” is een concept waarbij een proces volledig digitaal wordt beheerd door een computersysteem. Het idee is om de real-time data afkomstig van sensoren op de productievloer over het gehele bedrijf ter beschikking te stellen. Het is natuurlijk niet de bedoeling dat werknemers op de administratieve afdeling de mogelijkheid krijgen om de status van ´e´en enkele sensor op te vragen. Maar wel bijvoorbeeld op te vragen hoeveel producten er in de voorbije week zijn geproduceerd. Het ligt voor de hand dat deze real-time status van de sensor wel belangrijk is voor het functioneren van het productieproces.
10
Hoofdstuk 1. Manufacturing Execution System
Figuur 1.1: CIM piramide
Naarmate er omhoog gegaan wordt in de CIM piramide is het realtimekarakter van de data minder belangrijk, maar stijgt de grootte van de benodigde data. Hoe lager in de CIM piramide, hoe sneller de data toegankelijker moet zijn, maar hoe kleiner de grootte van de nodige data. Het gebruik van CIM berust op drie basisdoelen: 1. Het simplificeren van alle productietechnologie¨en en -technieken; 2. Het automatiseren van zoveel mogelijk productieprocessen; 3. Integratie en co¨ ordinatie van alle aspecten van ontwerp, productie en gerelateerde functies door het gebruik van computerhardware en -software. Enkele voordelen: Toename flexibiliteit en reactievermogen; Toename in productie productiviteit; Korte klanten doorlooptijd; Toegenomen kwaliteit; Toegenomen klantenservice; Korte verkoop doorlooptijden; Verminderde voorraadlevels; Lagere totale kosten.
Alexander Dewaele
11
Hoofdstuk 1. Manufacturing Execution System
1.3
ANSI/ISA-95
De ISA-95[20] “Instrumentation, Systems and Automations Society” wordt omschreven als de internationale standaard voor de integratie van kantoor- en productieautomatiseringssystemen. De ISA-95 bestaat uit verschillende modellen en terminologie¨en die duidelijk maken welke informatie er tussen de afdelingen moet worden uitgewisseld. Die informatie is gericht op verkoop, financi¨en en logistiek voor de administratieve afdeling en productie, onderhoud en kwaliteit voor de productieafdeling. Door de uitwisseling van de informatie kunnen systemen die instaan voor de kantoor- en de productieautomatisering op elkaar afgestemd worden. De ISA-95 standaard bestaat uit 5 delen.
1.3.1
Models & Terminology
Dit deel van de ISA-95 bevat meerdere modellen om de werking en de structuur van een bedrijf te verduidelijken. De twee belangrijkste modellen zijn het “Functional Hierarchy Model” en het “Information Exchange Model”. Het “Functional Hierarchy Model” beschrijft de verschillende afdelingen binnen een bedrijf. Level 4 stelt hier de administratieve afdeling voor en level 3 is de afdeling die instaat voor het beheer en controle van de verschillende productieprocessen. De onderste levels stellen dan de mogelijke productieprocessen binnen een bedrijf voor. Binnen Vandemoortele is de voorbereiding van de margarine een batchproces en is het kristallisatieproces een continu proces.
Figuur 1.2: Functional Hierarchy Model
Alexander Dewaele
12
Hoofdstuk 1. Manufacturing Execution System Belangrijk is dat bij dit model nog niet wordt gesproken over softwaresystemen. Dit model splitst enkel de verschillende functionaliteiten binnen een bedrijf in levels op. Het project speelt zich dus vooral af op level 3. De productieverantwoordelijken zullen het softwarepakket gebruiken om de productie op te volgen en te controleren. Onregelmatigheden in het proces kunnen zo worden opgespoord en aangepakt. Bij de kwaliteitscontrole kunnen de werknemers rekening houden met de gevonden onregelmatigheden om zo te onderzoeken welke invloeden ze hebben op de kwaliteit. De uiteindelijke bedoeling is om per recept de perfecte instellingen te bekomen. Een ander belangrijk model is het “Information Exchange Model”.
Figuur 1.3: Information Exchange Model
Het model is belangrijk omdat het samenvat welke informatie er moet worden uitgewisseld tussen level 4 en level 3. De belangrijkste delen zijn ’Product Definition Information’ en ’Product Information’. Binnen Vandemoortele bevinden de recepten (Product Definition Information) zich op een Oracle database. De instellingen van de productielijn gebeuren aan de hand van deze recepten. Proficy Historian capteert de werkelijke data, ’Product Information’. Het softwarepakket maakt gebruik van beide soorten informatie.
1.3.2
Object Model Attributes
In deel 1 wordt bepaald welke informatie moet worden uitgewisseld tussen de verschillende systemen. Deel 2 biedt nu de mogelijkheid om alle objecten uit deel 1 verder uit te werken Alexander Dewaele
13
Hoofdstuk 1. Manufacturing Execution System in tabellen met attributen. Die kunnen gebruikt worden bij het uitwisselen van informatie. Opmerking De standaard doet geen uitspraak over de te kiezen oplossing (bv. Xml/B2MML)
1.3.3
Activity Models of Manufacturing Operations Management
Dit deel bevat modellen om de productieactiviteiten binnen een bedrijf in kaart te brengen. Binnen de productieafdelingen zijn er verscheidene activiteiten en wordt tussen die activiteiten grote hoeveelheden data uitgewisseld. Deel 3 biedt modellen aan voor de 4 grote activiteiten: 1. Productie; 2. Kwaliteit; 3. Inventaris; 4. Onderhoud. Het productie activiteitsmodel zoals in figuur 1.4 geeft de functionaliteiten en onderlinge informatiestromen voor elke activiteit weer.
Figuur 1.4: Production Activity Model
De Proficy Historian database archiveert de procesparameters van ´e´en productielijn en bevindt zich dus in het onderdeel “Production Data Collection”. De custom made applicatie Alexander Dewaele
14
Hoofdstuk 1. Manufacturing Execution System “Report Tool” rapporteert deze procesparameters waarop vervolgens analyses gemaakt kunnen worden. De analyses behoren dan tot het deel “Production Performance Analyse”.
1.3.4
Object Models and Attributes of Manufacturing Operations Management
Dit deel is nog vollop in ontwikkeling maar het zal modellen bevatten van de activiteiten binnen level 3.
1.3.5
Business to Manufacturing Transactions
Deel 5 definieert de methodes om informatie over te brengen van de bedrijfsautomatiseringssystemen naar de productieautomatiseringssystemen en omgekeerd.
1.4
Besluit
Zoals in figuur 1.1 wordt het niveau tussen de logistieke/administratieve automatisering (ERP) en de productieautomatisering (PCS) aangeduid met de term MES. Bij ERP is de klant het belangrijkst. Hier worden de orders verwerkt en bijgehouden. Het PCS ’Proces Control System’ focust zich vooral op het productieproces. Hier worden de juiste productiecondities (temperaturen, drukken, debieten, ...) gehandhaafd. Nu fungeert de MES laag als een tussenlaag. MES concentreert zich op het product zelf. Hier wordt beslist en bijgehouden hoe de producten gefabriceerd worden (volgens welk recept), in welke volgorde (volgens welk shedule) en met welke grondstoffen (tracking en tracing). In tegenstelling tot ERP en PCS bestaat MES meestal uit verschillende softwareapplicaties om verschillende onderdelen in te kleden. Veel van deze applicaties zijn custom made om te voldoen aan de noden van het productieproces en de werknemers. Binnen de Vandemoortele Groep zijn reeds een aantal kleine MES projecten[17] gerealiseerd. Voorbeelden hiervan zijn kleine datacaptatie projecten, MS Acces applicatie ter ondersteuning van de receptwissels, lokale receptbeheerprogramma’s die een interface bieden naar PLC’s, ... De vele verschillende applicatie binnen de MES laag zorgen voor een complexe structuur binnen de organisatie. Een globale MES aanpak kan een oplossing bieden aan lokale MES noden. Bepaalde leveranciers zoals Siemens en GE Fanuc bieden de mogelijkheid om via standaarden de volledige MES laag te integreren. Wel moet er toch rekening gehouden worden met het customizing bij zo’n totale verticale integratie. Anderszijds is er natuurlijk ook het prijskaartje. In praktijk is de MES laag meestal niet volledig afgedekt. Binnen dit project zorgt Proficy Historian voor het onderdeel “Production Data Collection”. Die software heeft een open
Alexander Dewaele
15
Hoofdstuk 1. Manufacturing Execution System toegankelijkheid voor MES applicaties. De applicatie “Report Tool” gebruikt deze toegankelijkheid om de gearchiveerde procesdata te rapporteren waarna de rapporteringen gebruikt worden binnen verschillende afdelingen. De applicatie “Report Tool” situeert zich dus in de MES laag en wordt vooral gebruikt op productieniveau.
Alexander Dewaele
16
Hoofdstuk 2
Het kristallisatieproces Het productieproces van margarine bestaat uit de volgende stappen: 1. Voorbereiding; 2. Aanmaak emulsie (batch proces); 3. Kristallisatie; 4. Afvullen en verpakken; 5. Palletisering. De emulsie wordt per lijn per batch aangemaakt en vervolgens getransporteerd naar de werktank van een lijn. Die warme, vloeibare emulsie wordt daarna uitgekristalliseerd tot margarine. Die margarine kan worden afgevuld en verpakt. Dit proces is het kristallisatieproces en ziet er als volgt uit:
Figuur 2.1: Proces
Het kristallisatiegedeelte[19] koelt en kristalliseert dus de warme en vloeibare emulsie tot margarine. Hierbij moet de margarine enerzijds voldoende stevig zijn om te verpakken en anderszijds de gewenste textuur hebben. Om de margarine in deze staat te krijgen en te verpakken worden volgende onderdelen in het proces gebruikt: 17
Hoofdstuk 2. Het kristallisatieproces
2.1
Werktank
Functie De werktank is een soort van buffervat tussen het batchproces in de ’voorbereiding’, waar de bereiding van de emulsie plaatsvindt, en het continu kristallisatieproces. Opbouw Dubbele wand met warm water om de emulsie op temperatuur te houden; Roerwerk om de emulsie in beweging te houden (tegengaan ontmenging); Minimum, maximum en alarm niveau; Drukknoppen: start afvoer / stop afvoer / roerwerk / verlichting; Signalisaties: lamp start / stop / werktank minimum / roerwerk stil.
2.2
Centrifugaalpomp
Functie De centrifugaalpomp is aanwezig om de warme emulsie afkomstig van de werktank door de pasteur te pompen. Deze centrifugaalpomp zorgt ook voor een voldoende druk aan de zuigzijde van de hogedrukpomp nadat de emulsie door de pasteur is gepompt. Aan de andere kant kan de pasteur geen hoge drukken verdragen. De pasteur moet dus na de centrifugaalpomp staan en voor de hogedrukpomp. De centrifugaalpomp wordt ook gebruikt om de leidingen te reinigen. Daarvoor is namelijk een groot debiet nodig. Opbouw 1. Motor; 2. Pomphuis; 3. Waaier. Kenmerken Geen hoge drukken; Groot debiet; Niet zelfaanzuigend.
Alexander Dewaele
18
Hoofdstuk 2. Het kristallisatieproces
2.3
Pasteur
Functie
Het pasteuriseren van de emulsie gebeurt in twee stappen:
1. Snel opwarmen; 2. Snel afkoelen. Door de grote temperatuursverandering sterven de eventuele sporen van bacteri¨en of schimmels af. Het gebruik van een pasteur heeft nog een positief gevolg, namelijk dat de temperatuur van de emulsie nagenoeg constant is als de emulsie de koelmachine bereikt.
Figuur 2.2: Platenpasteur
Opbouw platenpasteur 1. Opwarmsectie: Aan de hand van heet water wordt de emulsie opgewarmd. 2. Regeneratiesectie: Hier wordt de ingaande emulsie reeds opgewarmd door de warme emulsie in tegenstroom. Dit natuurlijk om energie te besparen. 3. Koelsectie: Dit deel van de pasteur zorgt ervoor dat de uitgaande emulsie opnieuw afkoelt. Het afkoelen gebeurt aan de hand van koud water. Opmerking Een platenpasteur kan geen hoge drukken verdragen, de te hoge drukken zouden de platen openduwen en plooien. Daardoor staan de pasteurs voor de hogedrukpompen. Om de weerstand van de pasteur te overwinnen, is een centrifugaalpomp aanwezig. Alexander Dewaele
19
Hoofdstuk 2. Het kristallisatieproces
2.4
Hogedrukpomp
Functie Na de hogedrukpomp staat de koelmachine. De emulsie die door de koelmachine passeert, kristalliseert. Om die min of meer vaste emulsie verder door het kristallisatieproces te pompen zijn hoge drukken nodig. Bovendien moet ernaar gestreefd worden om het koelproces zo constant mogelijk te houden. Daardoor is het noodzakelijk dat het debiet zo constant mogelijk is. Een plunjerpomp voldoet aan deze eigenschappen. Een plunjerpomp heeft namelijk een instelbaar vast debiet onafhankelijk van de druk en kan ook heel grote drukken leveren. Opbouw Aandrijving; Plunjers; Persklep; Zuigklep.
Kenmerken Grote drukken; Constant debiet; Debiet is instelbaar; Zelfaanzuigend.
Opmerking Doordat de hogedrukpomp snel zo’n grote drukken produceert, moet ten allen tijde het circuit na de pomp vrij zijn. Als het circuit toch afgesloten is, stijgt de druk in een fractie van een seconde boven de 100 bar en dan schakelt het overdrukventiel in. Het overdrukventiel garandeert dus de werking van de installatie en de veiligheid van de arbeiders.
2.5
Koelmachine
Functie De hogedrukpomp pompt de warme emulsie komende van de pasteur, door de koelmachine. Nu is de emulsie een koud verpakbaar product. Dit kristallisatieproces bepaalt de uiteindelijke productstructuur: hardheid, zandigheid, plasticiteit, kleverigheid, ...
Alexander Dewaele
20
Hoofdstuk 2. Het kristallisatieproces Opbouw Koelcilinders, gegroepeerd in secties; Mesassen; Mesasverwarming; Aandrijving: 1 motor en reductiekast per sectie; N H3 -circuit.
Werking De hogedrukpomp pompt de emulsie door de koelcilinders van de koelmachine. Rondom de koelcilinders bevindt zich vloeibare amoniak die we laten verdampen.1 De warmte die nodig is om de amoniak te laten verdampen wordt bekomen uit de emulsie die door de koelcilinders stromen. Hierdoor verdampt niet enkel de amoniak maar kristalliseert de emulsie ook. In de koelcilinder draaien mesassen. De messen op de mesassen schrapen de emulsie van de cilinderwand en zorgen ervoor dat de emulsie niet enkel kristalliseert maar bewerken de emulsie ook. Om te vermijden dat de emulsie door de afkoeling een vaste vorm krijgt en dat zo de doorgang door de cilinders vernauwd, zijn de mesassen niet volledig massief ontworpen maar bevinden er zich twee kamers in de mesassen. Door de kamers stroomt warm water en zo blijft er geen emulsie aan de mesassen kleven. 1
Amoniak verdampt bij 1 bar overdruk (bij -20 )
Alexander Dewaele
21
Hoofdstuk 2. Het kristallisatieproces
Figuur 2.3: Koelcilinders met mesassen
Alexander Dewaele
22
Hoofdstuk 2. Het kristallisatieproces
2.6
Rustbuis
Functie De onderkoelde margarine uit de koelmachine komt terecht in de rustbuis. Hier kan de margarine verder uitkristalliseren en zo de gewenste consistentie verkrijgen om te verpakken. Opbouw Dubbelwandige buis; Warm water die door de dubbele wand vloeit.
2.7
Poefer
Functie Waar het kristallisatieproces een continu proces is, is het verpakken een discontinu proces. Het effectief doseren neemt telkens maar een deel van de beschikbare margarine in beslag. Het doseren gaat dan ook sneller dan het aanmaken van de margarine. Een buffer vangt het teveel aan margarine op als de poefer niet doseert. Opbouw Poeferhuis; Poeferzuiger; Persluchtcilinder.
Werking
Situatie tussen 2 doseringen
Tijdens deze situatie is er geen verbruik en ligt de verpakkingsmachine stil. De hogedrukpomp duwt tegen de perslucht in de margarine omhoog. De margarine vult de bufferzone. Dit blijft duren tot de opening van de retour vrijkomt. Dan pompt de hogedrukpomp de margarine via de retour terug naar de werktank. In het ideale geval begint de dosering dus net voor het vrijkomen van de opening van de retour. Dan draait de afvulmachine op ideale snelheid. De snelheid waarbij de margarine wordt gekoeld is dan gelijk aan de snelheid waarmee de machine de margarine verpakt. (zie figuur 2.4) Situatie tijdens het doseren Het verbruik van margarine is hoger dan de hoeveelheid margarine die de hogedrukpomp levert. De perslucht duwt nu de margarine die opgeslagen is in het poeferhuis naar beneden, Alexander Dewaele
23
Hoofdstuk 2. Het kristallisatieproces naar de afvulmachine. Maar ook de hogedrukpomp duwt margarine naar de afvulmachine. De totale verbruikte hoeveelheid margarine is dus de geleverde hoeveelheid van de hogedrukpomp maar ook de geleverde hoeveelheid van de poefer. Hier zien we dus terug dat het doseren aan een grotere snelheid gebeurt dan dat de hogedrukpomp en koelmachine aankunnen. (zie figuur 2.5) Situatie bij stilstand van de afvulmachine Er is opnieuw geen margarineverbruik meer. De pomp duwt de poeferzuiger opnieuw tegen de perslucht in omhoog. Maar de poeferzuiger is zodanig ver omhoog geduwd dat de opening van de retour volledig vrijkomt. De volledige hoeveelheid margarine dat de hogedrukpomp levert, keert via de retour terug naar de werktank. Deze situatie moet zoveel mogelijk vermeden worden omdat de pomp nutteloos arbeid levert. (zie figuur 2.6)
Figuur 2.4: Tussen 2 doseringen
Alexander Dewaele
24
Hoofdstuk 2. Het kristallisatieproces
Figuur 2.5: Tijdens het doseren
Figuur 2.6: Bij stilstand van de afvulmachine
Alexander Dewaele
25
Hoofdstuk 2. Het kristallisatieproces
2.8
Retour
Functie De margarine die de afvulmachine niet bereikt, keert via de retour terug naar de werktank. Maar voordat de margarine de werktank bereikt moet ze zoveel mogelijk opnieuw gesmolten zijn zodat vaste stukken margarine de uitloop van de werktank niet verstoppen. Gewone retour De gewone retour bestaat uit een dubbelwandige buis. Tussen de wanden van de buis stroomt warm water. De gewone retour wordt toegepast bij margarines met een laag smeltpunt. (bv. braadmargarines) Statische mixer Een statische mixer bestaat ook uit een dubbelwandige buis maar tussen de wanden bevindt zich nu stoom. Binnenin de buis zit ook een spiraal die de margarine zoveel mogelijk tegen de wand drukt. De statische mixer wordt gebruikt bij margarines met een hoog smelpunt. Bij gebruik van de statisch mixer dient er wel altijd een kleine hoeveelheid retour te zijn zodat de margarine die zich reeds in de buis bevindt niet aanbakt. Een reworktank bevindt zich tussen de retour en de werktank. De margarine in de retour komt eerst terecht in de reworktank waarin de margarine volledig smelt voor een pomp de margarine overpompt naar de werktank. De reworktank wordt gebruikt op lijnen met een hoog debiet of hoog smeltpunt.
Alexander Dewaele
26
Hoofdstuk 3
Proces Control System 3.1
Inleiding
Onderaan de CIM piramide bevindt zich het PCS “Production Control System”. Dit stelt het systeem voor dat het productieproces bestuurt en controleert. De besturing gebeurt binnen Vandemoortele met PLC’s van Siemens. Om een productieproces te sturen zijn inputs en outputs nodig. Die inputs (bv. sensoren) maken het mogelijk om proceswaardes (zoals temperaturen, drukken, debieten, ...) uit te lezen aan de hand van de PLC. Afhankelijk van de waardes van de inputs regelt de PLC de outputs (pompen, ventielen, motoren, ...).
3.2
Sensor
Als voorbeeld nemen we een sensor die de temperatuur in de werktank meet. De temperatuursensor is een Pt100 van “Jumo”[8] . Zo’n Pt100 wordt ook wel een RTD “Resistive Temperature Device” genoemd. De werking van een temperatuursensor is gebaseerd op verandering in elektrische weerstand bij een veranderlijke temperatuur. Hoe warmer het element wordt, hoe heviger de platina (Pt) atomen gaan trillen. Doordat de atomen heviger trillen, ondervinden de elektronen meer hinder. De elektrische geleiding van het materiaal vermindert, dus de weerstand van het materiaal stijgt. Het verband tussen de weerstand en de temperatuur is nagenoeg lineair en wordt gegeven door de volgende vergelijking. RP t100 = 100 + 0.385055 ∗ T
Een Pt100 wordt het meest gebruikt in de industrie door de vele voordelen: Een nagenoeg lineair verband tussen temperatuur en weerstand; Zeer groot meetbereik (-200 en 850 °C);
27
(3.1)
Hoofdstuk 3. Proces Control System Nauwkeurigheid; Goede reactiesnelheid; Eenvoudige aansluiting (driedraadsaansluiting).
Figuur 3.1: Lineair verband tussen temperatuur en weerstand
De temperatuursensor is met drie draden aangesloten op een externe meetomvormer. Twee signaaldraden en ´e´en compensatiedraad. Aan de hand van de twee signaaldraden, voert de meetomvormer een weerstandsmeting over de sensor uit. Dit moet uiteraard heel nauwkeurig gebeuren. Als de sensor nu via lange kabels met de omvormer verbonden is, dan bezitten de kabels ook een weerstand die een negatieve invloed heeft op de meting. De weerstand van de draden wordt namelijk opgeteld bij de weerstand van de sensor. De meting is vanzelfsprekend niet meer accuraat. De compensatiedraad compenseert dit verschijnsel. Tussen draad 1 en draad 2 meet de omvormer de weerstand van de kabels en de Pt100 en tussen draad 2 en draad 3 enkel de weerstand van de kabels. De tweede meting wordt afgetrokken van de eerste en zo bekomt de omvormer de weerstand van de Pt100.
Figuur 3.2: Aansluiting Pt100
Alexander Dewaele
28
Hoofdstuk 3. Proces Control System
3.3
Meetomvormer
De meetomvormer is van het type TMT 121 van “Endress+Hauser”[6] en zet vervolgens de gemeten weerstand om in stroom. Bij goede werking van de sensor ligt de grootte van de stroom tussen 4 en 20 mA. 4mA betekent dat het signaal 0% in grootte is (0°C) en 20 mA betekent dat het signaal 100% in grootte is (100°C). Als de meetomvormer een signaal van 0 mA (“live zero”) levert, dan weten de werknemers op de productievloer onmiddellijk dat de sensor niet meer correct functioneert. Zo kan gemakkelijk het onderscheid gemaakt worden tussen een nulsignaal en een draadbreuk of een defecte sensor. Door gebruik te maken van de levende nul, vloeit er altijd stroom in de lus. Dit biedt de mogelijk om sensoren met een klein vermogen te voeden aan de hand van die stroomlus, zo worden kabels uitgespaard. Het grootste voordeel van het gebruik van de stroomlus, is dat ruis de meting niet be¨ınvloedt. Er moet ook geen rekening gehouden worden met spanningsverliezen in de kabels. De meetomvormer kan zowel actief als passief zijn. De omvormer is actief als deze extern gevoed wordt en anders passief. Dit kan gecontroleerd worden door te tellen hoeveel draden toekomen op de omvormer. In dit geval komen bij een actieve meetomvormer zeven draden (3 draden van de sensor, 2 voedingsdraden, 2 draden van de PLC) toe en bij een passieve vijf (3 draden van de sensor, 2 draden van de PLC).
Figuur 3.3: Actieve en passieve meetomvormer
De correcte aansluiting van de sensor op de meetomvormer vloeit voort uit de technische informatie van de omvormer. De sensor is van het type RTD en het is een driedraadsaansluiting. De sensor dient bovenaan de omvormer aangesloten te worden op de klemmen 3, 5 en 6.
Alexander Dewaele
29
Hoofdstuk 3. Proces Control System
Figuur 3.4: Aansluiting sensor op meetomvormer[6]
3.4
Programmable Logic Controller
De hardware configuratie van de PLC die het kristallisatieproces bestuurt, betaat uit: twee kaarten met digitale ingangen; twee kaarten met digitale uitgangen; vier kaarten met analoge ingangen; ´e´en ET200M station verbonden via profibus.
– twee kaarten met analoge uitgangen. Een duurdere analoge kaart kan ook zowel actief als passief zijn. Als de meetomvormer actief is, dan is het kanaal van de analoge kaart passief en vice versa. De programmeur dient duidelijk te maken aan de PLC welke analoge kanalen (meestal per twee gegroepeerd) actief of passief optreden. Dit gebeurt door te specifieren hoe de meetomvormer is aangesloten, met vier draden (4DMU, actieve meetomvormer) of met twee draden (2DMU, passieve meetomvormer). De programmeur moet ook meegeven welk signaal de omvormer levert, hier is dit een stroomsignaal. De twee instellingen (measuring type en measuring range) leveren een letter op bij “Range Selection Module”. Deze instelling moet hardwarematig ingesteld worden op de analoge kaart per twee kanalen.
Alexander Dewaele
30
Hoofdstuk 3. Proces Control System
Figuur 3.5: Instellingen analoge kaart
Om een temperatuur in de PLC uit te lezen, dient de stroomlus die de meetomvormer aanbiedt, verbonden te worden met een ingang van een analoge kaart. De meetomvormer van de temperatuursensor in de werktank is verbonden met de analoge ingangskaart in slot 11 op channel 3. De nummering van de ingangen op de analoge kaart in slot 11 begint vanaf 560. Aangezien de meetomvormer aangesloten is op channel 3 en wetende dat een analoog signaal 2 bytes inneemt van het periferiegeheugen, zal de temperatuurswaarde van de werktank zich op ingangswoord 566 bevinden (PIW 566).
Figuur 3.6: Hardware configuratie
De analoge kaart zet het analoge stroomsignaal van de meetomvormer om in een digitaal waarde tussen 0 (4mA) en 27648 (20mA). Vervolgens herschaalt het gebruikersprogramma in de PLC dit getal tot een temperatuurswaarde (decimaal getal) in graden celcius. Deze decimale temperatuurswaarde (4 bytes) wordt opgeslaan in DB30 beginnend bij byte 368. Deze gegevens zullen in de volgende hoofdstukken nog gebruikt worden.
Alexander Dewaele
31
Hoofdstuk 3. Proces Control System
Figuur 3.7: Omzetting stroom in digitale waarde
3.5
Voorbeeld
Veronderstel dat de Pt100 temperatuursensor in de werktank een weerstand heeft van 119,25275Ω. De temperatuur in de werktank wordt eerst eenvoudig met de formule van de Pt100 uitgerekend en vervolgens wordt het volledige verhaal uitgewerkt. Weerstand
Stroom
AD waarde
Temperatuur
100 Ω 138.51 Ω
4 mA 20 mA
0 27648
0 °C 100 °C
Tabel 3.1: Samenvattende tabel
3.5.1
Formule Pt100
Het lineair verband tussen de weerstand en de temperatuur is weergegeven in de vergelijking 3.1. Als we deze vergelijking omvormen naar de temperatuur, betekent een weerstand van 119.25 ohm een temperatuur van 50°C. T =
3.5.2
119.25275 − 100 = 50 0.385055
(3.2)
Volledig uitgerekend
De vergelijking tussen de weerstand, die de Pt100 bezit, en de stroom, die de meetomvormer levert, is: 20 − 4 Y −4= (X − 100) (3.3) 138.51 − 100 Uitgerekend levert dit de volgende vergelijking op: Y = 0, 4154765X − 37, 54764996 Alexander Dewaele
32
(3.4)
Hoofdstuk 3. Proces Control System Als de weerstand van de sensor 119,25275 Ohm is, dan levert de omvormer 12 mA. De analoge kaart zet dit analoog signaal om in een digitale waarde volgens de vergelijking: Y −0=
27648 − 0 (X − 4) 20 − 4
(3.5)
Als we dit uirekenen: Y = 1728X − 6912
(3.6)
De digitale waarde bij een stroom van 12 mA is 13822,38. Deze waarde wordt omgezet in het PLC gebruikersprogramma volgends de vergelijking: Y −0=
100 − 0 (X − 0) 27648 − 0
(3.7)
Deze vergelijking kan ook vereenvoudigd worden tot: Y = 0, 0036169X De digitale waarde 13822.38 levert een temperatuur van 50°C op.
Figuur 3.8: Volledige berekening
Alexander Dewaele
33
(3.8)
Hoofdstuk 4
OPC Server 4.1
Inleiding
De doelstelling van dit project is om de procesparameters te visualiseren. Hiervoor moeten de inputs en outputs van de PLC beschikbaar gesteld worden. Dit gebeurt aan de hand van een OPC Server. Een OPC Server is de standaard om gegevens van de PCS laag uit te wisselen met het hogere niveau, de MES laag. De OPC Server[15] van Siemens heet “OPC.SimaticNET” en die OPC Server is bedoeld voor device verbindingen via Profibus of Ethernet. Binnen dit project gebeurt de verbinding via Ethernet. Om de OPC Server operationeel te maken, dient men drie stappen uit te voeren: 1. De interface van het device configureren; 2. Het virtueel bussysteem samenstellen; 3. Configureren van de OPC Server.
4.2
De interface van het device configureren
Siemens levert de software “Simatic STEP7” om hun devices te configureren en te programmeren. Standaard staat de STEP7 interface op MPI omdat de PLC in het begin enkel kan geconfigureerd worden via MPI. De hardware configuratie van het device dient dus eerst via MPI gedownload te worden. Als de CPU een ethernetaansluiting heeft of als de hardware een Ethernet CP kaart bevat, dan kan na het downloaden van de hardware configuratie de interface van STEP7 veranderd worden naar TCP/IP. Het veranderen van de interface van STEP7 gebeurt via “Set PG/PC interface” in het menu “Options”. Vanaf dit moment kan de PLC geconfigureerd en geprogrammeerd worden over Ethernet en is de MPI kabel niet meer nodig.
34
Hoofdstuk 4. OPC Server
Figuur 4.1: PG/PC Interface
De instellingen van de communicatie over TCP/IP bestaan uit een IP adres, subnetmasker en een standaard gateway. Meer uitleg hierover in hoofdstuk 8. Zowel de interface van STEP7 als van het device zijn nu ingesteld op Ethernet.
4.3
Het virtueel bussysteem samenstellen
De communicatie tussen het device en de OPC Server gebeurt aan de hand van een virtueel bussysteem. De “Station Configuration Editor” van Siemens maakt het mogelijk om het virtueel bussteem samen te stellen. De virtuele bus heeft standaard 32 insteekplaatsen en 1 stationmanager. De stationmanager is de controller van het bussysteem. Het eerste dat moet gebeuren is de virtuele bus benoemen. Hier is de naam van de virtuele bus “NBIZ030”. Als eerste deelnemer van de virtuele bus, voegen we de OPC Server toe (OPC.SimaticNET). Het is niet verplicht van de OPC Server op index 1 toe te voegen maar dit wordt standaard zo gedaan. Een tweede deelnemer is de interface van de Ethernet kaart van de PC waarop de OPC Server zich bevindt. Zo kan een deelnemer via ethernet communiceren op de virtuele bus. Nu is de virtuele bus “NBIZ030” volledig stamengesteld.
Alexander Dewaele
35
Hoofdstuk 4. OPC Server
Figuur 4.2: Samenstelling virtuele bus
4.4
Configureren van de OPC Server
Het configureren van de OPC Server gebeurt opnieuw vanuit de applicatie “STEP7”. De configuratie bestaat uit drie stappen: 1. Een station toevoegen; 2. De hardware configureren (representatief beeld); 3. Een verbinding toevoegen. De configuratie van een Siemens OPC Server gebeurt zeer gelijklopend met de configuratie van een Siemens PLC device. Toch zijn er enkele belangrijke aandachtspunten. Een eerste belangrijk aandachtspunt is dat de STEP7 interface niet meer naar de PLC mag verwijzen maar wel naar de station manager. De reden hiervoor is dat de station manager de controller van het virtueel bussysteem is. De STEP7 interface dient daarom veranderd te worden naar “PC internal(local)” in het menu “Set PG/PC Interface”.
4.4.1
Een station toevoegen
Om de virtuele bus te configureren dient eerst een “Simatic PC Station” te worden toegevoegd. Het is noodzakelijk om de “Simatic PC Station” dezelfde naam mee te geven als de virtuele bus, in dit geval “NBIZ030”. Alexander Dewaele
36
Hoofdstuk 4. OPC Server
Figuur 4.3: Simatic Manager
4.4.2
De hardware configureren
De hardware configuratie van het virtueel bussysteem gebeurt onder “Configuration”. Het nieuw geopened venster ziet er net hetzelfde uit als bij de hardware configuratie van een PLC. Maar nu is er een rack beschikbaar met 32 insteekplaatsen. Analoog als bij het samenstellen van het bussysteem dient op de eerste index de juiste versie van de OPC Server geplaatst te worden. De tweede component is uiteraard opnieuw de Ethernet kaart. Deze is terug te vinden onder “CP Industrial Ethernet”, namelijk “IE General”.
Figuur 4.4: Configuratie van de OPC Server
De STEP7 voorstelling van de virtuele bus en het samengestelde virtueel bussysteem zijn nu identiek. De instellingen moeten wel nog naar de station manager van de virtuele bus gedownload worden. Hiervoor moet de interface van STEP7 op “PC internal(local)” ingesteld staan. Dit werd reeds in een vorige stap ingesteld. Na het downloaden wordt de virtuele bus opnieuw opgestart met de nieuwe configuratie. Nu is de virtuele bus actief.
Alexander Dewaele
37
Hoofdstuk 4. OPC Server
4.4.3
Een verbinding toevoegen
Dit is echter nog niet voldoende. De soort communicatie die over de bus geschiedt, dient nog gespecifieerd te worden. Dit gebeurt door op “Connections” van het station “NBIZ030” te klikken. “NetPRO” verschijnt en stelt de verbindingen van het STEP7 project grafisch voor. De bedoeling is dat vanuit de OPC Server een verbinding wordt gemaakt met de Ethernet kaart van de PLC. Om een verbinding toe te voegen, voegen we een nieuwe verbinding toe aan de hand van “Insert New Connection”. Doordat het STEP7 project voor de OPC Server niet hetzelfde project is waarin de PLC wordt geprogrammeerd, dient gekozen te worden voor een unspecified connection. Bij de properties moet de verbinding een naam krijgen, bv. “Natgedeelte L1”. De interface is uiteraard “IE General” (Ethernet) en het adres van de partner is het IP adres van de Ethernet kaart van de PLC. De OPC Server is operationeel en de verbinding is gemaakt. Alles mag bewaard en gecompileerd worden.
Figuur 4.5: NetPRO
Figuur 4.6: S7 Connection
Alexander Dewaele
38
Hoofdstuk 5
Proficy Historian 5.1
Inleiding
Proficy Historian[7][12] is een hoogperformant data-archiveringssysteem dat ontworpen is om tijdsgebaseerde informatie te verzamelen, op te slaan en weer te geven. Proficy Historian: Archiveert en maakt grote datahoeveelheden beschikbaar; Verwerkt grote datahoeveelheden aan grote snelheden; Verspreidt gemakkelijk verschillende componenten over het netwerk; Buffert data als de connectie onderbroken is.
Een Historian database is vaak noodzakelijk om accuraat procesdata te archiveren en te gebruiken. Historische data is essentieel om voortdurend het proces te controleren en te verbeteren en om de effici¨entie van het proces te verbeteren.
5.2 5.2.1
Datacollectoren Inleiding
Proficy Historian maakt gebruik van verschillende collectoren om de data te verzamelen. De belangrijkste zijn: The calculation collector Deze collector biedt het voordeel dat er bewerkingen kunnen uitgevoerd worden met de reeds bekomen data. The file collector Dit is een speciale collector die de mogelijkheid biedt om bestanden (CSV “Comma Separated Values” of XML “eXtended Markup Language”) te importeren. Zo kunnen tags en data voor deze tags toegevoegd worden. De configuratie van bestaande tags kan ook op deze manier gebeuren. Deze collector is heel handig om het toevoegen van tags te automatiseren. 39
Hoofdstuk 5. Proficy Historian The OPC collector Deze collector maakt gebruik van OPC Servers om data te verzamelen. Tijdens de installatie van Proficy Historian worden alle beschikbare OPC Servers met hun ID gedetecteerd en gepresenteerd in een lijst. Dan kunnen onmiddellijk meerdere OPC collectoren geconfigureerd worden. Later gebeurt de configuratie van de collectoren aan de hand van de Proficy Historian Administrator. De configuratie van de collectoren is beschreven in deel 5.5.4 op pagina 47. Belangrijke opmerking: De OPC collector ondersteunt momenteel DCOM niet. De collector moet dus ge¨ınstalleerd zijn op dezelfde PC waar OPC Server is ge¨ınstalleerd!
5.2.2
Architectuur
Dit project maakt enkel gebruik van de OPC collector. De architectuur ziet er als volgt uit:
Figuur 5.1: Architectuur Proficy Historian
De ge¨ınstalleerde OPC collector gebruikt de OPC Servers om de waardes (temperaturen, drukken, recepten, ...) op te halen uit de PLC. Dit gebeurt over het netwerk. Daarna stuurt de OPC collector deze waardes door naar de Historian database waarna de Historian database de waardes achiveert. Als de verbinding tussen de collector en de Historian database onderbroken wordt, dan buffert de collector de gegevens eerst en stuurt de collector de gegevens door zodra de verbinding opnieuw is hersteld. De grootte van de buffer is uiteraard begrensd. Eenmaal de buffer vol is, gaan toch gegevens verloren.
Alexander Dewaele
40
Hoofdstuk 5. Proficy Historian
5.3
Tags
Tags zijn de OPC items (in dit project worden enkel OPC collectoren gebruikt) waarvan de Historian database data capteert. Een tag is gedefinieerd door een bepaalde collector, een source adres en een datatype. Deel 5.5.3 beschrijft het toevoegen van een tag en de instellingen ervan.
5.4
Archieven
5.4.1
Algemeen
De Historian database slaat de data van de tags op in archiefdelen. Proficy Historian werkt niet met ´e´en groot archief maar verdeelt de data over verschillende archiefdelen. Bij het aanmaken van een nieuw archiefdeel, wordt het vorige deel gesloten en read-only gemaakt. Dit gebeurt om de data veilig te stellen. Als er een fout optreedt, dan zal enkel het huidige archiefdeel misschien corrupt zijn. De andere delen blijven onbeschadigd. De grootte van de archiefdelen kan vrij gekozen worden. Meer informatie over de instellingen van de archieven in deel 5.5.5 op pagina 48.
5.4.2
Archiefbeheer
Om de grootte van het archief te beperken is het belangrijk om te verstaan hoeveel data er wordt gearchiveerd binnen een bepaalde periode. Verschillende factoren be¨ınvloeden de groei van het archief: Aantal gearchiveerde tags; Pollingfrequentie (de tijdsduur tussen twee verschillende waardes van een tag. bv. vijf seconden); Instelling van de compressie (compressie beperkt het aantal gearchiveerde waardes); Data types (bv. een integer is twee bytes terwijl een real (decimaal getal) vier bytes is. Een archief met enkel reals zal dus twee maal zo groot zijn).
Voorbeeld voor de compressie: Vijf van honderd beschikbare waarden worden gearchiveerd = 95/100 of 95% compressie. Door in te spelen op deze factoren kan het archief beperkt worden. Meer specifiek: Verklein de pollingfrequentie; Vergroot de compressieband; Verklein het aantal gearchiveerde tags.
Alexander Dewaele
41
Hoofdstuk 5. Proficy Historian
5.4.3
De groei van het archief schatten
Om de grootte van het archief te bepalen kan de volgende formule gebruikt worden: #tags ∗
W aardes Bytes Bytes ∗ (1 − Comp%) ∗ = Seconden W aarde Seconde
De eenheid van de uitkomst van formule 5.1 is is de volgende formule beter: #tags ∗
Bytes Seconde .
(5.1)
Om eenvoudiger te kunnen rekenen
W aardes Bytes Seconden MB MB ∗ (1 − Comp%) ∗ ∗ ∗ = Seconden W aarde Dag Bytes Dag
(5.2)
Als bepaalde constanten worden ingevuld in formule 5.2 dan bekomen we de eenvoudige formule: #tags ∗
W aardes Bytes 1 MB ∗ (1 − Comp%) ∗ ∗ 3600 ∗ 24 ∗ = Seconden W aarde 1024 ∗ 1024 Dag
(5.3)
Een rekenvoorbeeld om formule 5.3 te begrijpen: Aantal tags: 10 000 Pollingfrequentie: 2 seconden Compressie: 90% Data type: Integer (Bytes/Waarde = 2) Duration: Jaar
2 1 MB 1 ∗ (1 − 90/100) ∗ ∗ 3600 ∗ 24 ∗ ∗ 365 = 30075 (5.4) 2 1 1024 ∗ 1024 Jaar In het voorbeeld zal het archief na een jaar ongeveer 29,4 gigabyte groot zijn. Als de grootte van een archiefdeel ingesteld is op 100 MB, dan zal het volledige archief uit 301 delen bestaan. 10000 ∗
5.5 5.5.1
Proficy Historian Administrator Algemeen
De Historian Administrator is de interface voor de Proficy Historian database. De Historian Administrator bezit de volgende hoofdfuncties: Visualiseren van de systeemstatus; Onderhoud en configuratie van het archief; Backup en restore;
Alexander Dewaele
42
Hoofdstuk 5. Proficy Historian Onderhoud en configuratie van de collectoren; Onderhoud en configuratie van de tags; Doorzoeken van de berichten (messages).
De Historian Administrator biedt deze functies aan verspreid over vijf schermen. (Main, Tags, Collectors, Archives en Messages) Opmerking: De beschikbaarheid van de verschillende schermen en functies zijn afhankelijk van de toegang van de ingelogde gebruiker.
5.5.2
Main
Het scherm “Main” geeft de status van het huidige archief, de status van de collectoren, berichten en waarschuwingen weer. Als er problemen optreden is dit scherm van uiterst belang om een eerste diagnose te maken. Het scherm is onderverdeeld in drie grote delen.
Figuur 5.2: Proficy Historian Administrator: Main
Archiefstatus Dit deel visualiseert algemene informatie over het archief. De verschillende gegevens zijn: Archive compression: De compressie van de gegevens bij het archiveren; Free space: De beschikbare ruimte in het huidige archief in MB;
Alexander Dewaele
43
Hoofdstuk 5. Proficy Historian Consumption rate: Hoeveel ruimte de gearchiveerde gegevens per dag innemen; Estimated days to full: Aantal dagen dat het nog zal duren eer het huidige archief zijn maximum bereikt; Active tags: Aantal waardes die de Historian database archiveert; Licensed tags: Aantal waardes die de Historian database kan archiveren met de huidige licensie; Active users: Aantal actieve gebruikers op de Historian database; Licensed users: Aantal maximum simultaan actieve gebruikers op de Historian database met de huidige licensie.
Collectors Dit deel informeert de gebruik over de collectoren waarbij de status van de collector het belangrijkste is. Een ander belangrijke eigenschap is de compressie van elke collector. Compressie van gegevens is het opslaan van gegevens in minder bits dan de oorspronkelijke aantal bits die de gegevens bevatten. Als in dit document “van de” telkens wordt vervangen door “vd”, dan zou het document minder groot zijn. Dit is een vorm van compressie. Alerts Dit deel geeft de waarschuwingen weer. Waarschuwingen ontstaan als er onregelmatigheden optreden. Bijvoorbeeld bij het wegvallen van een verbinding met een collector. Meerdere Proficy Historian servers Met de Historian Administrator kan enkel ´e´en Historian server tegelijk bekeken worden. Om te veranderen van Historian server dien je te klikken op “Main”. Het volgende venster verschijnt. Dit venster biedt de mogelijkheid om in te loggen op een andere Historian server.
Alexander Dewaele
44
Hoofdstuk 5. Proficy Historian
Figuur 5.3: Proficy Historian Server Login
Opmerking: Om simultaan verschillende Historian servers te bekijken kan de Historian Administrator echter meerdere keren opgestart worden.
5.5.3
Tags
Het scherm “Tags” beheert welke tags, in dit project OPC items, de Historian database archiveert. De tags die de Historian database archiveert bevinden zich links in het scherm. Bovenaan het scherm is het mogelijk om tags manueel toe te voegen of om tags van verschillende collectoren toe te voegen.
Figuur 5.4: Proficy Historian Administrator: Tags
Het scherm bevat ook enkele tabs. Om te beginnen is er de tab “General”. De tab “General” Alexander Dewaele
45
Hoofdstuk 5. Proficy Historian biedt de mogelijkheid om de tags te benoemen en om de tags een eenheid (Engineering Unit1 ) en commentaar mee te geven. Met de tab “Collection” kan de gebruiker defini¨eren waar de Historian database de waarde van de tag kan bekomen. Om verder te gaan met het voorbeeld van de sensor in de werktank uit hoofdstuk 3. De OPC collector die de waarde van de sensor beschikbaar stelt, is NBIZ030 OPC OPC SimaticNET en het bronadres is S7:[NatGedeelte L1]DB30,REAL368. Het bronadres bestaat uit verschillende delen: S7: Definieert dat het om een STEP7 verbinding gaat (zie hoofdstuk 4); NatGedeelte L1: Naam van de STEP7 verbinding met de PLC (zie hoofdstuk 4); DB30: Datablock waar de waarde zich bevindt (zie hoofdstuk 3); REAL368: Plaats in de datablock waar de waarde zich bevindt (zie hoofdstuk 3).
Ook definieert de gebruiker hier welk data type de waarde zal zijn. De verschillende datatypes zijn: integers, double integers, floats, double floats en strings.
Figuur 5.5: How to add an OPC tag
Heel belangrijk zijn de “Collection Options”. Deze opties bepalen het interval (polling frequentie) die de collector zal hanteren. Dus om de hoeveel tijd de collector de waarde van de tag zal opvragen. Bijvoorbeeld om de vijf seconden met een offset van 0 seconden. De offset wordt gebruikt als de waarde van een bepaalde tag later moet worden opgevraagd dan de waarde van een andere tag. De tab “Scaling” heeft als functie om waardes te converteren. Een analoge sensor, die een temperatuur meet, geeft bijvoorbeeld een stroom tussen 4mA en 20mA weer. In de PLC wordt dit dan een digitale waarde bijvoorbeeld tussen 0 en 27 648. Als in het programma van de PLC deze waarde niet wordt omgezet naar een temperatuur in , dan is het mogelijk om met de tab “Scaling” deze digitale waarde om te zetten naar een temperatuurswaarde. In dit project gebeurt de conversie telkens in de PLC en niet met de functie “scaling”. De tab “Compression” is heel belangrijk bij het besparen van ruimte op de harde schijf van de server. Een temperatuurswaarde wordt bijvoorbeeld om de 5 seconden gelogd en die waarde schommelt tussen 29.8 en 30.1 gedurende een uur. Zonder compressie zal de Historian waardes in het archief wegschrijven. Aangezien 29.8 een float is, neemt database 720 = 60∗60 5 1
De “Engineering Unit” is van uiterst belang bij het maken van de grafieken van de Report Tool.
Alexander Dewaele
46
Hoofdstuk 5. Proficy Historian 1 waarde 4 bytes in. Deze tag voor 1 uur loggen, neemt dus 2880 = 720 ∗ 4 bytes in beslag. Als de absolute compressieband nu 0.5 is. Dan zal de temperatuurswaarde 1 enkele maal gelogd worden doordat de waardes maximum 0.3 verschillend zijn. Dit is kleiner dan de ingestelde 0.5. In 1 uur zal deze tag dus maar 4 bytes van het archief in beslag nemen. Dit is 0.1% van de oorspronkelijke grootte zonder compressie. Compressie is een uiterst sterke functie om ervoor te zorgen dat het archief niet onnodig groot wordt!
5.5.4
Collectors
Het scherm “Collectors” beheert de beschikbare collectors. De lijst links geeft weer welke collectoren er actief zijn. Bovenaan het scherm is er een optie om collectoren toe te voegen.
Figuur 5.6: Proficy Historian Administrator: Collectors
De status van de collector is terug te vinden in de tab “General”. De tab beschrijft hoeveel waardes de collector verzamelt en doorzendt naar de Historian database. De gebruikte buffergrootte van de collector is hier gespecifieerd. Het belangrijkste in de tab “Configuration” is de “Read Mode”. Als de read mode op “Cache” ingesteld is, dan worden de waardes rechtstreeks uit de OPC Server overgenomen en doorgezonden naar de Historian database. Maar is de read mode ingesteld op “Device” dan zal de OPC Server eerst de waarde opnieuw uit de PLC ophalen en dan pas doorsturen naar de OPC collector, dit is uiteraard meer belastend voor de PLC. De OPC collector zendt deze waarde dan op zijn beurt door naar de Historian database. Een ander belangrijke instelling is “Configuration Changes”. Als dit ingesteld staat op “Made-On-Line” dan neemt de collector de instellingen onmiddellijk over maar is dit ingesteld op “Made after collector restart” dan Alexander Dewaele
47
Hoofdstuk 5. Proficy Historian zullen de instellingen van de collector maar wijzigen na een restart. De belangrijkste instelling voor de tab “Tags” is de “Default Collection”. Deze instelling bepaalt de standaardwaarde van het interval waarmee de collector de waardes van een nieuwe tag zal opvragen. Natuurlijk bestaat de mogelijkheid om dit nadien voor elke tag afzonderlijk te veranderen. Deze instelling is enkel de standaardinstelling voor een nieuw toegevoegde tag. Hetzelfde geldt voor de instelling van “Default Compression”. Deze instelling zal standaard zijn voor een toegevoegde tag maar kan voor elke tag individueel veranderd worden.
5.5.5
Archives
Het scherm “Archives” geeft de instellingen van de archieven weer. De lijst links toont de actieve archieven. Als de Historian database een query krijgt, zijn dit de archieven van de database die de Historian database doorzoekt.
Figuur 5.7: Proficy Historian Administrator: Archives
De tab “Details” toont de status van het archief. Bij “Resources” is het mogelijk de grootte van het archief te veranderen (de grootte kan natuurlijk niet kleiner ingesteld worden dan het reeds verbruikte volume). In de tab “Global Options” bevindt zich het onderdeel “Archive Queries”. De “Maximum Query Time” is het aantal seconden dat een query maximaal mag duren. Als de query langer duurt, dan be¨eindigt de Historian database de query. Met de instelling “Maximum Query Intervals” zorgt de Historian database ervoor dat de query niet meer dan het ingegeven aantal ruwe gegevens oplevert. Als er meer gegevens ter beschikking zijn, dan faalt de query en zendt de Historian database geen data door.
Alexander Dewaele
48
Hoofdstuk 5. Proficy Historian Opmerking: Dit geldt niet voor gefilterde data (maximum, minimum, average, total, ...) maar enkel voor ruwe data! Het volgende onderdeel is “Archive Creation”. Dit bepaalt of de Historian database automatisch een nieuw archief begint als het vorige archief gevuld is. De archieven hebben namelijk een default size. Dit als voorzorg mocht er een archief corrupt zijn, dat niet alle data zou verloren gaan. Als de optie “Overwrite Old archives” enabled is, dan heeft de Historian database de toestemming om oude archieven te overschrijven. Het is van cruciaal belang dat er backups worden gemaakt als deze optie enabled is. Anders gaat historische data verloren. In het tabblad “Details” kan de gebruiker backups nemen van de archieven.
5.5.6
Messages
Het scherm “Messages” is het meest gebruikt door de beheerders. Hier kunnen de beheerders nagaan wat er zich afspeelt. Ze kunnen bijvoorbeeld nagaan wanneer een bepaalde collector in de fout ging. Maar ook wanneer een bepaalde gebruiker inlogde en welke wijzigingen deze doorvoerde. Aan de hand van de messages kunnen de beheerders alles in detail volgen zoals te zien op figuur 5.8.
Figuur 5.8: Proficy Historian Administrator: Messages
Alexander Dewaele
49
Hoofdstuk 6
Oracle Group Vandemoortele produceert verscheidene voedingsproducten. De vele recepten voor de producten worden bijgehouden in Oracle databases. Elke fabriek heeft zijn eigen Oracle database. De doelstellingen van het project specifi¨eren dat het moet mogelijk zijn om verschillende batches van hetzelfde recept met elkaar te vergelijken. Hiervoor moet de applicatie uiteraard de mogelijkheid hebben om gegevens uit de Oracle databases op te vragen.
6.1
Databases
Databases[14] worden overal in de industrie gebruikt voor de vele voordelen: Heel grote volumes aan gegevens; Gestructureerde opslag; Effici¨ent; Multi-user; Betrouwbaar; Goede security.
Er zijn echter verschillende soorten databases: Hi¨erarchische databases (vb. XML: Hoofdnode, childnodes, attributen, ...); Netwerk databases; Relationele databases (vb. Access, MySQL, SQL Server, Oracle, DB2, ...); Object databases.
50
Hoofdstuk 6. Oracle Een Oracle database is een relationele1 database. Figuur 6.1 is een eenvoudige voorstelling van relationele databases.
Figuur 6.1: Relationele Database
Een relationele database bestaat uit twee grote delen. De eigenlijke database met de gegevens en het DBMS “DataBase Management System”. Het gebruik van een DBMS biedt een aantal grote voordelen: De opgevraagde gegevens worden gestructureerd weergegeven in een tabel; Het DBMS beheert het formaat2 van de opgeslagen gegevens; Door het gebruik van een DBMS is de taal om verrichtingen uit te voeren gestandaardiseerd, namelijk SQL (zie hoofdstuk 7).
Er bestaan twee verschillende implementaties van het DBMS: 1. File ge¨ ori¨enteerde systemen (Desktop databases) (vb. Access); 2. Server ge¨ ori¨enteerde systemen (Cli¨ent-server databases) (vb. MySQL, SQL Server, Oracle, ...).
6.2
Connectie
Om te connecteren met een database is een connectiestring vereist. De connectiestring[2] om te connecteren met een Oracle database ziet er als volgt uit (zie ook hoofdstuk 9): Data Source=IZEGEM;User Id=Username;Password=passwd;Integrated Security=no; Aangezien Oracle een server geori¨enteerd systeem is, bevindt de database zich ergens op een server in het netwerk. De Oracle database is dus te bereiken via een IP adres en een TCP poort. De connectiestring bevat echter geen IP adres en geen TCP port. Maar het IP adres en de TCP poort van de Oracle database zitten vervat in de “Data Source”. Alvorens de 1 2
Relationeel = verzamelingenleer. Relationele databases werken volgens een wiskundig model. Het formaat is systeemafhankelijk.
Alexander Dewaele
51
Hoofdstuk 6. Oracle “Data Source” kan worden ingevuld, dienen er nog een twee bestanden aangevuld te worden. E´en bestand van de Oracle cli¨ent en ´e´en bestand van het windowssysteem. Het bestand van de Oracle cli¨ent heet “tnsnames.ora” en bevindt zich in de directory “%ORACLE HOME%\network\admin\” met “%ORACLE HOME%” bv. “C:\oracle\ora10g”. Wat dit precies is, zal pas duidelijk zijn na de installatie van de Oracle cli¨ent. De bedoeling is dat de verschillende locaties (= Data sources) van de Oracle databases in dit bestand worden ingevuld. Om de Oracle database in Izegem beschikbaar te maken, dient de volgende tekst te worden toegevoegd: 1
3
5
7
9
IZEGEM = (DESCRIPTION = (ADDRESS LIST= (ADDRESS = (PROTOCOL = TCP) (HOST = IZEGEM2 ) (PORT=4268)) ) (CONNECT DATA = (SERVICE NAME = o r a c l e ) (SERVER = DEDICATED) ) )
“Address List” is een onderdeel van de beschrijving. In dit onderdeel wordt duidelijk dat het protocol TCP(/IP) is. De instellingen voor de “host” en de “port” zijn ook beschikbaar. Het onderdeel “Connect Data” beschrijft dat het over een Oracle database gaat. Om van TCP/IP te kunnen spreken, is er een IP adres en een TCP poort nodig. Op dit moment is er geen IP adres beschikbaar maar wel een host. Om de host te defini¨eren, is het nodig om een tweede bestand te wijzigen. Het tweede bestand is het bestand “hosts” en dit bestand bevindt zich in de directory “C:\windows\system32\drivers\etc\”. In het bestand staan de beschikbare hosts. Om “IZEGEM2” als host beschikbaar te maken, dient onderaan het bestand “5.150.1.30 IZEGEM2” toegevoegd te worden. Bij het gebruik van de oorspronkelijke connectiestring, zoekt de Oracle cli¨ent naar de data source “IZEGEM” in het bestand “tnsnames.ora”. In het bestand staat dat het protocol TCP/IP is en dat de Oracle database zich bevindt op de host “IZEGEM2” en op poort 4268. Daarna wordt het bestand “hosts” doorzocht naar het IP adres dat gepaard gaat met de host “IZEGEM2”. Het IP adres en de TCP poort van de Oracle database zijn gekend (5.150.1.30:4268), de connectie kan gemaakt worden. Opmerking: De host is “IZEGEM2”. Iedere Oracle database is gemirrored. Zo is er een backup als er iets foutloopt met de eerste database. De software in dit project gebruikt telkens de tweede Oracle database.
Alexander Dewaele
52
Hoofdstuk 7
Structured Query Language SQL[14] “Structured Query Language” is de gestandaardiseerde taal om verrichtingen uit te voeren met een relationele database. Het RDBMS verwerkt het SQL statement en past de database aan of geeft een resultatentabel weer.
7.1
Algemeen
SQL heeft verschillende subsets: DML (= Data Manipulating Language); DDL (= Data Definition Language); DCL (= Data Control Language).
Dit project gebruikt enkel de subset DML. Deze subset wordt namelijk gebruikt bij het opvragen en wijzigen van data. De subset DML betaat uit vier statements: 1. SELECT statement (Gegevens opvragen); 2. INSERT statement (Gegevens toevoegen); 3. DELETE statement (Gegevens verwijderen); 4. UPDATE statement (Gegevens aanpassen).
7.2
Select statement
Het SELECT statement is van toepassing als een applicatie gegevens uit de database nodig heeft. Het resultaat van een SELECT statement is een resultatentabel.
53
Hoofdstuk 7. Structured Query Language
Figuur 7.1: SQL SELECT Statement[14]
Het volledige SELECT statement ziet er als volgt uit: SELECT clause FROM clause [WHERE clause] [GROUP BY clause [HAVING clause]] [ORDER BY clause] Voorbeeld: Om verder te kunnen gaan met het SELECT statement, moet eerst een voorbeeldtabel gedefinieerd worden. Neem aan dat de tabel “VDM Werknemers” alle werknemers van Vandemoortele voorstelt en dat deze de kolommen “ID”, “Voornaam”, “Familienaam” en “Telefoonnr” bevat. Tabel 7.1 visualiseert dit. VDM Werknemers ID
Voornaam
Familienaam
Telefoonnr
0 1 2 3
Jef Tim Bram An
Winters Delente Somers Gerst
+32475526473 +3256867542 +32477536951 +3251845726
Tabel 7.1: Voorbeeldtabel
Om de benodigde gegevens te bekomen, gebruikt de applicatie het volgende SELECT statement: SELECT Voornaam as VN, Telefoonnr as Tel FROM VDM Werknemers WHERE VN LIKE ’%m’ ORDER BY VN ASC De bekomen resultatentabel zal twee kolommen bevatten, namelijk de kolom “VN” (= Voornaam) en de kolom “Tel” (= Telefoonnr) zoals gedefinieerd in de SELECT clause. Door het gebruik van “as” hebben de kolom een alias gekregen. Die alias kan nu verder in het statement gebruikt worden. De FROM clause beschrijft in welke tabel de gegevens zich bevinden. Om de gegevens te filteren, beschikt het SELECT statement over de WHERE clause. In de WHERE clause wordt LIKE gebruikt bij patroononderzoek. In SQL zijn twee wildcards stelt ´e´en karakter voor en % stelt meerdere karakters voor. In het voorbeeld mogelijk. staat “VN LIKE ’%m”’. In tabel 7.1 zullen twee rijen voldoen. Namelijk Tim en Bram. De resultatentabel zal dus twee rijen bevatten. Alexander Dewaele
54
Hoofdstuk 7. Structured Query Language Als laatste staat er ook nog ORDER BY in de SELECT statement. ORDER BY wordt gebruikt om de resultatentabel te sorteren. De resultatentabel zal gesorteerd zijn volgende de kolom “VN” en zal ascending (A-Z) gesorteerd zijn. Tabel 7.2 stelt de resultatentabel voor. Resultatentabel VN
Tel
Bram Tim
+32477536951 +3256867542
Tabel 7.2: Resultatentabel van SELECT statement
7.3
Insert statement
Waar het SELECT statement een resultatentabel oplevert, levert het INSERT statement niets op. Het INSERT statement voegt enkel gegevens toe aan de database.
Figuur 7.2: SQL INSERT statement[14]
Het INSERT statement ziet er als volgt uit: INSERT INTO clause VALUES clause Voorbeeld: Neem aan dat we tabel 7.1 verder willen uitbreiden. heeft een nieuwe werknemer, Alexander Dewaele, aangenomen en de werknemer toevoegen aan de database zodat hij uiteraard ook zijn telefoonnummer is +32412345678. Om dit te verwezelijken wordt statement gebruikt.
Group Vandemoortele personeelsdienst wil de cheque ontvangt. Zijn het volgende INSERT
INSERT INTO VDM Werknemers(Voornaam, Familienaam, Telefoonnr) VALUES (’Alexander’, ’Dewaele’, ’+32412345678’) Opmerking: De kolom ID wordt niet meegegeven, omdat deze automatisch wordt genummerd.
Alexander Dewaele
55
Hoofdstuk 7. Structured Query Language Het statement specifieert in welke tabel gegevens worden toegevoegd, plus ook in welke kolommen. Daarna worden de waardes van de kolommen meegegeven. Als het DBMS het INSERT statement heeft uigevoerd zal de tabel van de werknemers een extra rij bezitten. VDM Werknemers ID
Voornaam
Familienaam
Telefoonnr
0 1 2 3 4
Jef Tim Bram An Alexander
Winters Delente Somers Gerst Dewaele
+32475526473 +3256867542 +32477536951 +3251845726 +32412345678
Tabel 7.3: Tabel na INSERT statement
7.4
Update statement
Ook het UPDATE statement levert geen resultaat op maar wijzigt wel gegevens in de database. Neem dus op tijd en stond backups van de databases.
Figuur 7.3: SQL UPDATE statement[14]
Het UPDATE statement heeft drie delen: UPDATE clause SET clause [WHERE clause] Voorbeeld: Veronderstel dat, ondanks de economische crisis, Jef Winters een telefoon krijgt van het bedrijf zodat hij altijd bereikbaar is. Maar daardoor vervalt zijn oud telefoonnummer en krijgt hij een nieuw, namelijk +32498654321. De personeelsdienst verneemt dit en wil de tabel van de werknemers aanpassen. Dit gebeurt met het volgende UPDATE statement. UPDATE VDM Werknemers SET Telefoonnr = ’+32498654321’ WHERE Voornaam = ’Jef’ AND Familienaam = ’Winters’ Alexander Dewaele
56
Hoofdstuk 7. Structured Query Language Het UPDATE statement beschrijft in het UPDATE-gedeelte welke tabel het statement zal wijzigen. Het SET-gedeelte geeft weer welke waarde een bepaalde kolom zal krijgen, hier zal het telefoonnr +32498654321 worden. En tenslotte deelt het WHERE-gedeelte mee welke rijen er zullen be¨ınvloed worden. In dit voorbeeld zal het enkel de rij zijn met de naam Jef Winters. Als dit UPDATE statement wordt doorgevoerd zal tabel 7.3 er als volgt uitzien. VDM Werknemers ID
Voornaam
Familienaam
Telefoonnr
0 1 2 3 4
Jef Tim Bram An Alexander
Winters Delente Somers Gerst Dewaele
+32498654321 +3256867542 +32477536951 +3251845726 +32412345678
Tabel 7.4: Tabel na UPDATE statement
Waarschuwing: Het volgende UPDATE statement wijzigt onherroepelijk de telefoonnummer van iedere werknemer in “+32498654321”. Vergeet nooit het WHERE-gedeelte want dit is immers optioneel. UPDATE VDM Werknemers SET Telefoonnr = ’+32498654321’
7.5
Delete statement
Het DELETE statement bestaat om items uit de database te verwijderen.
Figuur 7.4: SQL DELETE statement[14]
Het DELETE statement is het meest eenvoudige statement maar ook het gevaarlijkst. Het statement heeft enkel ´e´en verplicht onderdeel. DELETE FROM clause [WHERE clause] Alexander Dewaele
57
Hoofdstuk 7. Structured Query Language Voorbeeld: Een maand nadat Jef Winters een telefoon van het bedrijf kreeg, ontvangt zijn baas een buitensporig hoge telefoonrekening. Jef Winters wordt op staande voet ontslagen. De personeelsdienst verwijdert hem onmiddellijk uit de database met werknemers met het DELETE statement. DELETE FROM VDM Werknemers WHERE Voornaam = ’Jef’ AND Familienaam = ’Winters’ Dit zorgt ervoor dat Jef uit de database verwijderd is en dat de tabel een werknemer minder bevat. VDM Werknemers ID
Voornaam
Familienaam
Telefoonnr
1 2 3 4
Tim Bram An Alexander
Delente Somers Gerst Dewaele
+3256867542 +32477536951 +3251845726 +32412345678
Tabel 7.5: Tabel na DELETE statement
Waarschuwing: Het volgende DELETE statement verwijdert iedere werknemer uit de tabel. Dit statement levert een lege tabel op. Vergeet nooit het WHERE-gedeelte want dit is immers optioneel. DELETE FROM VDM Werknemers
Alexander Dewaele
58
Hoofdstuk 8
TCP/IP 8.1
Inleiding
TCP/IP[1] “Transmission Control Protocol / Internet Protocol” is samen met Ethernet de standaard om gegevens via het Internet of via een lokaal netwerk (LAN: Local Area Network) uit te wisselen. De bedoeling van TCP/IP binnen de industrie is om informatie verspreid over de gehele fabriek beschikbaar te maken in ieder systeem. Bepaalde nieuwe veldbussen zijn de dag van vandaag gebaseerd op Ethernet en IP adressering. Denk maar aan Profinet en EtherCAT. Hier wordt Ethernet gebruikt in een real-time omgeving.
8.2
OSI-model
Het OSI-model (of ISO-OSI) staat voor “ISO Reference Model for Open Systems Interconnection”. Het is een standaard die beschrijft hoe gegevens over een netwerk worden verstuurd. Het model bestaat uit zeven lagen. Het model is opgedeeld om ervoor te zorgen dat verschillende technologie¨en van verschillende organisaties over de wereld toch compatibel blijven. De verschillende lagen zijn: Toepassing, Presentatie, Sessie, Transport, Netwerk, Datalink en Fysiek.
59
Hoofdstuk 8. TCP/IP
Figuur 8.1: OSI model en TCP/IP
Figuur 8.1 is de vergelijking tussen het OSI model en Ethernet TCP/IP. 1. Fysieke laag: Laag 1 stelt de netwerkhardware voor. Voor Ethernet is dit de gekende “CAT5” kabel. 2. Datalinklaag: Laag 2 specifieert hoe de dataframes over het netwerk zullen verstuurd worden. In deze laag vindt ook de foutafhandeling plaats. Een correctiemechanisme zorgt ervoor dat de gegevens correct aankomen bij de ontvanger. Ethernet handhaaft het protocol CSMA/CD “Carrier Sense Multiple Access/Collision Detection”. Indien twee netwerkdeelnemers simultaan gegevens verzenden over het netwerk, ontstaat er een botsing (collision). De botsing wordt gedetecteerd en het back-off principe treedt in werking. Beide deelnemers wachten een random tijd af voor ze opnieuw een poging ondernemen om gegevens te verzenden. Vindt er opnieuw een botsing plaats, dan vergroot dit tijdsinterval. Ethernet maakt ook gebruik van een fysiek adres, namelijk het MAC adres. (bv. 00-50-8D-ED-61-B3) 3. Netwerklaag: De netwerklaag staat in voor de adressering. Laag 3 stippelt de route voor de verzonden dataframes doorheen het netwerk uit. De netwerklaag voorkomt ook opstoppingen binnen het netwerk. Dit is mogelijk doordat verschillende dataframes, die samenhoren, via een andere route toch hun bestemming bereiken. Het protocol IP staat in voor deze logische adressering, namelijk met IP adressen. (bv. 192.168.0.33) 4. Transportlaag: Laag 4 bouwt een logische verbinding op tussen de deelnemers. Deze laag is verantwoordelijk voor het samenvoegen van de verschillende dataframes, die niet noodzakelijk in de juiste volgorde hun bestemming bereiken. Laag 4 staat in voor een Alexander Dewaele
60
Hoofdstuk 8. TCP/IP correcte dataoverdracht. Het protocol TCP realiseert dit. Dataframes krijgen een ID en een TCP poort (bv. 80). De dataframes worden in de juiste volgorde geplaatst aan de hand van het ID. De TCP poort zorgt ervoor dat de dataframes bij de juiste applicatie terecht komen. 5. Sessielaag 6. Presentatielaag 7. Applicatielaag
8.3
Adressering
Figuur 8.2 visualiseert de volledige adressering van Ethernet TCP/IP. Ethernet heeft het fysiek MAC adres, IP gebruikt het logisch IP adres om de dataframes doorheen het netwerk te leiden en TCP gebruikt een TCP poort zodat het dataframe bij de correcte applicatie terecht komt. Een socket is een IP adres samen met een TCP poort. In dit voorbeeld is de socket 192.168.0.33:80. De poort 80 is gereserveerd voor het HTTP protocol. Het dataframe zal dus hoogstwaarschijnlijk voor een webbrowser bestemd zijn.
Figuur 8.2: Adressering TCP/IP[13]
Iedere deelnemer op een netwerk heeft een IP adres. Een IP adres bestaat uit 32 bits en bestaat uit een netwerkgedeelte (prefix of Net ID) en een hostgedeelte (suffix of Host ID). IPv41 bestaat uit vijf klasses. De verschillen tussen deze klasses is de waarde van de beginbits van het Net ID, de grootte van het Net ID en de grootte van het Host ID. 1
Dit is de huidige versie van het IP-protocol, IPv6 is ontstaan door schaarste aan mogelijke adressen.
Alexander Dewaele
61
Hoofdstuk 8. TCP/IP Klasse
Beginbits
Net ID
Host ID
A B C
0 10 110
1 Byte 2 Bytes 3 Bytes
3 Bytes 2 Bytes 1 Bytes
D E
1110 1111
Multicast Gereserveerd
Tabel 8.1: Klasses IP adressen
Door gebrek aan IP adressen werd het subnetmasker gecre¨eerd. Het subnetmasker bestaat ook uit 32 bits en bepaalt welke bits van het IP adres bij het Net ID horen. Zo werd afgestapt van de klasses. bv. Subnetmasker: 255.255.255.0 ⇒ 1111 1111.1111 1111.1111 1111.0000 0000 De eerste 24 bits van het IP adres bepalen het Net ID. Bij dit netwerk zullen de eerste drie getallen van het IP adres altijd hetzelfde zijn, namelijk het Net ID. Twee voorbeelden van zo’n IP adres van hosts zijn 192.168.123.100 en 192.168.123.101.
8.4
Hardware
Er zijn drie netwerkelementen om verschillende segmenten aan elkaar te koppelen. Een repeater kopieert alles wat toekomt op een ingang naar de uitgang. Een repeater breidt dus een LAN segment uit. Een repeater is helemaal niet intelligent en bevindt zich op de fysieke laag. Een switch is intelligenter en bevindt zich op de datalinklaag. De switch houdt per poort een tabel met de MAC adressen van de deelnemers op die poort bij. Als een dataframe toekomt op een bepaalde poort, controleert de switch het MAC adres. Daarna herhaalt de switch het dataframe enkel op de poort waarop de deelnemer met dat MAC adres zich bevindt. Een switch zorgt voor verschillende LAN segmenten. Al die verschillende LAN segmenten vormen een subnet. Routers koppelen verschillende subnetten aan elkaar. Een subnet wordt gekenmerkt door een specifiek IP adres (Net ID). De router bevindt zich dus op de netwerklaag. Doordat de router subnetten aan elkaar koppelt, heeft een router altijd twee IP adressen. Als een dataframe een router passeert dan controleert de router dit dataframe op IP adres. Aan de hand van dit IP adres weet de router op welk subnet hij het moet doorsturen. Als het IP adres bij geen enkel gekoppeld subnet past, dan stuurt de router het op zijn beurt door naar de volgende router.
Alexander Dewaele
62
Hoofdstuk 8. TCP/IP
Figuur 8.3: Netwerkelementen
8.5
Routering
Bij TCP/IP is een host gekenmerkt door drie gegevens: 1. Het IP adres binnen het lokaal netwerk; 2. De standaardgateway: De router van dit lokaal netwerk. Als een host merkt dat zijn dataframe niet voor het lokaal netwerk bestemd is, dan stuurt de host dit naar zijn standaardgateway. 3. Het subnetmasker: Welke bits van het IP adres deel uitmaken van het Net ID.
Figuur 8.4: Voorbeeld routering
De volgende stappen vinden plaats als node A (172.10.0.100) een dataframe naar node B (184.16.0.101) stuurt. Alexander Dewaele
63
Hoofdstuk 8. TCP/IP 1. Node A merkt dat het IP adres van node B geen lokaal IP adres is, dus stuurt het dataframe naar zijn standaard gateway, namelijk router 1. 2. Router 1 zoekt het juiste subnet in zijn routeringstabel en merkt dat hij het dataframe moet doorsturen naar router 2. 3. Router 2 merkt dat dit IP adres bij het subnet 184.16.0.0 past en dat hij daarmee direct verbonden is. Router 2 stuurt het dataframe door naar Node B.
8.6
NAT protocol en portforwarding
Het NAT “Network Address Translation” protocol is een protocol dat ontwikkeld is om een priv´e netwerk met meerdere deelnemers via ´e´en publiek IP adres2 te koppelen aan het internet. Dit is mogelijk via de unieke adressering van TCP/IP, namelijk de sockets. Een socket is een IP adres en een TCP poort. Het NAT protocol vertaalt een priv´e IP adres naar een publiek IP adres door een dynamische poort toe te kennen aan een socket. De router houdt dus een tabel bij met verschillende poorten die verwijzen naar een specifieke socket. Dit is eenvoudig te begrijpen aan de hand van een voorbeeld.
Figuur 8.5: Voorbeeld NAT protocol
De node met het priv´e IP adres 172.23.0.45 wil surfen (HTTP, destination poort 80) naar de server met het publiek IP adres 74.125.79.104. De server behoort niet tot het priv´e netwerk dus stuurt de node zijn dataframe naar zijn standaardgateway. Dit is hier de router met het priv´e adres 172.23.0.1. Nu vervangt de router het source IP adres van het dataframe door 2
Dit publiek IP adres is het adres waarmee de router op het internet is gekoppeld.
Alexander Dewaele
64
Hoofdstuk 8. TCP/IP zijn publiek IP adres (157.193.122.12) en de source poort door een dynamisch gekozen poort, bijvoorbeeld 2012. Ondertussen koppelt de router in een tabel de poort 2012 aan de socket 172.23.0.45:1093. Doorheen het internet bereikt het dataframe de server. Nu zal de server antwoorden op het source IP adres van het dataframe en dit is 157.193.122.12 en op de source poort 2012. Doorheen het internet zal het dataframe de router bereiken op het publiek IP adres en op poort 2012. De router kijkt in zijn NAT tabel en vindt poort 2012 gelinkt aan het priv´e adres 172.23.0.45 en poort 1093. De router zal het dataframe dus doorzenden naar de node op IP adres 172.23.0.45 en op poort 1093. Het dataframe komt precies terecht daar waar het verwacht wordt. Port forwarding gebruikt dezelfde koppeling van poorten aan sockets in routers. Neem aan dat een server niet rechtsstreeks met een publiek IP adres op het internet is gekoppeld. Maar ook deel uitmaakt van een priv´e netwerk. Als een node die server wilt bereiken op een bepaalde poort, dan moet de node het dataframe niet naar de server sturen maar naar de router met het publiek IP adres. Die router moet het dataframe daarna naar de server sturen. In dit voorbeeld stuurt de node 202.87.123.4 zijn dataframe naar de router 157.193.122.12 en op poort 2012. De router ziet dat deze poort gelinkt is met de socket 172.23.0.100:5231. Dus de router stuurt dit dataframe door naar de server 172.23.0.100 op poort 5231.
Figuur 8.6: Voorbeeld port forwarding
Alexander Dewaele
65
Hoofdstuk 9
Server Applicatie De serverapplicatie heeft ´e´en enkel doel. De gegevens uit de Oracle database ter beschikking stellen voor de “Report Tool”. Dit houdt in dat de serverapplicatie: E´en maal per dag gegevens uit de Oracle databases ophaalt; De gegevens opslaat in een Access bestand; De gegevens op aanvraag verzendt naar de Report Tool.
9.1 9.1.1
Gegevens opvragen ADO .NET
ODBC “Open DataBase Connectivity” is een standaard, gecre¨eerd om te verbinden met diverse relationele databases en om aan de hand van SQL de database te manipuleren. ODBC had natuurlijk de grote beperking dat het enkel voor relationele databases geschikt was. Rond de jaren ’90 kwam Microsoft met OLE DB op de proppen. OLE DB is een object geori¨enteerde interface die geschikt is om verscheidene databronnen te manipuleren, alsook relationele databases via ODBC. Omdat OLE DB een object geori¨enteerde interface is, is het handig te gebruiken voor C++ en Java maar niet voor Visual Basic. Daarom bracht Microsoft ADO “Active Data Object” op de markt. ADO is een verzameling van objecten die gebruik maken van OLE DB. Doordat ADO een verzameling van objecten is en geen verzameling van interfaces, is het geschikt voor Visual Basic.
66
Hoofdstuk 9. Server Applicatie
Figuur 9.1: ADO
Om gegevens op te vragen uit de Oracle database, gebruikt de applicatie “ADO .NET”. Dit is een nieuwe technologie gebaseerd op ADO die ge¨ıntegreerd zit in het .NET framework. ADO .NET is ideaal om te gebruiken bij de communicatie tussen een .Net applicatie en een DBMS.
Figuur 9.2: ADO .NET[13]
ADO .NET maakt het mogelijk om vanuit elke .NET applicatie gegevens uit verschillende databases op te vragen, te wijzigen, toe te voegen en te verwijderen. Specifiek voor Oracle databases bestaat de provider “System.Data.OracleClient”. Een provider is een klassenbiblioteek die ADO .NET services levert.1 Die provider is wel niet standaard aanwezig bij de references van een nieuw project en moet dus eerst worden toegevoegd. 1
Object browser van de klassenbibliotheek in bijlage F
Alexander Dewaele
67
Hoofdstuk 9. Server Applicatie
Figuur 9.3: Add Reference
Eenmaal toegevoegd, bevat de provider een standaard klassenset.
Figuur 9.4: ADO .NET Klassenset[13]
De beschikbare klasses zijn: Connection: Verbinding maken met de database; Command: Een SQL statement verzenden naar de DBMS; Data Reader: Een read-only resultatentabel; Data Adapter: Tussenstap naar “Data Set” (Niet van toepassing).
9.1.2
Opbouw
De opbouw om de recepten uit de Oracle databases op te vragen is voorgesteld in figuur 9.5. Het belangrijkste deel om connectie te maken met een database is de connectiestring. De connectiestring voor de Oracle database is reeds uitvoerig besproken in deel 6.2. Eenmaal de connectie gemaakt is, wordt het SQL SELECT statement2 opgebouwd om de gewenste 2
De SELECT statements bevinden zich in het config bestand van het programma.
Alexander Dewaele
68
Hoofdstuk 9. Server Applicatie recepten uit de database te verkrijgen. Het command wordt gecre¨eerd en gelinkt met de connectie en met het SELECT statement. Nadat het command is uitgevoerd, bevinden de recepten zich in de datareader. De datareader is een virtuele tabel dus moet de data nog overgeplaatst worden naar een arraylist.
Figuur 9.5: Opbouw gegevens opvragen
9.1.3
Code
Het gebruik van de verschillende klasses en de opbouw van het programma is perfect te volgen in de vereenvoudigde code van de serverapplicatie. De connectionstring3 wordt opgebouwd en er wordt geconnecteerd met de Oracle database. 2
’ Data S o u r c e=MyOracleDB ; User I d=Username ; Password=passwd ; I n t e g r a t e d S e c u r i t y=no ; ” s C n n S t r i n g = ” Data S o u r c e=” & DataSource & ” ; User I d=” & U s e r I d & ” ; Password=” & Password & ” ; I n t e g r a t e d S e c u r i t y=no ; ”
4
6
moCnn = New O r a c l e C o n n e c t i o n ( s C n n S t r i n g ) moCnn . Open ( )
Het SQL statement wordt gemaakt en via de commandklasse doorgezonden naar het DBMS. 2
sSQL = ”SELECT RECEPT ID CODE a s Id , RECEPT ID a s Name FROM ” & Table & ”WHERE Name LIKE ’R%’ ORDER BY Name Asc ” oCmd = New OracleCommand ( sSQL , moCnn)
DE DBMS voert het command uit en geeft de resultatentabel terug. De resultatentabel wordt doorlopen en de gegevens worden opgeslaan in de arraylist. Nadien wordt de datareader gesloten en de verbinding verbroken. 3
Van de vorm: Data Source=MyOracleDB;User Id=Username;Password=passwd;Integrated Security=no;
Alexander Dewaele
69
Hoofdstuk 9. Server Applicatie
1
3
5
7
oDR = oCmd . ExecuteReader ( ) While oDR . Read sRecepy = oDR . Item ( 0 ) & vbTab & oDR . Item ( 1 ) a r r o R e c e p i e s . Add( sRecepy ) End While oDR . C l o s e ( ) moCnn . C l o s e ( )
Opmerking: De verbinding dient via code verbroken te worden, de verbinding wordt niet automatisch verbroken!
9.1.4
Resultaat
De werking van het SELECT statement werd reeds besproken in deel 7.2. In dit deel wordt het SELECT statement specifiek toegepast op de Oracle database met de recepten. Om verder te kunnen gaan met het SELECT statement, moet eerst de tabel met de recepten in de database besproken worden. Neem aan dat de tabel “VDM RECIPES” noemt en dat deze de kolommen “REC ID”, “REC ID CODE”, “REC AUTEUR”, “REC COMMENT” en “REC DENSITY” bevat. Tabel 9.1 stelt dit visueel voor. VDM RECIPES REC ID
REC ID CODE
C015 R01234 R04268 R05875
1254 2475 2157 2365
REC AUTEUR AD DV AD
REC COMMENT
REC DENSITY
WEGEN 80DQD1
0 36 12 85
Tabel 9.1: Tabel Recepten
Om de benodigde gegevens te bekomen, gebruikt de applicatie het volgende SELECT statement: SELECT REC ID CODE as Id, REC ID as Name FROM VDM RECIPES WHERE Name LIKE ’R%’ ORDER BY Name ASC Tabel 9.2 stelt de resultatentabel voor.
Alexander Dewaele
70
Hoofdstuk 9. Server Applicatie Resultatentabel Id
Name
2475 2157 2365
R01234 R04268 R05875
Tabel 9.2: Resultatentabel van SELECT statement
De serverapplicatie stuurt enkel de kolommen “REC ID” (= Name) en “REC ID CODE” (= Id) door naar de “Report Tool”. De reden hiervoor is dat het programma in de PLC op de productievloer de “REC ID CODE” gebruikt maar die code is niet gekend door de werknemers. De werknemers gebruiken namelijk altijd de “REC ID”. Doordat de Historian database zijn gegevens via OPC server uit de PLC haalt, zijn de gegevens telkens gebaseerd op de “REC ID CODE”. Die gegevens uit de Historian database zijn nu beschikbaar voor de “Report Tool” applicatie. Maar zoals eerder vermeld kennen de gebruikers van de applicatie die code niet. In de “Report Tool” applicatie moet de “REC ID CODE” omgezet worden in de “REC ID”. Hiervoor heeft de applicatie die twee kolommen van de tabel “VDM RECIPES” nodig.
9.2 9.2.1
Gegevens opslaan Microsoft Access
Eenmaal de gegevens zoals in tabel 9.2 beschikbaar zijn, worden ze opgeslaan in een Access database. Zoals vermeld in hoofdstuk 6 is een Access database ook een relationele database. Het is echter geen server ge¨ ori¨enteerd systeem maar een file ge¨ori¨enteerd systeem. Met andere woorden, de gegevens van de database worden in een *.mdb4 file opgeslaan. Zoals in figuur 6 heeft iedere fabriek zijn Oracle database met de recepten voor de producten. De Access database zal dus per locatie een tabel met recepten bijhouden. Momenteel zijn dit drie tabellen: Kubof (Izegem), Dres (Dresden) en Pps (Spanje). De recepten in de tabellen worden dagelijks ge¨ update. 4
Bij gebruik van Access 2003
Alexander Dewaele
71
Hoofdstuk 9. Server Applicatie
Figuur 9.6: Tabellen Access database
Er zijn drie redenen waarom de Access database als tussenstap wordt gebruikt. De eerste reden is dat de werknemers van de productie, recepten uit de Oracle database verwijderen. Maar de werknemers produceerden ooit die recepten en dus werden de receptcodes reeds gecapteerd door de Historian database. De verwijderde recepten moeten beschikbaar blijven voor het programma “Report Tool” dat gegevens uit de Historian database gebruikt. Daarom is de Access database niet volledig gesynchroniseerd met de Oracle database. Nieuwe recepten worden wel toegevoegd maar oudere recepten worden niet verwijderd. De tweede reden heeft te maken met de performantie van het systeem. De serverapplicatie bevindt zich op een server in Izegem. Neem aan als voorbeeld dat een gebruiker in Iberica (Spanje) zich aanmeldt op het netwerk en het programma “Report Tool” opent. Het programma wilt de recepten, die gebruikt worden door het programma zelf, updaten. Het programma in Spanje stuurt een request naar de serverapplicatie in Izegem. De serverapplicatie stuurt een SQL statement naar de Oracle Database in Spanje. De Oracle database stuurt de gegevens door naar de serverapplicatie, waarop de serverapplicatie de gegevens doorstuurt naar de gebruiker in Spanje. Dit veroorzaakt heel wat onnodig dataverkeer. Bij gebruik van de Access database worden enkel de stappen ´e´en en vier uitgevoerd. Het programma “Report Tool” stuurt de request naar de serverapplicatie. De serverapplicatie haalt de gegevens uit de lokale Access database en stuurt de gegevens door naar de gebruiker. Dit is uiteraard veel sneller. De derde reden is heel simpel. Het programma “Report Tool” moest de Oracle databases en het netwerk minimaal belasten. Door het gebruik van de Access database verbindt de serverapplicatie maar ´e´en maal per dag met de Oracle databases.
Alexander Dewaele
72
Hoofdstuk 9. Server Applicatie
Figuur 9.7: Dataverkeer bij receptenrequest zonder Access database
9.2.2
Opbouw
Om gegevens toe te voegen aan de Access database, moet er natuurlijk eerst weer een connectie worden gemaakt. Dit gebeurt opnieuw aan de hand van een connectiestring. Deze keer van de vorm “Provider=Microsoft.Jet.OLEDB.4.0;Data Source= somepath mydb.mdb;User Id=admin;Password=;”. Het programmaonderdeel om de tabel in de database aan te passen is voorgesteld in een flowchart. De nodige recepten bevinden zich in de arraylist die bekomen werd in het vorige deel, zie figuur 9.5. Het programma controleert voor elk recept of het reeds aanwezig is in de databasetabel. Is dit niet het geval, dan voegt het programma het recept toe aan de tabel (INSERT statement). Als dit wel het geval is, dan wordt eerst nog gecontroleerd of het recept wel een update vereist. Zo ja, dan voert het programma een update van het recept uit. Zo nee, dan doet het programma niets. Merk op: Dit gebeurt voor alle recepten in elke Oracle databases.
Alexander Dewaele
73
Hoofdstuk 9. Server Applicatie
Figuur 9.8: Opbouw gegevens opslaan
9.2.3
Code
Het belangrijkste stuk code van dit onderdeel is het beslissen wat er moet gebeuren met het recept. Moet het recept ge¨ update worden, toegevoegd worden of moet er helemaal niets mee gebeuren? Dit komt goed tot uiting in het volgende stukje code. 2
4
’ Check e v e r y r e c i p e . For Each o R e c i p e As c l s R e c i p e I n R e c i p e s ’ Does t h e r e c i p e e x i s t s ? S e l e c t Case E x i s t s R e c i p e ( L o c a t i o n , o R e c i p e . ReceptID , o R e c i p e . ReceptIDCode ) Case 0 ’ Recept ID Code doesn ’ t e x i s t s . −> INSERT sSQL = ”INSERT INTO ” & L o c a t i o n & ” VALUES ( ’ ” & o R e c i p e . ReceptID & ” ’ , ” & o R e c i p e . ReceptIDCode & ” ) ” oCmd = New OleDbCommand ( sSQL , moCnn) oCmd . ExecuteReader ( )
6
8
10
Case 1 ’ Recept ID Code e x i s t s but n e e d s an update . −> UPDATE sSQL = ”UPDATE ” & L o c a t i o n & ” SET RECEPT ID = ’ ” & o R e c i p e . ReceptID & ” ’ WHERE RECEPT ID CODE = ” & o R e c i p e . ReceptIDCode oCmd = New OleDbCommand ( sSQL , moCnn) oCmd . ExecuteReader ( )
12
14
16
18
Case 2 ’ Recept ID Code e x i s t s but doesn ’ t need an update . −> NOTHING 20
End S e l e c t 22
Next
Alexander Dewaele
74
Hoofdstuk 9. Server Applicatie
9.3 9.3.1
Gegevens verzenden Server & cli¨ ent
Om de recepten van de Oracle databases te verzenden, gebruikt de serverapplicatie TCP/IP “Transmission Control Protocol/Internet Protocol”. De protocollen werden reeds uitvoerig beschreven in hoofdstuk 8. TCP/IP communicatie gebeurt telkens tussen een server en een cli¨ent. In dit project is de serverapplicatie de server en het “Report Tool” programma de cli¨ent. De server is de passieve applicatie. De server luistert op een bepaalde TCP poort of er een aanvraag binnenkomt en beslist of de aanvraag aanvaard wordt. Eenmaal geconnecteerd ontvangt en verzendt de server data. Het “Report Tool” programma is de actieve applicatie. Het programma neemt het initiatief om te verbinden. Als de server de connectie heeft aanvaard, kan de cli¨ent ook onafhankelijk data verzenden en ontvangen. De server luistert dus op ´e´en bepaalde socket, dit is een IP adres en een bepaalde poort. Als er een verbinding binnenkomt en de server accepteert, dan cre¨eert de server een nieuwe socket waarover de communicatie plaats vindt. Zodanig dat er een nieuwe request kan binnenkomen op dezelfde socket. De communicatie met de nieuwe cli¨ent gebeurt dan over nog een andere socket. Op dat moment luistert de server op ´e´en socket en communiceert de server met de twee cli¨ents op twee sockets.
Figuur 9.9: Verbinding server-cli¨ent[13]
9.3.2
Opbouw
Het volledige verhaal van server en cli¨ent speelt zich hier af. De serverapplicatie wacht een groot deel van de tijd op een aanvraag. Doet de cli¨ent een aanvraag, dan aanvaardt de server die. Vervolgens moet de cli¨ent de string “UpdateRecipes;≺locatie” zenden naar de server. De mogelijke locaties zijn Kubof, Dresden of Pps. Dit zijn namelijk de tabellen in de Alexander Dewaele
75
Hoofdstuk 9. Server Applicatie Access database, zie deel 9.2. Als de server de string ontvangt, haalt die de recepten uit de Access database. Dit gebeurt uiteraard weer met een SELECT SQL statement. De recepten worden vervolgens verstuurt naar de cli¨ent. De cli¨ent, de “Report Tool” applicatie, gebruikt de gegevens om rapporteringen te maken.
Figuur 9.10: Opbouw gegevens verzenden
Figuur 9.11: Flowchart gegevens verzenden
Alexander Dewaele
76
Hoofdstuk 9. Server Applicatie
9.3.3
Code
De volgende subroutine die opgeroepen wordt als de serverapplicatie data ontvangt, toont perfect de opbouw van het programma. 2
4
’ R e c e i v e data (TCP/ IP ) P r i v a t e Sub moTCP ReceiveData ( ByVal Data As S t r i n g ) Handles moTCP. R e c e i ve D a t a Dim a r r o D a t a S p l i t As Array t x t R e c e i v e d . Text = Data Try
6
Data = t x t R e c e i v e d . Text ’ S p l i t the r e c e i v e d s t r i n g . a r r o D a t a S p l i t = Data . S p l i t ( ” ; ” )
8
10
’ I f t h e r e c e i v e d s t r i n g b e g i n s with ” U pd ate Re ci pes ” I f a r r o D a t a S p l i t ( 0 ) = ” Upd at eR eci pe s ” Then ’ F i r s t g e t t h e r e c i p e s i n t h e A c c e s s d a t a b a s e and ’ then send them (TCP/ IP ) Dim s L o c a t i o n a s s t r i n g = a r r o D a t a S p l i t ( 1 ) S e n d r e c i p e s ( moAccess . G e t R e c i p e s ( s L o c a t i o n ) ) End I f Catch ex As E x c e p t i o n moEx . LogException ( ex ) End Try
12
14
16
18
20
End Sub
Alexander Dewaele
77
Hoofdstuk 10
Report Tool De ontwikkeling van het VB .NET softwareprogramma “Report Tool” omvat het grootste deel van het project. Het softwarepakket Proficy Historian stelt de gegevens van het kristallisatieproces ter beschikking (bv. temperaturen, drukken, debieten, ...) en de serverapplicatie biedt de gegevens van de recepten van de producten aan. Met de combinatie van beide, produceert de applicatie “Report Tool” samenvattingen en grafieken in verband met het verloop van het kristallisatieproces. De applicatie staat in voor de datarapportering. De samenvattingen en grafieken worden gebruikt om: Proceswaardes te controleren; Fouten in het proces op te sporen; Verbanden te leggen met de kwaliteit van de producten; Het proces te verbeteren; Analyses te maken.
10.1
Visual Basic .NET
Visual Basic[11] is ontwikkeld door Mircosoft. Microsoft had de visie om een programmeertaal te ontwikkelen die gemakkelijk is om te leren en te gebruiken. Met Visual Basic is het mogelijk om zowel eenvoudige visuele programma’s als complexe programma’s te ontwikkelen. Programmeren aan de hand van Visual Basic is een combinatie van twee factoren. Rangschikken van controls op de form (visuele gedeelte) en acties programmeren voor deze controls (programmeer gedeelte). Extra code kan worden geprogrammeerd als de programmeur meer functionalliteit wil toevoegen aan het programma. De GUI “Graphical User Interface” wordt gecre¨eerd door controls (bv. textboxen, knoppen, lijsten, ...) te slepen op de form. De controls krijgen een set standaard instellingen en attributen die de programmeur kan veranderen. Ook tijdens de runtime van het programma kunnen 78
Hoofdstuk 10. Report Tool de attributen tijdens bepaalde acties gewijzigd worden. (bv. Als de gebruiker de applicatie maximaliseert, dan wordt een lijst op de form gemaximaliseerd.) Visual Basic .NET is de opvolger van Visual Basic 6.0, en is een deel van het .NET framework van Microsoft. Visual Basic .NET wordt uitgevoerd en gecompileerd aan de hand van het .NET framework. De twee grootste componenten van het .NET framework zijn: de CLR “Common Language Runtime” en de objecten bibliotheek (the class library). De CLR is de basis van het .NET framework. You can think of the runtime as an agent that manages code at execution time, providing core services such as memory management, thread management, and remoting, while also enforcing strict type safety and other forms of code accuracy that promote security and robustness.[11] De CLR is net als een agent dat tijdens het runnen van de applicatie de programmacode beheert en verschillende diensten aanbiedt. De CLR garandeert ook de veiligheid en robuustheid van het programma. De objectenbibliotheek is een verzameling van herbruikbare, object-geori¨enteerde klasses die de programmeur kan gebruiken om zijn applicatie te ontwikkelen.
Figuur 10.1: Het .NET Framework
Opmerking: De applicatie is ontwikkeld met Microsoft Visual Studio 2005 en aan de hand van het .NET framework 2.0.
Alexander Dewaele
79
Hoofdstuk 10. Report Tool
10.2
Componenten
De applicatie bestaat uit vier componenten. Het onderscheid is visueel zichtbaar door gebruik te maken van vier tabs. De tabs en een korte beschrijving zijn: 1. Connect: Om te connecteren met een Historian database; 2. Global: Dient om data van alle tags die de Historian capteert op te vragen; 3. Recipe: Met deze tab kan data van ´e´en bepaalde batch van een recept opgehaald worden; 4. Comparison: Deze tab dient om verschillende batches van hetzelfde recept te vergelijken.
10.2.1
Connect
Aan de hand van deze tab kan de gebruiker connectie maken met een Proficy Historian database. Bij het opstarten van de applicatie zal de default Historian database ingevuld zijn als server. De gebruiker kan de default server enkel veranderen aan de hand van de Proficy Historian Administrator. Ook is de administrator nodig om een Historian server toe te voegen als de server niet beschikbaar is in de servercombobox. De applicatie kan enkel met ´e´en server simultaan verbinden. Hieruit volgt dat als de applicatie reeds verbonden is en de gebruiker verbindt met een andere server, dan zal de connectie met de eerste server verbroken worden. Om te connecteren met een andere gebruikersnaam, kan er gewoon verbonden worden met dezelfde server maar met een andere gebruikersnaam.
Figuur 10.2: Report Tool: Connect
De component “Connect” biedt verschillende opties aan. De eerste optie is om de applicatie de logins te laten onthouden zodanig dat de gebruiker niet verplicht is om de username en het password telkens in te geven. Als de optie aangevinkt is dan worden de username en het Alexander Dewaele
80
Hoofdstuk 10. Report Tool password automatisch ingevuld bij het selecteren van de server. De logingegevens worden opgeslaan per server in een XML file, genaamd “data.xml”, onder de vorm: 1
3
<S e r v e r Name=”VDMTEST”> <Username>User152 <Password>UsersPassword152
Opgelet: Het passwoord is zichtbaar voor iedereen die de file data.xml opent! Rechts van de logingroupbox wordt informatie over de geconnecteerde server weergegeven: Servername: De servernaam van de geconnecteerde Historian database; Connected: Status van de verbinding; Active Users: Aantal actieve, ingelogde gebruikers; Licensed Users: Maximum aantal simultaan actieve, ingelogde gebruikers; Active Tags: Aantal gecapteerde tags door de Historian database; Licensed Tags: Maximum aantal gecapteerde tags.
Een tweede optie die aanwezig is op de tab, is de optie om de recepten, die lokaal zijn opgeslaan binnen de applicatie in een textbestand, te updaten. Als de optie aangevinkt is, dan wordt om de x aantal dagen de recepten ge¨ update. De datum van de volgende update is af te lezen. De gebruiker dient ook zijn locatie binnen group Vandemoortele te kiezen, zodanig dat de juiste recepten worden ge¨ update. Zowel de locaties als het aantal dagen kan de gebruiker wijzigen door het config bestand van de applicatie te openen. Het IP adres en de TCP poort van de serverapplicatie is ook terug te vinden in het config bestand. Mocht de server ooit verplaatst worden dan kan dit daar gewijzigd worden. Het config bestand bevat daarvoor de volgende regels die voor zich spreken: 2
4
6
8
Opmerking: De gebruiker kan de recepten ook manueel updaten door “Update Now” te selecteren in het menu “Recipes”. Dit kan bijvoorbeeld nodig zijn als de gebruiker de recepten van een andere locatie wilt bekijken. Dan moet de Alexander Dewaele
81
Hoofdstuk 10. Report Tool gebruiker eerst de andere locatie selecteren en dan moeten de recepten manueel ge¨ update worden.
Figuur 10.3: Recepten manueel updaten
10.2.2
Global
Figuur 10.4: Report Tool: Global
De “Global” tab maakt het mogelijk om van alle tags, die de geconnecteerde Historian database capteert, waardes op te vragen en in een grafiek te plaatsen. Omdat het mogelijk is dat de Historian database veel tags capteert (maximum 250.000 tags) is een filter het eerste dat aanwezig is op de global tab, zo wordt het selecteren van tags eenvoudiger. De filter maakt gebruik van wildcards zoals ? en * waar ? ´e´en karakter kan zijn en * meerdere karakters kan voorstellen. Een paar voorbeelden:
L01 TEMP* geeft weer
– L01 TEMP CIL3
– L01 TEMP CIL1
– NOT L06 TEMP CIL1
– L01 TEMP CIL2
– NOT L06 TEMP CIL2
Alexander Dewaele
82
Hoofdstuk 10. Report Tool L0? TEMP* geeft weer
– L06 TEMP CIL1
– L01 TEMP CIL1
– L06 TEMP CIL2
– L01 TEMP CIL2
– NOT L13 TEMP CIL1
– L01 TEMP CIL3 Meerdere filters kunnen gespecifieerd worden. Splits de filters op met het karakter “;”. De applicatie behandelt de filters apart. Als er bijvoorbeeld twee filters zijn, kijkt de applicatie of de tag voldoet aan de ene filter OF de andere filter. *TEMP*; *DRUK* geeft weer
– L01 TEMP CIL1 – L01 DRUK CIL1 Eenmaal de tags geselecteerd zijn waarvan de gebruiker gegevens wilt opvragen, moet de gebruiker nog een start- en stoptijd opgeven. De samenvatting en de grafiek, die de applicatie produceert, zal op deze tijden gebaseerd zijn. Specifiek voor de samenvatting moet de gebruiker nog “calculation modes” kiezen. De applicatie zal deze wiskundige grootheden berekenen en weergeven in de samenvatting. De verschillende calculation modes zijn: Average: Het gewogen gemiddelde voor een bepaald interval; Standard deviation: De gewogen standaard deviatie voor een bepaald interval; Total: Het totaal van alle waardes voor een bepaald interval; Minimum: Het minimum van de waardes voor een bepaald interval; Maximum: Het maximum van de waardes voor een bepaald interval; Count: Het aantal gecapteerde waardes voor een bepaald interval; Raw average: Het ruw gemiddelde voor een bepaald interval; Raw standard deviation: De ruwe standaard deviatie voor een bepaald interval; Raw total: Het ruwe totaal voor een bepaald interval.
De samenvatting geeft enkel de wiskundige grootheden weer tussen de start- en de stoptijd maar wat er tussenin gebeurt, is niet gekend. Daarom biedt de applicatie ook de mogelijkheid om een grafiek1 te cre¨eren. Om zo het verloop van de waardes te bekijken. De tags die de grafiek afbeeldt, zijn diegene die geselecteerd worden in de samenvatting. De gebruiker dient 1
In deel 10.3.2 worden de grafieken besproken.
Alexander Dewaele
83
Hoofdstuk 10. Report Tool ook een calculation mode en een interval te selecteren. Het interval is de tijdspanne tussen twee waardes van een tag. vb. Start- en stoptijd: 01/01/2008 - 02/01/2008 (24h) Calculation mode: Average Interval: 30 Minutes = 0.5 hours E´en tag in de grafiek zal 24/0.5= 48 punten bezitten.
10.2.3
Recipe
Figuur 10.5: Report Tool: Recipe
De tab “Recipe” is ontwikkeld om een samenvatting en een grafiek te maken van een bepaald recept op een bepaalde productielijn. Deze tab maakt het mogelijk voor de gebruiker om gegevens over alle gemaakte recepten op een bepaalde productielijn tussen een bepaalde starten stoptijd op te halen. De gebruiker dient eerst een productielijn, start- en stoptijd in te geven, waarna alle geproduceerde recepten verschijnen met hun starttijd. Na het selecteren van een recept in de lijst, wordt de samenvatting van het recept gemaakt met de standaard calculation modes: minimum, maximum en average. Ook in de tab “Recipe” is het opnieuw mogelijk om een grafiek te maken van bepaalde tags in de samenvatting samen met een calculation mode en een interval.
10.2.4
Comparison
De “Comparison” tab biedt de mogelijkheid aan om verschillende batches van hetzelfde recept te vergelijken. Zelfs als de batches op verschillende productielijnen plaatsvonden. Als de Alexander Dewaele
84
Hoofdstuk 10. Report Tool
Figuur 10.6: Report Tool: Comparison
werknemers op de kwaliteitsafdeling zeggen dat de ene batch van een recept beter is dan een andere batch, dan kan aan de hand van de “Report Tool” de verschillen in de batches opgespoord worden. De input van de tab “Comparison” bestaat uit een receptnaam, start- en stoptijd. Als deze gegevens beschikbaar zijn, dan zoekt de applicatie wanneer dit recept gemaakt is tussen die start- en stoptijd op iedere productielijn. Het resultaat is een treeview met de productielijnen en het tijdstip van productie. Het is iets ingewikkelder om duidelijk te maken uit welke gegevens de grafiek moet bestaan. De gebruiker vinkt eerst de recepten aan die hij in de grafiek wilt visualiseren. Maar per recept moet ook nog duidelijk gemaakt worden welke tags de grafiek moet bevatten. Dus na het aanvinken, selecteert de gebruiker het recept. Dan komen in de rechtse lijst de beschikbare tags. Dan kunnen de tags geselecteerd worden die in de grafiek moeten komen. Voor dat bepaald recept komen die tags in de grafiek. Uiteraard moet opnieuw een calculation mode en een interval meegegeven worden. Voorbeeld: De gebruiker wilt de temperatuur van de koelcilinder van verschillende batches van het recept “R05064” vergelijken. Namelijk de batches op 10 november 2008 (op productielijn 1) en op 25 augustus 2008 (op productielijn 2). De werkwijze: 1. Vink het recept op “L01 ⇒ 10-11-2008 09:52:42 AM” aan; 2. Vink het recept op “L02 ⇒ 25-08-2008 13:42:12 PM” aan; 3. Selecteer het recept op 10-11-2008 09:52:42 AM; Alexander Dewaele
85
Hoofdstuk 10. Report Tool 4. Vink de tag “L01 TEMP CIL” aan; 5. Selecteer het recept op 25-08-2008 13:42:12 PM; 6. Vink de tag “L02 TEMP CIL” aan.
Figuur 10.7: Selecteren vs Aanvinken
Opmerking: De X-as is niet meer opgedeeld in tijdstippen zoals in de andere grafieken. De eenheid van de X-as in deze tab is “hours”, het aantal uren dat verstreken is sinds het begin van het recept. De X-as kon hier niet opgedeeld worden in tijdstippen doordat de verschillende recepten niet op hetzelfde tijdstip werden geproduceerd.
10.3
Extra
10.3.1
Interval
Kies het interval voor de grafieken doordacht. Als bijvoorbeeld drie tags geselecteerd zijn over een periode van twee dagen en een interval van ´e´en seconde. Dan moet de applicatie 3Tags x (2Dagen x 24h x 60” x 60’)Seconds = 518400 waardes ophalen en in de grafiek visualiseren. Begrijp dat dit een zware opdracht is. Natuurlijk, hoe kleiner het interval, hoe gedetailleerder de grafiek. Daarom moet de gebruiker goed over het interval reflecteren.
10.3.2
Grafieken
De grafieken in de applicatie worden gecre¨eerd met ZedGraph[24] . ZedGraph bestaat uit een set .NET klasses om grafieken te cre¨eren. De geleverde klasses zijn heel flexibel en bijna alles kan aangepast worden aan de wensen van de gebruiker. Toch zijn de klasses gebruiksvriendelijk doordat alle attributen van de klasses voorzien zijn van standaard waardes. Dit project stelde bepaalde eisen aan de grafieken en de grafieken van ZedGraph komen tegemoet aan alle eisen. Precieze aflezing van de co¨ ordinaten van de punten op de grafiek; Inzoomen op de grafiek; Afdrukken van de grafieken; Opslaan van de grafieken;
Alexander Dewaele
86
Hoofdstuk 10. Report Tool Meerdere Y-assen afhankelijk van de engineering unit van de tag.
Als de gebruiker met rechts klikt op de grafiek dan komen de volgende opties tevoorschijn: Copy: Kopieer de grafiek naar het klembord; Save Image As...: Bewaar de grafiek als een figuur. (png, gif, jpg, tif, bmp); Print...: Druk de grafiek af; Show Point Values: Toon de co¨ ordinaten van de punten als de muis erover beweegt; Un-Zoom: Doe de laatste zoomactie teniet; Undo All Zoom/Pan: Doe alle zoomacties teniet; Set Scale to Default: Toon de originele grafiek.
De grootte van de tekst in vergelijking met de grafiek zelf kan aangepast worden in het config bestand. De grootte van de tekst wordt geschaald in vergelijking met de grootte van de grafiek. Als de verschaling ingesteld staat op 10 inches en de titelgrootte is bijvoorbeeld 14 punten (standaard), dan zal de titel 14 punten groot zijn als de grafiek 10inches = 10 ∗ 2.54cm = 25.4cm groot is. Voorbeeld: Neem aan dat de grafiek altijd 20 inch groot is en de titelgrootte ingesteld is op 14 punten. De verschaling is 10 = 20/2 ⇒ De titelgrootte is 28 = 14 ∗ 2 punten. De verschaling is 5 = 20/4 ⇒ De titelgrootte is 56 = 14 ∗ 4 punten. Hoe groter de verschaling, hoe kleiner de tekst op de grafiek. 1
10.3.3
Saves
Na de eerste versie van de applicatie kwam de vraag van de gebruikers om het mogelijk te maken dat ze niet telkens de gewenste tags opnieuw moesten selecteren. De verschillende gebruikers controleren namelijk veel dezelfde tags. Hierbij verloren ze veel tijd door telkens de tags te selecteren. Om tegemoet te komen aan deze vraag, werden een soort van saves ontwikkeld. Bij iedere lijst van tags in de applicatie bevindt zich een combobox met de beschikbare saves. Selecteert de gebruiker een save uit de combobox, dan worden de tags in relatie met de save geselecteerd in de lijst. Om de saves te beheren werd een aparte form gemaakt.
Alexander Dewaele
87
Hoofdstuk 10. Report Tool
Figuur 10.8: Saves
Om saves toe te voegen, kan de groupbox “Add Save” gebruikt worden. Eerst dient de gebruiker een naam voor de save in te geven. Daarna kan de gebruiker de tags, die bij die savenaam horen, selecteren. Als de gebruiker dan op de knop “Save” drukt, is die save onmiddellijk beschikbaar in de applicatie. De groupbox “Edit Save” biedt de mogelijkheid om reeds toegevoegde saves te wijzigen. Hier kunnen bepaalde tags verwijderd of toegevoegd worden. Om een save te verwijderen, navigeert de gebruiker naar de groupbox “Delete Save”. De gebruiker selecteert de gewenste save en druk op de knop “Delete”. De save is onmiddellijk niet meer beschikbaar in de applicatie. De saves van de applicatie worden opgeslaan in het bestand “Data.xml” onder de vorm: 2
4
6
8
<Saves> <Save Name=”EmulsieTemp”> L01 PV EmulsieTemp KC1 ; L01 PV EmulsieTemp KC2 ; . . . ; < / Tags> <Save Name=”Drukken”> L01 PV Hogedrukpomp Druk Na ; L01 PV Hogedrukpomp Druk Voor ; . . . ; < / Tags>
Het scherm om de saves te beheren wordt geopend door “Saves” te selecteren in het menu “File”.
Alexander Dewaele
88
Hoofdstuk 10. Report Tool
Figuur 10.9: Openen saves
10.3.4
Statusstrip
Een handig extraatje is de statusstrip onderaan het scherm. Aan de hand van de statusstrip kan de gebruiker op ieder moment zien of hij nog geconnecteerd is met de server en onder welke username. De statusstrip toont ook de status van het huidige archief. Als er bijvoorbeeld 81MB/100MB staat, dan is 81MB van de beschikbare 100MB gebruikt.
Figuur 10.10: De statusstrip
10.3.5
Minimaliseren
Doordat de gebruikers vaak veel programma’s hebben openstaan, wordt de applicatie “Report Tool” geminimaliseerd in een tray. Hierdoor moet de gebruiker de applicatie niet telkens afsluiten om plaats vrij te hebben op de taakbalk van Windows.
Figuur 10.11: Tray door minimalisatie
10.3.6
Helpfile
De gebruiker kan de helpfile van de applicatie op drie manieren openen. De eerste manier is om de helpfile gewoon te openen vanuit de directory waar de applicatie ge¨ınstalleerd is. De tweede manier is om vanuit het programma te klikken op “F1 Helpfile” in menu “Help”. En de laatste manier is om simpelweg op F1 te drukken in de applicatie.
Figuur 10.12: Openen helpfile
Alexander Dewaele
89
Hoofdstuk 10. Report Tool
10.3.7
Installatie
De installatie van de applicatie is gemaakt met “Smart Install Maker”. De grootte van de installatiefile is ±1MB en de applicatie zelf neemt ongeveer 2MB in beslag. De procedure om de applicatie te installeren is uiterst eenvoudig. Tijdens de installatie worden twee instellingen gevraagd: de map waarin de installatie moet plaatsvinden en of de installatie een shortcut op het bureaublad moet cre¨eren. De procedure is terug te vinden in bijlage G.
10.4
Programmaopbouw
10.4.1
SDK
Met de SDK kunnen zowel gegevens over de tags als waardes van de tags opgevraagd worden zoals voorgesteld in de volgende figuur.
Figuur 10.13: SDK: Opvragen tags en waardes
De input om tags op te vragen bestaat uit een filter (vb. *TEMP*) en uit drie booleans. Aan de hand van de booleans weet de SDK welke informatie de gebruiker wilt, namelijk: de tagnaam, de beschrijving en/of de eenheid. (vb. L01 TEMP Cilinder, Productielijn 1 Temperatuur Koelcilinder, °C). De input om waardes van een tag op te vragen, is ingewikkelder. Eerst en vooral zijn de tagnaam, de start- en stoptijd nodig. Maar er zijn nog negen criteria om te defini¨eren welke waardes gewenst zijn. De negen criteria en hun mogelijkheden zijn: 1. Tagmask: De gegevens zullen van deze tag afkomstig zijn. 2. Starttijd: De gegevens zullen van na dit tijdstip zijn. 3. Stoptijd: De gegevens zullen van voor dit tijdstip zijn. 4. Samplingmode:
Alexander Dewaele
90
Hoofdstuk 10. Report Tool (a) Current Value: Geeft de huidige waarde van de tag weer. Start- en stoptijd worden genegeerd. (b) Interpolated: De waardes zijn ge¨ınterpoleerd, gebaseerd op aantal samples en de start- en stoptijd. (c) Trend: Geeft het maximum en minimum van het interval weer. (d) Raw By Time: Geeft de ruwe waardes weer gebaseerd op de start- en stoptijd. (e) Raw By Number: Geeft de ruwe waardes weer gebaseerd op de starttijd, aantal samples en de richting. De stoptijd is genegeerd. (f) Calculated: Geeft berekende waardes weer gebaseerd op aantal samples, starttijd, stoptijd en de calculationmode. 5. Number of samples: Specifieert hoeveel waardes de SDK zal ophalen. Verdeeld over de start- en stoptijd. 6. Filtertag: De tag waarop de filter zal toegepast worden. 7. Filtermode: Een filter om het aantal waardes te beperken. (a) Exact Time: Haalt waardes op voor de exacte tijdstippen dat de filterwaarde “True” is. (b) Before Time: Haalt waardes op vanaf de laatste “False” filterwaarde tot de eerste “True” filterwaarde. (c) After Time: Haalt waardes op vanaf de eerste “True” filterwaarde tot de eerst daaropvolgende “False” filterwaarde. (d) Before And After Time: Haalt waardes op vanaf de laatste “False” filterwaarde tot de eerst daaropvolgende “False” filterwaarde. 8. Filter Comparison Mode: (a) Equal: De filterwaarde is “True” als de filtertag gelijk is aan de filterwaarde (Comparison value). (b) Not Equal: De filterwaarde is “True” als de filtertag NIET gelijk is aan de filterwaarde. (c) Less Than: De filterwaarde is “True” als de filtertag kleiner is aan de filterwaarde. (d) Greater Than: De filterwaarde is “True” als de filtertag groter is aan de filterwaarde. (e) Less Than Equal: De filterwaarde is “True” als de filtertag kleiner of gelijk is aan de filterwaarde.
Alexander Dewaele
91
Hoofdstuk 10. Report Tool (f) Greater Than Equal: De filterwaarde is “True” als de filtertag groter of gelijk is aan de filterwaarde. 9. Filter Comparison Value: De waarde waar de filtertag mee wordt vergelijkt. Er zijn ook nog vier velden om te defini¨eren welke informatie over de waardes gewenst zijn: 1. Timestamp: Het tijdstip dat bij de waarde past. 2. Value: De echte waarde. 3. DataQuality: De kwaliteit van de waarde. 4. Comments: Commentaar bij de waarde.
10.4.2
Opstarten
Tijdens het opstarten van de applicatie gebeuren er al vele acties op de achtergrond. Aan de hand van de servermanager dat GE Fanuc meelevert met de SDK, zoekt de applicatie de beschikbare Historian databases. De laatste instellingen voor de opties, de locaties, de saves en de logins worden opnieuw ingeladen. Ook de figuren worden ingeladen. De actie om de recepten te updaten is het meest ingewikkeld en wordt verduidelijkt aan de hand van een flowchart.
Figuur 10.14: Opbouw opstarten applicatie
De applicatie controleert eerst of het wel nodig is om de recepten te updaten aan de hand van de laatste uitgevoerde update. Is geen update nodig dan worden de lokaal opgeslagen recepten gebruikt en in de combobox geplaatst. Is een update wel nodig, dan verwijdert de applicatie de oude recepten, verbindt de applicatie met de serverapplicatie en stuurt een request. Eenmaal de recepten ontvangen en lokaal opgeslaan zijn, worden de nieuwe recepten in de combobox ingevuld.
Alexander Dewaele
92
Hoofdstuk 10. Report Tool
Figuur 10.15: Flowchart recepten updaten
10.4.3
Tab Connect
De opbouw van de tab “Connect” bestaat uit vier delen. Een deel om de username en het password op te halen als een Historian server geselecteerd wordt. Een deel om te connecteren met een Historian database. Dit gebeurt grotendeels aan de hand van de SDK. Als de gebruiker connecteert met een server dan controleert de applicatie of de login van die server reeds gekend was. Als dit niet het geval is, slaat de applicatie de login voor die server op. En het laatste deel haalt de status van de geconnecteerde server op. Hierbij horen ook de gegevens in de statusstrip.
Figuur 10.16: Opbouw connect
De interface van de tab “Connect” kan als volgt voorgesteld worden. Met de specifieke inputs en outputs. Alexander Dewaele
93
Hoofdstuk 10. Report Tool
Figuur 10.17: Interface connect
10.4.4
Tab Global
De tab “Global” maakt gebruik van een filter om het aantal tags te beperken. Om de gewenste tags te krijgen dient de applicatie de SDK te gebruiken. De code om tags op te vragen met behulp van de SDK bevindt zich in bijlage D en kan voorgesteld worden als in de volgende figuur.
Figuur 10.18: SDK Tags: Global
Om de samenvatting en de grafiek te maken dienen buiten de tags ook nog de start-, stoptijd en calculation modes beschikbaar te zijn. Aan de hand van de SDK bekomen we de waardes voor iedere tag en iedere calculation mode.
Alexander Dewaele
94
Hoofdstuk 10. Report Tool
Figuur 10.19: Opbouw global
Figuur 10.20: Interface global
10.4.5
Tab Recipe
Het grote verschil tussen de opbouw van de tab “Recipe” en de tab “Global” is dat deze tab de filtercriteria van de SDK gebruikt om de waardes2 van de tags te bekomen, namelijk enkel maar de waardes waarbij de waarde van de recepttag gelijk is aan een bepaald recept. 2
In de tab “Global” werd een filter gebruikt om de tags te filteren, niet de waardes.
Alexander Dewaele
95
Hoofdstuk 10. Report Tool
Figuur 10.21: Opbouw recipe
De tab “Recipe” kan als volgt voorgesteld worden. Zoals op de figuur zijn de tags van de samenvatting nodig om de grafiek op te bouwen.
Figuur 10.22: Interface recipe
10.4.6
Tab Comparison
Hier wordt de SDK gebruikt om te zoeken wanneer de tag met de receptnamen gelijk was aan een bepaald recept binnen de start- en stoptijd. Om de waardes van de batches op te halen, worden opnieuw de filtercriteria gebruikt.
Alexander Dewaele
96
Hoofdstuk 10. Report Tool
Figuur 10.23: Opbouw comparison
Het grote verschil is dat deze tab geen samenvatting heeft. De tags voor de grafiek zijn niet afkomstig van de samenvatting zoals bij de andere tabs.
Figuur 10.24: Interface comparison
Alexander Dewaele
97
Besluit Het volledige overzicht om een correcte werking van de Report Tool applicatie te garanderen is samengevat aan de hand van de volgende figuur.
Het overzicht bevat drie grote delen: de hardware op de productievloer, de applicaties op de servers en de PC’s “Personal Computers” waarop de Report Tool applicatie ge¨ınstalleerd is. De sensoren op de productievloer meten aan de hand van fysische verschijnselen de waardes (temperaturen, debieten, drukken, ...) van het productieproces waarna de meetomvormers die waardes omzetten in een analoog stroomsignaal. De PLC converteert dit analoog signaal naar de re¨ele proceswaarde en slaat de waardes lokaal op (merkers, datablocken, ...). Een OPC Server, die actief is op een server, haalt de proceswaardes op uit de PLC en stelt deze 98
Hoofdstuk 10. Report Tool beschikbaar. De OPC collector van Proficy Historian haalt de waardes op en zendt deze naar de Historian database. Vervolgens archiveert de Historian database de proceswaardes en stelt deze beschikbaar voor de Report Tool applicatie. Op de server zijn nog twee andere applicaties aanwezig. De serverapplicatie verbindt met de Oracle databases en haalt informatie over de recepten op. Daarna stelt de serverapplicatie de informatie beschikbaar voor de Report Tool applicatie. De Report Tool applicatie, die ge¨ınstalleerd is op de PC’s van de werknemers, ontvangt van twee verschillende applicaties data. De Historian database voorziet de historische data van de procesparameters en de serverapplicatie levert de informatie over de verschillende recepten van de producten. Aan de hand van deze informatie produceert de Report Tool applicatie rapporteringen. Voordat de Historian database de procesparameters capteerde, schreven de arbeiders iedere x aantal uren de proceswaardes over van displays die zich naast het productieproces bevonden. Al deze documenten werden dan bewaard in een archief. Als de mensen van de productie of van de kwaliteit een abnormaliteit ontdekten, werden deze documenten opnieuw bovengehaald en zochten ze naar de oorzaak. Door het nieuwe systeem dienen de proceswaardes niet meer opgeschreven te worden, wat veel arbeidsuren en papierwerk bespaard. Dit is uiteraard financieel zeer gunstig. Ook verloopt het zoeken naar de oorzaak veel sneller doordat alles elektronisch gebeurt aan de hand van de “Report Tool”. Binnen Vandemoortele werd een schatting en beoordeling gemaakt over de volgende punten: Tijdsbesparing
– Papierwerk: 90% – Opzoekingswerk: 80% Beoordeling
– Trendings: handig om evoluties te zien in functie van tijd, dit was niet mogelijk met de papieren versies. – Gegevens op basis receptniveau: van toepassing om de oorzaak van bepaalde problemen na te gaan. – Vergelijking parameters tussen recepten onderling: voornamelijk interessant voor het nagaan van de verschillen bij verschillende producties. – De mogelijkheid bestaat nu om meer inzicht te krijgen in het kristallisatieproces doordat de parameters veel frequenter worden geregistreerd dan voorheen, samen met de mogelijkheid om de gegevens grafisch weer te geven. Algemene evaluatie en waardering van het project: Handig programma om op een snelle manier een overzicht te verkrijgen van alle parameters Alexander Dewaele
99
Hoofdstuk 10. Report Tool van toepassing bij het kristallisatieproces. Tevens van nut om bij problemen tijdens productie de oorzaak van deze problemen op te sporen. Er kunnen eveneens parameters opgevraagd worden dewelke vroeger niet geregistreerd werden en de registratie gebeurt nu met een hogere frequentie.
Alexander Dewaele
100
Bibliografie [1] Capoen, H., Ethernet TCP/IP in de industrie [2] ConnectionStrings.com, Forgot that connectionstring? Get it here!, 01/12/2008. http://www.connectionstrings.com/ [3] Cottyn, J., TPA: Managementsystemen., 2008 [4] Codeproject, CodeProject: Asynchronous processing of functions., 15/11/2008. http://www.codeproject.com/KB/vb/backgroundworker.aspx [5] Codeproject, CodeProject: A flexible charting library., 02/03/2009. http://www.codeproject.com/KB/graphics/zedgraph.aspx [6] Endress+Hauser, Endress+Hauser - Temperatuurmetingen, 01/05/2009. http://www.be.endress.com/nederlands [7] GE Fanuc Automation Americas, Proficy Historian Electronic Books, 2006 versie 3.1 [8] JUMO Meet- en Regeltechniek B.V., JUMO Meet- en Regeltechniek B.V. * Meten, Regelen en Registreren *, 01/05/2009. http://www.jumo.nl/ [9] Jupitermedia Corporation, Add multithreading to your VB.net applications, 10/11/2008. http://www.devx.com/DevX/10MinuteSolution/20365 [10] Microsoft Corporation, Visual Basic and visual Basic. NET programming, 08/10/2008. http://msdn.microsoft.com/en-us/vbasic/default.aspx [11] Microsoft Corporation, .NET Framework Conceptual Overview, 2008. [12] Novotek, Proficy Historian Develoopment, 2005 [13] Vandenhoeke, D., SCADA - VB.NET [14] Vandehoeke, D., SCADA - Databases [15] Vandehoeke, D., SCADA - OPC Servers 101
Bibliografie [16] Vandemoortele Group, Vandemoortele Group, 10/12/2008. http://www.vandemoortele.com/NL/home.asp [17] Vandewalle, W., MES Strategie VDM, versie A1, 28/08/2006. [18] Vandewalle, W., User Requirement Specificaties: Beheer parameters natgedeelte Kubof, versie A1 [19] Vereecke, R., Productieproces: Het NAT gedeelte, versie 0.2 [20] Wikimedia Foundation Inc, ANSI/ISA-95., 10/02/2009. http://nl.wikipedia.org/wiki/ANSI/ISA-95 [21] Wikimedia Foundation Inc, Computer Integrated Manufacturing., 10/02/2009. http://nl.wikipedia.org/wiki/Computer_Integrated_Manufacturing [22] Wikimedia Foundation Inc, Manufacturing Execution System., 10/02/2009. http://nl.wikipedia.org/wiki/Manufacturing_Execution_System [23] Wikimedia Foundation Inc, Visual Basic., 07/04/2009. http://en.wikipedia.org/wiki/Visual_Basic [24] ZedGraph Wiki, Main Page - ZedGraphWiki, 02/03/2009. http://zedgraph.org/wiki/index.php?title=Main_Page
Alexander Dewaele
102
Bijlage A
Binding
Figuur A.1: Early binding
Figuur A.2: Late binding
103
Bijlage B
Klassendiagramma Report Tool
Figuur B.1: Klassendiagramma Report Tool
104
Bijlage C
Klassendiagramma serverapplicatie
Figuur C.1: Klassendiagramma serverapp
105
Bijlage D
SDK: Code tags opvragen 1
P u b l i c F u n c t i o n Tags ( ByVal Tagmask As S t r i n g , ByVal Tagname As Boolean , ByVal D e s c r i p t i o n As Boolean , ByVal EngUnits As Boolean ) As TagRecordset
3
5
Dim oTags As Tags Dim oTagRecordset As TagRecordset
7
Try
9
11
13
15
’ Check i f s t i l l c o n n e c t e d CheckConnection ( ) ’ Tagname , d e s c r i p t i o n , e n g i n e e r i n g u n i t s oTags = moServer . Tags oTagRecordset = oTags . NewRecordset With oTagRecordset . C r i t e r i a . Tagname = Tagmask
17
With . F i e l d s . Tagname = Tagname . Description = Description . E n g i n e e r i n g U n i t s = EngUnits End With
19
21
23
I f Not . Qu e r yR e co r ds e t Then MsgBox ( ” Query F a i l e d ” ) End I f
25
27
29
31
33
End With Catch ex As E x c e p t i o n Throw New A p p l i c a t i o n E x c e p t i o n ( ex . Message ) End Try Return oTagRecordset End F u n c t i o n
106
Bijlage E
SDK: Code values opvragen 2
4
6
8
P u b l i c F u n c t i o n V a l u e s ( ByVal CTagmask As S t r i n g , ByVal CStartTime As Date , ByVal CEndTime As Date , ByVal CSamplingMode As I n t e g e r , ByVal CCalculationMode As I n t e g e r , ByVal C S a m p l i n g I n t e r v a l As Long , ByVal CNumberOfSamples As I n t e g e r , ByVal C F i l t e r T a g As S t r i n g , ByVal CFilterMode As I n t e g e r , ByVal CFilterComparisonMode As I n t e g e r , ByVal C F i l t e r C o m p a r i s o n V a l u e As S t r i n g , ByVal FTimestamp As Boolean , ByVal FValue As Boolean , ByVal FDataQuality As Boolean , ByVal FComments As Boolean ) As D a t a R e c o r d s e t Dim o D a t a R e c o r d s e t As D a t a R e c o r d s e t
10
12
14
16
18
20
22
24
26
28
30
o D a t a R e c o r d s e t = moServer . Data . NewRecordset With o D a t a R e c o r d s e t With . C r i t e r i a . Tagmask = CTagmask . StartTime = CStartTime . EndTime = CEndTime . SamplingMode = CSamplingMode . C a l c u l a t i o n M o d e = CCalculationMode . S a m p l i n g I n t e r v a l = C S a m p l i n g I n t e r v a l * 1000 . NumberOfSamples = CNumberOfSamples . FilterTag = CFilterTag . F i l t e r M o d e = CFilterMode . FilterComparisonMode = CFilterComparisonMode . FilterComparisonValue = CFilterComparisonValue End With With . F i e l d s . TimeStamp = FTimestamp . Value = FValue . D a t a Q u a l i t y = FDataQuality . Comments = FComments End With
32
34
36
38
I f Not . Qu e r yR e co r ds e t Then MsgBox ( ” Query F a i l e d ” ) End I f End With Return o D a t a R e c o r d s e t End F u n c t i o n
107
Bijlage F
Objectbrowser Oraclecli¨ ent
Figuur F.1: Object browser provider Oracleclient
108
Bijlage G
Installatie Report Tool
Figuur G.1: Procedure installatie
109