2009-03-12 8 views
6

Wir verwenden eine Java-Anwendung, die ein Pinpad über die serielle Schnittstelle verwaltet. Dies funktioniert perfekt in Windows mit der Sun Comm.jar, der mitgelieferten DLL und der Eigenschaftendatei.Wie bekomme ich Java, um den seriellen Port unter Linux zu benutzen?

Jetzt versuchen wir, diese Lösung auf Linux zu verwenden (eigentlich läuft es auf verschiedenen anderen Linux-Varianten im Feld) - mit Ubuntu-Server-Modus.

Nach vielen Versuchen - Blut, Schweiß und Tränen fast haben wir dieses Szenario:

Java-Version 1.4.2_17 Linux - Ubuntu Comm Libs - Comm3 von Sonne mit den Standard-Treiber geliefert

angegeben

Ein externer comm Test zeigt den comm-Ports:/dev/ttyS0 und/dev/ttyS1 Aber die Java-Anwendung sagt nicht mehr Port/dev/ttyS1

(unter Verwendung der RXRT Dateien erzeugt ungültige Portfehler) öffnen

Kann jemand Java 1.4.2 unter Linux für die serielle Kommunikation verwenden und fand eine Lösung, die ich in meinem Szenario anwenden könnte?

schätzten

Phill

+0

Sind Sie sicher, dass der Java-Prozess die Berechtigung hat,/dev/ttyS [01] zu öffnen? –

+0

Was ist der Fehler? Und ich stimme Eugene zu, dass es wahrscheinlich ist, Berechtigungen – TofuBeer

+0

irgendwelche Lösungen für dieses Problem? Ich habe auch denselben Fehler. – Joe

Antwort

1

Es ist schon eine Weile her, seit ich das getan habe. Ich erinnere mich, dass man/dev/ttyS0 nicht einfach als Datei und I/O öffnen kann.

Ich erinnere mich, das gleiche Problem mit Sun IO-Gläsern auch zu haben.

Die Lösung, an die ich mich erinnern konnte, bestand darin, ein kleines Befehlszeilenprogramm in C zu erstellen, das stdin an die serielle Schnittstelle und die serielle Schnittstelle an stdout anzeigte. Dann startete ich dieses Programm von meinem Java-Prozess. Ich habe den Code nicht, aber es gibt viele Beispiele im Web für c-Programme, die auf serielle Linux-Ports schreiben.

+0

hmmm, ich habe dem Kerl in Neuseeland eine Lösung angeboten, die hier Hilfe sucht. Aber ich muss auf morgen (11 Stunden) warten, um zu sehen, ob sie irgendwo hinkommen. Dann werde ich meinen Fund hier platzieren. danke mann –

2

Stellen Sie sicher, dass Sie einen Benutzer mit Berechtigungen für den Zugriff auf die seriellen Anschlüsse verwenden. Einige Distributionen fügen die seriellen Ports in die Gruppe "uucp" ein. Stellen Sie daher sicher, dass der Benutzer dieser Gruppe angehört.

1

Wir haben die SerialIO-Bibliotheken für Java serielle Kommunikation sowohl unter Windows und Linux bereits seit mehreren Jahren mit sehr guten Ergebnissen (und nein, ich nicht für sie :-) arbeiten):

http://serialio.com/products/serialport/serialport.php

Die Bibliotheken erkennen die verfügbaren seriellen Anschlüsse unter Linux nicht automatisch - Sie müssen sie manuell konfigurieren.

+0

Hallo tony, ich versuche SerialIO in Ubuntu zu konfigurieren. Ich bekomme die native lib korrekt geladen für meine ubuntu 64bit, aber wenn ich versuche, einen Port zu öffnen bekomme ich javax.comm.NoSuchPortException:/dev/ttyUSB0: nicht in der Portliste gefunden. aber das Gerät ist da und es wird von keiner anderen App verwendet. Jede Hilfe wird sehr geschätzt. Vielleicht kann ich eine Frage stellen, die du beantworten kannst? Vielen Dank! –

+0

@DavidHofmann Oooooo ... es ist ein paar Jahre her, dass ich an dem Zeug gearbeitet habe - nicht sicher, ob ich den Code überhaupt habe :-(. Ich erinnere mich aber genau an dieses Problem und ich * denke * ich musste manuell hinzufügen/dev/tty/USB0: zu einer config-Datei, die * ich glaube * den USB-Port an eine serielle Schnittstelle gemappt habe.Nicht viel Hilfe befürchte ich :-(. Ich werde jagen und schauen, ob ich den Original-Code ausgraben kann . – tonys

0

Wir haben nicht viel geändert, nichts in den Bibliotheken verwendet. aber das Entfernen der Verwendung eines EventListener auf dem seriellen Port-Objekt behebt das Problem.

Dies ermöglichte tatsächlich unseren Code auf Linux zu arbeiten (jre1.4.2, Slackware und Suns Comm3 Treiber), wo dies kein Problem auf Windows - seltsam war.

Phill

3

Ich weiß, dass dies eine alte Frage, aber ich habe ein Java-Paket und native Bibliothek ermöglichen serielle Schnittstelle lesen und schreiben, die derzeit im synchronen Modus nur erstellt.

Es ist Open-Source und auf GitHub:

j232 - Der Java-Quellcode

libj232 - der j232 native Bibliothek.

Die Wiki-Seite ist .

Hinweis: Dies ist ein Linux-Paket und -Bibliothek.

Verwandte Themen