Kann mir bitte jemand eine Empfehlung geben, für eine SerialLib für
Java, die auch plattformübergreifend einfach nur funktioniert? Habe
bisher ca. 6 Stück ausprobiert, irgendwas ist immer - hier Beispiele:
1. JSerialCom: Läuft auf Mac sofort und einwandfrei, unter Windows 10
wird die Ausführung mit einem "problematic frame"-Error beim Auflisten
der vorhandenen Ports abgebrochen, was immer das auch sein mag
2. RxTx: Läuft nur unter Windows und der Anwender soll eine DLL händisch
irgendwo hin kopiereren - geht garnicht
3. Ardulink: Kann die notwendigen Importe nicht auflösen, obwohl die
externe jar-Lib natürlich korrekt im Erstellungspfad von Eclipse
eingetragen ist und auch im Projektordner angezeigt wird ...
4. JSSC: Läuft zwar ohne sichtbare Errors, findet aber auf dem Mac keine
Ports, obwohl der Arduino-Monitor das Gegenteil zeigt ...
Von JSerialCom kann ich sagen, daß sie funktioniert. Unter Windows 10,
mit FTDI-Treiber.
Kann es sein, daß das Problem eher auf deinem Rechner liegt? Das ein Lib
nicht geht-geschenkt. Aber vier?
Wühlhase schrieb:> Von JSerialCom kann ich sagen, daß sie funktioniert. Unter Windows> 10,> mit FTDI-Treiber.>> Kann es sein, daß das Problem eher auf deinem Rechner liegt? Das ein Lib> nicht geht-geschenkt. Aber vier?
Ich schrieb ja nicht, dass sie durchweg nicht funktionieren, aber eben
z.B. plattformübergreifend, was man jedoch von einer Java-Lib erwarten
sollte.
Ganz sicher lässt sich das eine oder andere Prpblem irgendwie lösen,
aber wenn ich z.B. Software ausliefern möchte, die mit der Seriellen
arbeitet, kann ich keinem Kunden zumuten, erst hier und da an seinem
System herumzuschrauben ...
Mein Eintritts-Test, noch bevor ich überhaupt versucht habe Daten zu
übertragen, war das Auflisten der vorhandenen Ports. Und schon das ging
nie wirklich auf Win UND Mac. Ist ja oben beschrieben.
Frank E. schrieb:> Ich schrieb ja nicht, dass sie durchweg nicht funktionieren, aber eben> z.B. plattformübergreifend, was man jedoch von einer Java-Lib erwarten> sollte.
Naja, bei hardwarenahen Geschichten ist das halt so eine Sache mit Java,
dafür ist es nie gebaut worden. Das ist ja in der Regel irgend ein
Programm z.B. C, daß einmal durch JNI gezogen wird.
Auch wenn es vielleicht nicht allzu prickelnd ist: Schreib dir doch eine
Wrapper-Klasse für zwei oder drei Bibliotheken und nimm dann die
Bibliothek, die zum OS passt.
Nach dem aktuellen Update funktioniert nun JSerialComm mit identischem
Code auf Win (Win 10) und Mac OSX (getestet unter 10.13 u. 10.14).
Wen es interessiert, hier eine einfache Testklasse:
Christoph M. schrieb:> Bei mir läuft JSSC auf allen Systemen einwandfrei: Linux,Win,MAC
Glaube ich nicht (so). Du musst zumindest unter Windows händisch noch
eine DLL kopieren. Und beim Einlesen der verfügbaren Ports
systemspezifische Pfade vorgeben ...
Ich habe nie behauptet, dass es mit entsprechenden Eingriffen und
Kenntnissen nicht geht, aber es geht definitiv nicht out-of-the-box.
Damit meine ich: 1 jar-File einbinden und einheitlichen Sourcecode
verwenden, sonst nix).
Letzteres war aber mein Kriterium, was nun mit der aktuellen Version von
JSerialComm erfüllt ist.
Ich lass mich aber gerne vom Gegenteil überzeugen.
Ich verwende das: https://github.com/nyholku/purejavacomm und
funktioniert alles einwandfrei unter Windows und Linux. Unter OSX hab
ich es aber noch nicht getestet.
TomW schrieb:> Ich verwende das: https://github.com/nyholku/purejavacomm und> funktioniert alles einwandfrei unter Windows und Linux. Unter OSX hab> ich es aber noch nicht getestet.
Danke für den Hinweis, das klingt zumindest dem Namen nach
vielversprechend, werde ich ausprobieren.
Frank E. schrieb:> Ich habe nie behauptet, dass es mit entsprechenden Eingriffen und> Kenntnissen nicht geht, aber es geht definitiv nicht out-of-the-box.> Damit meine ich: 1 jar-File einbinden und einheitlichen Sourcecode> verwenden, sonst nix).
Das geht zumindest unter Linux schon deshalb nicht, weil man erst mal
dem Benutzer die Berechtigung geben muss, auf den seriellen Port
zuzugreifen.
>> Damit meine ich: 1 jar-File einbinden und einheitlichen Sourcecode>> verwenden, sonst nix).>Das geht zumindest unter Linux schon deshalb nicht, weil man erst mal>dem Benutzer die Berechtigung geben muss, auf den seriellen Port>zuzugreifen.
Komischerweise geht das bei mir unter Ubuntu aber genau so.
Soweit ich weiß ist JSSC der Treiber der Arduino IDE und läuft damit auf
gefühlt 1Mio. Rechnern. Bei so viel Usern ist es ziemlich gesichert,
dass der Treiber funktioniert.
Ja, bei Ubuntu kann das sein. Der erste User, den man bei der
Installation als Default-User anlegt, hat erweiterte Berechtigungen.
Legt man einen zweiten User an oder nimmt eine Distribution, bei der das
nicht so ist, dürfte es nicht funktionieren. Denn neben root haben nur
die Benutzer, die in der Gruppe dialout sind, Zugriff auf die seriellen
Schnittstellen.
>Ja, bei Ubuntu kann das sein.
Vielleicht liegt's auch daran, dass ich die Arduino-IDE installiert habe
und die mit ihrem Installationsscript automatisch die Rechte für JSSC
freischaufelt.
Tja böse Welt...
Wenn man eine Anwendung will, die auf allen möglichen Platformen
funktioniert, dann muss man halt beim Setup oder beim Ausführen der
Anwendung entsprechend prüfen, ob die Vorgaben erfüllt sind und ggf.
gegensteuern.
Trotzdem wird man immer wieder auf irgendwelche Hindernisse stoßen und
das auch nicht dadurch lösen, das man sein Programm in Java schreibt.
Irgendwo ist Hardwarezugriff eben schon etwas anderes, wie nur ein paar
Fenster anzuzeigen.
Linux ist auch nicht gleich Linux und auch bei Windows ist es nicht
immer einfach ein Programm auf verschiedenen Versionen bereit zu
stellen.
Nicht umsonst scripten sich Administratorn die Finger wund um
Installationsscripte oder Anmeldescripte zu erstellen, die möglichst
immer funktionieren.
Wieso sollte es dann bei Java anders sein?
Logosoft von Siemens baut auch irgendwie auf Java auf, gewisse Treiber
müssen dort auch von Hand installiert werden.
Eigentlich ist es ein gutes Zweichen wenn nicht jeder Benutzer alles
darf, das Sicherheit eigentlich nie bequem ist, sollte ohnehin klar
sein.
>Wenn man eine Anwendung will, die auf allen möglichen Platformen>funktioniert, dann muss man halt beim Setup oder beim Ausführen der>Anwendung entsprechend prüfen, ob die Vorgaben erfüllt sind und ggf.>gegensteuern.
Deshalb empfehle ich ja JSSC: Die Arduino-IDE läuft bekanntlich auf sehr
vielen Platformen ( inclusive RaspPi ).
Mit PureJavaComm hatte ich Ärger:
https://github.com/nyholku/purejavacomm/issues/118
Am Ende musste ich einfach die Zeit für die Übertragung berechnen, und
Pausen einfügen. 8-(
Mittlerweile scheint PureJavaComm ein totes Projekt zu sein.
Ich nutze die RXTX-Lib unter Linux.
https://github.com/rxtx/rxtx
Das Problem was ich hier hatte, das war die seltsame Eigenart dass die
Kommunikation nicht funktioniert wenn man eine Baudrate von 38400 Baud
einstellt.
Die Wenglor-Sensoren arbeiten im Auslieferungszustand gerade auf der
Frequenz. Man konnte die Datenrate aber zum Glück beim Sensor umstellen,
das passiert vorher per Hand (nicht aus der Java-Anwendung heraus).
Vor Jahren hatte ich mal eine Matlab Anwendung die sowohl unter W7 wie
auch Ubuntu mit seriell erstaunlich gut gefunzt hat. Ist unter der Haube
auch alles Java und man könnte nachgucken was die da machen.