Kommunikation mit der seriellen Schnittstelle

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,
ich habe auch ein kleines Problem, wo ich nicht mehr weiterkomme... und zwar möchte ich einem Gerät einen Befehl geben, und mir dann die Antwort angucken.
Das Gerät empfängt auch ordnungsgemäß den Befehl, nur dass, was ich zurückbekomme, ist Zahlensalat zusammen mit ein paar Fragezeichen...
Seht Ihr den Fehler? Bin Anfänger mit der commapi...
Vielen Dank schonmal

Code:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;

import javax.comm.*;

public class Verbindung implements SerialPortEventListener, Runnable
{
	Enumeration portListe;

	CommPortIdentifier portId;

	String befehl;

	String ergebnis;

	SerialPort seriellerPort;

	OutputStream outputStream;

	InputStream inputStream;

	Thread leseThread;

	String standardPort = "/dev/ttyS0";

	public Verbindung()
	{
		boolean portFound = false;
		portListe = CommPortIdentifier.getPortIdentifiers();
		while (portListe.hasMoreElements())
		{
			portId = (CommPortIdentifier) portListe.nextElement();
			if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
			{
				if (portId.getName().equals(standardPort))
				{
					System.out
							.println("Port auf " + standardPort + " gefunden");
					portFound = true;
					try
					{
						seriellerPort = (SerialPort) portId.open("Verbindung",
								2000);
					} catch (PortInUseException e)
					{
						System.out
								.println("Port wird von einem anderen Gerät benutzt");
						continue;
					}
					try
					{
						outputStream = seriellerPort.getOutputStream();
					} catch (IOException e)
					{
						e.printStackTrace();
					}

					try
					{
						seriellerPort.setSerialPortParams(9600,
								SerialPort.DATABITS_7, SerialPort.STOPBITS_1,
								SerialPort.PARITY_EVEN);
					} catch (UnsupportedCommOperationException e)
					{
					} catch (Exception e)
					{
						System.out.println(e);
					}
					try
					{
						Thread.sleep(1000);
					} catch (InterruptedException e)
					{
						e.printStackTrace();
					}
					try
					{
						inputStream = seriellerPort.getInputStream();
					} catch (IOException e)
					{
					}
					try
					{
						seriellerPort.addEventListener(this);
					} catch (TooManyListenersException e)
					{
					}

					seriellerPort.notifyOnDataAvailable(true);
					leseThread = new Thread(this);
				}
			}
		}
	}

	public String getErgebnis(String befehl)
	{
		this.befehl = befehl;
		leseThread.start();

		System.out.println("Probiere, den Befehl " + befehl + " an "
				+ seriellerPort.getName() + " zu senden");
		try
		{
			outputStream.write(befehl.getBytes());
		} catch (IOException e)
		{
		}
		byte[] readBuffer = new byte[20];
		try
		{
			while (inputStream.available() > 0)
			{
				int numBytes = inputStream.read(readBuffer);
			}

			System.out.print(new String(readBuffer));
		} catch (IOException e)
		{
		}
		try
		{
			Thread.sleep(2000);
		} catch (Exception e)
		{
		}
		seriellerPort.close();

		return ergebnis;
	}

	public void setBefehl(String befehl)
	{
		this.befehl = befehl;
	}

	public void serialEvent(SerialPortEvent event)
	{
		switch (event.getEventType())
		{

		case SerialPortEvent.BI:

		case SerialPortEvent.OE:

		case SerialPortEvent.FE:

		case SerialPortEvent.PE:

		case SerialPortEvent.CD:

		case SerialPortEvent.CTS:

		case SerialPortEvent.DSR:

		case SerialPortEvent.RI:

		case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
			break;

		case SerialPortEvent.DATA_AVAILABLE:
			byte[] readBuffer = new byte[20];

			try
			{
				while (inputStream.available() > 0)
				{
					int numBytes = inputStream.read(readBuffer);
				}

				System.out.println(new String(readBuffer));
			} catch (IOException e)
			{
			}

			break;
		}
	}

	public void run()
	{
		try
		{
			Thread.sleep(2000);
		} catch (InterruptedException e)
		{
		}
	}

}

Code:
public class Test 
{
	public static void main(String[] args) 
	{
		Verbindung verbindung = new Verbindung();
		System.out.println(verbindung.getErgebnis(":IDNS?\n"));
	}

}
 
T

tuxedo

Gast
Weißt du denn was das Serielle Gerät von sich gibt, bzw. geben "sollte"?

Das was du zurückbekommst (die Fragezeichen etc) sind ja nicht unbedingt ein zusammenhängender String. Ergo ist Zeile 173 nicht unbedingt so einsetzbar.

Nebenbei: Nimm die API von rxtx.org. Die wird nach wie vor gepflegt (zumindest besser wie die von SUN) und hat weniger Fehler ...

- Alex
 
T

tuxedo

Gast
Wird das "BENDER GmbH+CoKG" denn mit einem Zeilenumbruch abgeschlossen (Kannst du z.B. in Hyperterminal testen ob er danach in eine neue Zeile springt)?

Wenn ja würde ich das einlesen ändern und nicht von available() abhängig machen, sondern von dem zu erwartenden Zeilenumbruch (CRLF oder nur LF, je nach System) .

- Alex
 
G

Gast

Gast
ja, er macht einen zeilenumbruch. kannst du mir wohl noch bei der umformulierung der bedingung helfen?
 
T

tuxedo

Gast
Wenn eh nicht Megabyteweise Daten über die Leitung gehen, dann kannst du byte für byte lesen und schauen ob die Byte-Folge für CRLF auftaucht. Und wenn ja, dann kannst du die Bytes hier hierhin nehmen und einen String draus machen. Abbruchbedingung sollte also der Zeilenumbruch sein.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B OOP Kommunikation zwischen Objekten? Allgemeine Java-Themen 5
CptK Backpropagation parallelisieren: Kommunikation zwischen den Threads Allgemeine Java-Themen 7
L Kommunikation zwischen C# und Java? Allgemeine Java-Themen 5
R PIPE Kommunikation mit Prozess blockiert Allgemeine Java-Themen 0
M Checksummenprüfung bei Client Server kommunikation Allgemeine Java-Themen 3
D Interthread-Kommunikation Allgemeine Java-Themen 6
S Threads Kommunikation zwischen SocketThread und WorkerThread Allgemeine Java-Themen 11
0 Lösungsweg Client Server Kommunikation Fehlermeldung ausgeben Allgemeine Java-Themen 12
L Software-Design: Kommunikation mit SerialPort (RXTX) Allgemeine Java-Themen 2
F Serielle Kommunikation Allgemeine Java-Themen 20
A Kommunikation zwischen 2 Jar-dateien Allgemeine Java-Themen 16
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
P Komponenten kommunikation Allgemeine Java-Themen 7
L Serielle Kommunikation Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
B SerialPort Kommunikation - Pufferüberlauf Allgemeine Java-Themen 6
0 Sandbox und Applet Kommunikation Allgemeine Java-Themen 9
E kommunikation zwischen Fenstern Allgemeine Java-Themen 3
H Java C++ Interprozess Kommunikation Allgemeine Java-Themen 7
D Klassen Kommunikation Allgemeine Java-Themen 11
M Applet Servlet Kommunikation ein Problem bei externem Server Allgemeine Java-Themen 3
F Kommunikation zw 2 Java-Programmen mit unterschiedl Compiler Allgemeine Java-Themen 13
G Kommunikation mit Remotegeräten Allgemeine Java-Themen 2
A Kommunikation zwischen C++ und Java-Programm Allgemeine Java-Themen 4
J Kommunikation mit USB Gerät, das Midi-Signale sendet Allgemeine Java-Themen 4
H Kommunikation mit einem c-Prozess funzt nicht richtig Allgemeine Java-Themen 5
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
B Kommunikation mit entferntem Thread Allgemeine Java-Themen 6
O kommunikation zw. objekten Allgemeine Java-Themen 7
G Kommunikation von zwei Java-Programmen Allgemeine Java-Themen 3
N Inter-Thread-Kommunikation Allgemeine Java-Themen 3
M Kommunikation mit externem Programm ueber Linux-Pipes Allgemeine Java-Themen 4
M Kommunikation zwischen 2 Programmen Allgemeine Java-Themen 7
G Kommunikation zwischen Threads und Gui Allgemeine Java-Themen 2
T Kommunikation mit batch datei Allgemeine Java-Themen 3
P kommunikation zwischen dialog und threads Allgemeine Java-Themen 4
K MVC - Kommunikation Controller <> Gui Allgemeine Java-Themen 5
P Kommunikation von Threads Allgemeine Java-Themen 5
V Kommunikation zwischen Programmen und Threads Allgemeine Java-Themen 7
H Servlet/Applet Kommunikation Allgemeine Java-Themen 2
C Kommunikation mit USB Port Allgemeine Java-Themen 1
D Daten aus einer Seriellen Schnittstelle empfangen Allgemeine Java-Themen 22
E Seriellen Port unter Windows ansprechen Allgemeine Java-Themen 16
V Funktionale Schnittstelle in Java Allgemeine Java-Themen 3
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
Meeresgott Best Practice Mini REST-Schnittstelle Allgemeine Java-Themen 4
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
stroggi Serielle Schnittstelle (jssc) - Flush benötigt? Allgemeine Java-Themen 2
P Schnittstelle java Programm zu Webserver / Browser Allgemeine Java-Themen 2
T Input und Outputstream , serielle Schnittstelle Allgemeine Java-Themen 1
M Schnittstelle Datanorm Allgemeine Java-Themen 2
H Daten via COM Schnittstelle erhalten Allgemeine Java-Themen 2
I Java - perfekte Schnittstelle für Hacker? Allgemeine Java-Themen 8
M Java-Pawn Schnittstelle ? Allgemeine Java-Themen 0
S Threads Serielle Schnittstelle mit Listener / Aufrufendes GUI Allgemeine Java-Themen 4
L COM Schnittstelle in Java programmieren Allgemeine Java-Themen 4
T Schnittstelle zu Bash?! Allgemeine Java-Themen 2
D Aufgabe: Schnittstelle und Proxy implementieren Allgemeine Java-Themen 2
H Interface Generische Schnittstelle (rekusiv) Allgemeine Java-Themen 2
M Serielle Schnittstelle ansteuern - mit Processing Bibliothek Allgemeine Java-Themen 4
B Schnittstelle von Facebook zu Java(Eclipse) für meine Internetseite Allgemeine Java-Themen 20
U Realisierung einer "Plugin-Schnittstelle": Allgemeine Java-Themen 12
I Serielle Schnittstelle Allgemeine Java-Themen 5
A Input/Output Applet-Zugriff auf PHP-Schnittstelle (externer Server) Allgemeine Java-Themen 22
M Schnittstelle für durchgereichte Interaktionen in Komponentenhierarchie? Allgemeine Java-Themen 3
P Auslesen serieller Schnittstelle - umwandeln von byteArray Allgemeine Java-Themen 3
N Serielle Schnittstelle / COM-Port auslesen und die empfangenen Daten verarbeiten Allgemeine Java-Themen 1
O Zugriff auf Serielle Schnittstelle - Keine Ports gefunden. Allgemeine Java-Themen 8
S Problem mit serieller Schnittstelle Allgemeine Java-Themen 10
M Zugriff auf Parallel-Schnittstelle Allgemeine Java-Themen 2
P Schnittstelle über Webservice SOAP Allgemeine Java-Themen 11
MQue Schnittstelle programmieren Allgemeine Java-Themen 2
H lpt1 schnittstelle Allgemeine Java-Themen 6
M Schnittstelle java.util.Set Allgemeine Java-Themen 9
G serielle Schnittstelle einlesen Allgemeine Java-Themen 13
M Paralle Schnittstelle ansprechen Allgemeine Java-Themen 2
P TCPIP Schnittstelle Allgemeine Java-Themen 2
D Datenübertragung über serielle Schnittstelle Allgemeine Java-Themen 4
G Problemme mit serielle Schnittstelle Allgemeine Java-Themen 9
MQue serielle Schnittstelle Allgemeine Java-Themen 2
E serielle Schnittstelle Allgemeine Java-Themen 6
N Serielle Schnittstelle ansprechen Allgemeine Java-Themen 9
D HTML Schnittstelle Allgemeine Java-Themen 4
J serielle Schnittstelle unter Linux Allgemeine Java-Themen 3
T parallele Schnittstelle auslesen Allgemeine Java-Themen 5
S Problem mit Ansteuerung von serieller Schnittstelle Allgemeine Java-Themen 7
Q Schnittstelle/Abstrakte Klasse schreibt Annotation vor? Allgemeine Java-Themen 4
W Zugriff auf lokale serielle Schnittstelle via Applet Allgemeine Java-Themen 3
T Java Schnittstelle Active Directory Allgemeine Java-Themen 5
Q Typecast zwischen Klassen mit implementierter Schnittstelle Allgemeine Java-Themen 4
M RS232 Schnittstelle ansteuern (Floppy durch Laptop ersetzen) Allgemeine Java-Themen 2
Z java->schnittstelle->excel Allgemeine Java-Themen 2
V gezielte Datenbankeinträge über JDBC schnittstelle Allgemeine Java-Themen 10
A Serielle Schnittstelle | Barcodescan | ohne Tastatur Allgemeine Java-Themen 11
H javax.comm und Parallele Schnittstelle (PIN für PIN) Allgemeine Java-Themen 7
X Java Schnittstelle zu AIML Allgemeine Java-Themen 2
S String an COM-Schnittstelle senden Allgemeine Java-Themen 6
D Schnittstelle zwischen zwei Klassen? Allgemeine Java-Themen 2

Ähnliche Java Themen


Oben