PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : serielle RS232 Schnittstelle



WiWil
02-09-2005, 00:31
Hallo,

ich muss mit JAVA zum Datenaustausch auf die serielle Schnittstelle vom PC zugreifen. Dies sollte sowohl unter Windows als auch unter Linux funktionieren.
Leider habe ich keine Ahnung, wie ich da anfangen soll, gibt es jemanden, der ein Tutorial oder ähnliches kennt, darf auch englisch sein. Ich habe bisher nur was für andere Programmiersprachen gefunden.

Gruß
WiWil

nul
02-09-2005, 08:13
Nach was hast du denn gesucht?
Hilft das (http://java.sun.com/products/javacomm/index.jsp) vielleicht weiter?

mfg

mwanaheri
02-09-2005, 08:45
Das wird möglicherweise etwas umständlich, denn für windows und Linux sind zwei verschiedene Möglichkeiten vorhanden. Aus den FAQ von http://java.sun.com/products/javacomm/reference/faqs/index.html


Q: Is there a linux version of the Java communications API?

A: We do not provide a linux implementation. But Kevin Hester has written Java communications API drivers for linux and uses our CommPort driver loading scheme to load his own gnu.io.RXTXCommDriver class. He gave us permission to disclose his web page:

http://www.geeksville.com/~kevinh/linuxcomm.html
http://wass.homelinux.net/howtos/Comm_How-To.shtml


Für Windows ist ein Beispielprogramm unter
http://www.fh-niederrhein.de/~gkorsch/javakurs/wn8/wn8.htm
zu finden

WiWil
06-09-2005, 16:37
Vielen Dank für die Quellen, so langsam klappt es

anda_skoa
06-09-2005, 18:44
Aus den FAQ von http://java.sun.com/products/javacomm/reference/faqs/index.html


Ich gebe zu das grenz ziemlich an Flamebait, aber ich finde diese Aussage in der FAQ zeigt sehr schön, daß Sun nicht das geringste Interesse daran hat, Java unter Linux äquivalent zu unterstützen.

Ciao,
_

mwanaheri
06-09-2005, 21:10
Ich gebe zu das grenz ziemlich an Flamebait, aber ich finde diese Aussage in der FAQ zeigt sehr schön, daß Sun nicht das geringste Interesse daran hat, Java unter Linux äquivalent zu unterstützen.

Ciao,
_

Stimmt schon, es wäre erheblich schöner, wenn das einheitlich ginge. So lohnt es sich, alle Zugriffe über eine Broker-Klasse zu handhaben, die man je nach OS unterschiedlich gestalten muss. Also eineinhalbfache Arbeit.

Cyrus
30-09-2005, 21:25
Ich habe auch so meine Probleme mit der Kommunikation über diese serielle Schnittstelle, vielleicht kann mir jemand helfen ...

Folgende Ausgangssituation: An den Rechner ist am Com-Port eine Art Roboter angeschlossen. Dieser kann durch Eingabe von Befehlen aus einem Stapel CDs die oberste nehmen und sie irgendwo anders wieder ablegen (z.B. im CD-Laufwerk).

Die Eingabe der Befehle habe ich über das Hyperterminal gestestet, dort läuft es ohne Probleme.
Nun wollte ich ein Java-Programm schreiben, welches mir ermöglicht automatisch mehrere Befehle hintereinander abzuarbeiten.

Das Programm sieht derzeit so aus, dass ein String (also der Befehl) zu dem Gerät geschickt wird und anschließend eine Rückmeldung des Geräts - auch über die Schnittstelle - erfolgt. Das funktioniert auch alles soweit, jedoch nur beim erstmaligen Programmaufruf. Wenn das Programm ein zweites Mal aufgerufen wird, gibt es eine unverständliche Fehlermeldung vom Gerät - ich muss es erst per Hand reseten.

Hat jemand von euch Ideen? Benötigt ihr den Quellcode?

Habe gerade eben folgendes ausgetestet: Erstmaliger Programmaufruf -> funktioniert, wie bekannt. Dann habe ich aber mal Hyperterminal aufgemacht und dort einen Befehl eingegeben -> funktionierte auch nicht. D.h. irgendwie muss da noch was "falsches im roboter" sein, was ich bei meinem Aufruf nicht mit entferne. Der Fehlercode den mir der Roboter schickt, steht für "Bad or unrecognized command".

Eventuell hat es ja mit folgendem zu tun - nur ne Vermutung: Nach jedem Befehl den ich schicke braucht das Gerät einen Carriage Return (1 Zeichen). Ich habe das immer wie folgt geregelt: "Befehl\n" ...

mwanaheri
02-10-2005, 15:16
Das \n macht zwar bestimmt eine Textausgabe für den Leser einfacher, für den Robo dürfte das aber wohl nichts bekanntes sein oder schlimmer, etwas anderes. Du solltest wirklich nur benötigte Sachen schicken.

Cyrus
03-10-2005, 04:12
Ja schon klar. Der Roboter verlangt nach dem Befehl aber immer ein Carriage Return, sonst wird der Befehl nicht verarbeitet.

Laut Manual is es ein 0x0D oder sowas, hab es gerade nicht hier. Wie mache ich das in Java?

mwanaheri
04-10-2005, 09:10
wie oben schon angemerkt, habe ich vom Arbeiten mit rs232 keine Ahnung, allerdings weiß ich ja, dass es da spezielle Klassen gibt. Wie schickst du denn die Sachen an die Schnittstelle? wenn du es mit println tust, sollte der carriage-return schon dabei sein.

Cyrus
04-10-2005, 17:24
Ja, da steckte auch schon der Fehler: print("Command\r") <- so gehts ... - danke für eure Hilfe.