Die Hardwareansteuerung ist nur auf IBM-kompatiblen PCs unter Linux
lauffähig und benötigt die originale Schnittstellenkarte mit dem
Aufbau des Pendels, siehe dazu
Kap. und Hardware96.
Damit die Hardware in Echtzeit gesteuert werden kann, müssen
folgende drei Bedingungen erfüllt sein:
a) Die Reaktionszeit auf einen Hardwareinterrupt darf einige
Mikrosekunden regelmäßig nicht überschreiten.
b) Die maximale Zeit ohne Steuerung der Hardware, die
Totzeit, muß kleiner als ungefähr
10 Millisekunden sein. Die Totzeit ist das maximale Zeitintervall,
in dem der Steuerprozeß vom Scheduler keine Rechenzeit
bekommt. Entscheidend dafür ist vor allem die Zeit, die
nach dem Aufwecken des Steuerprozesses durch einen Interrupt vergeht,
bis der Steuerprozeß wieder Rechenzeit vom Scheduler bekommt.
c) Für eine stabile Steuerung müssen die Steuerbefehle
in einem äußerst gleichmäßigen Zeittakt erfolgen. Daher darf
die maximale Abweichung ausgeführter Steuerbefehle pro Sekunde
einen Wert von etwa 1% nicht überschreiten.
Um diese Bedingungen zu erfüllen sind im einzelnen folgende
Voraussetzungen erforderlich:
a) Für die Steuerung mit dem neuronalen Netz ist eine
Rechenleistung von mindestens einem Pentium 75 oder höher
nötig.
Für die Steuerung mit dem Fuzzy-Controller reicht ein schneller
486 aus.
b) Es wird ein spezieller Echtzeitkernel benötigt, da der
Standardkernel nur mit einem Takt von 100 Prozeßwechseln pro Sekunde
arbeitet. Um diesen speziellen Kernel zu erzeugen, muß in
der Datei include/asm/param.h im Linux-Kernel Quellbaum,
z.B. /usr/src/linux, der Eintrag:
#ifndef HZ
#define HZ 100
#endif
durch
#define HZ 2000
ersetzt werden. Hierbei kann man statt 2000 Werte im Bereich von
1500 bis 2000 ausprobieren.
c) Der Gerätetreiber für die Hardware benötigt einen Linux-Kernel
ab Version 1.3.70. Empfohlen wird die Verwendung des neuesten
Linux-Kernels von Version 2.0.
Es kann nur ein nach obiger
Methode angepaßter Kernel verwendet werden!
Um das Modul des Gerätetreibers zu
laden, werden noch die passenden Modutils benötigt. Das
Modutils-Paket ist nötig, um Linux Gerätetreiber in Modulform
verwenden zu können, d.h. um den Gerätetreiber in den Kernel
einzubinden. Das Modutils-Paket ist als modules-2.0.0.tar.gz auf
den bekannten Linux-Servern zu finden.
d) Damit die Interrupts der Karte auch wirklich den Prozessor gleichmäßig erreichen, darf kein anderes Gerät die Interrupts für längere Zeit abschalten. Außerdem darf kein Gerätetreiber im Kernel längere Warteschleifen ohne Prozeßwechsel, sog. busy-waiting durchführen. Probleme bereitet daher vor allem ältere und schlecht entworfene Hardware, das sind z.B. IDE-Platten oder Floppy-Streamer.
Für die IDE-Platten gibt es aber meist eine Lösung, die
verhindert, daß die Interrupts zu lange vom Datentransfer mit der
Platte unterbrochen werden. Die Lösung besteht darin, daß man
bei fast allen IDE-Platten mit dem Programm hdparm die Interrupts
während des Datentransfers eingeschaltet lassen kann. Dazu wird
folgender Befehl nach jedem Rechnerstart ausgeführt:
hdparm -u 1 /dev/hda /dev/hdb
WICHTIG: Vorher
sind aber unbedingt die Warnhinweise in der
Dokumentation von hdparm zu beachten!
Das Programm hdparm kann man als hdparm-2.9.tar.gz oder neuer auf bekannten Linux-Servern finden. Platten, die über Busmaster Schnittstellen angesprochen werden, wie fast alle SCSI-Systeme, oder moderne EIDE-Platten im DMA-Modus machen keine Probleme. In Linux 2.0 wird der DMA-Modus bei EIDE-Platten nur bei dem Intel Triton und seinen Nachfolgerchipsätzen unterstützt.