ESD Eingangskontrollsystem

Transcription

ESD Eingangskontrollsystem
ESD Eingangskontrollsystem
Diplomarbeit 2009
Serhat Keskin
Peter Schobesberger
Alexander Schuster
ESD-Eingangskontrollsystem
KURZBESCHREIBUNG
Es
wurde
ein
drehkreuzgesicherter
Eingang
mit
Überwachungseinrichtung
entwickelt. Der Eingang ist ausgerüstet mit einem Drehkreuz, einem ESD-Prüfgerät,
einem iButton-Leser, zwei Lichtschranken und einer Kamera. Der Eingang ist so
aufgebaut, dass sich jeder, der in den Produktionsbereich möchte, identifizieren und
eine Überprüfung ablegen muss. Sollte ein Eingang ohne Überprüfung betreten
werden, lösen die Lichtschranken aus und die Kamera schießt ein Foto. Dieses Foto
kann beliebig gespeichert werden. Bei ungültigen Zutrittsversuchen wird der Zugang
durch das Drehkreuz verhindert und in der Datenbank der misslungene
Zutrittsversuch vermerkt. In der von uns entwickelten Software ist es möglich,
Eingänge
anzulegen
und
diese
zu
verwalten.
Außerdem
kann
man
die
mitprotokollierten Daten einsehen und ausdrucken.
ABSTRACT
We have developed a turnstile-safeguarded entry with monitoring equipment. The
entry is equipped with a turnstile, an ESD test device, an iButton reader, two light
barriers and a camera. Everyone who wants to get into the production area has to
pass this entry including both identification and inspection. An entering without
inspection should be avoided because then the light barriers activate the camera
which takes a photo. This photo can be stored. In the case of invalid admission
attempts access will be denied by the turnstile and in addition there will be an entry in
the database. With the software, we developed, entries can be added, and settings
can be changed. In addition the stored data can be watched and printed by an
administrator.
2
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
EIGENSTÄNDIGKEITSERKLÄRUNG
Wir erklären hiermit, dass wir die vorliegende Diplomarbeit selbstständig verfasst und
in der Bearbeitung und Abfassung keine anderen als die angegebenen Quellen oder
Hilfsmittel benutzt, sowie wörtliche und sinngemäße Zitate als solche gekennzeichnet
haben.
Vöcklabruck, am 13. Mai 2009
Peter Schobesberger
Keskin, Schobesberger, Schuster
Serhat Keskin
Alexander Schuster
3
ESD-Eingangskontrollsystem
INHALTSVERZEICHNIS
1 Entstehung und Planung ......................................................................................... 7
1.1 Vorwort.............................................................................................................. 7
1.2 Die Problemstellung .......................................................................................... 7
1.2.1 ESD ............................................................................................................ 7
1.2.2 Maßnahmen für ESD-Schutz ...................................................................... 8
1.3 Die Aufgabenstellung ...................................................................................... 12
2 Projektteam ........................................................................................................... 13
2.1 Diplomanden ................................................................................................... 13
2.2 Betreuer .......................................................................................................... 13
2.3 Lehrinstitut ...................................................................................................... 14
2.4 Auftraggeber ................................................................................................... 14
2.5 Projektplanung ................................................................................................ 15
2.5.1 Projektbeginn ........................................................................................... 15
2.5.2 Sollablauf .................................................................................................. 15
2.5.3 Geplanter Ablauf....................................................................................... 17
2.5.4 Istablauf .................................................................................................... 18
2.5.5 Stundenaufteilung..................................................................................... 19
3 Umsetzung ............................................................................................................ 20
3.1 Informationen einholen.................................................................................... 20
3.2 Zeiterfassungsterminal TRS15 ........................................................................ 21
3.3 Personenerdungsprüfgerät ............................................................................. 21
3.3.1 PGT100 .................................................................................................... 21
3.4 Theoretische Lösung....................................................................................... 26
3.5 Identifizieren der Mitarbeiter ............................................................................ 27
3.6 TCP- Server .................................................................................................... 29
3.6.1 TCP- Protokoll .......................................................................................... 29
3.6.2 Protokollbeschreibung .............................................................................. 29
3.7 Digitaler I/O Controller PL ............................................................................... 37
3.8 TCP-Client ...................................................................................................... 42
3.9 Fehlerprotokoll ................................................................................................ 46
4
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.10 Ablaufsteuerung ............................................................................................ 49
3.10.1 Ablaufbeschreibung ................................................................................ 50
3.10.2 Programmablaufplan .............................................................................. 51
3.11 Die Datenbank .............................................................................................. 54
3.11.1 Die Klasse MSAccess ............................................................................ 55
3.11.2 Klasse AccessData................................................................................. 59
3.12 Dateiverwaltung ............................................................................................ 66
3.13 Die Benutzeroberfläche................................................................................. 70
3.13.1 Startbildschirm ........................................................................................ 70
3.13.2 Einstellungen mit Eigenschaften............................................................. 71
3.13.3 Pfad aussuchen per OpenFileDialog ...................................................... 73
3.13.4 Menü mit MenuStrip ............................................................................... 75
3.13.5 Das Protokoll .......................................................................................... 76
3.14 Konstruktive Tätigkeiten ................................................................................ 77
3.14.1 Lichtschrankenhalterung ........................................................................ 78
3.14.2 Gerätebox ............................................................................................... 79
3.14.3 Gerätehalterung...................................................................................... 79
3.15 Schwenktür ................................................................................................... 81
4 Gesamtaufbau ....................................................................................................... 82
4.1 Gesamtschaltung ............................................................................................ 83
4.2 Schaltung Relais-DKZ ..................................................................................... 85
4.3 Schaltung Relais-Allgemein ............................................................................ 86
4.4 Stückliste für alle 4 Relais ............................................................................... 86
4.5 Spannungsteiler (DC/DC-Wandler) ................................................................. 87
4.6 Bilder zum Aufbau ........................................................................................... 88
5 Installationsanleitung ............................................................................................. 90
5.1 Ersten Eingang anlegen .................................................................................. 90
5.2 Tür anlegen im RW Pro-Access von Salto ...................................................... 90
5.3 I/O Controller konfigurieren ............................................................................. 91
5.4 Einstellungen im Programm ............................................................................ 93
6 Validierung............................................................................................................. 94
6.1 Idealablauf ...................................................................................................... 94
6.2 Ungültige ESD-Prüfung ................................................................................... 94
Keskin, Schobesberger, Schuster
5
ESD-Eingangskontrollsystem
6.3 Zeitüberschreitung .......................................................................................... 95
6.4 Alarmauslösung .............................................................................................. 95
7 Persönliche Erfahrungen und Wertschöpfung ....................................................... 96
8 Besprechungsprotokolle ........................................................................................ 97
8.1 Erste Besprechung.......................................................................................... 97
8.2 Zweite Besprechung ....................................................................................... 98
9 Geräteverzeichnis .................................................................................................. 99
9.1 I/O Controller ................................................................................................... 99
9.2 PGT100 ESD-Prüfgerät .................................................................................. 99
9.3 SkiData Drehkreuz DKZ 350 ........................................................................... 99
9.4 IDEC Reflexlichtschranke ............................................................................. 100
9.5 Identifikationshardware Salto ........................................................................ 100
9.6 Netzwerkkamera Plustek IPcam P1000 ........................................................ 100
10 Softwareverzeichnis .......................................................................................... 101
10.1 Microsoft Visual Studio................................................................................ 101
10.2 Microsoft Office Access 2007 ...................................................................... 101
10.3 Microsoft Office Word 2007......................................................................... 101
10.4 Salto RW Pro-Access Connected ............................................................... 102
10.5 Hercules by HW-Group ............................................................................... 102
10.6 SFC-Editor .................................................................................................. 102
11 Anhänge ............................................................................................................ 103
11.1 Dokumentations-CD .................................................................................... 103
11.2 Klassendiagramm ....................................................................................... 104
12 Abbildungsverzeichnis ....................................................................................... 106
6
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
1 Entstehung und Planung
1.1 Vorwort
Am Ende des Jahres 2007 wandte sich die Firma AlliedPanels an die HTL
Vöcklabruck und bot eine Zusammenarbeit an, um ein ESD Eingangskontrollsystem
im Sinne einer Diplomarbeit zu entwickeln. Diese Zusammenarbeit wurde
angenommen
und
anschließend
als
Diplomarbeitsthema
vergeben.
Die
Informationen wurden durch unseren Betreuer an uns weitergeleitet und wir
begannen
das
Thema genauer
zu
betrachten.
Nach
einigen
Absprachen
beschlossen wir, dieses Thema als Diplomarbeit anzunehmen.
1.2 Die Problemstellung
Die Firma AlliedPanels stellt Geräte und Komponenten für den medizinischen
Gebrauch her. Die dabei verbauten elektronischen Bauteile reagieren sehr
empfindlich auf elektrostatische Entladungen. Tritt ein solcher Fall ein können sie
sofort zerstört werden oder noch schlimmer, es kann ein späterer Ausfall des Geräts
beim Kunden eintreten. Damit ist mit erhöhten Kosten für den Hersteller zu rechnen.
Um den größten Teil dieser Kosten zu vermeiden, wird ein Zugangskontrollsystem
entwickelt und optimiert. Durch die Zugangskontrolle sollen die von Menschen
verursachten Produktausfälle durch elektrostatische Entladung vermindert werden.
1.2.1 ESD
ESD steht für „electrostatic discharge“ (elektrostatische Entladung), elektrostatische
Entladung ist eine durch Potentialdifferenz von zwei Körpern hervorgerufene
statische
Entladung.
Meist
entsteht
dieser
Potentialunterschied
durch
Reibungselektrizität. Eine Entladung in einem Halbleiter ist mit einem Blitzschlag in
einen Baum vergleichbar. ESD kann zu schweren Bauteilschäden führen, die den
Bauteil entweder zerstören oder seine Zuverlässigkeit beeinträchtigen können.
Keskin, Schobesberger, Schuster
7
ESD-Eingangskontrollsystem
1.2.2 Maßnahmen für ESD-Schutz
Abbildung 1 ESD-Symbol
1
Ein derartiger Potentialunterschied muss ausgeglichen oder vermieden werden. Dies
wird durch unterschiedliche Schutzmaßnahmen erreicht.
1.2.2.1
ESD-Schutzbereiche (EPA)
Die Electrostatic Protected Area (EPA) ist ein Bereich, in welchem elektrostatische
Entladungen mit Spannungen von über 100V durch antistatische Ausrüstung
verhindert werden.
Abbildung 2 EPA-Symbol
1.2.2.2
2
Persönliche ESD-Schutzausrüstungen
Zu den persönlichen Schutzausrüstungen gehören ableitfähige Schuhe, HandgelenkErdungsbänder,
ableitfähige
Handschuhe
und
ableitfähige
Arbeitskleidung
(Arbeitsmäntel, Overalls oder Pullover). Ableitende Kleidung ist nur dann effektiv,
wenn sie kombiniert mit ableitfähigen Schuhen getragen wird. ESD-Schuhe leiten
beim Gehen eine bestimmte Spannung ab und sind der effektivste Schutz gegen
elektrostatische Entladung am Menschen.
1
2
http://www.kolzen-berufsbekleidung.de/images/esd_1.gif
http://www.asmetec.de/images/ESD-EPA2.jpg
8
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
1.2.2.3
ESD-geschützte Arbeitsplätze
Arbeitstische müssen mit einem ableitenden Boden verbunden sein und auf der
Arbeitsplatte
muss
ein
Anschluss
für
Erdungsarmbänder
vorhanden
sein.
Werkzeuge, Hilfsmittel, Behälter und Geräte müssen den ESD-Schutzbestimmungen
entsprechen.
1.2.2.4
Sitzgelegenheiten
Sitzflächen, Sitzflächenüberzüge, Rückenlehnen, Armlehnen sowie alle Stuhlfüße
oder –rollen müssen aus elektrostatisch ableitfähigem Material bestehen. Die
Ableitfähigkeit muss gewährleistet sein, da beim Sitzen der Kontakt der Füße mit
dem Boden nicht immer gegeben ist.
In den folgenden Bildern kann man den Unterschied zwischen einem normalen
Drehstuhl und einem ESD-Drehstuhl sehen.
Keskin, Schobesberger, Schuster
9
ESD-Eingangskontrollsystem
Abbildung 3 ESD-Drehstuhl
1.2.2.5
3
ESD-geschützte Maschinen und Einrichtungen
Bei den verschieden Maschinenkomponenten, wie zum Beispiel bei Laufrollen,
Robotergreifer, Rutschen, Führungsschienen und so weiter, kann es durch Reibung
zur elektrostatischen Entladung kommen. Deshalb müssen auch dort ESDSchutzmaßnahmen getroffen werden. Durch Einsetzen von bestimmten leitenden
Materialien oder durch andere Vorkehrungen.
3
ESDSchulung.pdf
10
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
1.2.2.6
Weitere Schutzmaßnahmen sind:
•
ESD-geschützte Verpackungen
•
ESD-geschützte Transporteinrichtungen
•
Optimierte Klimabedingungen (klimatisierte Räume mit Luftfeuchtigkeit > 40%)
•
und bestimmte Regeln und Verhaltensmaßnahmen im Umgang mit ESD
1.2.2.7
Übersicht eines ESD-Arbeitsplatzes
Abbildung 4 ESD-Arbeitsplatz
4
4
Esd_Buch.pdf
Keskin, Schobesberger, Schuster
11
ESD-Eingangskontrollsystem
1.3 Die Aufgabenstellung
•
Es sollen zwei Eingänge mit Drehkreuz und Zugangskontrolle geplant werden.
Die Möglichkeit, weitere hinzuzufügen, soll gegeben sein.
•
Die Eingänge müssen behindertengerecht (z.B.: Rollstuhlfahrer) sein und als
Fluchtweg genutzt werden können.
•
Die Überwachung der Eingänge soll mittels Kamera erfolgen. Bei unbefugtem
Übertreten soll ein Bild gespeichert werden und ein Alarm (z.B.: in Form einer
Signallampe) ausgelöst werden. Der Reset des Alarms sollte an einer
zentralen Stelle erfolgen können.
•
Es muss eine Datenbank mit einer entsprechenden Oberfläche zur Verfügung
stehen, um die fehlerhaften Messergebnisse der Mitarbeiter und die Uhrzeit
aufzulisten.
•
Bei der Validierung müssen sämtliche Fehlbedienungen berücksichtigt
werden.
12
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
2 Projektteam
2.1 Diplomanden
Serhat Keskin
Klasse: 5BHWII
Geburtsdatum: 13. Juli 1989
Wohnort: Frankenmarkt
Peter Schobesberger
Klasse: 5BHWII
Geburtsdatum: 08. August 1989
Wohnort: Neukirchen/V.
Alexander Schuster
Klasse: 5BHWII
Geburtsdatum: 06. August 1988
Wohnort: Aurach
2.2 Betreuer
Prof. DI Michael Opelt
Keskin, Schobesberger, Schuster
13
ESD-Eingangskontrollsystem
2.3 Lehrinstitut
Höhere Technische Bundeslehranstalt
(HTBLA) Vöcklabruck
Bahnhofstraße 42
A-4840 Vöcklabruck
Tel: +43 (0) 7672 24605
Fax: +43 (0) 7672 27805
E-Mail: [email protected]
Internet: http://www.htlvb.at
2.4 Auftraggeber
AlliedPanels Entwicklungs- und
Produktions GmbH
AlliedPanels Park 1
A-4873 Frankenburg, Austria
Tel: +43 (0) 7683 20111
Fax: +43 (0) 7683 20031
E-Mail: [email protected]
Internet: http://www.alliedpanels.com
AlliedPanels ist ein internationales Entwicklungs- und Produktionsunternehmen in
der Medizintechnik. Die Einsatzgebiete der Firma reichen von der Entwicklung
einzelner
Systemkomponenten
bis
hin
zur
Produktion
medizintechnischer
Komplettsysteme. Das Unternehmen wurde im Jahr 2000 in Wörgl in Tirol gegründet.
AlliedPanels entwickelt und gestaltet medizintechnische Geräte und bietet ein
umfassendes Wissen und modernste Technik in den Bereichen Elektronik, Mechanik
und Software. Das Unternehmen hat drei Standorte in Österreich und zwei
Niederlassungen im Ausland. Die Zentrale befindet sich in Hopfgarten im Brixental
(Tirol)
und
das
Produktionszentrum
ist
in
Frankenburg
(Oberösterreich)
niedergelassen. Das Entwicklungs- und Technologiezentrum befindet sich in
Salzburg und weitere Standorte sind Wisconsin (USA) und Minsk (Weißrussland).
14
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
2.5 Projektplanung
2.5.1 Projektbeginn
Unsere Diplomarbeit startete mit dem Treffen bei AlliedPanels am 10. Jänner 2008.
Bei dem Gespräch wurde uns näher gebracht, wie die Eingänge ausgestattet sein
sollen und was genau passieren soll. Es sollten zwei Eingänge mit Drehkreuzen
versehen werden. Jeder Benutzer soll sich beim Betreten eines Eingangs an einem
Terminal identifizieren und dann eine ESD-Prüfung ablegen. Das Drehkreuz darf
natürlich erst öffnen, wenn beide Überprüfungen erfolgreich abgelegt wurden. Um
den Zugang gegen unbefugten Übertritt zu schützen, soll eine Überwachungsanlage
mit zwei Lichtschranken und einer Kamera, die Bilder bei Übertreten ohne
Überprüfung macht, installiert werden. Nach dieser Besprechung und einer
anschließenden Besprechung mit Prof. Opelt sind wir davon ausgegangen, dass wir
mit einer SAP-Datenbank arbeiten müssen und in diese Datenbank auch die
mitdokumentierten Daten speichern sollen. Bei unserem 2. Treffen hat sich dann
jedoch herausgestellt, dass das Zutrittskontrollsystem unabhängig von der SAPDatenbank arbeitet, und die Daten der Eingänge in einer separaten Datenbank
gespeichert werden. Mit diesem Wissen begannen wir dann mit der Projektplanung.
2.5.2 Sollablauf
Meilensteine
Beschreibung
Bemerkungen
Projektbeginn
Erste Besprechung bei
10. Jänner 2008
AlliedPanels
Pflichtenheft
Pflichtenheft erstellt,
21. Mai 2008
Besprechung mit Herr DI
Opelt bei AlliedPanels
Inbetriebnahme der
Inbetriebnahmen vom
Testgeräte
ESD-Prüfgerät und vom
ab 01.Juni 2008
SaltoZutrittskontrollsystem
Theoretische Lösung
Erstellung eines
30. Juni 2008
Lösungsvorschlages für
Keskin, Schobesberger, Schuster
15
ESD-Eingangskontrollsystem
das Zutrittskontrollsystem
Praktikumsantritt
Aufbauen eines
30. Juni 2008 bis 25.Juli
Teststandes
2008
Endgültige Auflage des
Besprechung mit Herrn
25. Juli 2008
Pflichtenhefts
Plakholm
Vorvorpräsentation
Präsentation des Projekts
23.September 2008
im ESR-Unterricht
Testsystem aufbauen
Erster Probelauf in der
Oktober 2008
Firma
Vorpräsentation
Vorpräsentation in der
16.Dezember 2008
HTL
Internetauftritt
Präsentation auf der
Dezember.2008
Internetplattform www.htlinnovativ.at
Abgabe Dokumentation
Abgabe der
April 2009
Dokumentation an DI
Opelt
Abschluss der
April/Mai 2009
Diplomarbeit
Abgabe an Herrn DI
Ende der Projektarbeit
Waser
16
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
2.5.3 Geplanter Ablauf
Planung
Installation
Anpassung
Anforderungen
Aufbauen des
Nötige
bestimmen
Teststandes
Änderungen
Absprache mit
Begleitende
Auftraggeber
Dokumentation
Fertigstellung
Präsentation
Validierung
Lösungsweg
ausarbeiten
Plichtenheft
erstellen
Abbildung 5 Geplanter Ablauf
Keskin, Schobesberger, Schuster
17
ESD-Eingangskontrollsystem
2.5.4 Istablauf
Abbildung 6 Screenshot Gantdiagramm des Istablaufs (MSProject)
18
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
2.5.5 Stundenaufteilung
Insgesamt haben wir 837 Stunden für die Diplomarbeit benötigt.
Zeitaufstellung
13%
18%
Organisatorisches
Programmieren
35%
35%
Aufbau
Dokumentation
Abbildung 7 Zeitaufstellung der Arbeitsstunden
Keskin, Schobesberger, Schuster
19
ESD-Eingangskontrollsystem
3 Umsetzung
3.1 Informationen einholen
Zu Beginn eines Projektes ist es wichtig, so viele Informationen wie möglich
einzuholen, da Informationsbeschaffung ein wichtiger Punkt im Ablauf eines
Projektes ist. Natürlich mussten wir uns zuerst über die verwendete Hardware und
Software informieren, die in der Firma bereits verwendet wird. Am Anfang holten wir
uns Informationen zu dem ESD-Prüfungsgerät und zum Drehkreuz (technische
Anleitung, Schaltpläne). Da wir dachten, wir müssen mit dem Zeiterfassungsterminal
und mit SAP arbeiten, begannen wir nach Möglichkeiten zu suchen, über dieses
System die benötigten Userdaten zu bekommen. Weiters mussten wir auch den Ort
des Einganges bestimmen, um zu wissen, welche Möglichkeiten wir zur Verbindung
mit dem restlichen System haben. Anhand dieser Informationen und eines
Anschlussplanes mussten wir ein geeignetes Bussystem auswählen, aber den
Eingang auch behindertengerecht und mit Fluchtmöglichkeit planen. Auch in der
Hauptphase des Projektes war die Informationsbeschaffung von größter Bedeutung,
da wir einige Geräte kaufen mussten. Beim Einkauf der benötigten Geräte und
Komponenten (Netzwerkkamera, I/O Controller) war für uns in erster Linie der
technische Support wichtig. Von großer Bedeutung war auch die Zusammenarbeit
mit den Betreuungspersonen, um Lösungen auszuarbeiten.
20
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.2 Zeiterfassungsterminal TRS15
Gleich zu Beginn haben wir Informationen zu einem Zeiterfassungsgerät bekommen.
Natürlich haben wir diese Daten gleich ausgearbeitet, um mögliche Lösungen zu
finden.
Abbildung 8 TRS15-Zeiterfassungsterminal
5
Das TRS15 ist ein Zeiterfassungsterminal, mit dem sich die Mitarbeiter anmelden
können. Bei einer Besprechung mit der Firma erfuhren wir, dass dieses Gerät nicht
verwendet werden soll, da dieses Terminal auf die SAP Datenbank zugreift.
Stattdessen sollten wir die Identifizierung durch die Eintrittsbuttons der Firma Salto
realisieren. Jeder Mitarbeiter hat zwei Schlüssel, einen zum Stempeln und einen
zweiten zum Eintreten in gewisse Bereiche (Eingang, Büros). Um dies zu realisieren
wurde die Salto-Hardware benötigt, diese wurde uns von der Firma besorgt und
vorgegeben.
3.3 Personenerdungsprüfgerät
3.3.1 PGT100
Die ersten brauchbaren Informationen bekamen wir zum PGT100 Anfang Juni.
Dieses ESD-Prüfgerät schließt einen potentialfreien Kontakt, wenn eine Prüfung
abgeschlossen wurde.
5
trs_15.pdf
Keskin, Schobesberger, Schuster
21
ESD-Eingangskontrollsystem
Abbildung 9 PGT-Anschlussplan 6
Danach versuchten wir dieses Schaltereignis auf einen Rechner zu übertragen. Da
wir noch nie digitale Signale mit einem Rechner empfangen haben, holten wir uns
Hilfe von Herrn Professor Schönhuber. Er hat uns einige Möglichkeiten genannt, wie
wir diese Informationen mit einem Rechner empfangen können. Gemeinsam mit ihm
realisierten wir die erste Übertragung der Daten. Dazu haben wir zwei Converter von
ICPCon verwendet, die uns von der Schule für einige Zeit zur Verfügung gestellt
wurden. Wir verwendeten einen „RS485 To RS232“ Converter und einen Converter,
der von RS485 auf digitale Signale konvertieren kann.
6
pgt100_user_manual.pdf
22
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
RS 232
RS 485
DI
RS 485
Abbildung 10 Versuchsaufbau
Am Rechner nahmen wir die Daten per HyperTerminal an, nun war unser erstes
Problem bewältigt. Jetzt konnten wir die Daten am Rechner über eine serielle
Schnittstelle einlesen. Damit wir in unserem Programm die Daten annehmen können,
mussten wir Daten über eine serielle Schnittstelle lesen beziehungsweise schreiben
können. Dazu programmierten wir die Klasse ComPort, über diese Klasse können
Daten gesendet und empfangen werden.
Die Klasse ComPort
class ComPort
{
private
private
private
private
SerialPort serialPort;
Thread readThread;
bool readingStatus;
Control parentForm;
//Events erstellen
public delegate void EventHandler(string data);
public event EventHandler DataReceived;
public event EventHandler StatusChanged;
/// <summary>
/// Konstruktor
/// </summary>
Keskin, Schobesberger, Schuster
23
ESD-Eingangskontrollsystem
public ComPort(Control _parentForm) {
serialPort = new SerialPort();
readThread = null;
readingStatus = false;
parentForm = _parentForm;
}
//Diese Eigenschaft gibt den aktuellen seriellen Port zurück
public SerialPort SerialPort{
get { return serialPort; }
}
/// <summary>
/// Öffnet den seriellen Port
/// </summary>
public void Open() {
try
{
if (!readingStatus)
{
//Einstellungen
serialPort.PortName
serialPort.BaudRate
serialPort.Parity =
serialPort.DataBits
serialPort.StopBits
= "COM4";
= 9600;
Parity.None;
= 8;
= StopBits.One;
//einstellen der Timeouts
serialPort.ReadTimeout = 50;
serialPort.WriteTimeout = 50;
serialPort.Open();
readingStatus = true;
readThread = new Thread(Read);
readThread.Start();
}
}
catch (IOException) {
parentForm.Invoke(new EventHandler(StatusChanged),
new object[] { String.Format("{0} exisiert
nicht",serialPort.PortName) });
}
catch (UnauthorizedAccessException)
{
parentForm.Invoke(new EventHandler(StatusChanged),
new object[] { String.Format("{0} already in
use", serialPort.PortName) });
}
if (IsOpen) {
parentForm.Invoke(new EventHandler(StatusChanged),
new object[] { String.Format("alles ok am COM4") });
}
}//Open
/// <summary>
24
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
/// Schließt den seriellen Port
/// </summary>
public void Close() {
if (readingStatus) {
readingStatus = false;
readThread.Join();
readThread = null;
serialPort.Close();
parentForm.Invoke(new EventHandler(StatusChanged),
new object[] {string.Format("Connection closed")});
}
}//Close
/// <summary>
/// Diese Methode wir in einem eigenen Thread
/// Nach dem Starten läuft sie im Hintergrund
/// mit der Close-Methode beendet wird.
/// Werden Daten an die eingestellte serielle
/// gesendet werden sie an das untergeordnete
/// gesendet
/// </summary>
private void Read() {
ausgeführt.
bis die Verbindung
Schnittstelle
Controll-Object
while (readingStatus)
{
if(serialPort.IsOpen){
try
{
byte[] buffer = new
byte[serialPort.ReadBufferSize + 1];
int count = serialPort.Read(buffer, 0,
serialPort.ReadBufferSize+1);
parentForm.Invoke(new
EventHandler(DataReceived),
new object[] {
System.Text.Encoding.ASCII.
GetString(buffer, 0, count) });
}catch(TimeoutException){}
}else{
TimeSpan waitTime = new TimeSpan(0, 0, 0, 0, 50);
Thread.Sleep(waitTime);
}//if
}//while
}//Read
/// <summary>
/// Sendet Daten an die serielle Schnittstelle
/// </summary>
public void Send(string data) {
if (IsOpen)
{
serialPort.Write(data + "\r");
//Rückgabe der gesendeten Daten an das Hauptprogtramm
parentForm.Invoke(new EventHandler(DataReceived),
Keskin, Schobesberger, Schuster
25
ESD-Eingangskontrollsystem
}//if
}//Send
new object[] {data+"\r"});
/// <summary>
/// Gibt den Status des seriellen Ports zurück
/// </summary>
public bool IsOpen
{
get{return serialPort.IsOpen;}
}
}//class ComPort
Da wir diese Controller wegen des veralteten RS232 Standards nicht verwenden
wollten, wurde die Klasse in unser Steuerprogramm nicht integriert. Darum wird
diese auch nicht genauer beschrieben.
3.3.1.1
Datenübertragungsschnittstelle
Die richtige Übertragungsschnittstelle zu finden war für uns schwierig, da die ganze
Arbeit darauf aufbauen sollte. Für Herrn Opelt war von Anfang an klar, dass ein
Bussystem Verwendung finden sollte, davon waren wir anfangs nicht überzeugt,
versuchten jedoch, ein passendes System zu finden. Wir informierten uns über
diverse Bussysteme, um das richtige System für unser Problem zu finden. Nachdem
einige Geräte, die Daten über das Netzwerk senden, entschieden wir uns das
hauseigene Netzwerk als Bussystem zu verwenden. Das Netzwerk als Bussystem
bietet einen großen Vorteil, denn es befindet sich schon ein Netzwerk in der Firma
und dadurch müssen wir nur ein Kabel bis zum nächsten Switch legen. Kurz darauf
wurden wir auch bei der Suche nach einem I/O Controller fündig, der die digitalen
Signale über das Netzwerk überträgt.
3.4 Theoretische Lösung
Gerät
Schnittstelle
PGT
digital
Drehkreuz
digital
Überwachungskamera
Ethernet/digital
Lichtschranken
digital
Statuslichter
digital
26
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Salto-Steuereinheit
Ethernet
Server
Ethernet
I/O Controller
Ethernet / Seriell RS232
Wir haben eine Tabelle erstellt, in der wir den einzelnen Geräten ihre Schnittstellen
zugeordnet haben. Da bereits die meisten Geräte über das Netzwerk arbeiten, haben
wir uns für einen Datenaustausch über das Netzwerk entschieden. Der große Vorteil
von Ethernet ist in diesem Fall, dass es die geforderte Übertragungsgeschwindigkeit
leicht erfüllt und außerdem in der Firma überall verfügbar ist. Ein Server empfängt
und sendet Daten an die verschiedenen Geräte und ist das Zentrum des Systems.
Die gesamte benötigte Software wird auf dem Firmenserver installiert und das
System wird dann von einem zentralen Programm gesteuert. Da alle unsere Geräte
ihre Daten per Ethernet übertragen, musste auch die Kamera diese Anforderung
erfüllen. Ausgelöst wird diese Überwachungskamera jedoch per digitalem Signal. Ein
anfängliches Problem war, die digitalen Signale vom PGT-Prüfungsgerät und von
den Lichtschranken über das Netzwerk zu übertragen. Dieses Problem haben wir
durch einen I/O Controller gelöst, dieser Controller sendet ein Bytearray an den
Server, aus welchem dann die Eingänge gelesen werden. Eine Fehlinformation am
Anfang des Projekts war, dass
das Drehkreuz über einen Netzwerkanschluss
verfügt und übers Netzwerk gesteuert werden kann. Es hat sich im Verlauf des
Projektes herausgestellt, dass das Drehkreuz nur über Kontakte, die geschalten
werden, gesteuert wird. Dieses Problem haben wir ebenfalls mithilfe des I/O
Controllers lösen können, da dieser noch über genug Signal-Ein- und Ausgänge
verfügte. Am Computer werden die gesamten Daten mithilfe eines eigenen
Programms verarbeitet. Es fehlt nur noch die Identifizierung der Mitarbeiter. Die
Identifizierung soll mithilfe eines iButtons erfolgen.
3.5 Identifizieren der Mitarbeiter
Jeder Mitarbeiter hat einen iButton, mit dem er sich identifiziert und sich Zugang zu
Büro-, Produktions- oder anderen Bereichen verschafft. Dieses System wurde von
der Firma AlliedPanels zur Verfügung gestellt und musste daher verwendet werden.
Keskin, Schobesberger, Schuster
27
ESD-Eingangskontrollsystem
Abbildung 11 Leseeinheit WRM2000 7
Abbildung 12 Steuereinheit CU50EN
8
Die Leseeinheit ist mit einem CAT5 Kabel an die Steuereinheit angeschlossen, diese
ist
mit
einem
Server
per
Netzwerk
verbunden.
Verwaltet
wird
das
Identifikationssystem mit einem eigenen Programm, welches auf dem Server, der
sich im selben Netzwerk wie die Steuereinheit befindet, installiert ist.
Abbildung 13 Screenshot RW Pro-Access Salto-Verwaltungsprogramm
Mit dem Programm RW Pro-Access, von der Firma Salto, werden die Eingänge
erstellt, konfiguriert und verwaltet. Auch die Mitarbeiter und dessen Zutrittsrechte
7
8
http://www.saltosystems.com/ images/stories/products/ WRM200072.jpg
http://www.saltosystems.com/images/stories/products/details/ CU50EN.jpg
28
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
werden in diesem System verwaltet. Jedem Mitarbeiter können bestimmte Bereiche
und Zeiträume zugeteilt werden, in denen sie diese Zugänge passieren dürfen. Alle
Daten werden in einer Access-Datenbank gespeichert.
3.6 TCP- Server
3.6.1 TCP- Protokoll
Bevor wir endgültig wussten, dass wir Daten über das TCP-Protokoll versenden und
annehmen müssen, vermuteten wir, dass wir mit diesem Protokoll die Daten
übertragen werden. Da das TCP-Protokoll ein zuverlässiges, verbindungsorientiertes
Protokoll ist, ist es genau das richtige für unser Problem. Darum befassten wir uns
schon vor unserem Praktikum mit diesem Protokoll. Wir programmierten zwei
Programme, einen TCP-Server und einen TCP-Client.
Das Schwierige daran war, dass eines der beiden Programme funktionieren musste,
um das zweite zu testen.
3.6.2 Protokollbeschreibung
Das TCP-Protokoll stellt eine virtuelle Verbindung zwischen zwei Anwendungen her.
Auf beiden Seiten der Verbindung steht eine Programmierschnittstelle bereit. Diese
Programmierschnittstelle
plattformunabhängige
wird
als
Schnittstelle
Socket
bezeichnet.
zwischen
dem
Ein
Socket
ist
eine
Netzwerkprotokoll
des
Betriebssystems und der eigentlichen Anwendungssoftware. Aus der Sicht des
Programmierers werden beim TCP-Protokoll keine Pakete übertragen, sondern
Datenströme von Bytes.
Eine TCP-Verbindung wird durch
-die IP-Adresse des Servers und die Portnummer des Serverdienstes oder
-die IP-Adresse des Clients sowie die Portnummer des Clients
bestimmt.
Da wir nicht nur mit einem Client, sondern mit mehreren kommunizieren müssen, ist
es notwendig mehrere Clients gleichzeitig behandeln zu können. Um das zu
realisieren, setzen wir das Multithreading ein.
Keskin, Schobesberger, Schuster
29
ESD-Eingangskontrollsystem
Def.: Multithreading 9
Multithreading ist ein anwendungsorientiertes Verfahren, bei dem Programme in
Programmteile und Prozesse gegliedert werden, die unabhängig voneinander in
parallelen Programmpfaden ablaufen. Multithreading ist eine softwaremäßige
Aufspaltung von langsamen Vorgängen in parallele Threads, die durch zusätzliche
Instruktionen der CPU parallel bearbeitet werden.
Für den TCP-Server wurde eine eigene Klasse namens TCPServer erstellt.
Anschließend wird die Realisierung der Klasse TCPServer beschrieben.
class TCPServer
{
private TcpListener listener = null;
private IPAddress ip;
private int port = 20;
private ArrayList sessionList;
private int nc, nr;//Zählvariablen für die Anzahl der Clients
private Control parentForm;//Das übergeornete Control-Objekt
public event ProtUpdateDelegate Status;
Als Erstes wird ein TcpListener erstellt und auf null gesetzt. Der TcpListener
stellt Methoden für die Annahme von eingehenden Verbindungswünschen bereit.
Anschließend werden die IP-Adresse und ein Serverport deklariert.
Die ArrayList sessionList wird für die Clients genutzt. Jeder Client wird als
Session-Objekt in der sessionList behandelt.
public TCPServer(Control _parentForm)
{
sessionList = new ArrayList();
ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList[0];
StartServer();
}//Konstruktor
Zu Beginn wird die ArrayList sessionList erzeugt. Anschließend wird die IP des
Computers in die Variable ip gespeichert und die Methode StartServer() wird
aufgerufen.
9
http://www.itwissen.info/definition/lexikon/Multithreading-multithreading.html
30
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
/// <summary>
/// Gibt die Anzahl der Clients zurück
/// </summary>
public int Clients{
get { return sessionList.Count; }
}
/// <summary>
/// Mit dieser Methode wird der TCP-Server gestartet
/// </summary>
public void StartServer()
{
try
{
listener = new TcpListener(ip, port);
listener.Start();
ThreadPool.QueueUserWorkItem(new
WaitCallback(this.Listen));
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}//Start Server
In dieser Methode wird das TcpListener-Objekt namens listener mit der IPAdresse und der Portnummer erzeugt. Danach wird der listener gestartet und die
Methode Listen wird in den ThreadPool geworfen. Tritt ein Fehler auf, wird eine
MessageBox mit einer Fehlermeldung gezeigt.
In dieser Methode kommt zum ersten Mal das Threading zum Einsatz und zwar in
einer besonderen Form, dem ThreadPool. Das Threading war für uns anfangs ein
wenig verwirrend. Sobald es mehr Threads wurden, wusste man nicht mehr genau,
wann welcher Thread gerade aktiv ist. Doch mit einigen Testprogrammen bekamen
wir das Problem in den Griff.
Def: Der ThreadPool
Statt für jede Aufgabe einen neuen Thread zeitaufwändig zu erzeugen und
anschließend wieder zu zerstören, erstellt man hier einen ThreadPool.
Durch ThreadPooling kann man Threads effizienter und ressourcenschonender
einsetzen. Im ThreadPool werden eingehende Aufträge einem freien Thread
zugeteilt oder in eine Warteschlange gestellt. Ein einzelner Thread überwacht den
Status mehrerer Wartevorgänge, die sich in der Warteschleife befinden. Nach
Keskin, Schobesberger, Schuster
31
ESD-Eingangskontrollsystem
Beendigung eines Wartevorgangs wird die Rückruffunktion von einem Arbeitsthread
im ThreadPool ausgeführt.
public void Listen(object obj)
{
MSAccess ms = new MSAccess();
string sql;
try
{
while (true)
{
TcpClient tcpClient = listener.AcceptTcpClient();
lock (this)
{
//Hier wird der Datenbankpfad zugewießen
ms.Database = Properties.Settings.
Default.Datenbankpfad;
//Generiert den SQL-Code
sql = "SELECT id_lock,ControllerIP FROM
tb_Eingaenge WHERE ControllerIP='";
sql += (tcpClient.Client.RemoteEndPoint as
IPEndPoint).Address.ToString() + "'";
DataTable table = ms.DataAdapter(sql);
//Kontrolliert ob der Klient in der Datenbank
//eingetragen ist. Wenn er nicht eingetragen
//ist, wird die Verbindung verweigert
if (table.Rows.Count == 1)
{
Session session = new Session(this,
tcpClient,(int)table.
Rows[0]["id_lock"]);
ThreadPool.QueueUserWorkItem(
new WaitCallback(session.Run));
sessionList.Add(session);
}//if
}//lock
}//while
}
catch (Exception e)
{
lock (this)
{
MessageBox.Show(e.Message, "Fehler im ServerThread");
}//lock
}//catch
}//Listen
32
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
In dieser Methode werden eingehende Verbindungswünsche verarbeitet. Als Erstes
wird ein MSAccess-Objekt erzeugt, das Methoden bereitstellt, um Daten einer
Access-Datenbank zu verarbeiten. Anschließend wird in einer Endlosschleife geprüft,
ob ein Client eine Verbindung wünscht. Durch die Methode AcceptTcpClient, die
der TcpListener bereitstellt, wird ein TcpClient-Objekt vom Client, der die
Verbindung wünscht, zurückgegeben, das zurückgegebene Objekt wird dann in dem
Objekt tcpClient abgespeichert.
Im nächsten Schritt wird der Eigenschaft Database des MSAccess-Objekts der
Datenbankpfad zugewiesen. Anschließend wird überprüft, ob der Client überhaupt
berechtigt ist, eine Verbindung herzustellen.
Dazu wird ein SQL-String erzeugt und mit der Methode DataAdapter, welche vom
MSAccess-Objekt
zur
Verfügung
gestellt
wird,
ausgeführt.
Die
Methode
DataAdapter gibt anschließend ein DataTable Objekt zurück. Wenn die
Eigenschaft DataTable.Rows.Count gleich 1 ist, ist der Client eingetragen und eine
Verbindung wird erlaubt.
Wenn die Verbindung erlaubt wird, wird ein Session Objekt für den Client erzeugt,
diesem Objekt wird das Server-Objekt, der TcpClient und die Tür ID-Nummer
(id_lock) übergeben. Wenn das Objekt angelegt wurde, wird die Session.RunMethode() in den ThreadPool geworfen. Daraufhin wird dann das Session-Objekt
zur sessionList hinzugefügt.
Tritt in der Endlosschleife ein Fehler auf, wird eine MessageBox mit einer
Fehlermeldung (Exception) ausgegeben.
public void StopServer() {
listener.Stop();
}//StopServer
Mit dieser Methode kann der TCP-Server gestoppt werden. Dazu wird die Methode
Stop() des TcpListener-Objekt aufgerufen.
Keskin, Schobesberger, Schuster
33
ESD-Eingangskontrollsystem
public void ClientRemove(object session)
{
lock (this) {
sessionList.Remove((Session)session);
}
}//Cleint Remove
Mit dieser Methode kann ein Client aus der sessionList entfernt werden. Man muss
dieser Methode das zu entfernende Session-Objekt mitübergeben. Das ArrayListObjekt stellt eine Methode namens Remove zur Verfügung, welcher man das zu
entfernende Objekt übergeben muss, um es aus der sessionList zu entfernen.
In der Klasse TCPServer werden jetzt Verbindungen angenommen, jedoch nicht
verwaltet. Der Client kann jetzt eine Verbindung herstellen, jedoch kann über diese
Verbindung noch nicht kommuniziert werden.
Um die Verbindungen der einzelnen Clients zu verwalten, wird die Klasse Session
erzeugt. Mit dieser Klasse werden nun alle Clients verwaltet. Für jeden Client wird
ein neues Objekt erzeugt und in der sessionList abgespeichert. In der jeweiligen
Klasse wurde die Kommunikation zwischen Server und dem Client programmiert.
class Session
{
private TcpClient client;
private TCPServer server;//Der Server von dem der Client akzeptiert
wurde
private int client_id; //id_lock die Eingangs ID
private NetworkStream stream;//Stream zum übertragen der Daten
private int input;//Der Code, der vom Client übertragen wird
private int inputControll;
private bool dkz;
int test = 0;
In der Session wird ein TcpClient-Objekt für den Client erzeugt.
public Session(TCPServer cs, TcpClient _client, int id)
{
server = cs;
client = _client;
client_id = id;
}//Konstruktor
Im Konstruktor werden die Felder gesetzt.
34
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
public void Run(object obj)
{
try
{
stream = client.GetStream();
stream.ReadTimeout = 50000;
byte[] data = new byte[14];
int nRead;
stream.Write(IOControll.OutputOffAll(), 0,
IOControll.OutputOffAll().Length);
while (true)
{
nRead = stream.Read(data, 0, data.Length);
//-----------------------------// Hier wurde der Kontrollablauf
// programmiert
//-----------------------------}//while
}
catch (IOException ex)
{
MessageBox.Show(ex.ToString())
}
finally
{
CloseSession();
}
}//Run
Durch diese Methode wird mit dem Client kommuniziert. Beim Erzeugen des
Session-Objekts wird diese Methode in einem eigenen Thread ausgeführt.
Durch die Methode GetStream(), die vom TcpClient-Objekt bereitstellt wird, wird
ein NetworkStream zurückgegeben und in stream gespeichert. Durch dieses
NetworkStream-Objekt können Daten empfangen oder gesendet werden.
Anschließend wird die ReadTimeout Eigenschaft gesetzt. Diese Eigenschaft
ruft die Zeitspanne ab, in der ein Lesevorgang während des Wartens auf Daten
blockiert wird.
Danach wird ein Bytearray erzeugt, um die empfangenen Daten zu speichern.
Durch die Methoden Write() und Read() können Daten aus oder in den Stream
geschrieben oder gelesen werden.
Damit man sicher sein kann, dass am Anfang alle Ausgänge ausgeschaltet sind,
werden sie durch die Methode IOControll.OutputOffAll() ausgeschaltet.
Um Daten zu empfangen, muss man die Methode Read() ausführen. Dies muss
Keskin, Schobesberger, Schuster
35
ESD-Eingangskontrollsystem
während der ganzen Verbindungsdauer, mittels einer Endlosschleife, geschehen.
In dieser Endlosschleife wurde der Kontrollablauf des Einganges ausprogrammiert.
/// <summary>
/// Sendet einem Client Daten
/// </summary>
/// <param name="data">Das zu sendende Byte Array[7]</param>
private void TellClient(byte[] data)
{
stream.Write(data, 0, 7);
}//TellClient
Diese Methode übernimmt ein 7 stelliges Byte-Array und sendet es über den
NetworkStream an den Client beziehungsweise an den I/O Controller.
/// <summary>
/// Beendet die Verbindung mit dem Clienten
/// und wirft ihn aus der SessionList
/// </summary>
private void CloseSession()
{
client.Client.Shutdown(SocketShutdown.Both);
client.Close();
server.ClientRemove(this);
}//CloseSession
Mit dieser Methode wird die Verbindung innerhalb der Klasse beendet.
client.Client.Shutdown(SocketShutdown.Both);
Durch diesen Befehl wird der Socket im TcpClient–Objekt aufgefordert, vor dem
Schließen alle Daten zu emfangen oder zu senden.
Danach wird der Client mit der Close()-Methode geschlossen, um Ressoucen zu
schonen.
Am Ende dieser Methode wird das Session-Objekt aus der sessionList entfernt,
dazu wird die Methode ClientRemove() im TCPServer-Objekt aufgerufen. Dieser
Methode muss man das zu entfernende Session-Objekt übergeben.
36
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.7 Digitaler I/O Controller PL
Nach einer langen Suche nach einem Gerät für die Datenkonvertierung von einem
digitalen Signal auf Ethernet und umgekehrt entschieden wir uns für den I/O
Controller PL von der Firma HW-Group. Wir wussten, dass wir mindestens vier
digitale Eingänge für:
•
•
•
2x Lichtschranke
2x ESD-Prüfgerät
1x Schalter zum Zurücksetzen des Alarms
und mindestens zwei digitale Ausgänge für:
•
•
1x Signallampe
1x Signallampe für den Benutzer
benötigen.
Außerdem waren wir uns nicht ganz sicher, ob das Drehkreuz wirklich über Ethernet
erreichbar ist und auch die Auslösung von Schwenktür und Kamera war uns noch
nicht bekannt. Deshalb entschieden wir uns dafür, ein Gerät zu kaufen, das etwas
mehr digitale Ein- und Ausgänge hat, also ein Gerät mit 8 digitalen Eingängen und 8
digitalen Ausgängen. Nach einer Recherche fanden wir den I/O Controller PL von
HW-Group, der sogar preislich noch günstiger war als einige Varianten mit weniger
Ein- und Ausgängen. Außerdem hatte dieser einen COM-Port, der über Ethernet als
virtueller COM-Port erreichbar ist. Diese Funktion ist nicht nur zum Einstellen des
Controllers von Vorteil, sondern sollte eine gewisse Absicherung darstellen, falls wir
irgendein Gerät über RS-232 betreiben müssen, was fast der Fall gewesen wäre.
Nach der Recherche und einer Absprache innerhalb des Projektteams und mit
unserem Betreuer entschieden wir uns, die österreichische Vertretung der HWGroup, die Firma Bellequip, zu kontaktieren. Die Firma Bellequip begeisterte uns
sofort durch eine sehr gute Beratung, weshalb wir uns dann entschieden, das Gerät
zu kaufen.
Der I/O Controller sollte uns in unserer Arbeit um einiges vorwärts bringen. Jedoch
brachte er ein Protokoll mit, das uns lange Zeit immer wieder beschäftigen sollte, der
Name des Protokolls ist NVT (Network Virtual Terminal). Der Controller sendet in
einer Client/Server – Verbindung die Änderungen an den Eingängen als Bytearray an
den Server. Dieses Bytearray beinhaltet alle Informationen über die Situation bei den
Keskin, Schobesberger, Schuster
37
ESD-Eingangskontrollsystem
Eingängen.
Da wir zu Beginn der Arbeit nicht genau genug recherchiert hatten, gingen wir davon
aus, den String, den man im Herkules-Programm angezeigt bekommt, wenn dieses
Daten
empfängt,
auch
zum
Vergleichen
und
somit
Herausfinden
der
Eingangsnummer verwenden zu können.
Abbildung 14 Screenshot Hercules Setup ulility
3.7.1.1
Das NVT-Protokoll
Unsere Überlegung, in C# ausformuliert, sah dann so aus:
public static int Input(byte[] bytearray)
{
//ByteArray in String convertieren
string hexstring = BitConverter.ToString(bytearray);
//Variable für die Eingangsnummer
int eingang;
//Switch vergleicht den Inhalt von "hexstring" mit den
//verschiedenen Eingängen, um die Nummer des Eingangs zu
//bekommen!
38
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
}
}
}
switch (hexstring)
{
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-7F-FF-F0":
{
eingang = 7;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-BF-FF-F0":
{
eingang = 6;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-DF-FF-F0":
{
eingang = 5;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-EF-FF-F0":
{
eingang = 4;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-F7-FF-F0":
{
eingang = 3;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-FB-FF-F0":
{
eingang = 2;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-FD-FF-F0":
{
eingang = 1;
break;
}
case "FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-FE-FF-F0":
{
eingang = 0;
break;
}
default:
{
return 99;
}
}
return eingang;
In dieser Methode wird das vom I/O Controller gelieferte Bytearray bytearray mittels
der Standartklasse BitConverter in den String hexstring umgewandelt. Mit einer
Switchkonstruktion wird dann ermittelt, welcher aus dem Herkules-Programm
entnommene String mit dem vom I/O Controller hereingegebenen übereinstimmt.
Keskin, Schobesberger, Schuster
39
ESD-Eingangskontrollsystem
Diese Methode funktioniert sehr gut, solange sich nur ein Eingang ändert, ändern
sich jedoch mehrere Eingänge, so ergibt das einen anderen String, da das NVTProgramm die Änderungen an allen 8 digitalen Eingängen mit Hilfe von 255 Byte
ausdrückt.
3.7.1.2
Die verbesserte Version
Um das Ganze zu verstehen, mussten wir uns dieses Bytearray genauer ansehen.
Bei diesem Beispiel wurde nur der Eingang sieben geschalten.
FF-FA-2C-32-00-FF-F0-FF-FA-2C-34-7F-FF-F0
Für die Ausgabe wichtig ist der Hexawert „7F“, was dezimal „127“ und binär
„0111111“ beträgt. Diese Stelle im Array beschreibt die geschalteten Eingänge. Der
Converter schickt die Daten im NVT Protokoll, welches besagt, dass in den 255
Bytes die Zustände aller Eingänge beschrieben werden. Nehmen wir also unser
Beispiel „7F“ in binär, da man es hier am besten sieht, welche Eingänge geschalten
sind, nämlich in diesem Fall der Eingang Nummer sieben bei unserem I/O Controller.
Das ist der Eingang, bei dem im Binären eine Null steht. Hätten wir die Zahl „FF“
(binär: 11111111) wäre keiner der Eingänge geschalten. Bei der Hexazahl „00“ sind
alle Eingänge geschalten.
Aus dieser Feststellung folgt dann der neue Code:
public static int Input(byte[] bytearray)
{
if (bytearray[10] != 52) {
return 99;
}
int count = bytearray[11];
if (count <= 0)
return 99;
int[] led = new int[8];
for (int i = led.Length - 1; i >= 0; i--)
{
led[led.Length - 1 - i] = count % 2;
count = Convert.ToInt32(Math.Round((double)(count / 2),
40
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
}
0));
for (int i = led.Length - 1; i >= 0; i--)
{
if (led[i] == 0)
return i;
}
return 99;
}//input
Wenn sich die Lage bei den Eingängen ändert, das heißt, wenn ein Eingang schaltet,
sendet der I/O Controller ein Bytearray an den Server. Ist das der Fall, steht an der
elften Stelle des Bytearrays der Hexawert „34“, also in dezimal 52. Ist das nicht der
Fall, wird die Methode mit „return 99“ beendet. 99 wird in der Klasse IOControll
immer
dann übergeben,
wenn ein falsches
Bytearray oder
eine
falsche
Eingangsnummer übermittelt wurde. In dieser Methode wird die Hexazahl, die
stellvertretend für die geschaltenen Eingänge steht, in eine Binärzahl umgerechnet.
Wir haben also versucht, von der Zahl bei jedem Schleifendurchlauf, wenn i für die
Zählvariable steht und dekrement behandelt wird, die Zahl modulo 2 zu berechnen.
Das Ergebnis speichern wir dann in ein Array.
Dass wir damit eine Binärzahl erzeugen, merkten wir erst, als die Methode dann
fertig war und wir uns das Ergebnis ausgeben ließen.
Zum Beispiel:
255 mod 2  1
127 mod 2  1
63 mod 2  1
31 mod 2  1
15 mod 2  1
7 mod 2  1
3 mod 2  1
1 mod 2  1
Das führt zu dem Ergebnis: 1111 1111 in binär und heißt, dass keine Eingänge
geschalten sind.
for (int i = led.Length - 1; i >= 0; i--)
Keskin, Schobesberger, Schuster
41
ESD-Eingangskontrollsystem
{
}
if (led[i] == 0)
return i;
In dieser for-Schleife wird nach dem letzten geschalteten Eingang gesucht, da
dieser die höchste Priorität hat.
Dieses Programm brachte dann die gewünschten Ergebnisse, jedoch konnten wir
nicht vorhersehen, dass der I/O Controller während des Testaufbaues seinen Dienst
verweigert. Der I/O Controller bekam dadurch, dass wir keinen galvanischen Trenner
nutzten, einen zu hohen Strom auf die Eingänge, was einige ICs nicht aushielten.
Jetzt musste zum Testen ganz schnell eine Alternative her, da wir auf das neue
Gerät 2 Wochen warten mussten. Wir entschieden uns also, das Programm TCPClient, das wir zeitgleich mit dem TCP-Server programmierten, auf ein Testprogramm
umzurüsten.
3.8 TCP-Client
Abbildung 15 Screenshot TCP-Client Testprogramm
Man sieht hier die Programmoberfläche des fertigen TCP-Clients. Es wurde für jeden
Ein- beziehungsweise Ausgang ein Button oder ein Signalfeld angelegt, um den
Server ordentlich testen zu können. Da wir Probleme mit dem Programm hatten, das
42
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
die Daten in die Datenbank schreibt, haben wir eine Zeitstoppuhr eingebaut. Die
Stoppuhr stoppt die Zeit mit, die vom Absenden bis zum Eintreffen des simulierten
Signals für das Erdungsprüfgerät, bis zur Rückmeldung des Servers an das
simulierte Drehkreuz vergeht. Mit diesem Client konnten wir dann den Server
optimieren, ohne Zeit zu verlieren, und gleichzeitig auch noch mit mehreren Clients
testen. Das war für uns eine große Erleichterung, da wir ohne einen zweiten
Teststand jetzt wussten, dass unser Programm funktioniert.
Def.: try-catch 10
Der try-Block enthält den überwachten Code, der möglicherweise die Ausnahme
verursacht. Der Block wird solange ausgeführt, bis er erfolgreich abgeschlossen oder
eine Ausnahme ausgelöst wird.
Hier sieht man den try–Block des Clients, also den Teil, in dem versucht wird, etwas
zu lesen, oder zu schreiben.
try
{
if (connected == false)
{
client = new TcpClient("bigone", port);
stream = client.GetStream();
connected = true;
txtinfo.Text += "tcp client gestartet" + Environment.NewLine;
lblverbindung.Text = "Verbunden mit Horst!";
ThreadPool.QueueUserWorkItem(new WaitCallback(this.Receive));
}
}
catch (ArgumentNullException ex)
{
txtinfo.Text+="Exception:"+ex.ToString()+Environment.NewLine;
}
catch (SocketException ex)
{
txtinfo.Text+= "SocketException:"+ ex.ToString()+Environment.NewLine;
}
Da der TCP-Client generell mit dem TCP-Server programmiert werden muss, um die
Programme miteinander testen zu können, gehen wir hier jetzt nicht noch einmal
genau auf die Funktionsweise ein.
10
http://msdn.microsoft.com/de-de/library/0yd65esw(VS.80).aspx
Keskin, Schobesberger, Schuster
43
ESD-Eingangskontrollsystem
namespace TCPClient
{
delegate void ProtUpdateDelegate(string s);
public partial class TCPClient : Form
{
DateTime timepgt;
DateTime timedkz;
TcpClient client = null;
const int port = 20;
NetworkStream stream;
bool connected=false;
ProtUpdateDelegate protokollant;
Für den TCP-Client brauchen wir einen Serverport und einen Networkstream.
Außerdem wird die Variable bool connected deklariert und auf false gesetzt und
ein Delegate definiert.
public TCPClient()
{
InitializeComponent();
protokollant = new ProtUpdateDelegate(ProtUpdate);
}
Im Konstruktor wird das Delegate protokollant erzeugt.
private void btnstart_Click(object sender, EventArgs e)
{
try
{
if (connected == false)
{
client = new TcpClient("servername", port);
stream = client.GetStream();
connected = true;
ThreadPool.QueueUserWorkItem(new
WaitCallback(this.Receive));
}
}
catch (ArgumentNullException ex)
{
txtinfo.Text+="ArgumentNullException:"
+ex.ToString()+Environment.NewLine;
}
catch (SocketException ex)
{
txtinfo.Text+= "SocketException:"+
ex.ToString()+Environment.NewLine;
}
}//Start
44
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Die Methode btnstart_Click() verbindet den Client mit dem TCP-Server. Im
try–Block wird mit einer if-Anweisung (connected == false) überprüft, ob bereits
eine Verbindung besteht, falls das nicht der Fall ist, wird mit client = new
TcpClient("servername", port) ein neuer TCP-Client erstellt. Um mit dem TCPServer kommunizieren zu können, brauchen wir einen Stream, den wir mit stream =
client.GetStream() erstellen. Jetzt setzen wir noch connected auf true. Mit
ThreadPool.QueueUserWorkItem(new WaitCallback(this.Receive)) wird die
Methode Receive() in den Threadpool geworfen, wo sie dann verwaltet wird. Falls
der Client keine Verbindung herstellen kann, wird eine Exception ausgelöst.
void Receive(Object obj)
{
try
{
stream.ReadTimeout = 100000000; //msec
byte[] data = new byte[7];
int nRead;
while (true)
{
nRead = stream.Read(data, 0, data.Length);
if (nRead > 0)
{
BeginInvoke(protokollant,
BitConverter.ToString(data));
//Führt ein Delegate aus um bytearray aus dem
//Threadpool zu bringen
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Fehler beim
Nachrichtenempfang.", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
Die Methode Receive() bildet das Herzstück des TCP-Client. Im try–Block wird ein
ReadTimeout von 10^8 Millisekunden festgelegt, das ist die Zeitspanne, in der ein
Lesevorgang während des Wartens auf Daten blockiert wird. Außerdem wird das
Bytearray data und int nRead deklariert. In einer Endlosschleife wird jetzt die Länge
des Bytearray data ermittelt und das Bytearray mit Daten gefüllt. Wenn nRead
größer als 0 wird, werden mittels Delegate die Daten an den Haupthread gesendet,
Keskin, Schobesberger, Schuster
45
ESD-Eingangskontrollsystem
dazu wandeln wir das Bytearray in einen String um. Falls der Client nichts lesen
kann, wird eine Exception ausgelöst.
3.9 Fehlerprotokoll
Damit man fehlerhafte Eintrittsversuche kontrollieren kann, haben wir ein
Fehlerprotokoll programmiert. In diesem Protokoll werden alle fehlerhaften
Eintrittsversuche gespeichert. Damit nicht alle Fehleintritte angezeigt werden, kann
man einen gewissen Zeitraum auswählen.
Weiters haben wir einen Button zum
Drucken hinzugefügt.
Abbildung 16 Screenshot Protokoll der fehlerhaften Eintrittsversuche
Die Klasse Protokoll ist eine abgeleitete Klasse von Form-Object.
public partial class Protokoll : Form
{
public Protokoll()
{
InitializeComponent();
rb2tage.Checked = true;
dgvProtokoll.AllowUserToAddRows = false;
LoadData(new DateTime(1,1,3));
}
Im Konstruktor wird die Zeit, mittels Radio-Buttons, auf zwei Tage voreingestellt. Sie
kann auf 2 Tage, 7 Tage, 4 Wochen, 6 Monate und 12 Monate eingestellt werden.
46
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Um die Daten anzuzeigen, wird ein DataGridView verwendet. Damit der Benutzer
keine Zeilen hinzufügen kann, wird die Eigenschaft AllowUserToAddRows auf false
gesetzt. Anschließend wird die Methode LoadData(DateTime date) aufgerufen.
Dieser Methode wird ein DateTime-Objekt mit der eingestellten Zeit mit übergeben.
private void LoadData(DateTime date){
DateTime dt = DateTime.Now;
dt = dt.AddMonths(-date.Month + 1);
dt = dt.AddDays(-date.Day + 1);
dt = dt.AddYears(-date.Year + 1);
try
{
MSAccess ms = new
MSAccess(Properties.Settings.Default.Datenbankpfad);
string sql = "SELECT ID,LastName,FirstName,Datum,tb_Locks.Name
FROM tb_Locks,tb_Users,tb_ESDfailed ";
sql += "WHERE UserID=id_user AND LockID=id_lock AND ";
sql += "Datum>#"+dt.Month+"/"+dt.Day+"/"+dt.Year+"#";
DataTable table = ms.DataAdapter(sql);
table.Columns["FirstName"].ColumnName = "Vorname";
table.Columns["LastName"].ColumnName = "Nachname";
table.Columns["Name"].ColumnName = "Eingangname";
dgvProtokoll.DataSource = table;
dgvProtokoll.Update();
}
catch (NullReferenceException)
{
return;
}
catch (Exception e) {
MessageBox.Show(e.ToString());
}
}//LoadData
Diese Methode wird im Konstruktor aufgerufen. In dem DateTime-Objekt dt wird der
anzuzeigende Zeitraum gespeichert, dazu wird die ausgewählte Zeitspanne vom
aktuellen Datum abgezogen. Anschließend werden die Daten aus der Datenbank
geladen. Dazu wird ein MSAccess-Objekt erzeugt, mit dem ein SQL-Code ausgeführt
werden kann. Anschließend wird ein SQL-String erzeugt. Dieser wird mittels der
Methode DataAdapter, die das Objekt MSAccess beinhaltet, ausgeführt.
Aus der Datenbank werden von den Tabellen tb_Locks,tb_Users,tb_ESDfailes
die Spalten ID, LastName, FirstName und Datum in dem gewissen Zeitraum
geladen. Die Methode DataAdapter() gibt ein DataTable-Objekt zurück, welches
in die Variable table gespeichert wird. Im nächsten Schritt werden die
Keskin, Schobesberger, Schuster
47
ESD-Eingangskontrollsystem
Spaltennamen geändert. Damit man die Tabelle im DataGridView schließlich sehen
kann, muss man zuerst die Tabelle der DataSource-Eigenschaft des DataGridView
zuweisen. Danach wird das DataGridView mit der Update()-Methode aktualisiert.
Tritt im try-Block ein Fehler auf, wird ein catch-Teil ausgeführt. Welcher ausgeführt
wird, hängt vom Fehler ab.
private void rb2tage_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(1,1,3));
}
private void rb7tage_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(1, 1, 8));
}
private void tb4w_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(1, 1, 29));
}
private void rb3monate_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(1, 4, 1));
}
private void rb6monate_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(1,7,1));
}
private void rb12monate_CheckedChanged(object sender, EventArgs e)
{
LoadData(new DateTime(2,1,1));
}
Um den Zeitraum der anzuzeigenden Fehleintritte zu ändern, muss per Radio-Button
eine Zeitspanne gewählt werden. Der Radio-Button erkennt die Veränderung und ein
Ereignis wird ausgeführt. In diesem Fall wird, je nach Radio Button, eine der obigen
Methoden
ausgeführt.
Diese
Methoden
rufen
wiederum
die
Methode-
LoadData(DateTime date) auf, welcher der Zeitraum mit übergeben wird.
48
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
private void toolStripButton1_Click(object sender, EventArgs e)
{
MyPrintPreviewDialog dr = new
MyPrintPreviewDialog(((DataTable)dgvProtokoll.DataSource));
}
Um das Protokoll nicht nur elektronisch zur Verfügung zu haben, haben wir auch das
Ausdrucken realisiert. Wenn man im linken, oberen Bereich den Button Drucken
auswählt, wird ein MyPrintPreviewDialog-Objekt erzeugt. Diesem Objekt wird die
Tabelle des DataGridView-Objekts mit übergeben. Anschließend öffnet sich eine
Druckvorschau, in der man sich das Dokument ansehen und ausdrucken kann.
3.10 Ablaufsteuerung
Die Ablaufsteuerung wurde in der Session-Klasse implementiert, da dort die
Kommunikation zwischen Server und Clients stattfindet.
Zuerst unterteilten wir die Gesamtprüfzeit in Einzelabschnitte.
WRM 2000
PGT 100
DKZ 350
t1
t2
Gesamtprüfzeit
t1 … Zeit zwischen Identifizierung und ESD-Prüfung
t2 … Zeit zwischen Drehkreuz Freigabe und dem Passieren der
Lichtschranken
Abbildung 17 Prüfzeitzerlegung
Keskin, Schobesberger, Schuster
49
ESD-Eingangskontrollsystem
3.10.1 Ablaufbeschreibung
Ein großes Problem war, dass wir nicht wussten, durch welches Ereignis die Prüfung
gestartet werden soll. Eine gute Lösung wäre gewesen, wenn man die Identifizierung
als Prüfungsstart verwenden könnte, doch diese Daten werden durch ein eigenes
Programm (RW Pro- Access) von der Firma Salto verarbeitet. Da die Firma Salto ein
eigenes Protokoll verwendet und die Daten durch eine 3DES-Verschlüsselung
schützt, war es uns nicht möglich, diese Daten in unserem Programm anzunehmen.
Doch wir haben eine einfache Lösung gefunden, wir lesen die Daten einfach aus der
Datenbank der Salto-Software. Die Prüfung starten wir einfach durch das ESDPrüfgerät. Wird eine ESD-Prüfung durchgeführt, so stellt der I/O Controller eine
Verbindung zum Server her und sendet ein 14-stelliges Bytearray. Dieses Bytearray
wird mit der Klasse IOControll in eine Zahl umgewandelt. Jede Zahl steht für einen
Eingang am I/O Controller. Jetzt gibt es mehrere Möglichkeiten, es könnte eine
Prüfung gestartet werden oder jemand versucht das System zu umgehen, indem er
zum Beispiel über das Drehkreuz springt. Hat das ESD-Prüfgerät Daten gesendet, so
wird eine Prüfung gestartet. Das ESD-Prüfgerät unterscheidet, ob die Prüfung positiv
oder negativ war. Als Nächstes werden die Identifizierungsdaten aus der Datenbank
gelesen, wurde in der Zeit t1 kein Mitarbeiter identifiziert, dann wird die Prüfung
verworfen.
Wenn sich jemand in der Zeit t1 identifiziert hat, dann wird die Prüfung fortgesetzt.
War die ESD-Prüfung positiv, dann wird das Drehkreuz freigegeben und der
Mitarbeiter hat eine gewisse Zeit (t2), um die Lichtschranken zu passieren. In dieser
Zeit werden die Lichtschranken deaktiviert. Wenn die ESD-Prüfung jedoch negativ
war, wird der Mitarbeiter in die Datenbank eingetragen, außerdem wird eine rote
Signalleuchte für zwei Sekunden eingeschaltet.
Wenn jetzt die Lichtschranken senden, wird überprüft, welcher der beiden
Lichtschranken zuerst ausgelöst wurde. Damit können wir die Gehrichtung
bestimmen. Kommt jetzt ein Mitarbeiter vom EPA-Bereich und will diesen verlassen,
werden zwar beide Lichtschranken aktiviert, doch es wird die Kamera nicht
ausgelöst. Will jedoch jemand über das Drehkreuz springen, dann werden die
Lichtschranken aktiviert und ein Bild wird aufgenommen. Dieses Bild wird lokal am
Server abgelegt.
50
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
In dieser Tabelle wird die Aussage der Signalleuchten veranschaulicht:
Signalleuchte 1
Signalleuchte 2
(Grün)
(Rot)
Bedeutung
Es kann eine neue Prüfung gestartet werden.
Die Identifizierung war nicht erfolgreich oder
wurde nicht durchgeführt.
Negative ESD-Prüfung. Der Mitarbeiter wurde in
die Datenbank eingetragen.
Eine ESD-Prüfung wurde gestartet. Beide
Lampen leuchten für eine gewisse Zeit
(Übergangszeit) nicht. Wenn das Drehkreuz
freigegeben wird, muss der Mitarbeiter, solange
keine Lampe leuchtet, die Lichtschranken
passieren.
3.10.2 Programmablaufplan
Programmablaufplan der Run()-Methode in der Session-Klasse:
Keskin, Schobesberger, Schuster
51
ESD-Eingangskontrollsystem
Abbildung 18 SFC - Programmablaufplan der Prüfungsmethode 1
52
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Programmablaufplan der StarteKontrolle()-Methoden in der Session-Klasse:
Diese Methode wird in einem eigenen Thread ausgeführt, wenn ein Prüfungsstart
erfolgt.
Abbildung 19 SFC - Programmablaufplan der Prüfmethode 2
Keskin, Schobesberger, Schuster
53
ESD-Eingangskontrollsystem
Erläuterung
der
wichtigsten
Variablen
und
Methoden
der
beiden
Programmablaufpläne:
bool dkz
Standardmäßig auf false gesetzt. Wird diese Variable auf true
gesetzt, wird das Drehkreuz freigegeben. Nach der Zeit t2 wird die
Variable wieder auf false gesetzt.
int test
Hat standardmäßig den Wert 0. Wird eine Prüfung gestartet, so
wird die Variable auf 1 gesetzt. Nach der Prüfung wird der Variable
test wieder der Wert 0 zugewiesen.
bool vierer
Wenn input 4 oder 5 ist, wird die Variable vierer oder fuenfer
bool fuenfer
auf true gesetzt. Nach einer gewissen Zeit wird die Variable
wieder auf false gesetzt.
int input
Wird vom Client ein Bytearray gesendet, wird es, nach dem
Umwandeln mit der IOController-Klasse, der Variable input
zugewiesen.
Übergangszeit
In dieser Zeit muss der Mitarbeiter, nach einer bestandenen
Prüfung, die Lichtschranken passiert haben.
OutputOn(x)
Mit diesen Methoden werden die Ausgänge am I/O Controller
bzw
geschaltet. Die Zahl x gibt die Ausgangsnummer an.
OutputOff(x)
3.11 Die Datenbank
Eine sehr große Rolle in der Arbeit spielt die Datenbank. Auf den Grund werde ich
jetzt näher eingehen. Und zwar müssen wir die Daten von der SaltoZugangskontrolle übernehmen und dann weiterverarbeiten. Wir haben natürlich
versucht, die Daten, also die user-ID, direkt anzunehmen. Diese Idee war jedoch
nicht durchsetzbar, da Salto alle Daten in einem eigenen Protokoll verschlüsselt
sendet. Spätestens als wir das herausfanden, mussten wir uns Gedanken über eine
andere Lösung machen. Nach längerer Recherche kamen wir schließlich auf die
Idee, die Daten aus der Datenbank zu lesen. Während wir an dieser Lösung bereits
arbeiteten, suchten wir auch noch nach einer Lösung, die Daten anders zu
54
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
bekommen. Eine Alternative wäre ein zusätzliches Steuergerät gewesen, welches
jedoch wieder hohe Kosten verursacht hätte und durch eine Datenübertragung per
RS232 nicht gerade beeindruckend war, da wir versuchten die Datenübertragung, so
weit es geht, per Bussystem zu vollziehen. So entschieden wir uns, die Daten
einfach aus der bereits bestehenden Access-Datenbank zu holen. Das hatte
natürlich den Vorteil, dass wir auch anfallende Daten gleich in der Datenbank mit
dokumentieren können.
3.11.1 Die Klasse MSAccess
Die Klasse MSAccess wurde von uns programmiert, um mit der Methode
DataAdapter() aus der Datenbank lesen zu können oder mit der Methode
DataWrite() in die Datenbank schreiben zu können. Diese beiden Methoden
werden bei jeder Kommunikation mit der Datenbank verwendet.
class MSAccess
{
private string database;
public MSAccess() {
}//Konstruktor
}
public MSAccess(string _database)
{
database = _database;
}//Konstruktor
//--------------------Eigenschaften-------------------/// <summary>
/// Setzt die Datenbank
/// </summary>
public string Database{
set { database = value; }
In der Eigenschaft Database wird hier die Datenbank gesetzt.
/// <summary>
/// Öffnet die Datenbank und führt einen SQL string aus.
/// </summary>
/// <param name="sql">SQL String</param>
/// <returns>Gibt zurück ob das Schreiben in die Datenbank
///erfolgreich war</returns>
public bool DataWrite(string sql)
{
try
Keskin, Schobesberger, Schuster
55
ESD-Eingangskontrollsystem
{
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=" + database + ";Jet OLEDB:Database
Password=xxxxxxxxxxxxxxxx";
OleDbConnection connection = new OleDbConnection(connStr);
connection.Open();
OleDbCommand command = new OleDbCommand(sql, connection);
command.ExecuteNonQuery();
connection.Close();
return true;
}
catch (OleDbException) {
MessageBox.Show("Fehler beim Schreiben in die Datenbank",
"Fehler beim Schreiben");
return false;
}
}//DataWrite
}//MSAccess
}//ESD_Eingangskontrollsystem
Die Methode DataWrite() wird verwendet, um in die Datenbank zu schreiben. In
einem try-Block wird versucht, in die Datenbank zu schreiben. War das Schreiben
erfolgreich, wird true zurückgegeben, falls das Schreiben nicht erfolgreich beendet
werden konnte, wird eine Exception ausgelöst und false zurückgegeben. Die
Verbindung zur Datenbank wird folgendermaßen aufgebaut. Zuerst wird ein
Connectionstring definiert:
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=" + database + ";Jet OLEDB:Database
Password= xxxxxxxxxxxxxxxx ";
Dieser connStr wird dem Verbindungsobjekt direkt als Argument mit übergeben.
OleDbConnection connection = new OleDbConnection(connStr);
Um jetzt die Verbindung zur Datenbank zu öffnen und auf die in ihr enthaltenen
Daten zugreifen zu können, muss noch die Methode Open() aufgerufen werden.
OleDbCommand command = new OleDbCommand(sql, connection);
command.ExecuteNonQuery();
connection.Close();
return true;
56
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Wir erzeugen ein Datenbankobjekt command und schreiben mit der Methode
ExecuteNonQuery() die Daten in die Datenbank. Nach dem Schreiben wird die
Verbindung getrennt und true zurückgegben.
3.11.1.1 Methode DataAdapter
Um nicht ständig mit der Datenbank kommunizieren zu müssen, entschlossen wir
uns dazu, den OleDbDataAdapter zu verwenden. Der OleDbDataAdapter ist eine
Art Bindeglied zwischen der Datenquelle und dem lokalen Speicher. Er hat die
Fähigkeit, Daten aus einer Datenquelle abzufragen und diese dann in einer oder
mehrerer Tabellen lokal abzulegen. Um die Auslastung so gering wie möglich zu
halten, baut der OleDbDataAdapter nur dann eine Verbindung zur Datenbank auf,
wenn es unbedingt notwendig ist. Sind die Operationen abgeschlossen, wird die
Verbindung sofort wieder beendet.
Die folgende Methode liest die Daten aus der Datenbank mittels eines
OleDbDataAdapter. Übergeben wird dabei die Variable string sql, welche den
SQL-Datenbankbefehl beinhaltet.
//---------------Mehtoden---------------/// <summary>
/// Ließt Daten aus der Datenbank mittels Data Adapter
/// Bei einem Fehler gibt diese Methode null zurück
/// </summary>
/// <param name="sql">SQL Befehl</param>
public DataTable DataAdapter(string sql)
{
try
{
string connStr = @"Provider=Microsoft.ACE.OLEDB.12.0;
Data Source=" + database + ";Jet OLEDB:Database
Password= xxxxxxxxxxxxxxxx";
Natürlich wird auch beim OleDbDataAdapter ein Connectionstring zum Aufbauen
einer Verbindung benötigt.
if (!File.Exists(database))
{
throw new DatabaseException("Die Datenbank existiert
nicht!", "test");
}
Keskin, Schobesberger, Schuster
57
ESD-Eingangskontrollsystem
Mit File.Exists(database) wird kontrolliert, ob das File existiert, sollte das nicht
der Fall sein, wird hier eine DatabaseException geworfen, die einen misslingenden
Verbindungsaufbau verhindert. Mit
OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connStr);
wird
das
OleDbDataAdapter–Objekt
Datenbankbefehl sql
erzeugt.
Außerdem
wird
der
SQL-
und das Verbindungsobjekt connStr übergeben.
Jetzt
erzeugen wir noch ein DataSet, in dem die Daten vorübergehend gespeichert
werden.
DataSet ds = new DataSet();
adapter.Fill(ds);
Gegenüber der normalen Datenbankverbindung entfällt hier das Öffnen, da das der
DataAdapter selbständig macht. Die Methode Fill(ds) füllt die Tabelle ds mit den
Daten aus der Tabelle in der Datenbank..
return ds.Tables[0];
Im Falle eines auftretenden Laufzeitfehlers gibt es auch hier wieder Exceptions, die
bei Auftreten eines Fehlers den Vorgang ohne Programmabsturz beenden.
}
catch (OleDbException e) {
MessageBox.Show(e.Message.ToString(),"OleDbException");
return null;
}catch (Exception e)
{
MessageBox.Show(e.Message.ToString(),"Exception");
return null;
}
}//DataAdapter
58
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.11.2 Klasse AccessData
Im Folgenden werden die Methoden aus der Klasse AccessData beschrieben und
erklärt. Die Klasse AccessData nimmt sich hauptsächlich die Klasse MSAccess als
Werkzeug.
class AccessData
{
private int user_id;
private DateTime datum;
private int count;
public AccessData()
{
}//Konstruktor
//Eigenschaften
public int User_Id
{
get { return user_id; }
set { user_id = value; }
}
public DateTime Datum
{
get { return datum; }
set { datum = value; }
}
public int Count {
get { return count; }
set { count = value; }
}
Hier setzten wir die Variable int user_id, was logischerweise der User-ID, also der
Nummer des Mitarbeiters im Salto-System entspricht. Weiters wird DateTime datum
und int count gesetzt, was einem DateTime, also einem Zeitobjekt, und einer
einfachen Zählvariable entspricht.
3.11.2.1 Userdaten abfragen
Beginnen wir mit der Methode GetUserData(), hier wird versucht, die Userdaten
aus der Datenbank zu lesen.
//Static Methoden
public static AccessData GetUserData(int _id_lock)
{
try
{
DateTime dtime = DateTime.Now;
Keskin, Schobesberger, Schuster
59
ESD-Eingangskontrollsystem
//neues Datenbank objekt erstellen
MSAccess ms = new
MSAccess(Properties.Settings.Default.Datenbankpfad);
//tabelle erstellen
DataTable table = new DataTable();
TimeSpan ts =
TimeSpan.FromSeconds(Properties.Settings.Default.ZeitESDPruefung+2);
Hier wird ein neues DateTime-Objekt dtime erstellt, welches die aktuelle Zeit
beinhaltet. Anschließend wird ein neues MSAccess-Objekt ms deklariert und diesem
der Datenbankpfad aus den Properties übergeben. Die Eigenschaften werden im
Kapitel 3.16.2 behandelt. Als nächstes wird ein neues DataTable-Objekt table und
ein TimeSpan-Objekt ts erstellt. Dem TimeSpan-Objekt wird die Zeit für die ESD-
Prüfung aus den Eigenschaften übergeben. Es werden hier 2 Sekunden addiert, da
es sich dabei um den Zeitunterschied zwischen Computer und Steuereinheit handelt.
DateTime time;
time = DateTime.Now;
DateTime timesql = time.Subtract(ts);
string sql = "SELECT dt_audit,id_lock,id_user FROM
tb_LockAuditTrail WHERE id_lock=" + _id_lock;
sql += " AND dt_Audit>#" + timesql.Month + "/" +
timesql.Day + "/" + timesql.Year + " " +
timesql.Hour + ":" + timesql.Minute + ":" +
timesql.Second + "#";
sql += " AND dt_Audit<#" + time.Month + "/" +time.Day + "/"
+ time.Year+ " " + time.Hour + ":" +time.Minute +
":" + time.Second + "#";
Hier wird wieder ein DateTime-Objekt timesql erstellt und darin die Zeit für die ESDPrüfung +2 subtrahiert von der aktuellen Zeit time gespeichert. Jetzt geht es darum,
den string sql zusammenzusetzen. Benötigt wird eine Abfrage der Userdaten.
SELECT dt_audit,id_lock,id_user ist der Teil, der bestimmt, was genau wir
abfragen wollen. In diesem Fall ist dt_audit das Datum und die Zeit, zu der eine
Anmeldung getätigt wurde, id_lock, also die Eingangsnummer und id_user, die
Mitarbeiternummer. FROM tb_ LockAuditTrail ist jener Teil, der bestimmt, aus
welcher Tabelle die Daten bezogen werden sollen. tb_ LockAuditTrail ist in
diesem Fall die abzufragende Tabelle.
Nun kommt der Teil, der die Bedingungen festlegt. WHERE id_lock=" + _id_lock
besagt, dass das id_lock in der Datenbank mit dem _id_lock, das der Methode
60
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
übergeben wurde, übereinstimmen muss. dt_Audit muss außerdem größer sein als
die Zeit aus dem DateTime-Objekt timesql. Da man das DateTime-Objekt hier aber
nicht einfach so übergeben kann, muss man es aufspalten und die einzelnen Daten
einzeln an Access übergeben. Nach dem letzten AND kommt dann die Bedingung,
dass dt_Audit kleiner als die Zeit im DateTime-Objekt time ist. Um keinen zu
langen String auf einmal zu haben, teilten wir den Befehl auf mehrere kürzere Strings
auf.
float zeit = Properties.Settings.Default.ZeitESDPruefung;
zeit -= 0.5F;
//Nicht unbedingt notwendig
DateTime con = DateTime.Now;
Thread.Sleep(500);
table = ms.DataAdapter(sql);
Wir erstellt eine neue Variable zeit und wiesen dieser aus den Eigenschaften die
Zeit für die ESD-Prüfung zu. Nun subtrahieren wir von dieser Zeit, die in Sekunden
angegeben wird, eine halbe Sekunde.
Nachdem wir danach das DateTime-Objekt con erzeugen blockieren wir den Thread
für 500 Millisekunden und füllen danach unsere Tabelle table mit dem
DataAdapter.
if (table.Rows.Count > 1)
{
return null;
Falls die Tabelle mehr als eine Reihe beinhaltet, wird sofort null zurückgegeben.
Die folgende Schleife wird solange durchlaufen, bis Daten eingelangt sind oder die
Zeit abgelaufen ist.
}else{
int i = 0;
while (0 == table.Rows.Count && i < (zeit / 0.25))
{
try
{
table = ms.DataAdapter(sql);
}
catch (DatabaseException e)
{
MessageBox.Show(e.ToString());
}
Keskin, Schobesberger, Schuster
61
ESD-Eingangskontrollsystem
Falls nicht mehr als eine Reihe in der Tabelle vorhanden ist, kommen wir in den
else-Teil, wo eine while –Schleife solange durchläuft, solange die Reihen in der
Tabelle Null sind und i kleiner ist als die eingestellte Zeit für die ESD-Prüfung
dividiert durch 0.25. Die Variable i fungiert hier als Zählvariable und wird am Ende
eines jeden Durchlaufes inkrementiert. In einem try–Block wird versucht, die Tabelle
table
per
DataAdapter
zu
füllen.
Per
catch
wird
eine
mögliche
DatabaseException abgefangen. Eine Exception ist sinngemäß übersetzt eine
Ausnahme.
}
if (table.Rows.Count > 1)
{
return null;
}//if
i++;
Thread.Sleep(250);
}//else
Wenn mehr als eine Zeile in der Tabelle table ist, wird sofort null zurückgegeben.
Ansonst wird der Thread wieder für 250 Millisekunden blockiert, bevor die Schleife in
den nächsten Durchgang geht.
if (table.Rows.Count < 1) {
MessageBox.Show(DateTime.Now
.Subtract(con).ToString(),"rows<1");
return null;
}//if
Wenn die Schleife beendet wurde, weil die Zeit abgelaufen ist, wird die Tabelle leer
sein und die Methode gibt null zurück.
AccessData ad = new AccessData();
ad.User_Id =
Convert.ToInt32(((DataRow)table.Rows[0])["id_user"]);
ad.Datum =
(DateTime)(((DataRow)table.Rows[0])["dt_Audit"]);
ad.Count = table.Rows.Count;
return ad;
Jetzt wird ein neues AccessData-Objekt ad erzeugt. Danach werden den
Eigenschaften User_Id, Datum und Count die jeweiligen Werte aus der Tabelle
62
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
zugewiesen. Außerdem wird die User_Id aus der Tabelle geholt und per
Convert.ToInt32 zu einem Integer konvertiert. Table.Rows[0] beschreibt die erste
Zeile und id_user die Spalte, aus der die UserID geholt werden soll. Es wird dann
das Objekt ad per return zurück.
Im Folgenden gibt es für den Ausnahmefall noch eine allgemeine Exception, welche
ausgelöst eine MessageBox mit einer Fehlermeldung zeigt und null zurückgibt.
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(),"Fehler AccessData");
return null;
}
}//GetAccessData
Falls das System zum ersten Mal gestartet wird, werden mit der Methode
TabellenAnlegen() die zwei von uns benötigten Tabellen zur Salto-Datenbank
hinzugefügt.
Benötigt
werden
von
uns
die
Tabellen
tb_Eingaenge
und
tb_ESDfailed. In tb_Eingaenge speichern wir alle Daten, die wir für die einzelnen
Eingänge benötigen, wie zum Beispiel die ID des Eingangs, den Namen des
Eingangs, die IP des I/O Controllers und den Port des I/O Controllers.
Abbildung 20 Screenshot Acess tb_Eingaenge
In tb_ESDfailed werden die Daten gespeichert, die bei negativen Überprüfungen
mit dokumentiert werden. Gespeichert werden eine ID als Schlüssel, die UserID, das
Datum, die genaue Uhrzeit und die Eingangs-ID.
Keskin, Schobesberger, Schuster
63
ESD-Eingangskontrollsystem
Abbildung 21 Screenshot Access tb_ESDfailed
3.11.2.2 Tabellen anlegen
public static void TabellenAnlegen()
{
try
{
MSAccess ms = new
MSAccess(Properties.Settings.Default.Datenbankpfad);
Hier wird das neue MSAccess Objekt ms erstellt und dem sofort der Datenbankpfad
übergeben.
string sqlEingaenge = "CREATE TABLE tb_Eingaenge(id_lock
LONG PRIMARY KEY, EingangName STRING(50),
ControllerIP STRING(15), ControllerPort LONG)";
CREATE TABLE tb_Eingaenge ist der SQL-Befehl zum Erstellen der Tabelle tb
_Eingaenge. Erstellt wird die Tabelle dann mit den Spalten id_lock, EingangName,
64
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
ControllerIP und ControllerPort. id_lock wird als Primärschlüssel mit dem
Datentyp LONG erstellt, das entspricht einer Integerzahl mit 4Byte. ControllerIP
wird als string mit einer Länge von 15 Zeichen angelegt.
if (!ms.DataWrite(sqlEingaenge)) {
MessageBox.Show("Beim Schreiben in die Datenbank ist
ein Fehler aufgetreten!");
return;
}//if
Falls die SQL-Abfrage nicht funktioniert, wird hier ein Fehler ausgegeben und die
Methode beendet.
string sqlESDfailed = "CREATE TABLE tb_ESDfailed(ID COUNTER
PRIMARY KEY, UserID LONG, Datum DATETIME, LockID LONG)";
Dieser sql-Code soll die Tabelle tb_ESDfailed anlegen. Angelegt werden hier die
Spalten ID als COUNTER und PRIMARY KEY, was heißt, dass sich die ID selbständig
durchnummeriert und dadurch auch einen eindeutigen Schlüssel darstellt, UserID,
Datum als DATETIME, sprich Datum und Uhrzeit, und LockID.
if (!ms.DataWrite(sqlESDfailed)) {
MessageBox.Show("Beim Schreiben in die Datenbank ist
ein Fehler aufgetreten!");
return;
}//if
}catch(Exception e){
MessageBox.Show(e.Message.ToString());
}
}//TabellenAnlegen
3.11.2.3 Negative Identifizierungsversuche speichern
Die Methode WriteFailedData() soll die ungültigen Zutrittsversuche in die
Datenbank schreiben, übergeben werden der Methode die userid, das Datum und
die Eingangsnummer.
public static void WriteFailedData(int userid,DateTime date,int
_id_lock)
{
MSAccess ms = new
MSAccess(Properties.Settings.Default.Datenbankpfad);
Keskin, Schobesberger, Schuster
65
ESD-Eingangskontrollsystem
Es wird ein MSAccess-Objekt erzeugt und dem der Datenbankpfad übergeben.
string sql="INSERT INTO tb_ESDfailed (UserID,Datum,LockID)
VALUES ("+userid+",";
sql += "#" + date.Month + "/" + date.Day + "/" + date.Year + "
" + date.Hour + ":" +date.Minute + ":" +date.Second + "# ";
sql += "," + _id_lock + ")";
Da wir jetzt in die Datenbank schreiben wollen, verwenden wir INSERT INTO und
schreiben damit in die Tabelle tb_ESDfailed in die Spalten UserID, Datum,
LockID. Mit VALUES legen wir die Werte oder Daten fest, die gespeichert werden
sollen. In unserem Fall zuerst einmal userid, dann das aktuelle Datum und
abschließend _id_lock.
if (!ms.DataWrite(sql)) {
MessageBox.Show("Beim Schreiben in die Datenbank ist ein
Fehler aufgetreten!");
TabellenAnlegen();
}
Falls das Ausführen von DataWrite() nicht funktionieren sollte, falls also eine
Tabelle noch nicht besteht, werden hier mit TabellenAnlegen() die Tabellen
angelegt. Die Methode TabellenAnlegen() wurde im Kapitel 3.11.2.2 ausführlich
beschrieben.
}//WriteFailedData
}//AccessData
3.12 Dateiverwaltung
Die Klasse Dateiverwaltung ist für die Verwaltung der Bilder auf dem Server
zuständig. Die Kamera beim Eingang macht ein Bild, sobald jemand unbefugt die
EPA betritt. Diese Bilder werden am Server in einem lokalen Verzeichnis
abgespeichert. Da hier der Speicherplatz begrenzt ist, löscht das System ab einer
bestimmten Anzahl von Bildern immer das älteste. Die Methode DeleteData()
wird immer dann aufgerufen, wenn die Kamera ein Bild gemacht hat.
66
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Abbildung 22 Hauptprogramm - Eigenschaften
In den Eigenschaften kann dem Programm das Zielverzeichnis der Kamera
angegeben werden. Die Kamera legt die Bilder standardmäßig unter C:\tmp ab.
Außerdem kann die maximale Anzahl der Bilder eingestellt werden.
class Dateiverwaltung
{
Thread dv;
public Dateiverwaltung() {
dv = new Thread(new ThreadStart(this.Run));
dv.Start();
}
Zu allererst wird ein neuer Thread dv definiert, welcher im Standardkonstruktor der
Klasse erzeugt und gestartet wird.
public void Run() {
DeleteData();
dv.Abort();
}
Die Methode Run()wird beim Threadstart aufgerufen und führt die Methode
DeleteData() aus. Nach dem Ausführen wird der Thread mit Abort() beendet.
Keskin, Schobesberger, Schuster
67
ESD-Eingangskontrollsystem
public void DeleteData()
{
string pfad = Properties.Settings.Default.PicturesPfad;
DirectoryInfo di = new DirectoryInfo(@pfad);
DeleteData() ist die “Arbeitsmethode” in der Klasse Dateiverwaltung. In dieser
Methode werden wie beschrieben die Bilder gelöscht. Aber zuerst wird der string
pfad definiert. Dieser Pfad gibt an, wo sich die Bilder befinden. Dem definierten
string wird der Pfad aus den Properties zugewiesen. Die Klasse DirectoryInfo
stellt einige Methoden zum Arbeiten mit Verzeichnissen zur Verfügung. Neben
DirectoryInfo gibt es auch die Klasse Directory, wir haben uns jedoch für die
erstere
entschieden,
Zugriffsberechtigungen
da
die
bestehen.
Klasse
Und
Directory
nachdem
wir
immer
wissen,
überprüft,
dass
ob
diese
grundsätzlich bestehen entschieden wir uns für die ressourcensparsamere Variante.
Dem neuen DirectoryInfo Objekt di wird der Pfad übergeben.
//di.Exists überprüft, ob das Verzeichnis di existiert
if (di.Exists)
{
while(di.GetFiles().Length >
Properties.Settings.Default.MaxPictures)
{
In der if–Anweisung wird mit di.Exists überprüft, ob das Verzeichnis di existiert.
Falls das Verzeichnis existiert, wird eine while-Schleife ausgeführt, die mit
GetFiles() ein Array mit den Daten im ausgewähltem Verzeichnis di füllt und
dann die Anzahl der Dateien bestimmt. Ist die Anzahl der Dateien größer als der
erlaubte Wert, wird der Code ausgeführt. Die maximale Anzahl der Bilder wird aus
den Properties geladen.
//FileInfo-Objekt für das File-Array
FileInfo[] files = di.GetFiles();
//DateTime Objekt mit aktueller Zeit erzeugen
DateTime dtime = DateTime.Now;
string tempname = "";
foreach (FileInfo fi in files)
{
if (dtime > fi.CreationTime)
{
68
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
dtime = fi.CreationTime;
tempname = fi.Name.ToString();
}
}
}
}
//Zum Löschen neues FileInfo-Objekt erzeugen
//und den Pfad und Dateiname übergeben
FileInfo deletefile = new FileInfo(pfad+tempname);
deletefile.Delete();
FileInfo[] files erzeugt ein neues FileInfo-Objekt-Array files, dieses wird mit
den Daten aus dem Verzeichnis gefüllt. Um den genauen Zeitpunkt zu wissen,
brauchen wir ein DateTime-Objekt dtime, welches die genaue Zeit beinhaltet. Jetzt
definieren wir den string tempname, diesen brauchen wir, um uns den Dateinamen
des ältesten Bildes fürs Löschen zu merken. In einer foreach-Schleife werden jetzt
alle files durchgegangen und das älteste Bild wird bestimmt. In der if-Anweisung
wird beim ersten Schleifendurchlauf überprüft, ob die aktuelle Zeit dtime größer ist,
also ob die aktuelle Zeit weiter fortgeschritten ist als die Erstellzeit der ersten Datei.
Wenn dtime aktueller ist als die Erstellzeit der gerade überprüften Datei, wird das
Erstelldatum dtime zugewiesen, welches wir aus der Eigenschaft CreationTime
bekommen. Der Variable tempname wird der Name der behandelten Datei
zugewiesen. Den Dateinamen bekommen wir aus der Eigenschaft Name. Zum
Löschen der ältesten Datei erzeugen wir jetzt ein neues
FileInfo-Objekt
deletefile. Dem übergeben wir den genauen Pfad der Datei, der sich aus dem
Verzeichnispfad pfad und dem Dateinamen tempname zusammensetzt. Die Methode
Delete()löscht jetzt die älteste Datei tempname.
}
}
else
{
MessageBox.Show("Falsches Verzeichnis!");
}
Falls das Verzeichnis nicht existiert, wird eine MessageBox mit der Nachricht
„Falsches Verzeichnis!“ ausgegeben.
Keskin, Schobesberger, Schuster
69
ESD-Eingangskontrollsystem
3.13 Die Benutzeroberfläche
Eine unserer wichtigsten Vorgaben war eine einfache und gut zu bedienende
Benutzeroberfläche. Wir haben also eine Oberfläche realisiert, auf der sich jeder
zurechtfinden sollte, der mit dem System zu tun hat. Da ein weiteres unserer Ziele
war das System erweiterbar zu machen, kann man in unserer Oberfläche alle zum
Ablauf notwendigen Daten eingeben. Außerdem muss man alle gespeicherten
Daten, also alle ungültigen Zutritte, über die Benutzeroberfläche abrufen können,
wofür wir ein Protokoll einbauten. Das Protokoll kann bis zu 12 Monate im
Nachhinein eingesehen und gedruckt werden.
3.13.1 Startbildschirm
Auf dem folgenden Bild sieht man die Programmoberfläche, wie sie direkt nach dem
Start aussieht. Wie man hier sieht, haben wir für die Navigation ein Menü verwendet,
mit dem man ziemlich einfach eine tolle Navigation erzeugen kann. Außerdem sieht
man auf den ersten Blick sofort, welche Eingänge aktiv sind und kommt zudem mit
einem Klick zu den Einstellungen der Eingänge.
70
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Abbildung 23 Screenshot Hauptprogramm Übersichtsseite
3.13.2 Einstellungen mit Eigenschaften
Das Allererste, das man nach dem ersten Programmstart machen muss, ist die
Angabe
eines
Datenbankpfades.
Der
Datenbankpfad
wird
als
Eigenschaft
abgespeichert. Eigenschaften haben den Vorteil, dass sich das Programm die
gespeicherten Daten merkt, ohne eine externe Datei wie zum Beispiel eine
Datenbank oder andere Files verwenden zu müssen. Auf dem Bild unten sieht man
das Fenster Eigenschaften, hier kann der Benutzer seinen Datenbankpfad und das
gewünschte Zeitfenster für die ESD-Prüfung eingeben.
Keskin, Schobesberger, Schuster
71
ESD-Eingangskontrollsystem
Abbildung 24 Screenshot Hauptprogramm Eigenschaften
Die Einstellungen erreicht man, indem man im Microsoft Visual Studio auf „Project“
„Programmname Properties…“ klickt. Wählt man hier dann „Settings“ aus, muss man
nur mehr die gewünschten Namen und Datentypen der Einstellungen eingeben und
schon sind sie im Programm verfügbar.
Abbildung 25 Einstellungen der Settings
72
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Wenn man nach der Eingabe der Daten auf Speichern klickt, wird folgende Methode
ausgeführt.
}
private void btnSaveEinstellungen_Click(object sender, EventArgs e)
{
Properties.Settings.Default.Datenbankpfad = tbxDBPfad.Text;
Properties.Settings.Default.ZeitESDPruefung =
Convert.ToInt32(nudZeitESDPruefung.Value);
Properties.Settings.Default.UbergangszeitDKZLS =
Convert.ToInt32(nUDUebergangszeit.Value);
Properties.Settings.Default.UserControll =
cbusercontroll.Checked;
Properties.Settings.Default.PicturesPfad =
tbxPicturesPath.Text;
Properties.Settings.Default.MaxPictures =
Convert.ToInt32(numMaxAnzPics.Value);
Properties.Settings.Default.Save();
this.Close();
Properties.Settings.Default.Datenbankpfad
=
tbxDBPfad.Text
zum
Beispiel weist Properties.Settings.Default.Datenbankpfad den Wert in der
TextBox Datenbankpfad zu. Mit Properties.Settings.Default.Save() werden
dann alle zugewiesenen Eigenschaften gespeichert. this.Close() schließt nach
dem Speichern das Fenster.
3.13.3 Pfad aussuchen per OpenFileDialog
Da C# hier wieder einmal eine große Erleichterung bietet, haben wir uns auch
diesmal wieder dessen bedient. Diesmal handelt es sich um die Klasse
OpenFileDialog. Damit kann man wie auf dem Bild unten den Server nach Daten
durchsuchen.
Keskin, Schobesberger, Schuster
73
ESD-Eingangskontrollsystem
Abbildung 26 Screenshot OpenFileDialog zur Datenbank Auswahl
Wenn man also „Suchen“ klickt, wird die folgende Methode ausgeführt.
private void btnDBPfadDurchsuchen_Click(object sender, EventArgs e)
{
//es lassen sich nur mdb Files öffnen
openfiledialogDBPfad.Filter = "mdb Files (*.mdb)|*.mdb";
openfiledialogDBPfad.InitialDirectory =
Properties.Settings.Default.Datenbankpfad;
openfiledialogDBPfad.FileName =
Properties.Settings.Default.Datenbankpfad;
openfiledialogDBPfad.ShowDialog();
tbxDBPfad.Text = openfiledialogDBPfad.FileName;
}//DBPfadDurchsuchen
Wenn
man
die
Eigenschaft
openfiledialogDBPfad.Filter
mit
"mdb
Files
(*.mdb)|*.mdb" festlegt, können nur .mdb-Files geöffnet werden. Ein .mdb-File ist
ein Datenbankfile. Weiters legen wir den Datenbankpfad fest und rufen per
ShowDialog() das Öffnen-Fenster auf. Der ausgewählte Datenbankpfad wird in die
Textbox tbxDBPfad gespeichert.
74
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.13.4 Menü mit MenuStrip
Das Navigationsmenü wurde von uns mit der Klasse MenuStrip, die C# bereitstellt,
erstellt.
Abbildung 27 Screenshot MenuStrip des Hauptprogramm
Auf dem obigen Bild sieht man, wie das Menü jetzt konkret aussieht. Wenn man jetzt
auf „Eingang hinzufügen“ klickt, löst man folgenden Code aus:
private void eingangHinzufügenToolStripMenuItem_Click(object
sender, EventArgs e)
{
Einganghinzufuegen add = new Einganghinzufuegen(eingang);
add.FormClosed += new FormClosedEventHandler(UpdateEingaenge);
add.Show();
}
Dieser Code öffnet ein Fenster, in dem man Eingänge hinzufügen kann.
Keskin, Schobesberger, Schuster
75
ESD-Eingangskontrollsystem
Abbildung 28 Screenshot Hauptprogramm Eingang hinzufügen
Hier sieht man das Formular zum Anlegen eines neuen Eingangs. Um einen Eingang
anlegen zu können, braucht man die IP-Adresse des I/O Controllers. Man muss
diesen also vorher richtig konfigurieren, um hier fortfahren zu können. Grundsätzlich
kann jeder Eingang, der sich in der Datenbank befindet, also jeder Eingang in der
kompletten Firma, für ein ESD-Kontrollsystem verwendet werden. Sinnvoll ist das
natürlich nur bei den Eingängen zum Produktionsbereich. Das Programm kontrolliert
außerdem die eingegebene IP-Adresse auf Gültigkeit. Diese Klasse ist jedoch freier
Code und wurde nicht von uns programmiert.
3.13.5 Das Protokoll
Im Protokoll kann man sich die fehlgeschlagenen Zutrittsversuche über eine
Zeitspanne von 2 Tagen bis zu 12 Monaten anzeigen lassen. Mit einem Klick auf das
Drucksymbol wird eine Druckvorschau erstellt.
76
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Abbildung 29 Screenshot Hauptprogramm Fehlerprotokoll
Abbildung 30 Screenshot Hauptprogramm Druckansicht des Fehlerprotokolls
3.14 Konstruktive Tätigkeiten
Für den Zugang waren auch kleine konstruktive Tätigkeiten notwendig, so brauchten
wir zum Beispiel eine Halterung für das Prüfgerät, das Identifizierungsgerät und die
Signalleuchten, eine Blechbox für alle anderen Geräte und eine Halterung für die
Keskin, Schobesberger, Schuster
77
ESD-Eingangskontrollsystem
Lichtschranken.
Die Konstruktionen wurden in der HTL-Werkstätte gefertigt und pulverbeschichtet.
3.14.1 Lichtschrankenhalterung
Die Lichtschrankenhalterung hat die Aufgabe, die Lichtschranken in einer
festgelegten Höhe und mit variablem Abstand zu halten. Die beiden Halter sind in
einer Nut geführt und somit verstellbar. Die Kabel werden durch die Formrohre
geführt und sind deshalb von außen nicht sichtbar. Die Lichtschrankenhalterung
kann an beiden Seiten des Drehkreuzes befestigt werden, so wurde die Flexibilität
der Konstruktion noch einmal erhöht.
Abbildung 31 Screenshot Catia – Lichtschrankenhalterung
78
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.14.2 Gerätebox
In dieser Gerätebox werden alle zur Steuerung nötigen Geräte aufbewahrt. Da wir
einige Geräte benötigen und ziemlich viel verkabelt wurde, ist eine Box die
wahrscheinlich beste Lösung. Die Gerätebox musste versperrbar sein und die
Klappe aus Platzgründen nach oben aufgehen.
Abbildung 32 Screenshot Catia - Gerätebox
3.14.3 Gerätehalterung
Die
Gerätehalterung
wurde
notwendig,
um
das
ESD-Prüfgerät
und
das
Identifikationsgerät von Salto in einer für den Mitarbeiter angenehmen Höhe
montieren zu können. Weiters werden auf der Gerätehalterung die Signallampen
befestigt.
Keskin, Schobesberger, Schuster
79
ESD-Eingangskontrollsystem
Abbildung 33 Screenshot Catia - Gerätehalterung
Abbildung 34 Screenshot Catia - Gerätehalterung
80
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
3.15 Schwenktür
Um auch Rollstuhlfahrern den Zutritt zu ermöglichen und außerdem die Möglichkeit
zu erhalten, größere Gegenstände in die EPA zu transportieren, sollte eine
Schwenktür zugekauft werden. Wir holten uns von der Firma Stadlmayr
Verkehrssysteme in Unterpilsbach bei Vöcklabruck ein Angebot über eine solche
Schwenktür ein. Diese Schwenktür kann über einen digitalen Eingang angesteuert
werden und somit durch unseren I/O Controller bedient werden.
Abbildung 35 Schwenktür vom Typ Ikarus 11
11
http://www.stadlmayr.at/personensperre_ikarus.htm
Keskin, Schobesberger, Schuster
81
ESD-Eingangskontrollsystem
4 Gesamtaufbau
Abbildung 36 Gesamtaufbau
Dies ist eine vereinfachte Darstellung des Gesamtaufbaus unseres Systems. Da wir
als Bussystem Ethernet verwenden, konnten die Geräte, die über Ethernet arbeiten
(dargestellt durch die roten Linien), leicht in das System integriert werden. Etwas
anders
sieht
es
bei
den
Komponenten
aus,
die
über
keinen
direkten
Netzwerkanschluss verfügen (dargestellt durch die gelben Linien). Diese werden mit
dem I/O Controller in das Netzwerk integriert. Zum Betätigen des Drehkreuzes und
der Netzwerkkamera und zum Betreiben der LEDs sind Relais erforderlich, diese
mussten zusätzlich gebaut werden. Die 12V-LEDs werden durch die vom
Spannungsteiler geteilte 24V-Versorgung des Drehkreuzes betrieben.
82
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
4.1 Gesamtschaltung
Abbildung 37 Gesamtschaltung
Keskin, Schobesberger, Schuster
83
ESD-Eingangskontrollsystem
Oben sieht man den Schaltplan des Gesamtaufbaus, für alle Geräte, die per
digitalem Signal mit dem I/O Controller kommunizieren. Der I/O Controller befindet
sich im Zentrum der Geräte, der Controller bildet das Bindeglied zum Netzwerk. Der
I/O Controller erhält durch die Inputs die benötigten Informationen und gibt die
Befehle durch die Outputs an die einzelnen Geräte weiter. An den Inputs sind das
PGT und die zwei Lichtschranken angeschlossen. An den Outputs befinden sich die
Relais des Drehkreuzes, der LEDs und der Netzwerkkamera. Das Erdungsprüfgerät
(PGT100) ist an den Inputs I.7 und I.6 angeschlossen. Es schließt den Kontakt
zwischen dem PWR-Anschluss (Power) mit dem I.7 bei einer positiven oder mit dem
I.6 bei einer negativen ESD-Prüfung. Die Lichtschranken funktionieren genauso und
schließen den Kontakt bei einem Durchtritt. Die Lichtschranken werden mit der 24VVersorgung des Drehkreuzes betrieben. Alle Relais in der Schaltung arbeiten mit
einer Spannung von 24V, die direkt von der Platine des Drehkreuzes kommen. Die
Relais werden mit dem I/O Controller betätigt. Auf der Platine des Drehkreuzes ist
der IN2-A und der IN1-B mit dem GND (ground) und der IN1-A durch einen Öffner
mit den 24V verbunden. Dies dient nur zur Festlegung der Drehrichtung des
Drehkreuzes. Das Relais-DKZ schließt den Kontakt zwischen den 24V und den IN2B, um das Drehkreuz für einen Durchgang freizugeben. Der Spannungsteiler teilt die
24V-Betriebsspannung des Drehkreuzes und stellt damit die Hauptversorgung der
12V-LEDs her. Die LEDs leuchten nur dann, wenn das Relais den Stromkreis
schließt. Die beiden LEDs funktionieren nach demselben Prinzip. Das Relais der
Netzwerkkamera schließt zum Auslösen nur einen Kontakt (ähnlich wie beim
Drehkreuz). Das Relais des Drehkreuzes ist im Gegensatz zu den restlichen Relais
anders aufgebaut.
Die Input-Belegung des I/O Controllers:
84
Input
Gerät
Gerät/Beschreibung
7 (I.7)
PGT
ESD-Prüfung positiv
6 (I.6)
PGT
ESD-Prüfung negativ
5 (I.5)
Lichtschranke
Lichtschranke 2 aktiv
4 (I.4)
Lichtschranke
Lichtschranke 1 aktiv
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Die Output-Belegung des I/O Controllers:
Output
Gerät
Gerät/Beschreibung
0 (O.0)
Relais-DKZ
Drehkreuz-Freigabe
1 (O.1)
Relais-ALG
NetzwerkkameraAuslöser
2 (O.2)
Relais-ALG
Rote LED
3 (O.3)
Relais-ALG
Grüne LED
4.2 Schaltung Relais-DKZ
Abbildung 38 Schaltung DKZ
Die Relais sind nur vorhanden, da der I/O Controller die benötigte Spannung zum
Steuern der Geräte nicht aufbringen kann. An den Outputs haben wir nur eine
Ausgangsspannung von 0,6 Volt gemessen. Dies war zu wenig, um die Geräte zu
betreiben. Deshalb haben wir uns an unsere Betreuer gewendet und gemeinsam
eine Schaltung entworfen. Mithilfe eines Optokopplers (4) reichen die 0,6V aus, um
ein
Relais
zu
betätigen.
Das
Relais
(8)
nimmt
die
Spannung
vom
Festspannungsregler (5). Das Relais schließt hier einen 24V Kontakt.
Keskin, Schobesberger, Schuster
85
ESD-Eingangskontrollsystem
4.3 Schaltung Relais-Allgemein
Abbildung 39 Schaltung allgemein
Der Unterschied zum Relais-DKZ ist, dass ein 24V Relais (9) statt einem 5V Relais
(8) verwendet wird und hier ein potentialfreier Kontakt geschlossen wird.
4.4 Stückliste für alle 4 Relais
86
Position
Name
Bezeichnung
Anzahl
1
Widerstand
820
4
2
Widerstand
47
4
3
Widerstand
510
4
4
Optokoppler
SFH6156
4
5
Festspannungsregler
7805
1
6
Transistor
BC546
4
7
Diode
BAS32
4
8
Relais
5V
1
9
Relais
24V
3
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
4.5 Spannungsteiler (DC/DC-Wandler)
Abbildung 40 Spannungsteiler
Der Spannungsteiler dient nur zur Umwandlung der Spannung für die LEDs und
bezieht eine Spannung von 24 Volt vom Drehkreuz.
Keskin, Schobesberger, Schuster
87
ESD-Eingangskontrollsystem
4.6 Bilder zum Aufbau
Abbildung 41 Aufbau der Geräte
Abbildung 42 Drehkreuz
Abbildung 43 PGT und WRM2000
Abbildung 44 Platine vom Drehkreuz
88
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Abbildung 45 Eingangsbereich
Abbildung 46 Netzwerkkamera
Abbildung 47 Drehkreuzbereich
Abbildung 48 Testdurchläufe
Keskin, Schobesberger, Schuster
89
ESD-Eingangskontrollsystem
5 Installationsanleitung
5.1 Ersten Eingang anlegen
Sollten bereits Eingänge angelegt sein, können Sie diesen Schritt überspringen.
Installieren Sie, bevor Sie weiter gehen, die hier aufgelisteten Programme:
-
ESD-Eingangskontrollsystem
Sollte kein MS-Access installiert sein, oder es sich um eine alte Version
handeln, installieren Sie bitte den beiliegenden MS-Office-Treiber
Salto RW Pro-Access
5.2 Tür anlegen im RW Pro-Access von Salto
1.
2.
3.
4.
Öffnen Sie das RW Pro-Access von Salto.
Klicken Sie auf den Menüpunkt „Türen“.
In dem geöffneten Fester klicken sie auf „Neu“.
Geben Sie hier den Türnamen ein, und setzen sie den Öffnungsmodus auf
„Drückergesteuert (DÖ)“.
5. Sollte bei „Is online“ kein Häkchen sein, bitte jetzt anhaken.
6. Setzen Sie die „Freigabezeit“ und die „verlängerte Freigabezeit“ auf 1 Sek.
7. Anschließend speichern Sie.
8. Jetzt klicken Sie auf „Verbindung konfigurieren“.
9. Geben sie hier eine IP-Adresse ein.
- Die IP-Adresse muss vom Netzwerkadministrator vergeben werden!
10. Drücken Sie jetzt wieder „Speichern“.
11. Drücken Sie in der Steuereinheit auf den „CLR“ Knopf, bis die Led daneben
blinkt.
12. Drücken Sie jetzt „Adressieren“.
13. Drücken Sie auf „Scan Ein“ und anschließend „Schließen“.
14. Sie befinden sich jetzt wieder im „Tür“ Menü.
15. Klicken Sie auf „Tür updaten“ und anschließend auf „Schließen“.
Hinweis:
-
RW Pro-Access muss immer im Hintergrund laufen.
Es kann teilweise länger dauern, bis Einstellungen übernommen
werden.
16. Jetzt, wie vom RW Pro-Access gewohnt, die Benutzer oder Benutzergruppen
zuweisen.
90
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
5.3 I/O Controller konfigurieren
1. Verbinden Sie den I/O Controller per seriellem Kabel mit dem PC
2. Der Dipschalter 1 muss auf „ON“ und der Dipschalter 2 muss auf „OFF“
gestellt sein
3. Gehen Sie auf „Start“ „Programme“ „Zubehör“ „HyperTerminal“ und wählen
Sie dieses aus.
4. Beliebigen Namen eingeben und „Weiter“ drücken.
5. Bei „Connect using“ den richtigen COM-Port Port auswählen.
6. Jetzt bei den Eigenschaften Folgendes ändern:
- Bits/s auf 9600
- Datenbits auf 8
- Parität auf keine
- Stoppbits auf 1
- Flusssteuerung auf kein
7. Klicken Sie auf „Übernehmen“ und dann auf „OK“.
8. Klicken Sie jetzt auf „File“ „Properties“ „Settings“ „ASCII Setup“ und wählen
Sie hier folgende Einstellungen:
Abbildung 49 Screenshot ASCII Setup des HyperTerminal
9. Jetzt zweimal „OK“ klicken, um zurück zum HyperTerminal zu kommen.
10. I/O Controller zurücksetzen (die Verbindung zum Stromnetz trennen).
11. Drücken Sie jetzt „Enter“, um Informationen vom I/O Controller zu
bekommen.
12. Ändern Sie IP Adresse, Port, Mask, Gateway auf die gewünschten Werte.
Geben Sie dazu den Buchstaben, der vor der jeweiligen Einstellung steht,
an und gleich danach den neuen Wert. Für eine neue IP-Adresse z.B.:
I192.168.1.51
- Die Netzwerkeinstellungen müssen vom Netzwerkadministrator
getätigt werden!
Keskin, Schobesberger, Schuster
91
ESD-Eingangskontrollsystem
Abbildung 50 Screenshot I/O Controller-Einstellungen mit dem HyperTeminal
92
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
13. Ändern Sie jetzt „Send to IP“ und „Server Port“ auf die IP-Adresse und die
IP des Servers auf dem „ESD-Eingangskontrollsystem“ und „RW ProAccess“.
14. Speichern Sie jetzt die Einstellungen, dazu geben Sie „D2“ ein und
drücken Sie „Enter“.
15. I/O Controller zurücksetzen (die Verbindung zum Stromnetz trennen),
beide Dipschalter auf „Off“ setzen und Verbindung zum Stromnetz wieder
herstellen.
5.4 Einstellungen im Programm
1. Öffnen Sie das Programm „ESD-Eingangskontrollsystem“.
2. Damit das Programm arbeiten kann, müssen Sie den Pfad zur Datenbank
angeben. Dazu klicken Sie auf „Einstellungen“ und dann auf „Suchen“.
Jetzt einfach die richtige .mdb-Datei auswählen.
Abbildung 51 Screenshot Hauptprogramm Einstellungen Eigenschaften
3. Weiters kann man in diesem Fenster die Zeitdauer für die ESD-Prüfung
festlegen, diese Dauer beschreibt die Zeitspanne zwischen Registrierung
und ESD-Prüfung und sollte auf 5 Sekunden gesetzt werden.
4. Bei „Übergangszeit DKZ-Lichtschranken“ können Sie die Zeit, die
zwischen Schalten des Drehkreuzes und Aktivieren der Lichtschranken
verstreichen darf.
5. Wenn Sie „nur ESD-Kontrolle“ anhaken, wird die Personenidentifizierung
abgeschaltet.
6. Im Programm „ESD-Eingangskontrollsystem“ gehen Sie jetzt zu
„Eingänge/Eingang“ hinzufügen und suchen sich den gewünschten
Eingang aus. Wenn ein Eingang ausgewählt wurde, muss rechts noch die
IP-Adresse und der Port angegeben werden. Die Portnummer ist vom
Netzwerkadministrator vorgegeben.
Keskin, Schobesberger, Schuster
93
ESD-Eingangskontrollsystem
6 Validierung
6.1 Idealablauf
t….Istzeit
x…Vorgabe
Menschenbewegung:
WRM 2000
PGT100
DKZ 370
EPA
Datenbewegung:
ID, Zeit
WRM 2000
Datenbank
Daten zur ID
t <x
PGT100
Programm
JA
DKZ 370
JA
Abbildung 52 Validierung/Idealablauf
Ein Mitarbeiter meldet sich ordnungsgemäß an und darf das Drehkreuz passieren.
6.2 Ungültige ESD-Prüfung
Menschenbewegung:
WRM 2000
PGT100
Neu anmelden
Datenbewegung:
ID
WRM 2000
Datenbank
Daten zur ID, Zeit
t <x
PGT100
NEIN
Programm
Eintrag
Abbildung 53 Validierung/Ungültige ESD-Prüfung
Der Mitarbeiter meldet sich an, doch die ESD Prüfung war nicht positiv.
94
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
6.3 Zeitüberschreitung
Menschenbewegung:
WRM 2000
PGT100
Neu anmelden
Datenbewegung:
ID/Zeit
WRM 2000
Datenbank
Daten zur ID, Zeit
t >x
PGT100
Rechner
JA/NEIN
Abbildung 54 Validierung/Zeitüberschreitung
Ein Mitarbeiter meldet sich an, doch er überschreitet die Vorgabezeit.
6.4 Alarmauslösung
Menschenbewegung:
Außenbereich
EPA
Bild
Datenbewegung:
IDEC
Alarm
Rechner
IPcam
Auslösen
Abbildung 55 Validierung/Alarmauslösung
Ein Mitarbeiter versucht, den Produktionsbereich ohne Anmeldung zu passieren.
Keskin, Schobesberger, Schuster
95
ESD-Eingangskontrollsystem
7 Persönliche Erfahrungen und
Wertschöpfung
Das Projekt zeigte uns sehr gut, dass es nicht so einfach ist, ein Projekt zu leiten, zu
planen und durchzuführen. Besonders die Verteilung der menschlichen Ressourcen,
also der Arbeitszeit, war nicht immer einfach. So
war es vor allem in der
Praktikumszeit nicht immer leicht, eine ideale Arbeitsteilung durchzuführen. Es hatten
zwar alle immer etwas zu tun, jedoch hätte man die Arbeit mit Sicherheit besser
verteilen und somit auch die Zeit intensiver nutzen können.
Grundsätzlich muss man sagen, dass uns das Projekt mit Sicherheit auch einiges an
Erfahrung zur Problemlösung gebracht hat. So mussten wir zum Beispiel, nachdem
der I/O Controller kaputt wurde, sofort für Ersatz sorgen. Im Laufe der Arbeit gab es
außerdem sonst noch einige Entscheidungen, die uns von der Firma übertragen
wurden. Hier muss man sagen, dass wir in vielen Dingen, wie zum Beispiel bei der
Anschaffung von neuen Geräten oder der Lösung von Problemen, selbst agieren
durften/mussten und wir somit unser Projekt selbstständig ausführten.
Vor allem die Beschaffung von Informationen beanspruchte viel Zeit. Wir mussten
einige Geräte anschaffen, die idealerweise leicht in das System zu integrieren und
dadurch, mit unseren speziellen Anforderungen, oft schwer am Markt zu finden
waren. Es war auch nicht immer einfach, den zuständigen Personen unsere
Vorhaben und Ideen nahezubringen. So haben wir sicher Erfahrung gewonnen,
anderen oft technisch nicht versierten Menschen technische Sachverhalte näher zu
bringen.
Wir bedanken uns für die gute Zusammenarbeit und die Möglichkeit, einen Teil der
Arbeit während eines Praktikums zu erarbeiten.
Das Projekt war für uns bis jetzt ein großer Erfolg und wir denken, dass wir es wieder
machen
96
würden,
trotz
des
überdurchschnittlich
großen
Arbeitsaufwandes.
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
8 Besprechungsprotokolle
8.1 Erste Besprechung
Protokoll
1.Treffen bei Allied Panels, am Mittwoch 10.01.2008 von 8:00 bis 8:30
Teilnehmer: Schuster, Schobesberger, Keskin
Prof. Opelt
Besprechung
Bei dieser Besprechung wurde uns das ESD-Problem der Firma näher gebracht. Es
wurde uns genau erklärt, was ESD bedeutet und wie man es verhindern kann. Im
Anschluss wurde nur geklärt, ob wir dieses Projekt realisieren möchten. Dieses
Treffen war der Projektbeginn.
Keskin, Schobesberger, Schuster
97
ESD-Eingangskontrollsystem
8.2 Zweite Besprechung
Protokoll
2.Treffen bei Allied Panels, am Mittwoch 21.05.2008 von 8:00 bis 8:45
Teilnehmer: Schuster, Schobesberger
Prof. Opelt
Besprechung des Fragenkatalogs zum Pflichtenheft
Frage 1: Die Zeitdauer sollte im Administrationspanel einstellbar sein und
anfangs 30 Sekunden betragen.
Frage 2: Wie Frage 1, jedoch mit 10 Sekunden.
Frage 3: Wann das Testsystem zur Verfügung steht, ist noch nicht ganz
sicher, die Firma wird die Geräte jedoch so bald als möglich bereitstellen.
Frage 4: Es ist noch nicht ganz sicher, ob das hauseigene Kamerasystem
verwendet werden soll. Bei diesem System währen noch zwei Anschlüsse
vorhanden.
Frage 5: Die Klapptür muss mindestens 90cm breit sein. Die Firma würde sich
über einen Vorschlag vom Projektteam freuen.
Frage 6: Welche Software auf dem Server läuft, war zum Zeitpunkt der
Besprechung nicht bekannt. Die Software inklusive Datenbank liegt am
hauseigenen Server.
Änderungen durch die Besprechung
98
•
Es sind nur noch zwei Eingänge zu realisieren.
•
Die Identifizierung der Mitarbeiter erfolgt über einen extra
Identifikationsschlüssel, auf dem die Rechte des Mitarbeiters gespeichert sind.
In einer Datenbank wird mitgeschrieben, wer sich wann und wo Zutritt
verschafft hat.
•
Weiters kamen wir zur Erkenntnis, dass wir außer der Montage mit dem
TRS15 und der SAP-Datenbank nichts zu tun haben werden.
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
9 Geräteverzeichnis
9.1 I/O Controller
Abbildung 56 I/O Controller 12
Der I/O Controller besitzt digitale Einund Ausgänge. Er dient als Schnittstelle
zwischen dem Rechner und den
Geräten. Mithilfe des I/O Controllers
werden die Informationen vom PGT und
von den Lichtschranken verarbeitet und
die entsprechenden Befehle an das
Drehkreuz und an die Alarmvorrichtung
weitergeleitet.
9.2 PGT100 ESD-Prüfgerät
Das ESD- Prüfgerät gibt nach einer
Prüfung über den Türöffner/ZählerAusgang digitale Signale für „OK“ und
„Failed“ aus.
Abbildung 57 ESD-Prüfgerät 13
9.3 SkiData Drehkreuz DKZ 350
Das Drehkreuz ist der Durchgang zum
ESD-geschützten
Produktionsbereich.
Dieses wird nach erfolgreicher ESDPrüfung und Anmeldung des Mitarbeiters
entriegelt. In der Gegenrichtung soll es
immer passierbar sein (Fluchtweg).
Abbildung 58 Drehkreuz
12
13
IO_Controller_PL_MAN_en.pdf
pgt100_user_manual.pdf
Keskin, Schobesberger, Schuster
99
ESD-Eingangskontrollsystem
9.4 IDEC Reflexlichtschranke
Die
Lichtschranken
dienen
zum
Aktivieren
des
Sicherheitssystems,
welches bei einem unerlaubten Übertritt
der Absperrung zum Einsatz kommt.
Abbildung 59 Lichtschranke 14
9.5 Identifikationshardware Salto
Abbildung 60 Lesegerät
15
Das
Salto
WRM2000
ist
die
Identifikationskontrolle und das Salto
CU50EN ist die Steuereinheit dafür. Die
Identifikationskontrolle
dient
zum
Erfassen der Daten der Person, die den
Durchgang
passieren
will.
Jeder
Mitarbeiter hat einen iButton, auf dem die
Zugangsberechtigungen
gespeichert
werden.
9.6 Netzwerkkamera Plustek IPcam P1000
Die Kamera ist eine zusätzliche
Sicherheitseinrichtung und dient zum
Überwachen der Eingänge, um bei
einem
unbefugten
Zutritt
Bilder
aufzuzeichnen.
Abbildung 61 Netzwerkkamera 16
14
http://www1.conrad.de
http://www.salto.us/index.php?option=com_content&task=view&id=1&Itemid=34
16
http://www.plustek.de/web/product/p1000.php
15
100
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
10 Softwareverzeichnis
10.1 Microsoft Visual Studio
Entwicklungssoftware für Programme,
Applikationen
und
andere
Programmierarbeiten
auf
Microsoft
Windows Basis. Im Projekt wird die
Programmiersprache
C#
(Csharp)
verwendet.
Abbildung 62 Microsoft Visial Studio 17
10.2 Microsoft Office Access 2007
Software von Microsoft zum Erstellen
und Verwalten von Datenbanken auf
Microsoft Windows Basis.
Abbildung 63 Microsoft Office Access 18
10.3 Microsoft Office Word 2007
Software von Microsoft zum Erstellen
und Bearbeiten von Dokumenten auf
Microsoft
Windows
Basis.
Diese
Diplomarbeit wurde mit Microsoft Word
2007 erstellt.
Abbildung 64 Microsoft Office Word 19
17
(http://www.publicvoid.dk/content/binary/WindowsLiveWriter/SortingtheVisualStudioAddNewItemDial
og_E517/VisualStudioLogo_3.gif)
18
http://www.paltechsolutions.com/images/Access_Logo.png
19
http://www.vista4beginners.com/files/logo/word2007_logo.jpg
Keskin, Schobesberger, Schuster
101
ESD-Eingangskontrollsystem
10.4 Salto RW Pro-Access Connected
Software der Firma Salto für die
Verwaltung der Datenbank, in der unter
anderem
die
Türen,
Mitarbeiter,
Zugriffsrechte und andere Faktoren
verwaltet werden.
Abbildung 65 RW Pro-Access 20
10.5 Hercules by HW-Group
Diese Software wird zum Konfigurieren
von Ethernet/RS232 Convertern und von
ähnlichen Geräten der HW-Group
verwendet.
Abbildung 66 Hercules by HW-Group 21
10.6 SFC-Editor
Mit
diesem
Editor
wurden
Programmablaufpläne erstellt.
die
Abbildung 67 SFC Editor 22
20
http://www.iscwest.com/images/ 180/2008_Product_Training_Logos/ Salto_LOGO.GIF
http://www.hw-group.com
22
http://watts.cs.sonoma.edu/SFC/index.html
21
102
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
11 Anhänge
11.1 Dokumentations-CD
•
Beschreibungen
o TRS_15.pdf
o pgt100_user_manual.pdf
o IO_Controller_PL_MAN_en.pdf
o dkz350-1-0-de-man_1.pdf
o Esd_Buch.pdf
o ESDSchulung.pdf
•
Quellcode
•
Visualisierung.swf
•
Dokumentation.pdf
•
Bilder
•
Software
o Plustek IPcam
o Hercules.exe
o ESD-Zutrittskontrollsystem.exe
o MS-Access-Treiber
Keskin, Schobesberger, Schuster
103
ESD-Eingangskontrollsystem
11.2 Klassendiagramm
Abbildung 68 Visual Studio - Klassendiagramm
104
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Dieses Diagramm zeigt eine Klassenübersicht, der selbst erstellten Klassen, im
Programm. Einige Klassen sind abgeleitet, wie zum Beispiel die Klasse
ZeigeEingaenge, diese ist von der Klasse Panel abgeleitet und dient zum
Darstellen der Eingangsinformation.
Keskin, Schobesberger, Schuster
105
ESD-Eingangskontrollsystem
12 Abbildungsverzeichnis
Abbildung 1 ESD-Symbol .......................................................................................... 8
Abbildung 2 EPA-Symbol .......................................................................................... 8
Abbildung 3 ESD-Drehstuhl ..................................................................................... 10
Abbildung 4 ESD-Arbeitsplatz ................................................................................. 11
Abbildung 5 Geplanter Ablauf ................................................................................... 17
Abbildung 6 Screenshot Gantdiagramm des Istablaufs (MSProject) ........................ 18
Abbildung 7 Zeitaufstellung der Arbeitsstunden ....................................................... 19
Abbildung 8 TRS15-Zeiterfassungsterminal ............................................................ 21
Abbildung 9 PGT-Anschlussplan .............................................................................. 22
Abbildung 10 Versuchsaufbau .................................................................................. 23
Abbildung 11 Leseeinheit WRM2000 ....................................................................... 28
Abbildung 12 Steuereinheit CU50EN ...................................................................... 28
Abbildung 13 Screenshot RW Pro-Access Salto-Verwaltungsprogramm ................. 28
Abbildung 14 Screenshot Hercules Setup ulility ....................................................... 38
Abbildung 15 Screenshot TCP-Client Testprogramm ............................................... 42
Abbildung 16 Screenshot Protokoll der fehlerhaften Eintrittsversuche ..................... 46
Abbildung 17 Prüfzeitzerlegung ................................................................................ 49
Abbildung 18 SFC - Programmablaufplan der Prüfungsmethode 1 .......................... 52
Abbildung 19 SFC - Programmablaufplan der Prüfmethode 2.................................. 53
Abbildung 20 Screenshot Acess tb_Eingaenge ........................................................ 63
Abbildung 21 Screenshot Access tb_ESDfailed ....................................................... 64
Abbildung 22 Hauptprogramm - Eigenschaften ........................................................ 67
Abbildung 23 Screenshot Hauptprogramm Übersichtsseite ..................................... 71
Abbildung 24 Screenshot Hauptprogramm Eigenschaften ....................................... 72
Abbildung 25 Einstellungen der Settings .................................................................. 72
Abbildung 26 Screenshot OpenFileDialog zur Datenbank Auswahl ........................ 74
Abbildung 27 Screenshot MenuStrip des Hauptprogramm ....................................... 75
Abbildung 28 Screenshot Hauptprogramm Eingang hinzufügen .............................. 76
Abbildung 29 Screenshot Hauptprogramm Fehlerprotokoll ...................................... 77
Abbildung 30 Screenshot Hauptprogramm Druckansicht des Fehlerprotokolls ........ 77
106
Keskin, Schobesberger, Schuster
ESD-Eingangskontrollsystem
Abbildung 31 Screenshot Catia – Lichtschrankenhalterung ..................................... 78
Abbildung 32 Screenshot Catia - Gerätebox ............................................................ 79
Abbildung 33 Screenshot Catia - Gerätehalterung ................................................... 80
Abbildung 34 Screenshot Catia - Gerätehalterung ................................................... 80
Abbildung 35 Schwenktür vom Typ Ikarus................................................................ 81
Abbildung 36 Gesamtaufbau .................................................................................... 82
Abbildung 37 Gesamtschaltung ................................................................................ 83
Abbildung 38 Schaltung DKZ.................................................................................... 85
Abbildung 39 Schaltung allgemein ........................................................................... 86
Abbildung 40 Spannungsteiler .................................................................................. 87
Abbildung 41 Aufbau der Geräte .............................................................................. 88
Abbildung 42 Drehkreuz ........................................................................................... 88
Abbildung 43 PGT und WRM2000 ........................................................................... 88
Abbildung 44 Platine vom Drehkreuz ....................................................................... 88
Abbildung 45 Eingangsbereich ................................................................................. 89
Abbildung 46 Netzwerkkamera ................................................................................. 89
Abbildung 47 Drehkreuzbereich ............................................................................... 89
Abbildung 48 Testdurchläufe .................................................................................... 89
Abbildung 49 Screenshot ASCII Setup des HyperTerminal ...................................... 91
Abbildung 50 Screenshot I/O Controller-Einstellungen mit dem HyperTeminal ........ 92
Abbildung 51 Screenshot Hauptprogramm Einstellungen Eigenschaften ................. 93
Abbildung 52 Validierung/Idealablauf ....................................................................... 94
Abbildung 53 Validierung/Ungültige ESD-Prüfung.................................................... 94
Abbildung 54 Validierung/Zeitüberschreitung ........................................................... 95
Abbildung 55 Validierung/Alarmauslösung ............................................................... 95
Abbildung 56 I/O Controller ...................................................................................... 99
Abbildung 57 ESD-Prüfgerät .................................................................................... 99
Abbildung 59 Drehkreuz ........................................................................................... 99
Abbildung 60 Lichtschranke.................................................................................... 100
Abbildung 61 Lesegerät ......................................................................................... 100
Abbildung 62 Netzwerkkamera ............................................................................... 100
Abbildung 63 Microsoft Visial Studio ...................................................................... 101
Abbildung 64 Microsoft Office Access .................................................................... 101
Keskin, Schobesberger, Schuster
107
ESD-Eingangskontrollsystem
Abbildung 65 Microsoft Office Word ....................................................................... 101
Abbildung 66 RW Pro-Access ................................................................................ 102
Abbildung 67 Hercules by HW-Group ..................................................................... 102
Abbildung 68 SFC Editor ........................................................................................ 102
Abbildung 69 Visual Studio - Klassendiagramm ..................................................... 104
108
Keskin, Schobesberger, Schuster