Wie kann ich mit einer seriellen Schnittstelle konfigurieren und kommunizieren?

stimmen
41

Ich brauche zum Senden und Empfangen von Daten über serielle Verbindungen (RS-232 und RS-422).

Wie kann ich mit einer solchen Verbindung und kommunizieren? Wie finde ich heraus, was die Konfigurationseinstellungen (zB Baudrate) sein sollte und wie richte ich sie?

Insbesondere ich dies zu tun, bin auf der Suche in Java, C / C ++, oder eine der wichtigsten Unix-Shells, aber ich habe auch ein gewisses Interesse an seriellen Programmierung unter Windows / Hyperterminal.

Veröffentlicht am 06/08/2008 um 04:19
quelle vom benutzer
In anderen Sprachen...                            


11 antworten

stimmen
28

Erstellen Sie eine Zeitmaschine und gehen bis 1987 zurück? Ho ho.

Ok, nicht mehr snarky Kommentare.

Wie kann ich herausfinden, was die Konfigurationseinstellungen (zB Baudrate) sein sollte ...

Lesen Sie das Datenblatt? OK OK. Im Ernst, letzten. Wenn Sie nicht die Baudrate des Geräts kennen, mit denen Sie kommunizieren wollen, haben Sie zwei Möglichkeiten. Starten Sie zu erraten, oder möglicherweise einen O-Umfang Büste. Wenn Sie einen guten Ausgangspunkt brauchen, lassen Sie mich 9600-8-N-1 vorschlagen. Mein Verdacht ist, dass Sie relativ schnell mit brutalen Gewalt bekommen es können. Es gibt eine dritte Möglichkeit, einen Old-School-Ninja zu haben, der nur durch den Blick der unlesbare Zeichen an einem gewissen Standard Baudrate sagen kann, was tatsächliches Baudrate ist. Eine eindrucksvolle Partei Trick sicher sein.

Hoffentlich wenn Sie den Zugriff auf diese Informationen haben. In Unix / Linux können Sie Ahold Minicom erhalten mit der seriellen Schnittstelle direkt zu spielen. Dies sollte es ziemlich schnell macht die Konfiguration erhalten herausgefunden.

einer der wichtigsten Unix-Shells

In Unix die serielle Schnittstelle (n) ist / sind Datei-mapped in das / dev / subdir. ttyS0, zum Beispiel. Wenn Sie Setup die richtige Baudrate und so weiter Minicom verwenden, können Sie auch Katze Zeug zu dieser Datei Sachen zu senden gibt.

Auf das Fleisch der Frage, können Sie darauf zugreifen die POSIX-Header programmatisch durch. termios.h ist die große.

Siehe: http://www.easysw.com/~mike/serial/serial.html#3_1 (nicht mehr verfügbar)

aber ich habe auch ein gewisses Interesse an seriellen Programmierung unter Windows / Hyperterminal.

Hyper und Minicom sind im Grunde das gleiche Programm. Was, wie Windows die können Sie den Zugriff auf den seriellen Port bekommen, werde ich diese Frage für jemand anderen verlassen. Ich habe nicht, dass in Windows seit dem Win95 Tagen durchgeführt.

Beantwortet am 06/08/2008 um 04:27
quelle vom benutzer

stimmen
10

Wenn Sie in Java programmieren möchte ich wirklich empfehlen SerialIOs Serialport . Es ist sehr einfach zu bedienen und spart Arbeitstage. Ich habe noch nie eine Open - Source - Bibliothek so gut wie SerialIO, wirklich gefunden!

Mein Rat: Verwenden Sie nicht von Sun seriellen IO Rahmen! Es ist von 1998 und voller Bugs. Sie können verwenden rxtx aber serialio ist besser!

Beantwortet am 23/08/2008 um 09:15
quelle vom benutzer

stimmen
8

Für C / C ++ unter Windows haben Sie (mindestens) zwei Möglichkeiten:

  1. Verwenden Sie die Serialport-Klasse von .NET zur Verfügung gestellt.
  2. Verwenden Sie die Win32 - API. Es gibt einen umfangreichen MSDN - Artikel aus dem Jahr 1995, und viele freie Bibliotheken und Beispiele im Web zum Einstieg.

Die .NET-Option wird viel einfacher.

Beantwortet am 13/08/2008 um 13:44
quelle vom benutzer

stimmen
4

Wenn es braucht Kreuz platfrom zu sein, würde ich vorschlagen , bei Boost - Suche Asio .

Beantwortet am 03/09/2008 um 13:12
quelle vom benutzer

stimmen
3

Vor einiger Zeit schrieb ich eine anständige Größe Anwendung zu routen Verbindungen von einem Bauernhof von Modem bis hin zu einer TCP / IP-Netzwerkadresse.

Zunächst suchte ich nach einer unbelastet (kostenlos) Serielle IO-Bibliothek. Ich habe versucht, Sun, IBM und RxTx. Sie waren in Ordnung, die Anwendung für die Entwicklung, und in ersten Tests, aber in der Produktion sie jeweils erwies sich als instabil.

Schließlich zahlte ich für SerialIO des Serialport. Umwandlung zu Ende war buchstäblich eine Übung bei der Veränderung der Einfuhr und die Bibliothek war absolut solide Rock - Ich kann es gar nicht genug empfehlen kann. Mein Antrag wird nun im Bereich 24/7 für ein paar Jahre läuft, mit nicht einem einzigen Problem , das durch mehrere Kunden auftreten.

Wenn Sie die Entwicklung mit Serialport zu starten, sie haben eine bessere API und ich würde es benutzen.

Wenn Sie Cross-Plattform-Unterstützung benötigen, Java mit Serialport war die beste Wahl, die ich finden konnte.

Schließlich ist ihre Lizenz verflixt vernünftig, solange Sie keine Software für Ihre Kunden auf dem Gerät vorinstallieren (s).

Beantwortet am 15/09/2008 um 20:16
quelle vom benutzer

stimmen
3

Bei der Arbeit verwenden wir TeraTerm und Realterm für die serielle Datenprüfung korrekt formatiert ist. Auch wir haben einen Hardware-Splitter mit einem Schalter, so dass wir Traffic auf unsere Anwendung über ein Kabel an einem anderen Anschluss überwachen.

Windows ermöglicht es Ihnen, über Createfile an die serielle Schnittstelle zugreifen. Das gibt Ihnen einen Griff und von dort aus können Sie den Zugriff konfigurieren.

Beantwortet am 06/08/2008 um 06:04
quelle vom benutzer

stimmen
3

Von der anderen Seite, wenn Sie es mit C # tun wollen, die auf Windows und Linux laufen wird - mit einigen Einschränkungen (EDIT:. , Die veraltet sein kann ich keine Möglichkeit haben , es zu testen.). Nur eine erstellen Serialport - Objekt, setzen Sie den Baudraten, Hafen- und alle anderen ungeraden Einstellungen, rufen Sie offen auf, und schreiben Sie Ihre byte [] s. Nach all der Einrichtung wirkt das Serialport - Objekt zu jedem vernetzten Strom sehr ähnlich, so sollte es einfach genug sein , um herauszufinden.

Und wie ibrandy Staaten, müssen Sie all diese Einstellungen wissen, wie Baudrate, bevor Sie sogar zu jedem seriellen Gerät zu kommunizieren beginnen versucht.

Beantwortet am 06/08/2008 um 04:35
quelle vom benutzer

stimmen
2

Von Java die rxtx ( nicht mehr erhältlich ist) Bibliothek recht gut. Es knüpft an Suns serielle IO Rahmen aufhörte.

Beantwortet am 08/08/2008 um 21:24
quelle vom benutzer

stimmen
1

Wenn Sie nicht gezwungen sind, einen bestimmten Compiler zu verwenden, schlage ich Qt zu verwenden und in der neuen Version 5.3 finden Sie eine Klasse auf serielle Schnittstellen gewidmet finden:

http://qt-project.org/doc/qt-5/qserialport.html

Der Code, den Sie schreiben, wird auf allen supprited Qt Plattformen laufen, zumindest diejenigen, die seriellen Ports.

Beantwortet am 06/09/2014 um 14:01
quelle vom benutzer

stimmen
1

Je nach Gerät kommunizieren Sie versuchen, kann es mehr Parameter als die Baudrate sein, die Anzahl der Datenbits, die Art der Paritätsprüfung und Anzahl der Stoppbits zu berücksichtigen. Wenn ich mich richtig erinnere, verwendet Modem neun Zeilen der RS-232C-Schnittstelle. Einige Geräte wie zB Kassen, können Hardware-Handshake auf RTS / CTS-Leitungen oder auf DTR / STR Linien verwenden.

Im Allgemeinen ist es gut zu wissen, wie die Schnittstelle funktioniert. Sie können nicht miteinander kommunizieren, wenn die Baudrate nicht übereinstimmt, aber falsche Einstellung anderer Parameter könnte Art von Arbeit. Zum Beispiel können Sie ganz leicht die Daten an das Gerät erwartet 1 Stoppbit mit 2 Stoppbits eingestellt senden. Probleme beginnen, wenn Sie versuchen, Daten in einem solchen Fall zu erhalten. Sie können auch in geeigneter Weise eingestellt Paritätsbit als einer der Stoppbits verwenden usw.

Beantwortet am 23/09/2008 um 02:21
quelle vom benutzer

stimmen
0

Ich habe mit purejavacomm: Es ist eine Implementierung von javax.comm in reinem Java geschrieben + JNA

Im Gegensatz zu rxtx, brauchen Sie nicht eine DLL zu installieren. Es ist in Java + JNA geschrieben, die das Problem der Portabilität zwischen Windows und Linux für mich gelöst. Es sollte auf andere OS-es in dem Hafen einfach sein, die JNA, wie Solaris und FreeBSD unterstützt, aber ich habe es nicht versucht.

Sie könnten eine reine Java-Bibliothek erwarten hinter einer nativen Implementierung wie rxtx in der Leistung hinken, aber mit modernem CPUs, der Engpass ist sehr wahrscheinlich, dass die Bitrate der seriell Port, nicht CPU-Zyklen sein. Außerdem ist es viel einfacher zu debuggen als eine gemischte Java / Native Bibliothek oder reiner kompilierten nativen Code.

Beantwortet am 18/03/2013 um 11:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more