Zugriff auf serielle Schnittstelle Com Port

Status
Nicht offen für weitere Antworten.

chehilbi

Mitglied
Hallo Zusammen,

ich versuche gerade heraus zu finden, welche Möglichkeitn es in Java gibt, um auf einen Com Port zu zugreifen.
Habe schon einiges gelesen, aber irgendwie komme ich nicht klar. Welche Möglichkeiten gibt es denn grundsätzlich ???

Stichtwort java com api oder über eine Art File Zugriff?? Wer kann mich bitte aufkären !!!

Habe gerade etwas gelesen von java communication??? Was haltet ihr davon ? Gibt es noch andere Möglickeiten?

Vielen Dank!
 
Zuletzt bearbeitet:

chehilbi

Mitglied
ich habe mich jetzt noch ein wenig damit beschäftigt und muss sagen ich bin wirklich genervt wie wenig gute Seiten es im Internet über dieses Thema gibt. Nur Schrott. Kann nicht verstehen, warum es nicht gelingt solch ein Thema einfach zu beschreiben. Na ja ist immer das gleiche.

Nach meinen Informationen gibt es nun 2 Möglichkeiten. Entweder über Java Communication API von SUN oder über ein freies Projekt Namens rxtx. Leider unterstützt die Communciatio API von SUN keine Windows Systeme, was wirklich sehr schwach ist.

Hat jemand mit rxtx schon Erfahrung gemacht. Die Webseite ist wirklich der letzte Mist.

Oder gibt es noch andere Möglichkeiten!
 

Zed

Bekanntes Mitglied
Ich würde für diese Aufgabe eher auf C# gehen. Java taugt für sowas nicht. wenn du Java brauchst wäre JNI/JNA evtl. eine Alternative.
 

foobar

Top Contributor
Mit rxtx funktioniert das wunderbar sowohl unter Windows als auch unter Linux. Die Com Api von Sun ist völlig veraltet und sollte nicht mehr verwendet werden.
 

Saxony

Top Contributor
Hiho,

ich habe damals noch die Java Communication API verwendet - deswegen wundere ich mich wieso WinSysteme nicht unterstützt werden sollen, da ich alles komplett auf ner WinMaschine entwickelt habe! Dafür liegt der CommAPI doch extra eine Win32Com.dll bei.
Damit schicke ich Testanfragen direkt an einen AMD Élan SC520, generiere "Heartbeats" zwischen meiner Javaanwendung und dem Prozessor, lese den Speicher auf der Platine aus und schicke den seriell zu meiner Javaanwendung...

Ist also alles kein Problem -einfach nen kleines Protokoll erfinden und los gehts (z.B. [STX - Data - ETX]) ;). Literaturlage war bescheiden, weil nicht vorhanden. Es reicht aber sich die Beispiele anzuschauen.

bye Saxony
 
Zuletzt bearbeitet:
also wenn ihr damit schonmal gearbeitet habt schickt bitte mal ein code beispiel.
ich suche gerade vergeblich nach welchen die bei mir funken.
 

holgie

Mitglied
Hallo,
untenstehend ist ein funktionierendes Beispiel welches "rot ein" an die serielle Schnittstelle sendet. Ich habe damit ein AVR-Board angesteuert und eine LED eingeschaltet. Das hat funktioniert.
Daten lesen habe ich noch nicht getestet. Schau mal unter Serielle Schnittstelle unter Java - Mikrocontroller.net da ist das ganz gut erklärt.
Gruß
Holger


Java:
import java.io.*;
import java.util.*;
//import javax.comm.*;
import gnu.io.*;
/**
 * Class declaration
 *
 *
 * @author
 * @version 1.10, 08/04/00
 */
public class simplewrite {
    static Enumeration	      portList;
    @SuppressWarnings("restriction")
	static CommPortIdentifier portId;
    static String	      messageString = "rot ein\r";
    static SerialPort	      serialPort;
    static OutputStream       outputStream;
    static boolean	      outputBufferEmptyFlag = false;
    /**
     * Method declaration
     *
     *
     * @param args
     *
     * @see
     */
    public static void main(String[] args) {
	boolean portFound = false;
	String  defaultPort = "COM3";

	if (args.length > 0) {
	    defaultPort = args[0];
	} 

	portList = CommPortIdentifier.getPortIdentifiers();

	while (portList.hasMoreElements()) {
	    portId = (CommPortIdentifier) portList.nextElement();

	    if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {

		if (portId.getName().equals(defaultPort)) {
		    System.out.println("Found port " + defaultPort);

		    portFound = true;

		    try {
			serialPort = 
			    (SerialPort) portId.open("SimpleWrite", 2000);
		    } catch (PortInUseException e) {
			System.out.println("Port in use.");

			continue;
		    } 

		    try {
			outputStream = serialPort.getOutputStream();
		    } catch (IOException e) {}

		    try {
			serialPort.setSerialPortParams(9600, 
						       SerialPort.DATABITS_8, 
						       SerialPort.STOPBITS_1, 
						       SerialPort.PARITY_NONE);
		    } catch (UnsupportedCommOperationException e) {}
	

		    try {
		    	serialPort.notifyOnOutputEmpty(true);
		    } catch (Exception e) {
			System.out.println("Error setting event notification");
			System.out.println(e.toString());
			System.exit(-1);
		    }
		    
		    
		    System.out.println(
		    	"Writing \""+messageString+"\" to "
			+serialPort.getName());

		    try {
			outputStream.write(messageString.getBytes());
		    } catch (IOException e) {}

		    try {
		       Thread.sleep(2000);  // Be sure data is xferred before closing
		    } catch (Exception e) {}
		    serialPort.close();
		    System.exit(1);
		} 
	    } 
	} 

	if (!portFound) {
	    System.out.println("port " + defaultPort + " not found.");
	} 
    } 


}
 

Ralph-Uwe

Bekanntes Mitglied
Nabend

ich habe hier noch mal ein Beispiel für Datenübertragung von einem Rechner auf den anderen.
Von Prinzip sollte der Code funktionieren, habe aber leider z.Z. keine Möglichkeit einen 2. Rechner
anzuschließen und konnte die Funktion nicht prüfen. Der Code stammt aber aus einem Programm, mit dem
ein Drucker von einem PC angesteuert wird und mit Steuerbefehlen antwortet.

Voraussetzung ist ein korrekt installierter RXTX Treiber.

Java:
/**
 * Autor : Ralph-Uwe
 * Email : [email]Pilula2010@gmx.de[/email]
 * 
 */


import gnu.io.CommPortIdentifier;
import gnu.io.NoSuchPortException;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;
import gnu.io.SerialPortEvent;
import gnu.io.SerialPortEventListener;
import gnu.io.UnsupportedCommOperationException;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.TooManyListenersException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;



public class ComPort extends JFrame {
	private static final long serialVersionUID = -6008251315451848162L;
	private static SerialPort com1;
	private static String port = "COM1";
	private static CommPortIdentifier comPort = null;
	private static DataInputStream in;
	private static DataOutputStream out;
	private static JTextArea empfang = new JTextArea();
	private static JTextField senden = new JTextField(20);
	private static JButton absenden = new JButton("senden");
	
	public ComPort(){
	    /**
	     *  Port nummer abfragen   
	     */
		port = JOptionPane.showInputDialog("Bitte ComPort eingeben (Bsp.: COM1): ");
		
		/**
	     *  ComPort initialisieren 
	     */
	     try {
	     	comPort = CommPortIdentifier.getPortIdentifier(port); 
	        com1 = (SerialPort) comPort.open("Test", 5000);
	        com1.setSerialPortParams(38400, SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_EVEN);
	        com1.notifyOnDataAvailable(true);
	        com1.addEventListener( new CommListener());
	        in = new DataInputStream(com1.getInputStream());
	        out = new DataOutputStream(com1.getOutputStream());
	     } catch (UnsupportedCommOperationException e) {
	        e.printStackTrace();
	     } catch (TooManyListenersException e) {
	        e.printStackTrace();
	     } catch (NoSuchPortException e) {
	        e.printStackTrace();
	     } catch (IOException e) {
	        e.printStackTrace();
	     } catch (PortInUseException e) {
	        e.printStackTrace();
	     }

	     /**
	      * GUI einrichten
	      */
	     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	     setTitle("ComPort Test");
	     absenden.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent arg0) {
				datenSenden(senden.getText());
			}
	     }); 
	     empfang.setColumns(30);
	     empfang.setRows(10);
	     JPanel panel = new JPanel();
	     panel.add(senden);
	     panel.add(absenden);
	     panel.add(empfang);
	     getContentPane().add(panel, BorderLayout.CENTER);
	     setSize(400,250);
	     setLocationRelativeTo(null);
	     setVisible(true);
	}
	
	public static class CommListener implements SerialPortEventListener{
	    public void serialEvent(SerialPortEvent event) {
	    switch (event.getEventType()) {
		    case SerialPortEvent.DATA_AVAILABLE: datenEmpfang();
		    default:
	    	}
	    }
	}
	
	private static void datenEmpfang(){
		try {
			 byte b = (byte) in.read();
			 System.out.println(b);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public void datenSenden(String befehl){
		try {
			out.writeBytes(befehl);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		new ComPort();
	}
}
[/Java]

Ich hoffe es hilft weiter !
 

HoaX

Top Contributor
Rxtx-Homepage aufrufen, "Usage" im Menü links anklicken und dann oben den ersten Link "Code Examples" und dann eines auswählen ... verdammt ist das alles so kompliziert und versteckt!

Edith: Sorry für den Sarkasmus, hatte übersehen dass der Ursprungspost von 2009 ist, da war noch die alte Homepage online, und die war wirklich ... nennen wir es "suboptimal".
 
Zuletzt bearbeitet:

xchrisx

Mitglied
Hallo zusammen,
Ich habe das Beispiel bei mir mal getestet (Windows 7).
Es "funktioniert" auch. Aber es dauert ca 1 min, bis das Programm einmal durchgelaufen ist.
Woran kann denn sowas liegen?

mfg
chris
 

Ralph-Uwe

Bekanntes Mitglied
Hi,

Welches Beispiel hast Du ausprobiert?

der CommPortIdentifier werkelt eine ganze weile rum.
Im ersten Beispiel von holgie werden alle Ports eingelesen.
In meinem Beispiel wird nur das eingegeben Port gesucht, geht etwas schneller. Bei mir ca. 20 sec
 

xchrisx

Mitglied
Hey,
Ich habe das Beispiel von holgie ausprobiert.
Ok Zeit habe ich jetzt nicht gestoppt, aber ich finde das schon extrem langsam.
Ich will ja kein Glaubenskrieg(Diskussion) der Programmiersprachen auslösen. Aber unter C++ oder Pascal geht das def. schneller.
Habe ich denn noch ne andere Möglichkeit unter Win 7 das schneller zum Laufen zu bekommen?
 

Ralph-Uwe

Bekanntes Mitglied
Hi,

eigendlich kein Problem, der CommPortIdentifier wir einmal
bei Programmstart aufgerufen. Danach vielleicht nur nochmal
um das Port zur Laufzeit zu wechseln.
Da man in der Regel seine Geräte nicht dauernd umsteckt
ist das als kein ernstes Problem.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
I In unterschiedlichen Applikation Zugriff auf eine gemeinsame Anwendung? Java Basics - Anfänger-Themen 8
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
I Applikationsserver (WildFly) - Zugriff auf Ressourcen.. Problem mit Pfade Java Basics - Anfänger-Themen 10
J Zugriff auf eine 2. Klasse die per UI-Designer erstellt wurde Java Basics - Anfänger-Themen 1
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
T Zugriff auf Control anderer Klasse Java Basics - Anfänger-Themen 5
W Unterschiede bei Zugriff auf Objekt und Klassenvariablen über einen Getter? Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
R TreeSet Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 8
C Kein Zugriff auf Klassenmethoden in Main Methode Java Basics - Anfänger-Themen 23
H Zugriff verweigert Java Basics - Anfänger-Themen 5
moiss002 Umgebungsvariable Kein Zugriff auf ein Array Java Basics - Anfänger-Themen 7
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
B Zugriffsmodifier, Zugriff außerhalb Package Java Basics - Anfänger-Themen 5
C Zugriff auf Attribut von Oberklasse Java Basics - Anfänger-Themen 8
P Klasse hat keinen Zugriff auf getter/setter-Methoden eines Objektes Java Basics - Anfänger-Themen 9
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
M Gettter/Setter Methoden Klassenfelder kapselung und zugriff? Java Basics - Anfänger-Themen 1
S Zugriff auf protected Fields = guter Programmierstil? Java Basics - Anfänger-Themen 11
M Pfadprobleme - Zugriff auf einen Ordner im Workspace Java Basics - Anfänger-Themen 17
ruutaiokwu Bluetooth-Zugriff, braucht es dazu plattformabhängige Libraries oder kann das Java mittlerweile selbst? Java Basics - Anfänger-Themen 10
R Zugriff auf den Index eines Arrays, welches ein Objekt ist. Java Basics - Anfänger-Themen 4
M Zugriff auf eine ArrayList in einer anderen Klasse Java Basics - Anfänger-Themen 4
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
L Methoden Zugriff <identifier> expected Java Basics - Anfänger-Themen 13
T Java - Zugriff nur mit CLASSPATH ? Java Basics - Anfänger-Themen 7
B Klassen Zugriff auf ein Objekt einer Klasse aus einer Methode heraus Java Basics - Anfänger-Themen 4
L Zugriff auf Attribute eins Objekts über ActionListener Java Basics - Anfänger-Themen 4
D Zugriff auf Methode einer anderen Klasse Java Basics - Anfänger-Themen 5
S Zugriff auf Objekt Java Basics - Anfänger-Themen 5
A Klassen Zugriff auf Instanzen Java Basics - Anfänger-Themen 2
N ArrayList in eigener Klasse erzeugen mit Zugriff Java Basics - Anfänger-Themen 7
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
Q Zugriff auf Attribute Java Basics - Anfänger-Themen 3
J Klassen Zugriff auf ein "String Array" Java Basics - Anfänger-Themen 6
H Datentypen ArrayList in ArrayList: Zugriff Java Basics - Anfänger-Themen 6
J get methoden zugriff und objekt erzeugung Java Basics - Anfänger-Themen 30
J Datenbank Zugriff Java Basics - Anfänger-Themen 24
T Zugriff auf JCheckBox Java Basics - Anfänger-Themen 8
E Netzlaufwerk Zugriff schlägt fehl Java Basics - Anfänger-Themen 11
C Group, Actor und Instanz-Zugriff, LibGDX Java Basics - Anfänger-Themen 4
S Zugriff auf Attribut einer unbekannten Klasse erhalten Java Basics - Anfänger-Themen 6
R Methoden Methode der GUI-Klasse Zugriff auf Methoden der Hauptklasse Java Basics - Anfänger-Themen 9
S Vererbung Zugriff auf die Basisklasse einer "zweiten" Erweiterungsklasse Java Basics - Anfänger-Themen 2
Z Threads Threads - Zugriff auf Ressourcen ohne(Lock, Synchronized) Java Basics - Anfänger-Themen 2
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
F Klassen Zugriff auf verschachtelte Objekte Java Basics - Anfänger-Themen 11
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
G Wieviel kostet der Zugriff auf Objektattribute im Vergleich zur Erstellung von vars in Methode? Java Basics - Anfänger-Themen 11
L Zugriff auf zwei Java-Quellcodes Java Basics - Anfänger-Themen 3
A OOP Zugriff auf Objekte von außen Java Basics - Anfänger-Themen 8
M Kapselung Datenkapselung Sinn direkter Zugriff? Java Basics - Anfänger-Themen 1
G Methoden Zugriff auf Methode.. aus einer anderen Klasse Java Basics - Anfänger-Themen 6
J JDialog Zugriff auf parent JDialog Java Basics - Anfänger-Themen 5
K Collections Zugriff auf ein bestimmtes Element in der Collection Java Basics - Anfänger-Themen 1
K ArrayList in Konstruktor - wie späterer Zugriff Java Basics - Anfänger-Themen 2
F Zugriff auf Objekt einer anderen Klasse Java Basics - Anfänger-Themen 7
P Zugriff auf Felder in ArrayList Objekten Java Basics - Anfänger-Themen 2
J Erste Schritte Zugriff auf Eigenschaft Java Basics - Anfänger-Themen 2
M MVC - Problem mit Zugriff auf Objekt Java Basics - Anfänger-Themen 4
D Zugriff auf von einer anderen Klasse erstellten Objekten Java Basics - Anfänger-Themen 5
C 5 - Zugriff verweigert Java Basics - Anfänger-Themen 1
K Zugriff auf Variabeln Wert einer Instanz Java Basics - Anfänger-Themen 4
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
Z Methoden Zugriff mit Klasse 3 auf Methode von Klasse 2 welche in Klasse 1 erzeugt wird Java Basics - Anfänger-Themen 6
Z Zugriff auf andere Methoden Java Basics - Anfänger-Themen 12
Z Zugriff auf Pakete Java Basics - Anfänger-Themen 5
G Zugriff zwischen Klassen Java Basics - Anfänger-Themen 15
N Problem mit Swing Textfeld und Zugriff aus anderer Klasse Java Basics - Anfänger-Themen 6
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
W OOP Zugriff auf mit Objekt erstellte Struktur Java Basics - Anfänger-Themen 7
F Klassen Zugriff auf Fenster aus versch. Klassen Java Basics - Anfänger-Themen 5
M Variablen Zugriff von außerhalb eines Blockes auf eine Variable innerhalb eines Blockes Java Basics - Anfänger-Themen 2
U Methoden Zugriff auf Array von weiterer Methode einer Klasse, Rückgabewert Problem Java Basics - Anfänger-Themen 5
B Klassen Zugriff auf Daten der Child-Klasse Java Basics - Anfänger-Themen 9
W Typisierte ArrayList und der Zugriff auf den Typ Java Basics - Anfänger-Themen 5
M Zugriff auf Klasse Java Basics - Anfänger-Themen 2
K Zugriff auf C: Java Basics - Anfänger-Themen 5
S Das richtige Format für den SOAP Zugriff Java Basics - Anfänger-Themen 0
S Klassen Zugriff auf Attribute einer zweiten Klasse, welche durch dritte gesettet wurden? Java Basics - Anfänger-Themen 2
N Zugriff bei Package Struktur Java Basics - Anfänger-Themen 6
M Enum: Zugriff auf Konstanten Java Basics - Anfänger-Themen 7
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
B Zugriff auf csv-Datei per hashmap Java Basics - Anfänger-Themen 5
G Spalte in JTable unsichtbar machen, Zugriff auf Daten ermöglichen Java Basics - Anfänger-Themen 2
T ZUgriff auf 'Werte' Java Basics - Anfänger-Themen 3
J Vererbung Zugriff auf private Variable Java Basics - Anfänger-Themen 10
C Klassen Zugriff auf Objekt anderer Klasse Java Basics - Anfänger-Themen 8
B Methoden Zugriff auf Variable ermöglichen Java Basics - Anfänger-Themen 3
M Zugriff auf Arraylist Java Basics - Anfänger-Themen 7
D Kein Zugriff auf JFrame Java Basics - Anfänger-Themen 2
K Zugriff einer Klasse auf eine andere Andere -> bad operand for binary operator Java Basics - Anfänger-Themen 5
B Erste Schritte Array-Zugriff Java Basics - Anfänger-Themen 10
D OOP Zugriff auf Objekte A in Klasse A aus Objekt B in Klasse B Java Basics - Anfänger-Themen 3
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
J Threads Zugriff auf Attribute Java Basics - Anfänger-Themen 16
N Kein Zugriff auf Ordner -> NullPointerException Java Basics - Anfänger-Themen 2
I kein zugriff auf jList oder Textfield Java Basics - Anfänger-Themen 2
N Problem bei Zugriff auf Textfelder Java Basics - Anfänger-Themen 6
LittleJavaCup Zugriff auf Klasse von package Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben