RS232 Software Repeater

Jan 03, 2008 13 Replies

Hallo Leute



Habe auf Arbeit eine Aufgabe bekommen, die Zeit ist wie immer knapp und ich bin leider ziemlich unerfahren was das ganze angeht - m=F6chte es aber gerne hinbekommen. Ehe ich mich also verenne wollte ich mir ein paar Tips einholen.



Ich soll ein kleines (nichtgrafisches) Linux-Programm (2.6er Kernel) schreiben, so simple wie m=F6glich (C als Programmiersprache und GCC als Compiler). Es soll ein ich nenne es mal ein "RS232 Repeater" sein. Sprich Daten von einer RS232 Schnittstelle (/dev/ttyS0) an eine andere (/dev/ttyS1) repeaten (also praktisch das was z.B. an ttyS0 reinkommt empfangen und an ttS1 weiterleiten und dort ausgeben, wenn eine Antwort an ttS1 reinkommt, diese empfangen und an ttySS0 weiterleiten... Repeater eben).



Wie fange ich nun an? Habe mir SlickEdit f=FCr Linux installiert, da ich damit schon unter Windows viel entwickelt habe und kann damit sogar kompilieren, der nimmt mir erstmal das mit dem Makefile ab, soweit so gut. Das werden zwar die Koreaner hier nicht verstehen.. man braucht ja nur vim und comandline zum Software entwickeln... aber ich bin da nun mal anders und etwas verw=F6hnter, bzw. habe ich keine Zeit mich da auch noch reinzuarbeiten jetzt.



Die Programm-parameter (baudrate, pariteat usw.) sollen sich =FCber ein ConfigFile anpassen lassen.



Fragen die sich schonmal aufgetan haben:



Welchen Serial-Mode soll ich nehmen? - canonical - Non-canonical - asynchron



Danke schon mal. Schreibt einfach alles was euch dazu einf=E4llt.



Euer Steffen


Und warum fragst du das nicht in einer passenderen Newsgroup, z.B. einer in der über Linux diskutiert wird? Warum möchtest du dazu ein Programm schreiben? Habe es nicht getestet, aber zwei setserial-Aufrufe für die Konfiguration der beiden Ports, gefolgt von irgendwas in der Art cat /dev/ttyS0 > /dev/ttyS1 & cat /dev/ttyS1 > /dev/ttyS0 & sollte eigentlich schon alles sein was du brauchst.

Frank Buss, fb@frank-buss.de http://www.frank-buss.de, http://www.it4-systems.de

Hallo,

einen Einstieg in die Programmierung der ser. Schnittstelle unter Linux findest Du hier:

formatting link
formatting link
man termios

Die Doku zur glibc sollte auch ein paar Beispiele hergeben.

Gruß, Bernhard

Steffen schrieb:

Also wenn man es nicht kann sollte man es Leuten überlassen die es können. Zumindest wenn es eine Firmenlösung sein soll.

Und wozu soll sowas gut sein? Das ist per fertiger(!) oder selbstgebauter Hardwarelösung doch wesentlich simpler.

Ihc muss da echt lachen. Wozu denn so eoin Aufwand?

Nimm etwas fertige Hardware für ein paar EUR. Das funktioniert dann sicher und stabil im gegensatz zu einer Bastellösung auf Software wenn man noch gar keine Ahnung hat.

kommt drauf an!

Done - vielleicht erklärst du mal wozu das eigentlich gut sein soll. Um RS232-Daten von A nach B zu bekommen braucht man keine RS232 Repeater!

Das tun 2 kleine Wandler auf RS 422 oder 485 z.B. dann per 2 oder

4-Draht-Leitung über hunderte von Metern.

Und selbst per RS232 lassen sich locker große Entfernungen überbrücken wenn man eine niedrige Baudrate wählt. 100 Meter sind bei 2400 Baud kein Problem.

Gruss Wolfgang

Achtung Spamfilter: Bei Mailantwort muss das Subjekt das Wort NGANTWORT enthalten.

Und falls nicht, ist socat das Schweizer Taschenmesser für solche Angelegenheiten.

Ich vermute aber eher, daß die Aufgabe lediglich pädagogischen Nutzen haben soll.

Gruß Henning

"Simple" in welcher Hinsicht? Wartungs- und entwicklungstechnisch wäre es wesentlich simpler, wenn du stattdessen eine Skriptsprache wie Python (mit pyserial) benutzt.

Grüße,

Björn

BOFH excuse #307: emissions from GSM-phones

Wolfgang Gerber schrieb:

Zum Beispiel kann man mit einem so gestrickten Repeater die Übertragungsparameter (zum Beispiel die Baudzahl, haha) ändern.

Und bei deinem grandiosen "Tipp" kommen dann wieder so d.s.e-Postings raus in der Art "Suche einen RS232-Repeater als Bausatz, businesstauglich und im 19" Gehäuse für unter 15 EUR und das wichtigste: KEIN MICROCONTROLLER!!!"

Der typische Dummlall eines ahnungslosen Gerbers am Nachmittag.

Es ist echt entsetzlich, wie du dich immer aufspielst.

Viele Grüße, Johannes

"PS: Ein Realname wäre nett. Ich selbst nutze nur keinen, weil mich die meisten hier bereits mit Namen kennen." -- Markus Gronotte aka "Makus" aka "Kosst Amojan" aka "maqqusz" aka "Mr. G" in de.sci.electronics

Dann sollte ein Studium der Sourcecodes von Socat hilfreich sein.

Falk

Wenn schon "schummeln", dann kann er sich ja auch gleich meinen unkommentierten, vor einigen Jahren schnell zusammengeschusterten Kram angucken:

formatting link

Gruß Henning

Nachtrag:

Im Gegensatz zu deinem saudummen Geschwätz habe ich "Ahnungsloser" dem OP wenigsten einen Hilfeansatz gegeben und ihn durch meine Frage meine weitere Hilfsbereitschaft angeboten.

Du dagegen hast nur sinnlosen Provokationsmüll abgesondert!

*PLONK*

Ich bin kein Experte auf diesem Gebiet, hatte aber sowas in einer Anlage. Dabei mussten auch Zustaende der Leitungen beobachtet und gemeldet werden, zum Beispiel wenn jemand den D-Sub Stecker abgezogen hat. Man nennt das nicht Repeater (das waeren die Hardware Boxen), sondern "Re-director" oder "Redirector". Falls Du mit Google suchen moechtest.

In Windows Luxus-Version aus deutschen Landen in etwa das hier:

formatting link

Oder wende Dich direkt an den Hersteller in Frankfurt, ob die Euch nicht eine passende Routine verkaufen koennen:

formatting link

Gruesse, Joerg http://www.analogconsultants.com/

Hi,

nur um reinkommende Daten zB auf /dev/ttyS0 nach /dev/ttyS1 weiterzuschieben geht auch sowas wie cat /dev/ttyS0 > /dev/ttyS1 vorher evtl beide UARTs mit stty einstellen. Das Leben ist schoen wenn alles eine Datei ist ;)

man stty (oder auch setserial)

UARTs sind per se immer asynchron. Die RS232 Bausteine tasten nach eingegangenem Startbit die RxD Leitung mit (meistens) 16x overclocking ab und nehmen den Pegel der sozusagen "in der Mitte" herrschte. Darum muessen die Clocks nicht 100,000% stimmen.

Natuerlich haengt das alles noch davon ab ob die RS232-Quelle alle Jubeljahre ein paar bytes mit 2400 baud sendet, dann geht das obige problemlos, oder ob die die Schnittstelle mit 115200 oder noch schneller "zuballert".

Suche mal beim serial-programming HOWTO und der manpage von stty.

gruss, Thomas

Thomas Schnuerer schrieb:

Wahrscheinlich meint er die Feinheiten von blocking/non-blocking IO mit dem ganzen select()-Gedöns und was dazu gehört. Und raw-Zugriff vs. Interpretation durch einen etwaigen Konsolentreiber.

Gruß Henning

henning paul home: http://home.arcor.de/henning.paul PM: henningpaul@gmx.de , ICQ: 111044613

Dann wirf am besten C weg. Für all so ein Zeug nimmt man heute Python

formatting link
Und das PySerial Modul in diesem Fall.

Schau die paar Zeilen in "Short introduction" auf

formatting link
an. Sollte intuitiv klar sein.

oder gar nur den >>> Prompt interaktiv :-) Die Probier-Session ist dann geputzt quasi schon das Skript.

Grüsse Robert

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required