Wie kann ich konfigurieren und die Kommunikation mit einem seriellen port?[geschlossen]

StackOverflow https://stackoverflow.com/questions/3049

  •  08-06-2019
  •  | 
  •  

Frage

Ich brauche zum senden und empfangen von Daten über serielle Anschlüsse (RS-232 und RS-422).

Wie richte ich, und die Kommunikation mit einer solchen Verbindung?Wie finde ich heraus, was die Konfiguration von Einstellungen (z.B.baud rate) sein sollte und wie setze ich Sie?

Insbesondere bin ich auf der Suche um dies zu tun, die in Java, C/C++ oder einer der Unix-shells ich habe aber auch etwas Interesse in die serielle Programmierung mit Windows/Hyperterminal.

War es hilfreich?

Lösung

Bauen eine Zeitmaschine und gehen zurück bis 1987?Ho, Ho, Ho.

Ok, nicht mehr snarky Kommentare.

Wie finde ich heraus, was die Konfiguration von Einstellungen (z.B.baud-rate) werden sollte...

Lesen Sie die Datenblatt?Ok, ok.Im ernst, Letzte.Wenn Sie nicht wissen, die Baudrate des Gerätes, das Sie versuchen zu kommunizieren, mit, haben Sie zwei Möglichkeiten.Beginnen zu raten, oder ggf. Büste aus einem o-scope.Wenn Sie brauchen, ein guter Ausgangspunkt, lassen Sie mich vorschlagen, 9600-8-N-1.Mein Verdacht ist, können Sie es mit brute-force relativ schnell.Es gibt eine Dritte option, mit einem old-school ninja, die können nur sagen, durch den BLICK des unlesbare Zeichen an einigen standard-baud-rate, was die tatsächliche übertragungsrate ist.Ein eindrucksvoller partytrick, um sicher zu sein.

Hoffentlich aber Sie haben Zugang zu diesen Informationen.In unix/linux können Sie ahold von minicom zu spielen mit die serielle port direkt.Dies sollte es ziemlich schnell um die Konfiguration herausgefunden.

eine der wichtigsten Unix-shells

In Unix der serielle port(s) ist/sind Datei-Zuordnung in der /dev/ subdir.ttyS0, zum Beispiel.Wenn Sie setup die richtige baud-rate und so weiter mit minicom, Sie können sogar die Katze Zeug, um die Datei zu senden Zeug gibt.

Auf, um das Fleisch der Frage, Sie können es programmgesteuert durch die POSIX-Header.termios.h ist der große.

Siehe: http://www.easysw.com/~mike/serial/serial.html#3_1 (NICHT MEHR ERHÄLTLICH)

aber ich habe auch einige Interesse an der seriellen Programmierung mit Windows/Hyperterminal.

Hyperterminal und minicom sind im wesentlichen das gleiche Programm.Wie Windows-lasst uns bekommen Sie Zugang zu den seriellen port, lasse ich diese Frage für jemand anderen.Ich habe das nicht getan in Windows seit Win95 Tage.

Andere Tipps

Wenn Sie wollen, um code in Java, die ich wirklich empfehlen SerialIOs SerialPort.Es ist sehr einfach zu bedienen und spart den Tag der Arbeit.Ich habe nie gefunden, ein open-source-Bibliothek so gut wie SerialIO, WIRKLICH!

Mein Rat:verwenden Sie keine Sonne serial IO framework!Es ist von 1998 und voller bugs.Sie können verwenden rxtx - aber serialio ist besser!

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

  1. Verwenden Sie die SerialPort-Klasse wird zur Verfügung gestellt von .NET.
  2. Die Win32-API verwenden.Es ist ein umfangreiche MSDN-Artikel Datierung auf das Jahr 1995 zurück, und viele freie Bibliotheken und Beispiele auf dem web zu erhalten Sie begonnen.

Die .NET-option wird viel einfacher sein.

Wenn es sein muss, cross-Plattform, würde ich vorschlagen, Blick auf Boost Asio.

Bei der Arbeit benutzen wir teraterm und realterm für die überprüfung von seriellen Daten richtig formatiert sind.Auch wir haben eine hardware-splitter mit einem Schalter, so können wir den Verkehr überwachen zu unserer Anwendung über ein-Kabel mit einem anderen Anschluss.

Windows ermöglicht Ihnen den Zugriff auf den seriellen port via CreateFile.Das gibt Ihnen einen Griff, und Sie können von dort aus konfigurieren.

Eine Weile zurück, schrieb ich eine anständige Größe der Anwendung weiterleiten von verbindungen, die aus einer farm des modems über ein TCP/IP-Netzwerk-Adresse.

Zunächst schaute ich für ein frei (frei) Serial IO library.Ich habe versucht, Sun, IBM und RxTx.Sie waren in Ordnung für die Anwendung entwickeln und in ersten Tests, aber in der Produktion Sie jedes erwies sich als instabil.

Schließlich bezahlte ich für SerialIO ist SerialPort.Konvertieren vorbei war buchstäblich eine übung im Wandel der Importe, und die Bibliothek wurde absolut rock-solid - ich kann nicht empfehlen es genug.Meine Anwendung ausgeführt worden ist, in das Feld 24/7 für ein paar Jahre jetzt, mit nicht einem einzigen Probleme, die von mehreren Kunden.

Wenn Sie starten Sie die Entwicklung mit SerialPort, Sie haben eine bessere API und ich würde es.

Wenn Sie brauchen, cross-Plattform-Unterstützung, Java mit SerialPort war die beste Entscheidung, die ich finden konnte.

Schließlich die Lizenzierung ist verdammt sinnvoll, solange Sie nicht vorinstallieren software auf die Geräte für Ihre Kunden(s).

Von der anderen Seite, wenn Sie es wollen, die mithilfe von C#, die auf Windows-und Linux-mit einigen Einschränkungen (BEARBEITEN:welche veraltet sein können.Ich habe keine Möglichkeit es zu testen.).Erstellen Sie einfach einen SerialPort Objekt, stellen Sie dessen baudrate, port und alle anderen ungeraden Einstellungen rufen Sie auf Sie zu öffnen, und schreiben Sie Ihr byte[]s.Nach all dem setup, das SerialPort-Objekt wirkt sehr ähnlich zu jedem Netzwerk-stream, so sollte es leicht genug sein, um herauszufinden,.

Und als ibrandy Staaten, die Sie benötigen, zu wissen, alle diese Einstellungen wie Baudrate, bevor Sie beginnen sogar versucht zu kommunizieren, um jedes serielle Gerät.

Je nach dem Gerät, das Sie versuchen zu kommunizieren, mit, möglicherweise gibt es mehr Parameter als die Baudrate, Anzahl Daten-bits, die Art der Parität und Anzahl der stop-bits zu beachten.Wenn ich mich Recht erinnere, modems verwenden, die neun Zeilen der RS-232C-Schnittstelle.Einige Geräte, wie zum Beispiel Registrierkassen, kann mit hardware-Handshake über RTS/CTS-Leitungen oder DTR/STR-Linien.

Im Allgemeinen ist es gut zu wissen, wie die Schnittstelle funktioniert.Sie können nicht miteinander kommunizieren, wenn die Baudrate nicht mit dem übereinstimmt, aber falsche Einstellung anderer Parameter kann die Art der Arbeit.Zum Beispiel können Sie ganz einfach senden von Daten an das Gerät erwartet, 1 Stopp-bit mit 2 Stopp-bits einstellen.Die Probleme beginnen, wenn Sie versuchen, Daten zu empfangen, in diesem Fall.Sie können auch entsprechend eingestellt parity-bit zu einem der stop-bits, etc.

Wenn Sie sind nicht gezwungen, einen bestimmten compiler, schlage ich Qt und in der neuen version 5.3 finden Sie eine Klasse gewidmet serielle ports:

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

Der code, den Sie schreiben, wird auf allen supprited Qt-Plattformen, zumindest jene, die über serielle ports.

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

Im Gegensatz zu rxtx, Sie brauchen nicht zu installieren, eine dll.Es ist in Java geschrieben + JNA, die das problem der Portabilität zwischen Windows und Linux für mich.Es sollte einfach Anschluss zu anderen OS,-es, die JNA unterstützt, wie die Solaris-und FreeBSD, aber ich habe es nicht versucht.

Sie erwarten eine Reine java-Bibliothek, um hinter eine native Implementierung wie rxtx in der Leistung, aber mit modernen CPU der Engpass ist sehr wahrscheinlich, dass die bitrate der seriellen port, keine CPU-Zyklen.Auch, es ist viel einfacher zu Debuggen als in einem gemischten Java/Native Bibliothek oder Reine kompilierte native code.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top