UWR Schiedsrichteranlage
Autor: Ulrich Wüller
Früher musste sich immer bei den Piranhas Paderborn vor und nach jedem UWR-Turnier jemand um die Ausleihung
und Zurückbringung der geliehenen Hupanlage kümmern. Im
Frühjahr 2003 entstand deshalb die
Idee eine Schirianlage selbst zu bauen. Um die Sache einfach zu
halten, beschlossen wir, diese auf Basis eines PCs bzw. Notebooks
zu
konzipieren. Im folgenden wird diese Idee und deren Umsetzung beschrieben.
1. Hardware
1.1 Komponenten
Die Hardware der ganzen Anlage besteht aus den folgenden Komponenten:
- PC (Notebook oder Desktop - was gerade verfügbar ist oder
was das vorhandenen Budget hergibt - ein Notebook erlaubt allerdings
eine Niederspannungsversorgung am Protokoll-Tisch) mit
Drucker-Schnittstelle.
- Drei Schiedsrichter-Signalgeber (mindestens
zwei tauglich
für die Unterwasser-Schiedsrichter), ggf. noch einen in Reserve.
Wichtig ist ein zuverlässiger Kontakt beim Drücken der
Signalgeber!
- Eine Unterwasser-Hupe für 12 V Gleichspannung.
- Ein Starkes 12 V Gleichspannungsnetzteil.
- Zwei Anzeige-Kästchen für die Strafzeiten jeweils mit
drei LCDs.
- Ein kleines Gehäuse mit einer einfachen Schaltung (s.u.), an der
alles angeschlossen wird.
1.2 Zusammenspiel
Der Parallelport vom PC ist über ein halbes Druckerkabel in das
Schaltungs-Gehäuse geführt. Die Leitungen zu den anderen
Geräten sollte man mit Steckverbindungen realisieren
(läßt sich dann einfacher auf- und abbauen).
In dem kleinen Schaltungs-Gehäuse steckt eine einfache Schaltung:
- Die Datenausgänge steuern mit der im Coffee-Howto
beschriebenen Elektronik die Hupe (D0 und D1, redundant) und die
Strafzeitenanzeigen (D2->links1, ... , D4->links3,
D5->rechts3,
... , D7->rechts1). Die Hupe(n) wird/werden mit Relais und zur Absicherung
Dioden angeschlossen. Die LED-Anzeigen brauchen dies nicht. Meine LEDs
(2V, 20 mA) sind zur Spannungverminderung mit 150 Ohm in Reihe geschaltet.
- Die Eingänge S3 bis S6 (S für Status) werden für
die Schiri-Signale benutzt. Diese sind in der Software konfigurierbar (default S3, S4 und S5).
Die Status-Pins sind über 47 K-Ohm mit 5 Volt verbunden. Ein
Schiedsrichter-Signalgeber zieht den Pin dann einfach auf Ground, so
dass der Strom über den Widerstand abfliesst und der
Status-Pin spannungsfrei ist.
- Nur die Hupe braucht 12 V. Der Rest der Schaltung braucht 5 V.
Hierfür ist der Spannungswandler 7805 mit einem entsprechenden
Kühlkörper. Auf der 12 V-Seite ist der 7805 durch einen
100 µF Stütz-Elko und auf der 5 V-Seite durch einen 0,47 µF Kondensator
geschützt.
- Die Pins 18-25 werden als Ground bezeichnet. Diese Pins sind bei
mir aber nicht gleichwertig. Man kann sie alle zusammen mit der Masse
der Schaltung verbinden oder es mit einem Pin versuchen. Bei mir geht's
z.B. mit Pin 22. Mit Pin 24 habe ich keine guten Erfahrungen gemacht.
Layout
der Platine in dem Schaltungskasten, Anklicken führt zur Schema-Darstellung (Mouseklick-Effekt)
1.3 Redundanz
Die Hupe wird parallel über zwei Ports angesteuert. Durch Klick
auf eines der beiden Icons lässt sich jeder Port einzeln vor dem
Spiel testen.
Wenn ein Anschluss für einen Schiedsrichter-Signalgeber nicht
funktionieren sollte, kann man auf einen anderen wechseln, falls alle
nach aussen Anschlüsse haben. Im Programm muss der Wechsel unter
Konfiguration eingestellt werden.
2. Software
Die Software funktioniert nicht nur als Programm auf der oben
beschriebenen Hardware, sondern auch zum Testen als Java-Applet im
Browser. Das Applet startet bis auf die Bilder und die Templates
komplett aus dem Java-Archive "SchiriAnlage.jar", das alle notwendigen
Dateien enthält. Es ist mit dem Applet kein Hardware-Zugang
möglich. Deshalb wird sofort der Simulations-Modus gestartet,
d.h.der Thread ParallelPort-Kommunikation öffnet keine Fifos.
Statt
dessen wird durch Klicken auf die Schiri-Anzeigen (Kreise) das Signal des
entsprechenden Schiedsrichters simuliert.
Für die Nutzung als Schiri-Anlage braucht man:
- Linux (getestet mit Suse 8.1) als Betriebssystem,
- eine Java Runtime Umgebung (z.B. die von Suse 8.1 oder neuer),
- das C-Programm "ParallelPortControl" oder die Quelldatei "ParallelPortControl.c",
- alle class-Dateien (SchiriAnlage.class, Schiedsrichter.class,
SchiedsrichterLicht.class, ...) oder die Quelldatei "SchiriAnlage.java"
des Java-Programms,
- das Template für das Protokoll "protokollTemplate.html",
- evtl. eine Text-Elemente-Datei "language.html",
- ggf. eine vorbereitete Mannschaftskonfig als "mannschaftsconfig.html" (siehe unten: vollstädiges Protokoll),
- alle Icons im Verzeichnis "images" und
- das Shell-Script "runSchiriAnlage.sh".
2.1 Die Hardware-Steuerung
Das ParallelPortControl-Programm ist ein recht schlankes Programm, das
die Hardware-Steuerung übernimmt. Es läuft unter root-Rechten
(über s-Bit) und ersetzt einen Treiber, der solche Aufgaben im
Normalfall übernimmt (Ich wollte mich aber nicht mit der
Treiberprogrammierung herumschlagen).
2.2 Das Java-Programm
Wie immer bin ich angefangen mit der Vorstellung, dass so ein kleines
GUI (Grafisches User Interface) mit ein wenig Steuerung des
ParallelPortControl-Programms schnell mal zu programmieren ist. Jetzt
sind es aber knapp 8000 Zeilen Code bei der Version 2.1.
Für die Steuerung des ParallelPortControl-Programms (siehe 2.1)
gibt es einen
eigenen Java-Thread (Mini-Prozess) ParallelPortKommunikation. Über
diesen Thread laufen alle Daten von und zum Schaltkasten. Sollte keine
Verbindung zum ParallelPortControl-Programm (siehe 2.3 Fifos)
aufgebaut werden können, geht das Programm in
den Simulation-Modus und simuliert die Kommunikation
selbst (setStatusOverwrite). Für den
Haupt-Thread besteht dann kein Unterschied zwischen der
Simulation und
dem Real-Einsatz. Der Simulations-Modus wird aktiv beim Start
als Applet oder wenn die Fifos nicht vorhanden sind. Damit die
Funktionen des Programms, die von den Schiedsrichter-Signalen
abhängen, getestet werden können, gibt es
unabhängig davon noch die Schiri-Eingabe-Simulation (siehe
Konfiguration). Mittels Klicken auf eine Schiedsrichter-Anzeige wird
ein Drücken des entsprechenden Schiedsrichter-Signalgebers
simuliert.
Die Signal-Erkennung (kurz-kurz-kurz für Foul, lang-lang für
Tor und Anhupen mit einmal lang) funktioniert jetzt recht
zuverlässig. Man kann aber die Schwelle zwischen kurz und lang,
die
in der Voreinstellung bei 300 Millisekunden liegt, auch noch anpassen
(Konfiguration). Probleme gibt es nur, wenn die
Schiedsrichter-Signalgeber kein sauberes Signal geben, d.h. beim
Drücken der Kontakt nicht dauerhaft besteht.
Mehr zur Benutzung der Schiri-Anlage weiter unten.
2.3 Die Fifos
Die Fifos "fifo_pp_command" und "fifo_ppc_answer" werden von dem Script
"runSchiriAnlage.sh" erzeugt und nach Beendigung wieder gelöscht.
Die erste wird von dem Java-Programm benutzt, um dem C-Programm
die Kommandos und die Daten für die Hupe und Strafzeitanzeigen zu
schicken. Die Antwort mit den Eingaben der Schiedsrichter kommt dann
über die zweite Fifo. Dies geschieht alle 20 ms.
2.3 Das Start-Script
Das Start-Script "runSchiriAnlage.sh" überprüft die
wesentlichen Dateien. Ggf. werden neuere Quelldateien übersetzt
(falls ein passender Compiler vorhanden ist). Dann werden die Fifos
(named Pipes) erzeugt und die Programme gestartet. Beim ersten Mal und
nach Updates der Source-Dateien sollte man "runSchiriAnlage.sh"
von der Shell starten, um die Kommentare zu sehen oder ggf. das
root-Passwort einzugeben. Wenn alles ok ist, kann man
"runSchiriAnlage.sh" auch über Desktop-Icon oder über
Autostart aktivieren. Also normalerweise
aufrufen und los geht's ...
2.4 Warum Linux, C und Java?
Weil Linux das bessere Betriebssystem ist ;-)
Aber mal ernsthaft; was hat Linux, was Windows nicht für dieses
Projekt bietet:
- ein kostenloser C-Compiler,
- ein Dateisystem mit Fifos für die einfache und performante
Prozess-Kommunikation,
- einen einfachen Zugang zur Hardware
Die Programmiersprache C für den Zugang zur Hardware ist unter
Linux wohl klar. Ich kenne keine andere sinnvolle Art, es zu realisieren.
Das Oberflächen-Programm ist mit Java geschrieben, weil:
- ein kostenloser Java-Compiler existiert,
- das Programm auch als Applet
im Internet verfügbar gemacht werden kann,
- es objektorientiert ist, was für die Aufgabe definitiv von
Vorteil ist,
- das AWT (Advanced Windowing Toolkit) eine leichte
Oberflächengestaltung ermöglicht (die neuen Swing-Klassen
habe ich nicht benutzt) und
- die Threads eine vorteilhafte Möglichkeit bieten, die
verschiedenen unabhängig laufenden Vorgänge zu
implementieren.
2.5 Knoppix mit der Schiri-Anlagen-Software
Viele Benutzer eines Rechners mit Windows haben schon einmal Linux mit
einer "KNOPPIX-CD" getestet (siehe z.B. die Zeitschrift c't 4/2004): CD
einlegen, Rechner starten und ein wenig warten, dann sieht man ein
vollständiges Linux ohne Installation. D.h. nach dem Ausschalten hat
sich an der Windows-Installation nichts geändert.
Da Knoppix so einfach zu nutzen ist, habe ich eine angepasste
KNOPPIX-CD erzeugt. Die SchiriAnlagen-Software ist mit drauf und wird
auch gleich gestartet. Also beim UWR-Turnier - wo sowieso alles
durcheinander geht - einfach verkabeln, anschalten und warten bis die
Software läuft. Ausserdem wird verhindert, dass durch eine eventuelle
Löschung/Veränderung der Software die Schiri-Anlage beim Turnier nicht
zur Verfügung steht. Je nach Geschmack kann man dies auch als Backup
sehen.
Wer dies einmal ausprobieren möchtet, kann sich gerne mit mir in
Verbindung setzen.
3. Benutzung der Schiri-Anlage
Am 03.04.2004 war die Schiri-Anlage im Einsatz
beim Turnier des SV Paderborn (2.-te Bundesliga). Das Konzept hat sich
als erfolgreich erwiesen.
3.1 Voraussetzungen
- Die Hardware ist ordentlich zusammengesteckt.
- Linux als Betriebssystem (getestet mit Suse Linux
8.1, Open Suse Linux 10.0 und Knoppix 3.4; alle anderen
Distributionen vermutlich auch ok),
- X-Windows-Oberfläche (z.B. KDE) und
- Java 1.3 oder höher (Runtime Environment, besser
natürlich JDK) ist installiert.
- Die Software liegt wegen der Fifos in einem Verzeichnis innerhalb eines
Linux-Dateisystems (also nicht FAT, NTFS, ...).
3.2 und los geht's ...
Nachdem alles verkabelt ist und die Software auf dem System liegt,
startet man das Script "runSchiriAnlage.sh" unter einer
Standard-Kennung. Beim ersten Mal und nach jedem Update am besten von einer Shell.
Wenn alle Tests und Kompilierungen erfolgreich durchgelaufen sind
(Sollte das ParallelPortControl-Programm neu kompiliert werden oder
noch
nicht die richtigen Rechte haben, wird man noch aufgefordert das
root-Passwort einzugeben.), wird das Java-Programm auf dem Bildschirm
erscheinen.
Mit einem Klick auf ein Hup-Icon kann man jedes der beiden
Hupen-Relais einzeln testen, solange das Spiel nicht läuft.
Die Schiedsrichter-Signalgeber kann man mittels des Hup-Tests testen.
Zu Beginn sollte man mittels des Konfigurations-Buttons die Parameter
überprüfen. Die Einträge sollten fast ohne
Erklärung auskommen. Die "kuz/lang Signalschwelle" bezeichnet die
Grenze, über der ein Schirisignal als lang angesehen wird. Mit
"volles Protokoll u. Torstand"trifft
man eine wesentliche Entscheidung. Bei der Default-Einstellung
"nein" sind nur minimale Eingaben notwendig (Strafwurf, Zeitstrafe,
Auszeit, ...). Die vollständige Spiel-Information, wer z.B. die
Tore gemacht
hat, ist dem Programm nicht bekannt. Bei "ja" werden alle Daten
abgefragt, um ein vollstädiges Protokoll anzufertigen.
Natürlich muss man dann auch vor Spielbeginn die Mannschaften
eingeben bzw. die vom letzen Spiel gespeicherten einlesen. Will man das
Protokoll
ausdrucken, braucht man allerdings einen Drucker, der
sinnvollerweise nicht
über den Parallelport sondern über USB oder Netz
angeschlossen wird.
Mit dem Aktivierungs-Button geht es weiter. Jetzt übernehmen die
Schiedsrichter die Steuerung. Bei einer Strafzeit muss man einen
der Strafzeit-Anzeigen starten. Entsprechend bei Strafwürfen, etc. Wenn
die Halbzeit
oder die Strafwurfzeit abgelaufen
ist, hupt die Anlage automatisch ab (lang-lang-lang-lang-lang). Nach der ersten
Halbzeit startet die Pausenuhr und die nächste Halbzeit wird
aktivieren.
Mit einem Klick auf die Icons für Tor und Foul kann man die
Erkennung des Programms korrigieren, solange das Spiel nicht wieder
angehupt ist. Mit dem Protokoll-Button kann man
an die bisherigen Informationen des Programms zum Spielverlauf sehen.
Die Strafwurfzeit und die Strafzeit fangen erst durch Anhupen des
Schiris an. Ausnahme: Das Spiel ist schon wieder angehupt, dann kann
"quasi verspätet" der Protokoll-Tisch die Zeit einfach durch den
Button starten.
4. Download, Lizenzen ...
Die Software kann auch von anderen Vereinen kostenfrei genutzt werden
kann. Ich beabsichtige, das Programm später unter die GPL zu stellen. Zuzeit gilt:
- Ein Verein baut die Hardware selbst zusammen (kleines Foto
für meine Sammlung). Dann gibt es die Software umsonst: Zip-Datei zum Download.
- Die Hardware soll verkauft werden: Dann werde ich die Software
für einen gewissen Anteil bzw. Festbetrag auch zur Verfügung
stellen.
5. Disclaimers
Obwohl ich die Software und die Hardware am eigenen Rechner ausprobiert
habe (und damit bin ich sehr eigen), kann ich keine Haftung für
eventuell eintretende Schäden übernehmen. Generell sollte man
mit Spielereien am Parallel-Interface vorsichtig sein. Zu hohe
Spannungen oder Ströme sollen schon Interfaces
zerstört
haben.
6. Links