Logo


Computer Communication & Consulting

Linux

letzte Änderung 13.10.2006

Serielle Schnittstellen: RS-232 oder V.24



Serielle Schnittstellen

War sie in den Anfängen der EDV-Technik die wichtigste Schnittstelle schlechthin, verliert sie heute bei PCs immer mehr an Bedeutung. Speziell bei Notebooks ist sie u.a. auch aus Platzgründen von der moderneren und Plug'n'Play fähigen USB-Schnittstelle fast völlig verdrängt worden.
RS-232 und V.24 sind die amerikanische und europäische Normenbezeichnung für die gleiche Schnittstelle. Die RS-232 ist immer noch ein Standard in der Meßtechnik und auch bei den meisten einfachen Mikro-Controler-Systemen anzutreffen. Auch die Geräte der professionellen IT-Technik, wie z.B. RAID-Controller, SAN-Switches und Appliances aller Art, verfügen meistens über eine RS-232 Schnittstelle und erhalten ihr Grund-Setup über ein dort angeschlossenens »Terminal« bzw. Notebook mit Terminal Emulation. In Linux Systemen werden die seriellen Schnittstellen über /dev/ttySn angesprochen. Wobei n mit Null zu zählen beginnt. Die COM1 von Windows entspricht /dev/ttyS0 unter Linux. Unter Linux/Unix kann man auch einen Shell-Login auf eine serielle Schnittstelle definieren, was für wichtige Server-Systeme einen Notzugang im Fehlerfall ermöglicht.


Einfacher Adapter für RS232 und V.24

RS-232 Adapter © 2006 Bernd Holzhauer

Bei der Programmierung an einer seriellen Schnittstelle ist ein Protokoll Analyser eine große Hilfe. Leider sind diese Geräte teuer und billige Analyser taugen nicht viel.

Für einfache Aufgaben genügt schon ein "alter" Rechner oder ein Notebook mit serieller Schnittstelle. Linux verfügt mit GtkTerm über ein sehr gutes RS232-Terminal Programm. Aber auch das Linux Minicom oder Hyperterm unter Windows lassen sich zur Überwachung von seriellen Schnittstellen einsetzen.

Man muß nur eine Art »Weiche« für die serielle Schnittstelle haben. Das Schaltbild zeigt einen einfachen Adapter, der in eine 9-polige RS232 eingeschleift wird und den Traffic für beide Richtungen anzeigen kann. Im Ruhezustand liegen bei einer RS-232 (V.24) Schnittstelle auf den Pins 2 und 3 negative Spannungen (-3 bis -12V) an. Die Dioden lassen also von beiden Leitungen die Nutzsignale zum Pin 2 des Monitor-Gerätes durch. Der Pull-Down Widerstand R1 nutzt die Minus-Spannung des Sende-Pins 3 um eine definierte negative Spannung (Ruhezustand) auf Pin 2 zu erzeugen.

Das funktioniert gut bei Geräten, die passiv vom Rechner her abgefragt werden, wie z.B. USVs. Der Adapter funktioniert leider nicht, wenn beide Seiten gleichzeitig senden. In diesem Fall kann man Widerstand und Dioden durch einen einfachen Umschalter ersetzen. Man kann dann zwar immer nur eine Richtung monitoren, hat dafür jedoch eine saubere Übertragung.

Bei mir funktioniert der gezeigte Adapter gut bei niedrigen Baud-Raten (bis 38.400 BPS) und bei Geräten mit wenig Traffic. Sollten Zeilen nicht komplett dargestellt werden bzw. sich zum Zeilenende hin Schmierzeichen ergeben, kann durch Erhöhen des Widerstandswertes von R1 eventuell Besserung auftreten.

Die beiden Dioden sind einfache Silizium Dioden (z.B. 1N4148). Werden an der Schnittstelle auch Hardware-Handshake-Leitungen verwendet, müssen zusätzliche Verbindungen zwischen S1 und S2 verdrahtet werden. Dabei ist eine 1:1 Verdrahtung herzustellen, d.h. es sind immer die Pins mit gleichen Nummern zu verbinden.

Der kleine Adapter hilft gut beim Reverse-Engineering von z.B. USV-Schnittstellen. Wenn man das standardmäßig mitgelieferte Programm unter Windows ablaufen läßt, kann man sehr gut »mitschreiben« was sich auf der Schnittstelle abspielt.


RS-232 und Perl

Die Scriptsprache Perl eignet sich hervorragend für kleine Test-Routinen. Die Routinen sind schnell geschrieben und lassen sich leicht während der Tests den Gegebenheiten anpassen. Perl zeichnet sich durch eine sehr gute Verarbeitung und Untersuchung von Strings aus. Das gezeigte Beispiel dient zum einfachen Abfragen des USV-Status einer USV mit Megatec-Protokoll. Das Beispiel ist bewußt sehr knapp gehalten, soll es ja nur die grundlegende Programmstruktur zeigen.

Das komplette Programm finden Sie hier: UPS Programm
#!/usr/bin/perl

### Serielle Schnittstelle definieren
$port = "/dev/ttyS0";	# entspricht COM1

### mit stty die Port-Einstellungen setzen
system "stty 2400 ixon -echo < $port";
### Port als COM öffnen
open(COM, "+>$port") or die "can't open $port";
select(COM);	# COM als standard E/A festlegen
$| = 1;		# Character einzeln ausgeben = nicht puffern

### Sendet Q1 an die USV zur Statusabfrage
printf("Q1\015");	# die USV mag kein normales Zeilenende
sleep(1);		# 2400 BPS sind recht langsam ...
sysread(COM, my ($line), 50);
printf(stderr $line);	# Ausgabe auf Console

close(COM);

Die USV ist passiv. Sie sendet nur Anworten auf Anfrage. So fordert z.B. Q1 den Status der USV ab. Die USV mag keine CR-LF Kombinationen. Daher das \015 Zeilenende. Sie sendet selbst auch keine richtigen Zeilenenden. Das Einlesen mit $line = <COM> funktioniert nicht. Dazu sind 2400 BPS recht langsam, es wird deshalb mit sleep(1) eine Sekunde gewartet um sicher zu stellen, dass eine komplette Zeile im Eingabepuffer vorliegt.





Home Page
Ranking-Hits
Copyright © 2001-2014 Bernd Holzhauer. Alle Rechte vorbehalten.
Warenzeichen und Marken sind Eigentum der jeweiligen Besitzer.

Das Ing.Büro Bernd Holzhauer distanziert sich grundsätzlich von gesetzeswidrigen und möglicherweise illegalen Inhalten in Seiten, auf die über www.cc-c.de verwiesen wird. Sollte Ihnen diesbezüglich etwas auffallen, melden Sie es uns bitte per email.