Netze Material historische Beispiele Einstieg Grundbegriffe Netzhardware Universal-Empfänger Raw-Transceiver mini-Sender mini-Empfänger miniEthernet Transceiver Fehlererkennung Fehlerbehandlung Bus Rahmen Medium Access Control Routing Schichtenmodell Sockets Dienste im Internet Filius Real-Experimente Sicherheit Codes Programme Hardware Protokolle Glossar Bautipps Modem Lehrplan Unterricht
Pfad: Startseite / Fächer / Informatik / Netze
Autor: mk
21.11.2006 16:04
871

Einfacher Empfänger

Schema zum einfachen Empfänger
Ein Programm zum Empfang von Nachrichten nach unserem einfachen Protokoll könnte folgenden Aufbau haben:

Struktogramm zum Empfänger Die Bitverschiebungsbefehle shl (shift left) und shr (shift right) haben sich als sehr nützlich zum Zerlegen und Zusammenfügen von Bytes ('Integers') erwiesen. So wird z.B. aus dem Byte b = 148 = '1001 0100' durch die Anweisung b := b shl 2; das Byte b = 80 = '0101 0000'.

Aufgabe

GUI zum einfachen Empfänger Schreibe ein Programm, das einen einfachen Empfänger zu unserem Protokoll realisiert. Teste das Programm indem auf einer Schnittstelle empfangen wird, was auf einer anderen Schnittstelle gesendet wird. Die Schnittstellen werden dabei mit einem Nullmodemkabel (RTS und CTS gekreuzt) verbunden. Die Schnittstellen können dabei auf demselben oder auf verschiedenen Computern sein.
Möglicherweise wird es nötig sein, den Fenster-Refresh explizit z.B. mit Form1.refresh; aufzurufen.
Versuche beim Testen des Programms das Fenster zu verschieben. Was passiert, wenn man das Programm beenden will?

empfaenger0.zip

Hilfe

procedure TForm1.empfange;
const
  baud = 200;
var
  bitzeit : integer;
  b,i,j   : byte;
begin
  Form1.Caption := Form1.Caption+', '+IntToStr(baud)+' Baud';
  bitzeit := round(1000/baud);
  while true do
  begin
    // warten auf StartBit
    while Not Form1.NetzHW.GetEin do sleep(0);
    // 1,5 Bitlängen warten
    sleep(bitzeit + bitzeit div 2);
    // Datenbits einlesen
    b := 0;
    for i := 7 downto 0 do
    begin
      b := b shl 1;
      if Form1.NetzHw.GetEin then Inc(b);
      sleep(bitzeit);
    end;
    // die letzte sleep-Zeit reicht in die Mitte des StoppBits, sodass das letzte Datenbit sicher beendet ist
    // Zeichen anhängen
    Form1.mEmpf.Text := Form1.mEmpf.Text+chr(b);
    // Bildaufbau erzwingen
    Form1.Refresh;
    // Application.ProcessMessages; // nützt leider nichts!
  end;
end;