Hey,
ich arbeite gerade an meiner Diplomarbeit und muss dafür einen konstanten Datenstrom eines Empfängers auswerten. Dieser ist über USB an den Rechner angeschlossen und wir am COM-Port5 erkannt und wird mit einer Baudrate von 250000 angesprochen.
Mein Problem ist nun dass ich RXTX-API verwenden möchte, aber im Moment nur Quatsch vom Port gelesen bekomme. In einem Terminaltool kommen die Daten kbyte-wesie und in Java bekomme ich zwei Zeichen pro Sekunde.
Ist das ein Problem von Java oder des Codes?
Ich habe den Code aus dem Netz und würde nun gerne wissen, ob wiederum einer von euch weiss wo das Problem liegen könnte?
Danke schonmal.
CIAO
ich arbeite gerade an meiner Diplomarbeit und muss dafür einen konstanten Datenstrom eines Empfängers auswerten. Dieser ist über USB an den Rechner angeschlossen und wir am COM-Port5 erkannt und wird mit einer Baudrate von 250000 angesprochen.
Mein Problem ist nun dass ich RXTX-API verwenden möchte, aber im Moment nur Quatsch vom Port gelesen bekomme. In einem Terminaltool kommen die Daten kbyte-wesie und in Java bekomme ich zwei Zeichen pro Sekunde.
Ist das ein Problem von Java oder des Codes?
Code:
import gnu.io.*;
import java.io.IOException;
import java.io.InputStream;
//import java.io.OutputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
//import OeffnenUndSenden.serialPortEventListener;
public class EinfachEmpfangen implements Runnable {
public static void main(String[] args)
{
Runnable runnable = new EinfachEmpfangen();
new Thread(runnable).start();
System.out.println("main finished");
}
CommPortIdentifier serialPortId;
Enumeration enumComm;
SerialPort serialPort;
//OutputStream outputStream;
InputStream inputStream;
Boolean serialPortGeoeffnet = false;
int baudrate = 250000;
int dataBits = SerialPort.DATABITS_8;
int stopBits = SerialPort.STOPBITS_1;
int parity = SerialPort.PARITY_NONE;
String portName = "COM5";
public EinfachEmpfangen()
{
System.out.println("Konstruktor: EinfachSenden");
}
public void run()
{
if (oeffneSerialPort(portName) != true)
return;
}
boolean oeffneSerialPort(String portName)
{
Boolean foundPort = false;
if (serialPortGeoeffnet) {
System.out.println("Serialport bereits geöffnet");
return false;
}
System.out.println("Öffne Serialport");
enumComm = CommPortIdentifier.getPortIdentifiers();
while(enumComm.hasMoreElements()) {
serialPortId = (CommPortIdentifier) enumComm.nextElement();
if (portName.contentEquals(serialPortId.getName())) {
foundPort = true;
break;
}
}
if (foundPort != true) {
System.out.println("Serialport nicht gefunden: " + portName);
return false;
}
try {
serialPort = (SerialPort) serialPortId.open("Öffnen und Senden", 500);
} catch (PortInUseException e) {
System.out.println("Port belegt");
}
try {
inputStream = serialPort.getInputStream();
} catch (IOException e) {
System.out.println("Keinen Zugriff auf InputStream");
}
try {
serialPort.addEventListener(new serialPortEventListener());
} catch (TooManyListenersException e) {
System.out.println("TooManyListenersException für Serialport");
}
serialPort.notifyOnDataAvailable(true);
try {
serialPort.setSerialPortParams(baudrate, dataBits, stopBits, parity);
} catch(UnsupportedCommOperationException e) {
System.out.println("Konnte Schnittstellen-Paramter nicht setzen");
}
serialPortGeoeffnet = true;
return true;
}
void schliesseSerialPort()
{
if ( serialPortGeoeffnet == true) {
System.out.println("Schließe Serialport");
serialPort.close();
serialPortGeoeffnet = false;
} else {
System.out.println("Serialport bereits geschlossen");
}
}
void serialPortDatenVerfuegbar() {
try {
byte[] data = new byte[150];
int num;
while(inputStream.available() > 0) {
num = inputStream.read(data, 0, data.length);
System.out.println("Empfange: "+ new String(data, 0, num));
}
} catch (IOException e) {
System.out.println("Fehler beim Lesen empfangener Daten");
}
}
class serialPortEventListener implements SerialPortEventListener {
public void serialEvent(SerialPortEvent event) {
System.out.println("serialPortEventlistener");
switch (event.getEventType()) {
case SerialPortEvent.DATA_AVAILABLE:
serialPortDatenVerfuegbar();
break;
case SerialPortEvent.BI:
case SerialPortEvent.CD:
case SerialPortEvent.CTS:
case SerialPortEvent.DSR:
case SerialPortEvent.FE:
case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
case SerialPortEvent.PE:
case SerialPortEvent.RI:
default:
}
}
}
}
Ich habe den Code aus dem Netz und würde nun gerne wissen, ob wiederum einer von euch weiss wo das Problem liegen könnte?
Danke schonmal.
CIAO