VB-Homepage Tipp 403

Anregungen zur Schnittstellenprogrammierung

Wieder mal ein VB-Homepage Besucher, der einen eigenen Beitrag zum Füllen der Tipp Datenbank leistet. Vielen Dank an René Thalmann der allen Geplagten seine Erkenntnisse bei der Schnittstellenprogrammierung zur Verfügung stellt.


Er schreibt ....
Habe die Frage bzw Aufforderung gelesen wegen der Schnittstellen-Programmierung.
Mit dieser Thematik plage ich mich nun auch schon Wochen herum.
Bin selber dabei div Programme zwecks Messwerte -Verarbeitung zu schreiben von Digital Multimeter mit eingebauter RS-232 Schnittstelle.

Grundsätzlich ist folgendes zu sagen um überhaupt ein Gerät ansprechen zu können bzw folgendes Wissen muss vorhanden sein.
- wie schnell arbeitet das zu steuernde/übermittelnde Gerät? Bei zB 2 Datensätze pro Sekunde bringt es nichts die Baudrate auf 120'000 zu schrauben
- wird ein Paritätsbit verwendet?
- wird Handshaking verwendet? Wenn ja, wie (Hardware, Xon-Xoff etc)
- wie muss ein Datensatz aussehen (Daten- und Stopbits zB 7,2 oder 8,1)
- Welche Leitungen werden verwendet (zB können die Handshake-Leitungen auch zur Stromversorgung von externen Geräten verwendet werden)
- wie sieht die Pinbelegung des Gerätes aus? Evtl muss selber ein Kabel gebastelt werden.

Hier ein kleiner Beschrieb, wie einzelnen Leitungen heissen und was das bedeutet (Auszug von B. Kunze):

Signal 9-polig 25-polig amPC Bedeutung
DCD 1 8 Eingang Data Carrier Detect
RXD 2 3 Eingang Receive Data
TXD 3 2 Ausgang Transmit Data
DTR 4 20 Ausgang Data Terminal Ready
GND 5 7 Erde Ground
DSR 6 6 Eingang Data Set Ready
RTS 7 4 Ausgang Ready To Send
CTS 8 5 Eingang Clear to SendRI922EingangRing Indicator

Spannungspegel
Bei den Steuerleitungen DCD, DTR, DSR, RTS, CTS und RI wird der inaktive Zustand (0) durch eine Spannung von -15...-3 V dargestellt, der aktive
Zustand (1) dagegen durch +3...+15 V. Bei den Datenleitungen RXD und TXD ist die Spannungslage umgekehrt; sie liegen im Ruhezustand (1) auf
negativem Pegel. Spannungswerte zwischen -3 V und +3 V gehören zum "verbotenen" Bereich, weil hierbei keine eindeutige Zuordnung mehr gewäh-
rleistet ist. Am COM-Port eines PC werden im Leerlauf typisch etwa +/- 10 V erreicht, bei Laptops der neuen Gerneration auch weniger. Alle Ein-
und Ausgänge sind kurzschlußfest, aber nicht gegen Überspannungen abgesichert. Zu hohe Eingangsspannungen können die Ports möglicherweise
beschädigen.

Handshake (im Verbund mit einem Modem, kann aber praktisch für alles übernommen werden)

Eine Datenübertragungs-Applikation legt nach dem Start die Leitungen DTR und RTS auf 1 (+12 V) und zeigt zB dem Modem damit die
Funktionsbereitschaft an. Da das Modem die Daten aber eventuell nicht so schnell senden kann, wie sie die Applikation sendet, legt es die
CTS-Leitung auf 0 (-12 V), wenn es gerade keine weiteren Daten vom PC entgegennehmen kann, und dann wieder auf 1 wenn es wieder neue Daten
entgegennehmen kann. Umgekehrt kann der PC, wenn er gerade zu beschäftigt ist, die Daten vom Modem entgegennehmen zu können, seine
RTS-Leitung vorübergehend auf 0 legen. Dieses Verfahren nennt man RTS/CTS-Handshake oder auch Hardware-Flußkontrolle. (Ein alternatives
Verfahren, das ohne Steuerleitungen auskommt, benutzt die beiden Steuerzeichen Xon/Xoff, ist aber wegen dieser zwei reservierten Codes
nicht für eine Binär-Übertragung geeignet und deshalb gewöhnlich weniger sinnvoll).

Datenübertragung
Die Daten selbst werden beim COM-Port eines PC asynchron übertragen. Das bedeutet, ein Zeichen kann zu einem beliebigen Zeitpunkt gesendet
werden. Der Anfang einer Übertragung wird an einem Pegelwechsel von 1auf 0 erkannt (Startbit). Dann folgen je nach Einstellung die
typischerweise sieben oder acht Datenbits, das niederwertigste Bit wird zuerstgesndet. Den Abschluß bildert das Stoppbit, - das immer eine 1
darstellt. Dies ist deshalb sinnvoll, damit für ein nachfolgend gesendetes Zeichen das Startbit wieder als Übergang von 1 auf 0 erkannt
werden kann. Die Dauer eines Bits ist der Kehrwert der Geschwindigkeit, also z.B. 0,104 ms bei 9600 Bit/s (Baud).

Das folgende Beispiel zeigt, wie der Buchstabe "a" übertragen wird (ASCII dezimal 97, hex 61, binär 0110 0001, niederwertigstes Bit zuerst
ergibt die Bitfolge 1000 0110):


  +12 V = 0       __   ______        __              a= Startbit (0)
  -12 V = 1 _ _ _I I__I I I I I__I__I I__I_ _ _  0,1=Datenbits
                      a 1 0 0 0 0 1 1 0 e               e=Stopbit (1)

Daraus erkennt man, daß für die Übertragung eines Bytes bzw. eines 8-Bit-Zeichens inklusive Start- und Stoppbit genau 10 Bits benötigt
werden. Somit erlaubt die asynchrone V.24-Übertragung z.B. bei 9600 Bit/s immerhin 960 Byte/s.

Die meisten Anwendungen benutzen heute das Datenformat 8 Datenbits, 1 Stoppbit.

Zur Fehler-Erkennung wird manchmal auch ein Paritätsbit gesendet, das eine 1 ist, wenn die Summe der sieben verbleibenden Datenbits ungerade
war (odd parity). Seltener wird eine "even parity" verwendet: Das Paritätsbit ist dann eine 1, wenn die Summe der Datenbits einen geraden Wert
ergibt. Das Paritätsbit wird nach dem letzten übertragenen Datenbit, also vor dem Stoppbit eingefügt.
 
Weitere Infos dazu findet man auch in der Hilfe zum MSComm Steuerelement. Dabei sind auch einige Beispiele aufgeführt
(Modems...) wie man damit umgehen sollte.

Sobald ich meine Proggy fertig habe, werde ich sie allen zur Verfügung stellen!


Tipp-Download

Quelle : René Thalmann - Switzerland

Zurück zur Übersichtsseite