Erstellung des Datenübertragungsmoduls - RWTH

Werbung
Erstellung des
Datenübertragungsmoduls
„send2plotter“ zum Projekt
CW-Plot-Service
Seminararbeit
Katinka Roosen, Matr.-Nr. 842942
Fachbereich 9, Scientific Programming
Fachhochschule Aachen
1.Betreuer: Prof.Dr. Jörg Höttges
2. Betreuer: Günter Ermer
Aachen, den 8.11.2012
2
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Inhaltsverzeichnis
1. Überblick.......................................................................................................................................3
1.1. Problemstellung und Situation……………………............……………………………....3
1.2. Ziel………………………………………………............………………………………..3
2. Grundlagen/Werkzeuge/Konzepte……………………………............…………………………4
2.1. Programmiersprachen/Bibliotheken/DBMS……………………………...........…………...4
2.1.1. Python………………………………………………………............……………….4
2.1.2. Datenbanken……………………………………………………............…………...4
2.1.2.1. Allgemein…………………………………………………...........…………….4
2.1.2.2. PostgreSQL/psycopg2.py………...…………………...…............…………….5
2.1.3. ftplib.py………………………………………………………...........……………...6
2.2. Prozesse/Protokolle…………………...……………………………............……………….7
2.2.1. Daemon……………………….…...……………………………...........……….…..7
2.2.2. mk.daemon………………...……....……………………………............………….7
2.2.3. File Transfer Protocol…………...………………………………............………….9
2.3. Modularisierung………………………………………………………............………....12
2.3.1. Allgemein………………………………………………………..............………..12
2.3.2. Modul Webinterface…………………………………………...………………….12
2.3.3. Modul pdf2tiff………………………………………….…...……….......………..13
2.3.4. Modul send2plotter……………………………………………………...………...13
3. Modul send2plotter……………………………………………………………………….........14
3.1. FTP-Verbindung/Schnittstelle des Plotters...………………………………………...........14
3.2. Schnittstelle Datenbank……………...…………………............……………………........14
3.3. Algorithmen…………….……………..……………………………………………..........17
3.3.1. Vergabe von Jobtickets………...………...……......……………………................17
3.3.2. Ausgabereihenfolge……...…...…......……...…........………………………..........18
3.3.3. Warteschlangen……....……....……....…………….…...…………………........…19
3.4. Übersicht Programmablauf……...…...…….…………………………………………...…21
4. Fazit…………………………………………………………………………………............…22
5. Ausblick…………………………………………………………………………………..........22
6. Eidesstattliche Erklärung……………………………………………….........………………...24
7. Quellenverzeichnis…………………………………………………………………….............25
8. Abbildungs- und Tabellenverzeichnis…………………………………....……………...........27
3
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
1.
Überblick
1.1.
Problemstellung und Situation
Der IT-Service der Fachbereiche Bauingenieurwesen und Architektur der FH Aachen bietet den
Studierenden dieser Studiengänge die Möglichkeit, Pläne und Zeichnungen im Gebäude der
Bayernallee mittels des Plotters Océ ColorWave 600 zu plotten. Dies lief bisher so ab, dass die
Studierenden in vorgegebenen Zeitfenstern mit Plottaufträgen beim IT-Service erscheinen und mit
einem Mitarbeiter des IT-Services die im Laufwerk „exchange“ abgelegten Pläne kontrollieren.
Anschließend schickt der zuständige Mitarbeiter die plt- oder pdf-Dateien mittels der OcéSoftware an den Plotter, welcher die Pläne dann ausgibt.
Da das Plotten für Studierende nur zu bestimmten Zeiten möglich war, gab es an Tagen, an denen
mehrere Abgabetermine angesetzt waren, große Anstürme von Studierenden, sodass oft
Unzufriedenheit bei den Studierenden über Wartezeiten und somit verzögerte Abgaben herrschte.
Zudem kam es im Plotter zu enormen Rechenzeiten, wenn dieser große pdf-Dateien verarbeiten
musste. Die Studierenden reichen die Zeichnungen als plt- oder pdf-Dateien ein, welche jedoch
dann von der Software des Plotter intern aufgerastert werden. Muss eine A0-Zeichnung mit vielen
Elementen zudem nun auch gedreht werden, können die Umwandlung und das Drehen bis ca. 10
Minuten dauern. Bei dem tiff-Format handelt es sich ebenfalls um ein Rasterformat.
1.2.
Ziel
Um die Zeiten für die Studierenden zu entzerren, den Aufwand für die Mitarbeiter vom IT-Service zu
verringern und um der Plottersoftware Rechenarbeit abzunehmen, ist es das Ziel ein Tool zu
entwickeln, was alle diese Probleme vermeidet. Das heißt, es soll ein Werkzeug erarbeitet werden,
sodass die Studierenden möglichst eigenständig ihre Zeichnungen an den Plotter senden können. Bevor
die Zeichnungen aber letztendlich an den Plotter geschickt werden, sollten diese von einer
Komponente der Software auf verschiedene Fehler überprüft und in tiff-Format umgewandelt werden.
Das ausgemachte Ziel dieser Projektarbeit ist also eine aus drei Modulen bestehende Software. Das
erste Modul wird durch ein Webinterface für die Studierenden realisiert. Dort können sie Dateien
hochladen und deren Status einsehen.
Bei dem zweiten Modul handelt es sich um eine tiff-Engine. Das heißt, dort werden die hochgeladenen
pdf-Dateien auf verschiedene Eigenschaften geprüft, falls nötig gedreht und schlussendlich in eine tiffDatei umgewandelt.
Bei dem letzten Modul, dem Ausgabe-Modul, werden die Ausgabereihenfolge bestimmt und die
tiff-Dateien über eine FTP-Verbindung zum Plotter gesendet.
Die Schnittstelle, mit der alle drei Module arbeiten und aus welcher sie ihre Daten beziehen, ist
eine Datenbank.
4
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
2. Grundlagen/Werkzeuge/Konzepte
2.1.
Programmiersprachen/Bibliotheken/DBMS
2.1.1. Python
Die Anfang der 1990er von Guido van Rossum entwickelte Programmiersprache Python wird zu
den höheren Programmiersprachen gezählt, kann jedoch auch als Skriptsprache benutzt werden.1
Python berücksichtigt jeweils objektorientierte, aspektorientierte und funktionale Programmierung.
Bei der Entwicklung wurde von van Rossum sehr viel Wert auf die Lesbarkeit des Programmcodes
gelegt, was dadurch erkennbar wird, dass der Code in Blöcken organisiert ist, statt einer
Strukturierung durch Klammern oder Schlüsselwörter.1 Python ist sehr dynamisch; es besitzt viele
Interpreter für andere Programmiersprachen, sodass Module aus anderen Sprachen problemlos
eingebettet werden können.2 Da Python auch als Skriptsprache eingesetzt werden kann, ist zu
erkennen, wie vielseitig einsetzbar diese Sprache ist. In Python wird der geschriebene Code direkt
interpretiert, und nicht zuvor kompiliert, was viel Zeit sparen kann und es möglich macht, Code
zur Laufzeit zu verändern.3
Datentypen werden in Python ebenso dynamisch verwaltet; das heißt, ein Objekt definiert sich
durch seine Attribute und Funktionen, und nicht durch die Zuordnung einer bestimmten Klasse.
Dies nennt man „Ducktyping“.
Python liefert eine sehr große Standardbibliothek, wie z.B. die von mir im Zuge dieses Projektes
genutzte Bibliothek „ftplib.py“, sodass man die Möglichkeit hat, mit vielen Anwendungen zu
arbeiten.1
„Das offene, gemeinschaftsbasierte Entwicklungsmodell“1 wird durch die Python Software
Foundation unterstützt. So befindet sich die Programmiersprache Python momentan in der Version
3.3.0(29. September 2012).
Die in diesem Projekt genutzte Version ist 2.6.6.
2.1.2. Datenbanken
2.1.2.1.
Allgemein
"Eine Datenbank (auch Datenbanksystem) ist ein System zur Beschreibung, Speicherung und
Wiedergewinnung umfangreicher Datenmengen, die von mehreren Anwendungsprogrammen oder
Anwendern benutzt werden. Es besteht aus einer Datenbasis, in der die Daten abgelegt werden und
1
de.wikipedia.org/wiki/Python_(Programmiersprache)
Folien zur Vorlesung „Skriptprogrammierung“ WS 2011/2012: http://www.rz.rwthaachen.de/aw/cms/rz/Zielgruppen/rz_auszubildende/veranstaltungen/informatik/Wahlpflichtkurse/~qwj/skriptprogram
mierung_php_mysql_/?lang=de
3
„Einstieg in Python“ von Thomas Theis, 3.aktualisierte Auflage, erschienen 2011 im Verlag „Galileo Computing“
2
5
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
dem Verwaltungsprogramm (Datenbasismanagement), das die Daten entsprechend der
vorgegebenen Beschreibung abspeichern, auffinden oder weitere Operationen durchführen kann."4
Wichtig dabei ist, dass eine Datenbank effizient, konsistent und dauerhaft ist und dass es möglich
ist, dass mehrere Benutzer und Anwendungen gleichzeitig auf diese zugreifen können.
Man versucht mit diesem System unnötige Datenredundanz zu verhindern und Daten für
verschiedenste Nutzer brauchbar zu machen.
Das Datenbankmanagementsystem(DBMS) besteht, wie zuvor angedeutet, aus zwei Teilen; dem
Datenbankmanagementsystem und den eigentlichen Daten. Das DBMS organisiert den Zugriff auf
Daten und dessen Struktur. Um die Informationen für Anwendungen und Nutzer zugänglich zu
machen, ist eine Datenbanksprache festgelegt. Die standardisierte am weitesten verbreitete
Sprache ist SQL5, die Structured Query Language.
Mithilfe dieser Sprache lässt sich eine Datenbank sowohl einrichten, als auch manipulieren.
Kennzeichnend für diese Sprache ist, dass sie der Datenbank nur angibt, welche Ergebnisse man
sucht und nicht, wie die Datenbank diese finden soll.
Das hier verwendete Schema ist das einer relationalen Datenbank, was bedeutet, dass die
Grundlage des Konzepts die mathematische Relation ist. So kann eine Tabelle in einer Datenbank
mathematisch beschrieben werden und mithilfe der relationalen Algebra manipuliert oder gelesen
werden.
Neben dem relationalen Konzept existieren noch die Konzepte einer hierarchischen,
netzwerkartigen, objektorientierten und dokumentenartigen Datenbank, jedoch ist die relationale
Datenbank bis heute trotz einiger Kritikpunkte die meist verwendete Version.
2.1.2.2.
PostgreSQL/psycopg2.py
PostgreSQL ist ein Datenbankmanagmentsystem, welches vor 1996 unter dem Namen
POSTGRES als universitäres Projekt an der University of California at Berkeley Computer
Science Department bekannt war.6 Dieses DBMS hält sich sehr an den SQL-Standard, jedoch gibt
es einige PostgreSQL-spezifische Funktionalitäten.
Die aktuelle Version ist 9.2.1 und von uns wird Version 8.4.9 genutzt.
Ein Datenbankmanagmentsystem ist ein System, welches innerhalb einer Datenbank Redundanz
und Inkonsistenz vermeidet, den Mehrbenutzerbetrieb unterstützt, Datenverlust vermeidet, und die
Integrität des Systems sichert.7 Also schlussendlich ein System, dass es möglich macht, mit
mehreren Benutzern die Datenbank zu manipulieren und zu lesen, ohne dass diese in ihrer Form
gegen jegliche Integritätsbedingungen verstößt. PostgreSQL zählt zu den objektrelationalen
DBMS, welches als Open-Source-Programm frei verfügbar ist.8 Dieses DBMS unterstützt die
SQL92 und SQL99 Standards, bietet jedoch eine Reihe zusätzlicher Erweiterungen an.
4
Zitiert nach http://www2.cs.uni-paderborn.de/cs/agengels/ag_dt/Courses/Lehrveranstaltungen/WS0001/TSEII/Begleitunterlagen/Kap1.2S-SW.pdf Seite 2
5
http://www.wirtschaftslexikon24.net/d/sql/sql.htm
6
http://www.postgresql.de/index.whtml#pg
7
„Datenbanksysteme“ von A.Kemper/A.Eickler, 6. aktualisierte und erweiterte Auflage, erschienen 2006 im Verlag
„Oldenburg“, S.17ff
8
Verfügbar unter http://www.postgresql.org
6
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Basierend auf einem Client-Server-Modell verwaltet ein Prozess des Servers, der sogenannte
„postmaster“, die Datenbankdateien und die Verbindungen zu verschiedenen Clients. Zusätzlich
verarbeitet dieser Prozess auch die Anfragen, die von den Client-Programmen gestellt werden. Bei
jeder neuen Verbindung von einem Client zum Server wird von dem Serverporzess ein neuer
Prozess gestartet.9
Client und Server kommunizieren mittels TCP/IP-Verbindungen übers Netz, da Client und Server
sich in den seltensten Fällen auf einem Host befinden.
PostgreSQL ist in den meisten Linuxdistributionen standardmäßig enthalten; Apple enthält diese
seit Version MAC OS X v10.7 als Standardbibliothek.10
Um PostgreSQL aus Python heraus benutzen zu können, verwende ich psycopg2.py; eine
Bibliothek, die die Python DB API 2.0 Spezifikation vollkommen implementiert und zusätzlich
Besonderheiten von PostgreSQL unterstützt.11
Mithilfe dieser Bibliothek kann man aus einem Python-Programm heraus, Datenbankabfragen
starten und die Ergebnisse im Programm verwenden.
2.1.3. ftplib.py
Die Klasse „ftplib.py“ ist eine Python-Bibliothek, um mittels Python eine FTP-Verbindung zu
einem anderen Host herstellen zu können. FTP(File Transfer Protocol) ist ein Protokoll zur
Datenübertragung und wird in Kapitel 2.2.3. genauer erläutert. Mittels dieser Python-Klasse ist es
möglich, ein FTP-Objekt zu erstellen, welches eine Verbindung zum Host mit der gegebenen IP
herstellt. So ist es möglich, zwischen verschiedenen Verzeichnissen auf dem Zielhost zu wechseln,
Listen über Verzeichnisinhalte zu erstellen und Dateien auszutauschen. Bei dem einfachen FTPProtokoll hält sich der Umfang der Befehle in Grenzen.
Codebeispiel:
Abbildung 1 „sample session using the ftplib module“ 12
9
http://www.postgresql.de/index.whtml#pg
http://de.wikipedia.org/wiki/PostgreSQL
11
http://www.initd.org/psycopg/
12
http://docs.python.org/library/ftplib.html
10
7
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Die Benutzung dieser Klasse ist sehr intuitiv, wenn man sich zuvor bereits ein wenig mit FTP
beschäftigt hat, da einerseits FTP ein sehr einfaches und wenig kompliziertes Protokoll ist und
zudem die Befehle in ftplib.py den „Original“-FTP-Befehlen sehr ähnlich sind. Somit ist es sehr
einfach, eine FTP-Verbindung innerhalb eines Python-Skriptes aufzubauen und diese für den
Datentransfer zu benutzen.
2.2.
Prozesse/Protokolle
2.2.1. Daemon
Daemon ist ein Unix-spezifischer Begriff, der einen Prozess beschreibt, der im Hintergrund eines
Systems läuft und bestimmte Dienste zur Verfügung stellt. In Windows-Betriebssystemen nennt
man solche Prozesse „services“ oder „Systemdienste“.
Ein Daemon zeichnet sich dadurch aus, dass er nicht in direkte Benutzerinteraktion tritt. Die
Kommunikation eines Daemon findet viel eher über bestimmte Signale, Pipes oder Sockets statt.
So wird ein Daemon auch sehr selten von einem Benutzer bewusst gestartet, sondern er wird durch
das Wechseln eines Runlevels in einen anderen oder beim Systemstart gestartet. Typische
Daemons sind Netzwerkdienste, Druck- und Datenbankserver, Hardwareüberwachungsdaemons.
Daemons erfüllen meist periodische Aufgaben, wie zum Beispiel in diesem Projekt.13
Ein Runlevel bezeichnet einen Betriebszustand eines Computers. Beim Systemstart startet das
System in einem bestimmten Runlevel, d.h. je nach Runlevel werden verschiedene Systemdienste
in einer festgelegten Reihenfolge gestartet. So wird der Computer stufenweise in Betrieb
genommen. Auf diese Weise kann auch gewährleistet werden, dass ein Dienst, der von anderen
abhängig ist, erst dann gestartet wird, wenn die Dienste gestartet wurden, von welchen er abhängig
ist.
Beim Herunterfahren des Computers werden die verschiedenen Dienste üblicherweise in genau
umgekehrter Reihenfolge beendet, wie sie gestartet wurden.14
Ein Daemon zeichnet sich des Weiteren dadurch aus, dass er ein direkter Kindprozess des initProzesses, also des Hauptprozesses, ist. Der init-Prozess ist der Hauptprozess in unixartigen
Systemen, welcher üblicherweise alle anderen Prozesse startet. Er besitzt meist die Process-ID 1.
Ihn zu stoppen, bedeutet das System herunter zu fahren. Über den init-Prozess werden die
verschiedenen Runlevel verwaltet.
2.2.2. mk.daemon
Mk.daemon ist ein in der Skriptsprache Perl geschriebenes Programm. Es wurde ca. 2005 von
Herrn Günter Ermer geschrieben, um aus einem einfachen Skript einen Daemon zu erstellen. Der
Programmablauf sieht so aus, dass zunächst eine log-Datei benannt wird, in welche die
Fehlermeldungen und Standardausgaben des Programms umgeleitet werden. Dies ist notwendig,
13
14
http://de.wikipedia.org/wiki/Daemon
http://de.wikipedia.org/wiki/Runlevel
8
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
um Fehlermeldungen und Ausgaben überhaupt betrachten zu können, da diese weder auf einer
Konsole angezeigt werden, noch sonst irgendwo auftauchen.
Anschließend werden bis zu 100 Parameter, die beim Programmaufruf aufgelistet werden,
eingelesen, wobei es sich bei dem ersten Parameter immer um das zu dämonisierende Programm
handelt. Der zweite bis n-te Parameter sind Parameter, die für das Programm, welches als Daemon
gestartet werden soll, als Übergabeparameter genutzt werden.
Im Anschluss wird das Programm mk.daemon gestartet und das zu dämonisierende Programm
gestartet. Forken bedeutet, dass eine identische Kopie eines Programms erzeugt wird. Dieser
Kindprozess übernimmt also die Daten, den Maschinencode und den Befehlszähler des
Vaterprozesses, ist aber ab diesem Zeitpunkt eigenständig und erhält eine eigene Process-ID
(PID).
Dieses Verhalten ist zum Beispiel sehr nützlich, wenn ein Serverprozess auf Anfragen wartet.
Erhält er eine Anfrage, teilt sich der Prozess. Durch das forken, besitzt der Kindprozess die
gleichen Informationen wie der Vaterprozess und kann nun die Anfrage abarbeiten, während der
Vaterprozess auf weitere Anfragen warten kann.15
Ist der fork()-Aufruf erfolgreich, wird dem Vaterprozess die PID des Kindprozesses
wiedergegeben und dem Kindprozess die PID 0. So sind die beiden Prozess auch zu unterscheiden.
Bei einem auftretenden Fehler wird dem Vaterprozess der undefinierte Wert zurückgegeben und
der Kindprozess existiert dementsprechend nicht.16
In dem vorliegenden Programm wird der fork(2)-Aufruf benutzt, was bedeutet, dass der
Kindprozess nicht Kindprozess des Vaterprozesses ist, sondern ein Kindprozess des init-Prozesses.
Im Programm wird über den Rückgabewert nun geprüft, ob es sich um den Prozess handelt, der
geforked wurde, der der Daemon ist oder ob der Fork-Versuch fehlgeschlagen ist. Wenn aus
irgendeinem Grund nicht geforked werden kann, wird 5 Sekunden später erneut ein Versuch
unternommen. Im Idealfall beendet sich der Vaterprozess und nur der Daemon läuft weiter.
Zusätzlich enthält das Programm noch zwei weitere Funktionen, um einen formatierten
Zeitstempel mit dem Fehler in lesbarer Form zu generieren.
15
http://openbook.galileocomputing.de/unix_guru/node389.html
„Programmieren mit Pearl“ von Larry Wall, Tom Christiansen und Randal L. Schwartz, 1. Auflage erschienen 1997
im O’Reilly Verlag
16
9
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
2.2.3. File Transfer Protocol
Das File Transfer Protocol ist ein recht altes und einfaches Protokoll der Anwendungsschicht nach
dem ISO/OSI-Referenzmodell.
Abbildung 2 „ISO/OSI-Referenzmodell“
17
Das ISO/OSI-Referenzmodell ist ein sehr bedeutendes Modell zur Entwicklung der Struktur des
Internets. Jedoch ist es nie zu einer sinnvollen Implementierung dieses Modells gekommen, da
durch die vielen Schichten zu viel Overhead für jede einzelne Schicht entstehen würde. Die Idee
hinter diesem Modell jedoch ist in den heutigen Strukturen des Internets deutlich zu erkennen.
Diese ist es, verschiedene Aufgaben in Schichten aufzuteilen, sodass sie von unterschiedlichen
Protokollen erledigt werden können. Nur die Schnittstellen sind wohldefiniert; die konkrete
Implementation einer Aufgabe jedoch kann auf unterschiedliche Wege gelöst werden. Die einzige
Bedingung ist, dass die Schnittstellen zu der Schicht darüber und derjenigen darunter passen
müssen. So erhält man ein flexibles Gesamtmodell.
17
http://www.windows-netzwerk-hilfe.de/netzwerk-grundlagen/osi-referenzmodell.html
10
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Um das Prinzip, welches hinter diesem Modell steckt, nochmals zu verdeutlichen, kann die
folgende Abbildung heran gezogen werden:
Abbildung 3 „Gedankenaustausch von Philosophen“
18
Die Abbildung stellt dar, wie zwei Philosophen ihre Gedanken zur Weltpolitik austauschen. Dabei
sprechen sie nicht die gleiche Sprache und befinden sich an unterschiedlichen Orten. Deshalb
müssen sie Dolmetscher benutzen und ihr Gespräch auf irgendeine Weise übertragen lassen. Diese
Dolmetscher können die jeweilige Sprache des Philosophen verstehen und zusätzlich die englische
Sprache, haben aber kein Verständnis von den Dingen, worüber die Philosophen reden.
Ähnlich verhält es sich mit den Technikern, die die Kommunikation übertragen sollen. Sie
verstehen vielleicht noch nicht einmal die Sprache, die sie übertragen, wissen aber trotzdem wie
sie einzelne Zeichen kodieren müssen.
Die Schnittstellen zwischen den Personen sind damit wohldefiniert und die Gedanken des einen
Philosophen kommen bei dem anderen an. Jeder dieser Personen in der Kommunikationskette
erfüllt eine bestimmte Aufgabe, ohne dass er Kenntnis vom Gesamtbild oder dem Inhalt der
Kommunikation hat.
Protokolle der Anwendungsschicht müssen immer die Eigenschaften erfüllen, Typen der
verschickten Nachrichten, Syntax der Nachrichtentypen und die Semantik der Nachrichtentypen zu
definieren. In dem heute gebräuchlichen TCP/IP-Referenzmodell, welches die sieben Schichten
des ISO/OSI-Referenzmodells zu vieren zusammenfasst, besitzen Anwendungsprotokolle zudem
18
Vorlesung Rechnernetze SS12 http://www.comsys.rwth-aachen.de/teaching/rechnernetze-fuer-matse/
11
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
noch Eigenschaften der Sitzungsschicht. Dies bedeutet, dass in diesen Protokollen auch festgelegt
wird, wann und wer senden darf, sodass eindeutige Dialoge festgelegt sind.
Das File Transfer Protocol wurde bereits 1985 im RFC95919 spezifiziert und ist zur Übertragung
von Daten und Auflistung von Verzeichnisinhalten in IP-Netzwerken gedacht. Es benutzt die TCPPorts 20 und 21, wobei es sich bei dem einem um den DATA Port und bei letzterem um den
Control Port handelt.20 Anhand der Benutzung zweier Ports kann man gut erkennen, dass
Kommunikation und wirkliche Datenübertragung getrennt werden und sozusagen im Grunde zwei
Verbindungen bestehen, wenn ein Client und ein Server eine FTP-Verbindung aufbauen.
Die Kommunikation läuft standardmäßig so ab, dass der Client eine Anfrage stellt und der Server
mit einem Statuscode21 und einem dazugehörigen Text antwortet.
Je nach Konfiguration des Servers sind manche Befehle erst nach einer erfolgreichen
Authentifizierung des Clients möglich.
Man unterscheidet zwischen passivem und aktivem FTP, die sich darin unterscheiden, dass im
aktiven Modus der Client den Datenport wählt und diesen dem Server mitsamt seiner IP-Adresse
mitteilt, und im passivem Modus, der Server den Port wählt und diesen an den Client schickt,
ebenfalls mit seiner IP-Adresse. Der übliche Weg ist der, aktives FTP zu nutzen, jedoch ist
passives FTP nötig, wenn ein Client für den Server scheinbar nicht zu erreichen ist( z.B. durch
NAT-Gateway oder Firewall).19
Um FTP-Verbindungen nutzen zu können, befindet sich auf fast jedem Betriebssystem
standardmäßig ein ftp-Terminal-Client. So ist es möglich über die Kommandozeile eine
Verbindung zu einem FTP-Server aufzubauen und sich mit diesem auszutauschen.22 Außerdem
besitzen die meisten aktuellen Browser ebenfalls einen FTP-Client, sodass ein Server über die
Adresszeile des Browsers angesteuert werden kann.
Des Weiteren gibt es unzählige Softwareprodukte von unterschiedlichen Herstellern mit denen es
möglich ist FTP-Verbindungen zu Servern aufzubauen, die zudem auch eine grafische Oberfläche
besitzen.
Die Mehrheit der heutigen FTP-Server ist öffentlich zugänglich, sodass es möglich ist, sich mit
dem sogenannten „anonymous“-User anzumelden. Dabei kann ein leeres oder beliebiges Passwort
gewählt werden.
Heute gibt es viele weitere Varianten von FTP(z.B. SFTP, TFTP, BFTP,…), da FTP ein sehr
einfaches und altes Protokoll ist, trotzdem aber gut zur simplen Dateiübertragung geeignet ist.
19
RFC959 http://tools.ietf.org/html/rfc959
http://de.wikipedia.org/wiki/File_Transfer_Protocol
21
Auflistung aller Statuscodes http://www.iana.org/assignments/http-status-codes/http-status-codes.xml
22
Liste von Befehlen: http://www.cs.colostate.edu/helpdocs/ftp.html
20
12
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
2.3.
Modularisierung
2.3.1. Allgemein
Der Begriff der Modularisierung steht im Gegensatz zu einem vollkommenen Gesamtsystem. In
der Softwareentwicklung wird Modularisierung genutzt, um ein System flexibler und anpassbarer
zu machen.
Es werden Bausteine gebildet, die beliebig kombiniert werden können. Jeder Baustein ist
austauschbar und erfüllt eine Teilaufgabe der Problemstellung.23
Nur die Schnittstellen zwischen Bausteinen müssen wohldefiniert sein; die Umsetzung einer
Aufgabe in einem Modul ist unabhängig von den anderen Modulen und kann beliebig geändert
werden, ohne Einfluss auf die anderen Bausteine zu nehmen.
Bei einer modularisierten Software ist die Arbeitsaufteilung auch einfacher umzusetzen, da nicht
mehrere Entwickler gleichzeitig an einem Modul arbeiten, sondern kleinere Gruppen oder
Einzelpersonen an je einem Modul arbeiten können.
2.3.2. Webinterface
Das Webinterface ist das Eingabemodul. Über den Browser können die Benutzer dieses aufrufen,
sich über ihre FH-Kennung anmelden und dort ihre zu plottenden Dateien hochladen und deren
Status abrufen. Die Anmelde-Daten werden über einen LDAP-Server abgefragt. Bei den
Benutzern handelt es sich hauptsächlich um die Studierenden der Fachbereiche
Bauingenieurwesen und Architektur der FH-Aachen und eventuell um einige Mitarbeiter dieser
Fachbereiche, da die Kosten des Plotters durch eine Einrichtung dieser beiden Fachbereiche
finanziert wird.24
Über das Eingabemodul werden die hochgeladenen Dateien auf einem Server gespeichert und
wichtige Informationen über diese, zum Beispiel von wem und wann eine Datei hochgeladen
wurde, in eine Datenbank eingespeist. Hier findet auch die Vergabe von JobIDs statt, die einen
entscheidenden Teil zur Abarbeitungsreihenfolge der Plots beiträgt.
Die Endbenutzer können nach dem Hochladen einsehen, inwieweit die Bearbeitung der Datei
fortgeschritten ist. So wird angezeigt, wann die Datei hochgeladen wurde, ob die Bearbeitung
durch die tiff-Engine abgeschlossen ist und wann die Datei zum Plotter gesendet wurde. Treten
Fehler in der Bearbeitung der Datei auf, werden auch diese dem Benutzer auf dieser Statusseite
angezeigt, sodass dieser die Möglichkeit hat, bei Komplikationen den IT-Service rechtzeitig zu
kontaktieren und den Fehler zu beheben, sodass der Plot im erwarteten Zeitfenster fertig gestellt
wird. Es werden nur noch pdf-Dateien im Eingabemodul akzeptiert. Wenn ein Benutzer eine Datei
mit einer anderen Endung oder mit der falschen Papiergröße hochzuladen versucht, wird diese
nicht akzeptiert und der Benutzer darauf hingewiesen.
Die Seite ist vorerst nur aus dem FH-Netz zu erreichen.25
23
http://wirtschaftslexikon.gabler.de/Definition/modularisierung.html
http://www.sw-bh.fh-aachen.de/
25
http://www.plotservice.fh-aachen.de
24
13
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Zudem gibt es eine erste Administrationsoberfläche, die aber nicht als eigenes Modul fungiert,
sondern noch Teil der Weboberfläche für die Nutzer ist. Dabei handelt es sich um eine erste
Lösung, um Dateien und ihre Status betrachten zu können und gegebenenfalls die Warteschlange
anhalten zu können.26
2.3.3. pdf2tiff
Die sogenannte tiff-Engine bereitet die hochgeladenen Dateien auf, sodass diese für den Plotter
schneller und einfacher ab zu arbeiten sind und führt Prüfungen durch, wie zum Beispiel, ob es
sich um das richtige Dateiformat handelt.
Zunächst wird die Datei mittels eines pdf-Readers geöffnet. Tritt dabei ein Fehler auf, so handelt
es sich zum Beispiel nicht um eine richtige pdf-Datei. Es wird die Anzahl der Seiten ausgelesen,
anschließend die Papiergröße bestimmt. Für die späteren Berechnungen wird die Größe von
Punkten in Millimeter umgerechnet. Da nur bestimmte DIN-Größen von dem System akzeptiert
werden, wird mit einer Toleranz von 10 mm(variabel einstellbar in der Datenbank) geprüft, ob es
sich um eine gültige Größe handelt. Zu guter Letzt wird die pdf-Datei in eine tiff-Datei
umgewandelt. Das heißt, dass eine neue tiff-Datei entsteht und die Originaldatei erhalten bleibt.
Diese tiff-Datei ist diejenige, die im nächsten Modul zum Plotter geschickt wird. In den letzten
Schritten wird die tiff-Datei noch bei Bedarf auf die passende Rollenbreite des Plotters gedreht
und in der Datenbank als vom Umwandlungsmodul bearbeitet gekennzeichnet.
Die tiff-Engine fragt die Informationen, die sie zur Verarbeitung der Dateien braucht, aus der
Datenbank ab. Die Dateien werden in der Reihenfolge in der tiff-Engine verarbeitet, wie sie
hochgeladen wurden. Die Information, ob eine Datei bearbeitet wurde und ob Fehler bei der
Verarbeitung aufgetreten sind, wird ebenfalls wieder in der Datenbank gespeichert.
2.3.4. send2plotter
Dieses Modul ist das Datenausgabemodul der gesamten Konstruktion. Hier werden die
ungeplotteten, fehlerfrei bearbeiteten Dateien in einer Reihenfolge, die mehreren Regeln folgt, an
den Plotter ausgegeben. Auch hier ist die Schnittstelle zu den anderen Modulen wieder die
Datenbank. Anhand der Informationen in dieser, kann dieses Modul entscheiden, welche Dateien
an den Plotter gesendet werden und welche nicht.
Ebenso gibt es Regelungen, um den Plotter nicht mit Dateien zu überfluten, sondern kontrolliert
Daten an den Plotter zu senden. Wurde eine Datei erfolgreich über die FTP-Verbindung dieses
Moduls zum Plotter versendet, wird diese Information in der Datenbank gespeichert. Diese
Information wird dem Benutzer im Webinterface dargestellt, sodass er weiß, wann er sich zum
Plotter begeben kann, um seinen fertigen Plot entgegen zu nehmen.
26
http://www.plotservice.fh-aachen.de/cw-plot/hdjkfhdjkgfv894z48bhjsdh78fd
14
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
3. Modul send2plotter
3.1.
FTP-Verbindung/Schnittstelle zum Plotter
Der Plotter Océ ColorWave 600 hat standardmäßig einen FTP-Server implementiert. Zudem
handelt es sich dabei, um einen öffentlichen FTP-Anschluss. Dies bedeutet, dass es einfach ist,
eine Verbindung zum Datenaustausch zum Plotter aufzubauen, da man den sogenannten Benutzer
„anonymous“ benutzen kann. Dabei braucht man beim Login keinen Benutzernamen und kein
bzw. ein beliebiges Passwort anzugeben, besitzt aber die Berechtigung, diesem Server Daten zu
senden und Daten von diesem abzurufen.
Die Information, dass es möglich ist, den Plotter über eine FTP-Verbindung anzusprechen, habe
ich in einem Online-Handbuch von Océ für mehrere Reihen von Plottern gefunden.27 Dort war
genau beschrieben, wie man über eine Konsole eine Verbindung zum Plotter aufbaut.
Da jedoch die gesamte Software mit der Programmiersprache Python realisiert wurde, musste
diese Logik noch in Python übertragen werden.
Zudem besitzt der Plotter Océ ColorWave 600 eine weitere Schnittstelle. Die sogenannte
LPD/LPR-Schnittstelle ist jedoch nicht gut geeignet für die vorliegende Problemstellung, da es
über diese Schnittstelle nicht möglich ist, eine gewisse Staukontrolle zu realisieren.27 Zudem wäre
hierfür in Python eine nicht in der Standardbibliothek enthaltene Bibliothek nötig gewesen.
3.2.
Schnittstelle Datenbank
Da die Datenbank eine zentrale Rolle in der entwickelten Software und für die Kommunikation
zwischen den Modulen spielt, sind die Tabellen der Datenbank anschließend im Einzelnen
aufgeführt.
config
maxsize
tolerancesize
numeric
integer
maxemptyspace
integer
currentjobid
plotqueuestopped
integer
boolean
27
maximale Größe einer Datei
Toleranz für die DIN-Größe
des pdfs in mm
max. Leerfläche, die ein
Dokument beinhalten darf( in
%)
fortlaufende JobID
true: der Plotter erhält keine
Aufträge vom Ausgabemodul;
http://okb.oceusa.com/English_ext/WFPS/SysAd_Arc/cw_pw_tcs_tds/ConM_cwpctcstds_2012_03/M088395.html
15
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
plotteravailable
boolean
maxplotsinqueue
integer
timeout
integer
maxplottries
integer
totalplots
integer
false: der Plotter erhält
Aufträge vom Ausgabemodul
false: Ausgabemodul stellt
fest, dass der Plotter nicht
erreichbar ist(z.B. Plotter
ausgeschaltet)
max. Anzahl an Plots, die in
der Warteschlange des Plotter
zugelassen sind
Zeit, zwischen upload und
Absenden zum Plotter(in
Sekunden)
max. Anzahl an Versuchen,
einen Plot erfolglos zum
Plotter zu senden
Gesamtanzahl der Plots
Abbildung 4 „Tabelle config“
Die Tabelle config enthält Konfigurationseinstellungen, die für den Ablauf wichtig sind. Über das
Flag „plotqueuestopped“ kann zum Beispiel die Ausgabe an den Plotter angehalten werden und
über „totalplots“ wird die Gesamtanzahl aller hochgeladenen Dateien mitgezählt.
In dieser Tabelle gibt es nur einen Datensatz, da es sinnlos wäre, mehrere zu erstellen, da sonst so
mehrere Informationen darüber vorhanden sein könnten, ob der Plotter erreichbar ist oder nicht.
Bei widersprüchlichen Informationen, wäre keine Aussage mehr möglich. Auch manche
Einstellungen, die die Module im Programmablauf benutzen, dürfen nicht mehrmals vorkommen,
da sie so uneindeutig werden.
file
name
fileid PRIMARY KEY
text
text
path
loginname FOREIGN KEY
text
text
statusmessage
filelocktiff
errorlocktiff
text
boolean
boolean
donetiff
boolean
jobid
integer
Originalname der Datei
geänderter Name der Datei/ID
der Datei
Dateipfad
Name des Users, der die Datei
hochgeladen hat
Statusnachricht einer Datei
Dateisperre für die tiff-Engine
true: tiff-Engine hat bei der
Verarbeitung einen Fehler
festgestellt
true: pdf2tiff hat die
Bearbeitung abgeschlossen
Plots eines Studierenden, die
16
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
upload
double precision
doneplotmodule
double precision
errorplot
integer
gsmessage
text
gleichzeitig an den Plotter
geschickt werden, besitzen die
gleiche JobID
Zeitangabe(in Sekunden seit
1.1.1970) des Datei-Uploads
Zeitangabe(in Sekunden seit
1.1.1970) des Versendens an
den Plotter
Wert x: Datei konnte x mal
nicht an den Plotter gesendet
werden
Ghostscript Ausgabe des
pdf2tiff Prozesses
Abbildung 5 „Tabelle file“
Die Tabelle „file“ beinhaltet Informationen über die einzelnen Dateien, die von den Usern
hochgeladen wurden. Das heißt, diese Tabelle enthält immer so viele Datensätze, wie Dateien
hochgeladen wurden.
Es werden die verschiedensten Informationen über die Datei gespeichert. Einerseits existieren
statische Informationen, wie zum Beispiel der Originalname, der technische Name oder der User,
der die Datei hochgeladen hat. Andererseits gibt es aber auch Einträge, die für die Bearbeitung
durch die Module sehr wichtig sind und im Laufe der Abarbeitung verändert werden.
Das Eingabemodul erstellt den Datenbankeintrag in dieser Tabelle, deshalb ist durch das
Vorhanden sein des Eintrags klar, dass das Eingabemodul mit dieser Datei abgeschlossen hat.
Zudem wird durch das Eingabemodul die Zeit des Uploads gespeichert. Das Modul pdf2tiff
wiederum setzt das Flag „donetiff“ um zu signalisieren, dass es eine Datei bearbeitet hat - ob
erfolgreich oder nicht ist an dem Flag „errorlocktiff“ zu erkennen. So kann das nächste Modul,
also das Ausgabemodul, anhand dieser Flags feststellen, ob es eine Datei ausgeben darf oder nicht.
So wird verhindert, dass auf eine Datei von zwei Modulen zeitgleich zu gegriffen wird und somit
Fehler auftreten.
users
loginname PRIMARY KEY
countplots
maxplots
text
integer
double precision
locked
boolean
faculty
integer
status
matrnr
text
text
Name des Users
zählt Plots pro User
zur Verfügung stehende
Ploteinheiten in A0
true: User ist fürs Plotten
gesperrt
Fachbereichsnummer des
Users
s:student;e:employee;a:admin
Matrikelnummer, falls
vorhanden
17
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Abbildung 6 „Tabelle users“
Die Tabelle “users” hält Informationen über die Benutzer des Systems bereit. So steht in dieser
Tabelle wie ein User heißt, ob er gesperrt ist, wie viele Dateien er schon hochgeladen hat oder wie
viele A0-Einheiten ihm noch zur Verfügung stehen. Einige dieser Daten sind auch wichtig zur
Findung des technischen Namens einer Datei, da darin die Matrikelnummer des Users, der
Fachbereich und die laufende Nummer jedes Users eine Rolle spielen. Dieser wird für die
Abrechnung der Kosten für die einzelnen Fachbereiche benötigt.
Über diese Tabelle können Nutzer auch gesperrt werden. So sind zum Beispiel alle User aus
anderen Fachbereichen als 1 und 2 für das Plotten gesperrt. Auch kann bei Missbrauch eine Sperre
für einen Benutzer gesetzt werden.
Anhand dieses Aufbaus erkennt man bereits, was für eine wichtige Rolle die Datenbank in der
Verarbeitung der Dateien spielt. Sie dient nicht nur als Datenverwaltungssystem, sondern nimmt
durch die Modularisierung eine ganz besondere Rolle ein; sie ist die Schnittstelle zwischen allen
Modulen und macht die Modularisierung in dem Sinne erst möglich, da für diese wohldefinierte
Schnittstellen existieren müssen, welches hier die Datenbank ist. Zwischen den einzelnen Modulen
besteht keine direkte Verbindung, sodass bei Ausfall eines Moduls, die anderen nicht
beeinträchtigt werden. Wird eine Datei von der tiff-Engine nicht bearbeitet, weil diese ausgefallen
ist, stellt dies kein Problem für die anderen Module dar, da das Ausgabemodul nicht von der tiffEngine aufgerufen wird, sondern über die Datenbank erfragt, welche Dateien zur Ausgabe bereit
sind.
Durch das Entwickeln von einzelnen Modulen wird die gesamte Software flexibler und die
einzelnen Module sind einfach austauschbar, da sie nicht voneinander abhängig sind. So kann zum
Beispiel jedes Modul einzeln abgeschaltet werden, ohne die Funktionalität der anderen Module zu
beeinflussen. Ebenso können einfach neue Module entwickelt und dazu geschaltet werden, ohne
dass alle Module dafür in einer neuen Version erscheinen oder angehalten werden müssen.
Um die Leistungsfähigkeit zu steigern könnte man auch problemlos die Module „pdf2tiff“
und/oder „send2plotter“ doppeln, um Skalierbarkeit zu erreichen.
Man kann die Datenbank sozusagen als Dreh- und Angelpunkt des Konzepts bezeichnen, da alle
Informationen über sie gespeichert und auch über sie kommuniziert werden.
3.3.
Algorithmen
3.3.1. Vergabe von Jobtickets
Die Jobtickets werden zwar im Eingabemodul erstellt, sind aber entscheidend für die
Ausgabereihenfolge der Dateien, deshalb werden sie hier auch erwähnt, erklärt und ihre
Bedeutung für die Ausgabe deutlich gemacht.
Jeder Datei wird ein Jobticket zugewiesen. Dabei können mehrere Dateien dasselbe Jobticket
besitzen. In der Tabelle „config“ wird nachgehalten, welche Nummer das nächste Jobticket ist.
Lädt nun ein Benutzer Dateien hoch, erscheint nach jeder hochgeladenen Datei ein Timer. Lädt der
Benutzer innerhalb der Zeit des Timers noch eine weitere Datei hoch, erhält diese Datei die
18
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
gleiche JobID wie die vorherige Datei. Der zeitliche Abstand zwischen zwei Hochladevorgängen
darf nicht größer als der Timer sein, damit die beiden Dateien die gleiche JobID erhalten und somit
zusammen ausgegeben werden.
In dem Ausgabemodul werden Dateien ihrer JobID nach ausgegeben. Existiert nun ein Job, in dem
sich zum Beispiel fünf Dateien befinden, und zwei davon sind noch nicht komplett von der tiffEngine bearbeitet worden, dann wird keine von den fünf Dateien ausgegeben, da sie nur
zusammen ausgegeben werden sollen.
Sind alle Dateien eines Jobs von der tiff-Engine bearbeitet worden, und eine Datei ist fehlerhaft,
werden die anderen vier ausgegeben, da sonst dieser Job nicht ausgegeben werden würde, nur weil
eine einzige Datei fehlerhaft ist.
Jobtickets erfüllen keinen technischen Zweck und sind im Grunde nicht notwendig. Bei ihrer
Verwendung geht es nur darum, den Benutzern, also hauptsächlich Studierende, den Ablauf
nachvollziehbar zu machen und ihnen die Nutzung der Software möglichst angenehm zu machen.
Würden keine Jobtickets verwendet werden, würden die Plots von Studierenden, die in
überschneidenden Zeitfenstern Dateien hoch geladen wurden, zeitlich geordnet ausgegeben
werden. Dies bedeutet für den einzelnen im schlimmsten Fall, das zwischen seinen Dateien, viele
Dateien anderer Benutzer geplottet werden und der Student somit nicht nur die Zeit am Plotter
steht, die seine Dateien zur Ausgabe benötigen, sondern auch die Zeit, die benötigt wird, um die
Dateien anderer auszugeben.
Dies bedeutet zusätzlichen Stress für den Studierenden, da für ihn nicht absehbar ist, wann seine
Plots fertig sind, selbst wenn einige schon geplottet wurden. Dieser kann nicht nachvollziehen,
wann die nächste Zeichnung fertig ist.
Um Unzufriedenheit bei den Benutzern zu vermeiden, benutzen wir die Jobtickets.
3.3.2. Ausgabereihenfolge
Die Ausgabereihenfolge der Dateien wird von mehreren Faktoren beeinflusst, welche hier nun
erklärt werden.
Zunächst werden aus der Datenbank die Informationen „fileid“, „path“ und „jobid“ der Dateien
geholt, die das Flag „donetiff“ als „true“ gesetzt haben - also die schon von der tiff-Engine
bearbeitet wurden - und deren JobID komplett erledigt ist. Das heißt, es werden nicht die Daten
von Dateien bezogen, die eine JobID besitzen, welche weitere Dateien besitzen, die aber nicht
vollends oder gar nicht von der tiff-Engine bearbeitet wurden. Wenn eine Datei nach der
Bearbeitung fehlerhaft ist, wird die zugehörige JobID nicht geblockt, sondern alle fehlerfrei
bearbeiteten Dateien werden ausgegeben.
So wird garantiert, dass Dateien eines Jobs auch zusammen ausgegeben werden.
Aus dieser Liste von Dateien, welche nach den JobIDs in absteigender Reihenfolge und innerhalb
dessen nach jüngster Uploadzeit sortiert sind, wird nun der erste Treffer gesucht. Dies bedeutet,
dass die erste Datei eines Jobs daraufhin geprüft wird, ob der in der Datenbank vorgegebene Timer
bereits abgelaufen ist. Dies wird geprüft, indem die aktuelle Zeit mit der Hochladezeit verglichen
wird.
19
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Liegt die Datei außerhalb der eingestellten Zeit, wird eine neue Abfrage an die Datenbank gestartet
mit dem Hintergrund, alle die Dateien aus der Datenbank zu holen, die die gleiche JobID haben
wie der Treffer. Dabei werden nur fehlerfrei bearbeitete Dateien zugelassen. Diese werden nun der
„fileid“ nach sortiert. Dabei handelt es sich um den technischen Namen, sodass die Sortierung
nach Namen einer Sortierung nach Papiergröße gleich kommt.
Aus der neuen Liste wird nun die Datei zum Plotter gesendet, wenn sie nicht bereits mehrmals
erfolglos zum Plotter gesendet wurde. Wurde die Datei erfolgreich mittels der FTP-Verbindung an
den Plotter gesendet, wird in der Datenbank das Flag „doneplotmodule“ mit einem Zeitstempel
versehen. Misslingt die Übertragung wird „errorplot“ um eins erhöht. In der Tabelle „config“ ist
festgelegt, wie hoch dieser Wert maximal sein darf.
Ob das Senden der Datei nun misslingt oder glückt, ist unabhängig davon, dass ein
Programmdurchlauf damit beendet ist. Das Programm ist so aufgebaut, dass immer nur höchstens
eine Datei in einem Durchgang abgeschickt wird, damit keine endlosen Schleifen entstehen.
Die Logik des Programms garantiert aber, dass die Ausgabereihenfolge durch einen erneuten
Durchlauf nicht verändert wird.
Die Vermeidung von Schleifen liegt darin begründet, dass das Programm als Daemon ausgeführt
werden soll. Die Programmstruktur sollte möglichst linear sein, um das System nicht zu
überlasten, da der Daemon endlos laufen soll.
So wird zum Beispiel am Ende des Programms auch ein zehn-sekündiger Sleep-Befehl aufgerufen,
um das System nicht mit einem Daemon zu belasten, der in einer Endlosschleife hängt.
Für die Ausgabereihenfolge sind also entscheidend die Hochladezeit, die Bearbeitung durch die
tiff-Engine und die JobID. Diese drei Komponenten entscheiden darüber, wann und ob eine Datei
an den Plotter gesendet wird.
3.3.3. Warteschlangen
Um den Plotter nicht zu überlasten, muss auch eine gewisse Kontrolle über die Warteschlangen im
Plotter bestehen. Um den Plotter als Administrator anhalten zu können, falls händisch Dateien
eingeschleust werden sollen oder die Ausgabe an den Plotter aus einem anderen Grund gestoppt
werden soll, gibt es ein Flag in der Datenbank mit dem Namen „plotqueuestopped“. Ist dieses auf
„true“ gesetzt, springt das Programm direkt zum Ende und macht gar nichts. Dieser Wert wird
jedes Mal zu Anfang der Programm-Routine abgefragt.
Der Wert kann mittels einer einfachen Oberfläche durch einen Administrator verändert werden.28
Zudem prüft das Ausgabemodul vor jeder Übertragung an den Plotter, wie viele Dateien sich in
dem Ordner, in welches dieses die Daten überträgt, befinden. Sind es mehr als ein bestimmter
Wert, welcher in der Datenbank in der „config“-Tabelle festgelegt wird, so wird an den Plotter
keine neue Datei übertragen.
Dies hat den Vorteil, dass, falls der Plotter einmal ausfallen sollte, nur die angegebene Anzahl an
Dateien verloren geht und nicht zum Beispiel zwanzig Dateien auf einmal.
28
http://149.201.63.98/cw-plot/hdjkfhdjkgfv894z48bhjsdh78fd
20
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Das System und die Datenbank haben nur Kontrolle über das Senden an den Plotter. Was dieser
damit tut und ob er diese wirklich ausgibt, kann von der von uns entwickelten Software nicht
nachvollzogen werden. Deshalb liegt momentan die Anzahl der Dateien, die sich in der
Warteschlange des Plotters befinden dürfen, bei drei Stück.
21
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
3.4.
Übersicht Programmablauf
Abbildung 7 „Programmablauf send2plotterdaemon.py“
22
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
4. Fazit
Bei der Entwicklung einer solchen modularisierten Software ist es wichtig, sich zuvor über die
gemeinsame Schnittstelle(hier: Datenbank) einig zu werden und möglichst genau zu definieren.
Zwar gibt es in der Entwicklungsphase natürlich Änderungen, das entscheidende dabei jedoch ist,
dies mit den Kollegen abzusprechen und im Hinterkopf zu behalten, wie sich solche Änderungen
auf andere Teile der Software auswirken können.
Bei dieser Arbeit habe ich zudem gelernt, wie wichtig es ist, die Kunden und Endbenutzer
möglichst gut zu kennen und einschätzen zu können, um ein Produkt zu entwickeln, was auch
einen guten Eindruck auf die Endbenutzer macht. Viele Aspekte, die innerhalb dieses Projektes
berücksichtigt wurden, bezogen sich ausschließlich darauf, wie man den Studierenden, den
Umgang mit dem Plotservice möglichst einfach und komfortabel gestalten kann.
Das Modul send2plotter erfüllt grundlegend alle zu Beginn gestellten Anforderungen; die Dateien
werden in einer bestimmten Reihenfolge an den Plotter gesendet, der Plotter erhält dabei nie mehr
als eine bestimmte Anzahl Dateien, die Warteschlange ist abschaltbar.
Auch die gewählten Werkzeuge erfüllen ihren grundlegenden Zweck; die Verbindung zur und die
Manipulation der Datenbank funktionieren einwandfrei, lediglich die Übertragungsrate befindet
sich noch nicht im gewünschten Bereich. Hier muss noch Ursachenforschung betrieben werden.
5. Ausblick
Da die wie im Vorherigen beschriebene Version bereits im Einsatz ist und für die Benutzer schon
zur Verfügung steht, werden weitere Entwicklungen, Verbesserungen und Fehlerbehebungen erst
in der nächsten Version erscheinen.
Dazu gehört eine Verbesserung der Jobticketvergabe. Das heißt, dass ein Benutzer Dateien
zunächst hoch lädt, diese von der tiff-Engine bearbeitet werden und der Benutzer dann die
Möglichkeit hat, selber aus zu wählen, welche Dateien zusammen abgeschickt werden und somit
eine JobID erhalten. So wird vermieden, dass Dateien ausgegeben werden, die ein Student nur auf
Richtigkeit prüfen will, aber noch nicht plotten lassen möchte.
Außerdem ist es geplant, Océ Job Tickets zu nutzen. Das Clienttool des Herstellers arbeitet auch
mit sogenannten Job Tickets, die hier aber eine andere Bedeutung haben als die von uns
verwendeten Jobtickets. Diese Job Tickets sind Konfigurationseinstellungen für den Plotter. Über
sie kann zum Beispiel eine bestimmte Rolle des Plotters angesprochen, die Qualität eingestellt
und eine Anzahl der Ausgabeplots definiert werden.29 Auf diese Weise kann ein Benutzer
einstellen, in welcher Qualität und wie oft eine Datei ausgegeben werden soll. Intern soll geregelt
werden, auf welche Rolle eine Datei ausgegeben wird, damit keine unnötigen und
zeitaufwändigen Rollenwechsel stattfinden. Momentan werden beim Versenden an den Plotter
29
http://www.oceusa.com/main/view_media.jsp?CONTENT%3C%3Ecnt_id=10134198673382561&FOLDER%3C%3E
folder_id=9852723696638963&bmUID=1255064863110
23
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
keine Konfigurations-Einstellungen mitgeschickt, sodass dieser seine Default-Einstellungen
verwendet.
Des Weiteren gibt es im Modul send2plotter noch das Problem, dass zwar Fehler des
Hauptprogramms wie gewünscht mit Zeitstempel versehen in der Log-Datei aufgeführt sind,
Fehler des Datenbankhandlers jedoch unformatiert in die Log-Datei geschrieben werden. Dies
sollte zum einfacheren Debugging noch behoben werden.
Dann sollte es noch für den Administrator die Möglichkeit geben, zu sehen, wann die
Übertragung einer Datei zum Plotter gestartet ist. In der jetzigen Version ist nur sichtbar, wann
die Übertragung erfolgreich abgeschlossen wurde. Kann eine Datei nicht gänzlich zum Plotter
übertragen werden, ist für den Administrator nur sichtbar, wie oft dies versucht wurde, aber nicht
wann. Außerdem ist nicht erkennbar, wie lange die Übertragung einer Datei dauert. Bei der
momentanen Administrationsoberfläche handelt es sich noch nicht um ein eigenes Modul.
Zusätzlich sind weitere Module in Planung. Dazu gehört ein Modul, welches bereits verarbeitete
und ausgegebene Dateien aus der Datenbank und aus dem Cache löscht, wenn sie eine bestimmte
Zeit nicht mehr verwendet wurden. Des Weiteren sind zwei Administrations-Module in Planung.
Eines ist nötig, um User und Jobs des Systems zu verwalten. Es muss möglich sein, Dateien und
Jobs während der Laufzeit zu löschen, User, die Missbrauch mit dem Service betreiben, zu
sperren, A0-Einheiten zu verändern und bestimmte Jobs und Dateien betrachten zu können. Das
zweite Administrations-Modul bezieht sich mehr auf das Starten und Stoppen der einzelnen
Module, um zum Beispiel neue Versionen oder ähnliches einspielen zu können.
Dann müssen die für die Studierenden verfügbaren A0-Einheiten in regelmäßigen Abständen
wieder hoch gesetzt werden durch ein eigenständiges Modul. Im Zuge dessen kam die
Überlegung auf, zum gleichen Zeitpunkt, ungenutzte User-Accounts ebenfalls zu löschen.
Es steht fest, dass es sich hier um eine Software handelt, die noch sehr lange Arbeit liefern wird,
weil oft erst während der Nutzung neue Bedürfnisse und Ziele entstehen.
24
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
6. Eidesstattliche Erklärung
Hiermit versichere ich, dass ich die Seminararbeit mit dem Thema „Erstellung eines
Datenübertragungsmoduls zum Projekt CW-Plot-Service“ selbstständig verfasst und keine anderen
als die angegebenen Quellen und Hilfsmittel benutzt habe, alle Ausführungen, die anderen
Schriften wörtlich oder sinngemäß entnommen wurden, kenntlich gemacht sind und die Arbeit in
gleicher oder ähnlicher Fassung noch nicht Bestandteil einer Studien- und Prüfungsleistung war.
Name: Katinka Roosen
Aachen, den 08.11.2012
_______________________________________________
Unterschrift der Studentin/ des Studenten
25
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
7. Quellenverzeichnis
RFC765: File Transfer Protocol. (Oktober 1985). Abgerufen am 13. Oktober 2012 von
http://tools.ietf.org/html/rfc959
Galileo Computing: Prozesse. (2003). Abgerufen am 2. Oktober 2012 von
http://openbook.galileocomputing.de/unix_guru/node389.html
Windows-Netzwerk-Hilfe: ISO-/OSI-Referenzmodell. (2010). Abgerufen am 9. Oktober 2012 von
http://www.windows-netzwerk-hilfe.de/netzwerk-grundlagen/osi-referenzmodell.html
Sozialwerk Bauhütte e.V. (2012). Abgerufen am 16. Oktober 2012 von http://www.sw-bh.fhaachen.de/
Wikipedia: Daemon. (26. September 2012). Abgerufen am 1. Oktober 2012 von
http://de.wikipedia.org/wiki/Daemon
Wikipedia: File Transfer Protocol. (27. September 2012). Abgerufen am 28. September 2012 von
http://de.wikipedia.org/wiki/File_Transfer_Protocol
Wikipedia: PostgreSQL. (24. September 2012). Abgerufen am 1. Oktober 2012 von
http://de.wikipedia.org/wiki/PostgreSQL
Wikipedia: Python. (5. Oktober 2012). Abgerufen am 6. Oktober 2012 von
http://de.wikipedia.org/wiki/Python_%28Programmiersprache%29
Wikipedia: Runlevel. (21. März 2012). Abgerufen am 29. September 2012 von
http://de.wikipedia.org/wiki/Runlevel
Authority, Internet Assigned NUmers. (1. Mai 2012). iana: Hypertext Transfer Protocol Status
Code Registry. Abgerufen am 4. Oktober 2012 von http://www.iana.org/assignments/httpstatus-codes/http-status-codes.xml
Boenigk, C., & Burger, R. (2011). postgresql.de. Abgerufen am 5. Oktober 2012 von
http://www.postgresql.de/index.whtml#pg
Colorado, College of Natural Science. (2011). colostate: basic FTP Commands. Abgerufen am 14.
Oktober 2012 von http://www.cs.colostate.edu/helpdocs/ftp.html
Eickler, A., & Kemper, A. (2006). Datenbanksysteme. München: Oldenburg.
Engels, G. (2000/2001). Einführung in Datenbanken. Abgerufen am 4. Oktober 2012 von
http://www2.cs.uni-paderborn.de/cs/agengels/ag_dt/Courses/Lehrveranstaltungen/WS0001/TSEII/Begleitunterlagen/Kap1.2SSW.pdf
26
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
Océ-Technologies. (2006). Océ Job Ticket 2.4. Abgerufen am 14. Oktober 2012 von
http://www.oceusa.com/main/view_media.jsp?CONTENT%3C%3Ecnt_id=101341986733
82561&FOLDER%3C%3Efolder_id=9852723696638963&bmUID=1255064863110
Océ-Technologies. (2008). Océ User Manual: Print using a DOS command line interface.
Abgerufen am 17. September 2012 von
http://okb.oceusa.com/English_ext/WFPS/SysAd_Arc/cw_pw_tcs_tds/ConM_cwpctcstds_
2012_03/M088395.html
Politze, M. (14. Februar 2012). Skriptprogrammierung (PHP MySQL). Abgerufen am 5. 10 2012
von http://www.rz.rwthaachen.de/aw/cms/rz/Zielgruppen/rz_auszubildende/veranstaltungen/informatik/Wahlpflich
tkurse/~qwj/skriptprogrammierung_php_mysql_/?lang=de
Python Software Foundation. (1990-2012). Python: ftplib. Abgerufen am 30. September 2012 von
http://docs.python.org/library/ftplib.html
Springer Fachmedien Wiesbaden GmbH. (2012). Gabler Wirschaftslexikon. Abgerufen am 17.
Oktober 2012 von http://wirtschaftslexikon.gabler.de/Definition/modularisierung.html
Theis, T. (2011). Einstieg in Python. Bonn: Galileo Computing.
Thissen, D. (28. März 2012). comsys: Rechnernetze für mathematisch-technische SoftwareEntwickler. Abgerufen am 30. September 2012 von http://www.comsys.rwthaachen.de/teaching/rechnernetze-fuer-matse/
Varrazzo, D. (2010). initd: psycopg. Abgerufen am 10. Oktober 2012 von
http://www.initd.org/psycopg/
Wall, L., Christiansen, T., & Schwartz, R. (1997). Programmieren mit Pearl. Köln: O'Reilly
Verlag.
Witherton Jones Publishing Ltd. (2005-2009). Wirtschaftslexikon24. Abgerufen am 8. Oktober
2012 von http://www.wirtschaftslexikon24.net/d/sql/sql.htm
27
Erstellung eines Datenübertragungsmoduls zum Projekt CW-Plot-Server
8. Abbildungs- und Tabellenverzeichnis
Abbildung 1 „sample session using the ftplib module“ ..................................................................... 6
Abbildung 2 „ISO/OSI-Referenzmodell“ .......................................................................................... 9
Abbildung 3 „Gedankenaustausch von Philosophen“...................................................................... 10
Abbildung 4 „Tabelle config“ .......................................................................................................... 15
Abbildung 5 „Tabelle file“ ............................................................................................................... 16
Abbildung 6 „Tabelle users“ ............................................................................................................ 17
Abbildung 7 „Programmablauf send2plotterdaemon.py“ ................................................................ 21
Herunterladen