![]() |
![]() |
||
| Netze |
[Material]
[historische Beispiele]
[Einstieg]
[Grundbegriffe]
[Universal-Empfänger]
[mini-Sender]
[mini-Empfänger]
[miniEthernet]
[Transceiver]
[Fehlererkennung]
[Fehlerbehandlung]
[Bus]
[Rahmen]
[Medium Access Control]
[Routing]
[Schichtenmodell]
[Sockets]
[Dienste im Internet]
[Real-Experimente]
[Sicherheit]
[Codes]
[Programme]
[Hardware]
[Protokolle]
[Glossar]
[Bautipps]
[Unterricht]
|
||
|
Hohenstaufen-Gymnasium Kaiserslautern |
|
Über wichtige Grundlagen der Netzwerktechnik soll nicht nur geredet, sondern sie sollen in praktischen Versuchen
erfahrbar werden. Die hohe Komplexität moderner Netzwerktechnik versperrt dabei den Blick auf die grundlegenden
Konzepte.
Es soll ein Modellnetzwerk aufgebaut werden, das einfach, robust und billig ist. Basis unseres Modellnetzwerkes ist
die serielle Schnittstelle. Sie ist fast immer verfügbar,
robust und über die WinAPI verhältnismäßig leicht ansteuerbar.
Eine nicht vorhandene serielle Schnittstelle lässt sich sowohl bei Desktop-Rechnern über eine PCI-Karte (ca. 15 Euro)
bzw. bei Laptops über eine PCMCIA-Karte (ca. 35 Euro) nachrüsten.
Wir verwenden dabei nicht den komplexen 'Datenteil', sondern die sogenannten Handshake-Leitungen RTS und CTS. Natürlich sind
Alternativen wie parallele oder USB-Schnittstelle,
Fischertechnik-Interface usw. denkbar. Zur Diskussion von Vor- und
Nachteilen siehe
Rechnernetze und Datenübertragung, D.Jonietz, IFB 2003.
Zum Experimentieren empfiehlt sich zunächst ein 1:1 Verlängerungskabel D-SUB 9-polig (z.B. AK230 bei
Reichelt), um die serielle Schnittstelle zum bequemen Hantieren nach vorne zu verlegen.
Eine 9-polige D-SUB-Buchse (z.B. D-SUB BU 09 , Reichelt), eine Leuchtdiode (z.B. LED 3MM 2MA , Reichelt) und ein Widerstand
(z.B 1/4W 2.2K , Reichelt) reichen für die ersten Versuche aus. Die Leuchtdiode wird dabei mit der Anode (längerer Anschluss)
über einen Vorwiderstand mit Pin 7 (RTS) und mit der Kathode (größerer Teil im Inneren der LED) mit Pin 5 (GND) verbunden.
Bilder vom Bau
Grundsätzlich ist das Ansprechen der seriellen Schnittstelle mit den meisten Programmiersprachen möglich. In Delphi, Java und Python liegen Erfahrungen vor. Viele Programme dieser Reihe wurden in Delphi geschrieben und sollten mit allen Versionen etwa ab Delphi3 funktionieren. In jüngster Zeit wurde angefangen, die Programme nach Python zu übertragen. Thomas Karp hat zu Rechnernetzen auf seiner Seite infoskript.de viele ähnliche Programme in Java dokumentiert.
Mit pySerial von Chris Liechti kann man die serielle Schnittstelle Plattform-unabhängig ansteuern. Es ist ein großer Vorteil von Python, dass man ohne ein Programm zu schreiben auf der Shell experimentieren kann.
>>> import serial # das Modul serial wird importiert >>> s = serial.Serial(0) # Objekt s wird erzeugt und öffnet sofort Port 0 (COM1) >>> s.setRTS(0) # RTS wird auf 0 gesetzt >>> s.setRTS(1) # RTS wird auf 1 gesetzt >>> s.getCTS() # CTS wird abgefragt (RTS-CTS geschlossen) True >>> s.getCTS() # CTS wird abgefragt (RTS-CTS offen) False >>> s.close() # Schnittstelle wird geschlossen
Wichtig: Man darf nicht vergessen, die Schnittstelle zu schließen, da sie sonst nicht mehr ansprechbar ist.
Die 'Granularität' von sleep liegt bei Windows etwa bei 10-15ms. Sie lässt sich über spezielle Befehle bis in die Gegend von 1 ms steigern (timeBeginPeriod, timerr_noerror).
import ctypes ctypes.windll.winmm.timeBeginPeriod(1) .... ctypes.windll.winmm.timeEndPeriod(1)
Die Ausgabe-Leitung (RTS) heißt aus und die Eingabe-Leitung (CTS) ein. Außer den Methoden zum
Setzen bzw. Auslesen der Leitungen hat die Klasse die Methoden Start zum Starten der
Hardware und Stop zum Stoppen. Start kann über einen Parameter noch die Nummer der
Schnittstelle auswählen.
Details zur Klasse TNetzHW
Schreibe ein kleines Testprogramm - etwa mit nebenstehender Oberfläche - , das TNetzHW (in
mTNetzHW.zip) benutzt, um RTS zu setzen und
CTS einzulesen. Das Abfragen von CTS kann dabei periodisch mit Hilfe eines Timers (Polling)
erfolgen.
Zum Testen des Schreibens kann eine LED - wie oben beschrieben - dienen. Zum Test des
Einlesens ist es praktisch, CTS mit RTS zu verbinden - das geht zur Not auch mit etwas Alu-Folie.

Für viele Anwendungen ist es lästig, die CTS-Leitung dauernd abzufragen. Es wäre schöner, wenn ein Flankenwechsel an CTS ein Ereignis onCTS auslösen würde, das dann mit einer entsprechenden Ereignisbehandlung verbunden werden könnte. Eine neue Klasse TNetzHW in NetzHWneu.zip stellt diese Funktionalität zusätzlich bereit. Hier ist lediglich zu Beginn des Programms mit setOnCTS(Ereignisbehandlung) eine Verbindung zwischen Ereignis und der - parameterlosen - Ereignisbehandlung herzustellen.
Achtung: TNetzHW scheint noch nicht fehlerfrei: Empfaenger0neu.zip
Man kann Windows zu einem entscheidend - für unsere Zwecke - besseren Zeitverhalten veranlassen, wenn man mit dem Taskmanager (Strg-Alt-Entf) dem Prozess mit der rechten Maustaste eine höhere Priorität zuweist. Die Priorität 'Echtzeit' erreicht man nur mit Administratorrechten.