Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Frage Entwicklung Java

Mit RXTX Daten von serieller Schnittstelle lesen

Mitglied: mabue88

mabue88 (Level 2) - Jetzt verbinden

08.09.2014, aktualisiert 08:57 Uhr, 3845 Aufrufe, 3 Kommentare, 1 Danke

Hallo,

bislang habe ich überwiegend in C# programmiert. Da ich jetzt aber auf Linux umgestiegen bin scheint mir Java die bessere Wahl zu sein.

Ich benötige ein Programm, das kontinuierlich Daten von der seriellen Schnittstelle einliest und sie in der Konsole ausgibt. An die serielle Schnittstelle ist ein Gerät angeschlossen, das selbstständig kontinuierlich Daten an den PC sendet.

Auf http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java habe ich eine Anleitung gefunden. Allerdings habe ich es übers Wochenende noch nicht geschafft Daten einzulesen. Bislang steht der gesamte Code in der Main. Innerhalb der Einarbeitungsphase reicht das auch erstmal.

01.
import gnu.io.*; 
02.
 
03.
import java.io.BufferedReader; 
04.
import java.io.IOException; 
05.
import java.io.InputStreamReader; 
06.
import java.util.Enumeration; 
07.
  
08.
 
09.
public class RxTxTest { 
10.
	public static void main(String[] args){ 
11.
		String wantedPortName = "/dev/ttyUSB0"; 
12.
		 
13.
		Enumeration portIdentifiers = CommPortIdentifier.getPortIdentifiers(); 
14.
		 
15.
		CommPortIdentifier portId = null;  // will be set if port found 
16.
		while (portIdentifiers.hasMoreElements()) 
17.
18.
		    CommPortIdentifier pid = (CommPortIdentifier) portIdentifiers.nextElement(); 
19.
		     
20.
		    System.out.println(pid.getName()); 
21.
		    if(pid.getPortType() == CommPortIdentifier.PORT_SERIAL && 
22.
		       pid.getName().equals(wantedPortName))  
23.
24.
		        portId = pid; 
25.
		        break; 
26.
27.
28.
		if(portId == null) 
29.
30.
		    System.err.println("Could not find serial port " + wantedPortName); 
31.
		    System.exit(1); 
32.
33.
		 
34.
		SerialPort port = null; 
35.
		try { 
36.
		    port = (SerialPort) portId.open( 
37.
		        "name", // Name of the application asking for the port  
38.
		        10000   // Wait max. 10 sec. to acquire port 
39.
		    ); 
40.
		} catch(PortInUseException e) { 
41.
		    System.err.println("Port already in use: " + e); 
42.
		    System.exit(1); 
43.
44.
		 
45.
		try { 
46.
			port.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); 
47.
		} catch (UnsupportedCommOperationException e) { 
48.
			// TODO Auto-generated catch block 
49.
			e.printStackTrace(); 
50.
			System.exit(1); 
51.
52.
		 
53.
		BufferedReader is = null;  // for demo purposes only. A stream would be more typical. 
54.
 
55.
		try { 
56.
		  is = new BufferedReader(new InputStreamReader(port.getInputStream())); 
57.
		} catch (IOException e) { 
58.
		  System.err.println("Can't open input stream: write-only"); 
59.
		  is = null; 
60.
61.
		 
62.
		String my_buffer = ""; 
63.
		 
64.
		///////////////////////////////////////////////////////////////////////////////////////// 
65.
		///////////////////////////////////////////////////////////////////////////////////////// 
66.
		/*try { 
67.
			my_buffer = is.readLine(); 
68.
		} catch (IOException e) { 
69.
			System.out.println("Fehler beim Lesen"); 
70.
			//e1.printStackTrace(); 
71.
		}*/ 
72.
		///////////////////////////////////////////////////////////////////////////////////////// 
73.
		///////////////////////////////////////////////////////////////////////////////////////// 
74.
		 
75.
		if (is != null) 
76.
			try { 
77.
				is.close(); 
78.
			} catch (IOException e) { 
79.
				// TODO Auto-generated catch block 
80.
				//e.printStackTrace(); 
81.
				System.out.println("IS ist bereits geschlossen"); 
82.
83.
		if (port != null) port.close(); 
84.
		System.out.println("Fertig"); 
85.
86.
}
Das ist aktuell das Grundgerät. Der Teil zum Einlesen von Daten ist auskommentiert. Entferne ich die Kommentarzeichen, so kommt ein Fehler
01.
02.
# A fatal error has been detected by the Java Runtime Environment: 
03.
04.
#  SIGSEGV (0xb) at pc=0x00007f0c9c737462, pid=6442, tid=139692467468032 
05.
06.
# JRE version: OpenJDK Runtime Environment (7.0_65-b32) (build 1.7.0_65-b32) 
07.
# Java VM: OpenJDK 64-Bit Server VM (24.65-b04 mixed mode linux-amd64 compressed oops) 
08.
# Problematic frame: 
09.
# C  [librxtxSerial.so+0x6462]  read_byte_array+0x52 
10.
11.
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again 
12.
13.
# An error report file with more information is saved as: 
14.
# /home/matthias/workspace/SwissphoneClient/hs_err_pid6442.log 
15.
16.
# If you would like to submit a bug report, please include 
17.
# instructions on how to reproduce the bug and visit: 
18.
#   http://icedtea.classpath.org/bugzilla 
19.
# The crash happened outside the Java Virtual Machine in native code. 
20.
# See problematic frame for where to report the bug. 
21.
22.
Experimental:  JNI_OnLoad called.
Der verwendete Linux-Benutzer hat die Berechtigung auf die serielle Schnittstelle zuzugreifen.
In der angegebenen Error-Report-Datei finde ich mich (noch) nicht wirklich zurecht.

Kennt jemand so ein Problem und weiss an was es liegt?

Danke
mabue
Mitglied: Lochkartenstanzer
08.09.2014 um 09:37 Uhr
Moin,

Ist /dev/ttyUSB0 wirklich der richtige Port? Unter linux heißen die seriellen Schnittstellen üblicherweise /dev/ttySX.

hast Du mal ein einfaches cat /dev/ttyS0 oder ein cat /dev/ttyUSB0 in der shell versucht? Ggf. vorher mit stty noch die Parameter richtig setzen.

lks
Bitte warten ..
Mitglied: maretz
08.09.2014 um 09:38 Uhr
Moin,

was steht denn in der Log drin?

Generell ist es allerdings keine gute Idee mit Java auf Hardware zuzugreiffen - da das dann nicht mehr Plattform-Unabhängig ist. Was ich empfehlen kann: Es gibt von VLinx einen Serial2IP-Konverter - schon kannst du das ganz normal per Socket / Netzwerk machen und bleibst unabhängig vom OS... (Falls das eine Alternative ist).

Ich würde aber mal davon ausgehen (als erster Tipp ins Blaue) das du einfach von der entsprechednen SO-File (Treiber) eine falsche Version hast...

Gruß,

Mike
Bitte warten ..
Mitglied: mabue88
08.09.2014, aktualisiert um 09:55 Uhr
@Lochkartenstanzer:

"/dev/ttyUSB0" ist definitiv richtig. Ich verwende einen USB-RS232-Adapter.
Mit einem kleinen Python-Programm kann ich die Daten vom Gerät auch schon wunderbar empfangen.
Das Öffnen und Schließen des Port funktioniert ja auch problemlos. Die Fehler treten erst auf, wenn ich versuch Daten vom Port zu lesen.


@maretz:

Mit über 500 Zeilen will ich den Inhalt der Log nicht hier einfügen. Ich habe sie aber mal online gestellt: http://www.file-upload.net/download-9496632/hs_err_pid8186.log.html
Bitte warten ..
Ähnliche Inhalte
Virtualisierung
Serielle Schnittstellen durchreichen, Erfahrungen
gelöst Frage von WinuserVirtualisierung9 Kommentare

Hallo, ich stehe vor der Aufgabe, einen alten XP Rechner zu virtualisieren, der bisher zur Maschinensteuerung genutzt wurde. Dieser ...

Peripheriegeräte
Serielle Schnittstelle verhält sich nicht Logisch
Frage von Wolfgang-BPeripheriegeräte6 Kommentare

Bei einen POS System von Shuttle haben wir eine Serielle Schnittstellenkarte eingebaut (PCL71) um einen Seriellen Drucker und ein ...

Netzwerke
Serielle Schnittstelle über W-LAN
gelöst Frage von apranetNetzwerke26 Kommentare

Hallo zusammen, mein guter Netzwerk-Mann hatte so ein geiles Ding, womit man eine Serielle Schnittstelle über WLAN/Bluetooth benutzen kann. ...

Peripheriegeräte
Serielle Schnittstelle unter Windows Server 2016
gelöst Frage von meromePeripheriegeräte5 Kommentare

An einem Windows Server 2016 würde ich gerne eine ältere APC Smart-UPS anschließen. Die USV hat nur seriellen Anschluss. ...

Neue Wissensbeiträge
Linux

Meltdown und Spectre: Linux Update

Information von Frank vor 2 TagenLinux

Meltdown (Variante 3 des Prozessorfehlers) Der Kernel 4.14.13 mit den Page-Table-Isolation-Code (PTI) ist nun für Fedora freigegeben worden. Er ...

Tipps & Tricks

Solutio Charly Updater Fehlermeldung: Das Abgleichen der Dateien in -Pfad- mit dem Datenobject ist fehlgeschlagen

Tipp von StefanKittel vor 3 TagenTipps & Tricks

Hallo, hier einmal als Tipp für alle unter Euch die mit der Zahnarztabrechnungssoftware Charly von Solutio zu tun haben. ...

Sicherheit

Meltdown und Spectre: Wir brauchen eine "Abwrackprämie", die die CPU-Hersteller bezahlen

Information von Frank vor 3 TagenSicherheit12 Kommentare

Zum aktuellen Thema Meltdown und Spectre: Ich wünsche mir von den CPU-Herstellern wie Intel, AMD oder ARM eine Art ...

Sicherheit

Meltdown und Spectre: Realitätscheck

Information von Frank vor 3 TagenSicherheit12 Kommentare

Die unangenehme Realität Der Prozessorfehler mit seinen Varianten Meltdown und Spectre ist seit Juni 2017 bekannt. Trotzdem sind immer ...

Heiß diskutierte Inhalte
Firewall
Penetrationstester-Labor - Firewalls
Frage von Oli-nuxFirewall10 Kommentare

Mich würde interessieren warum man beim Einrichten eines Penetrationstester-Labor (VMs) die Firewall der Systeme deaktivieren soll? Hat das nur ...

SAN, NAS, DAS
Wer kennt sich mit QNAP und CISCO aus ?
gelöst Frage von MachelloSAN, NAS, DAS9 Kommentare

Hallo Zusammen hier im Forum, Ich habe ein QNas 451+ und dieses NAS hat zwei GBit Lan Adapter die ...

Netzwerkgrundlagen
IPv6 Inter-VLAN Routing
gelöst Frage von clSchakNetzwerkgrundlagen9 Kommentare

Hi ich befasse mich gerade mit der Implementierung von IPv6 was bisher (in einem VLAN) korrekt funktioniert inkl. DNS ...

Windows Netzwerk
Zugriff auf den Desktop Ordner eines anderen Rechners in der gleichen Domäne
gelöst Frage von JensNomaWindows Netzwerk6 Kommentare

Guten Abend, ich war neulich mit unserem Admin am Tisch gesessen. Er an seinem Notebook angemeldet mit dem Domänen-Admin, ...