RxTx/RS232 Kommunikation (TwoWay)

Status
Nicht offen für weitere Antworten.

jackydany

Mitglied
Hallo zusammen,

bin neu hier! Habe gute Kenntnisse in C, jedoch nur Grundlagen in OOP.
Java steige ich grade ein. Hatte zwar ein Semester an der Uni, aber das hat nit wirklich was gebracht :D

zu meinem Problem:

ich habe ein Device welches über USB->serial (COM4) mit dem PC kommuniziert.
über hyperterminal zb kommt bei einem 'h' die hilfe, eine reine textausgabe.

nun möchte ich hierzu eine GUI programmieren.
Die Grundlage dazu ist natürlich eine funktionierende Kommunikation im Hintergrund.

Dabei bin ich auf rxtx gestoßen!
das kalppt soweit auch ganz gut... zumindest der Anfang.

Ich bekomme den port geöffnet und kann einen String ("h\r") senden

ich bekomme auch was zurück, die Hilfe! jedoch kann ich diese momentan nur in einer primitiven schleife abfangen.
Code:
while(true){
            try {
                while(inputStream.available()>1){
                    inputStream.read(byteArray2);
                }
            } catch (IOException ex) {
                Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
            }
            test = new String(byteArray2);
            System.out.println(test);

dies bedeutet, der rasselt immer weiter bis was in den inputstream gelangt und gibt das einfach immer stur weiter aus.

das ist ja nicht Sinn und Zweck der Sache!

habe also auch Beispiele mit Listenern gefunden, jedoch blicke ich die noch nicht wirklich! Dort werden Threads erstellt und ähnliches.

hier ein link zu einem testprogramm was einen EventListener verwendet
JAVA: Serial Port access with javax.comm or rxtx on Windows, Linux etc.

meine Frage wäre jetzt, wie kann ich bei mir erreichen, daß NUR bei einem NEUEN Datenstrom im inputStream eingelesen wird?
Das ganze soll zudem immer weiter laufen, da ich ja stetig Kommunikation mit dem Device habe, sprich neuer Befehl = neue Ausgabe.

Hoffe ich versteht was ich meine und versuche und könnt mir ein wenig helfen!

Vielen Dank schonmal!


ps: hier mein quellcode
wobei in der main eigentlich nix passiert, die spare ich mir hier mal


Code:
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;



public class Connection
{
SerialPort serialPort;
static InputStream inputStream;
static BufferedOutputStream outputStream;
byte[] byteArray;

    public Connection()
    {

    }



void connect ( String portName ) throws Exception
    {
        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
        if ( portIdentifier.isCurrentlyOwned() )
        {
            System.out.println("Error: Port is currently in use");
        }
        else
        {
            CommPort commPort = portIdentifier.open("xs1541GUI",2000);

            if ( commPort instanceof SerialPort )
            {
                serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(115200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);

                inputStream = serialPort.getInputStream();
                outputStream = new BufferedOutputStream(serialPort.getOutputStream());

            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }

            if(portIdentifier.getName().equals(portName))
            {
                System.out.println("Port gefunden");
            }


    }

}

   
    public void send()
    {
        String test ="help\r";
       // String test2 ="testmich";


        byteArray=test.getBytes();

        byte[] byteArray2 = new byte[500];

            try {
                outputStream.write(byteArray);

                outputStream.flush();
            } catch (IOException ex) {
                Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
            }


        try {
            while (inputStream.available() < 1) {
                //System.out.println("leer");
            }
        } catch (IOException ex) {
            Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
        }

        while(true){
            try {
                while(inputStream.available()>1){
                    inputStream.read(byteArray2);
                }
            } catch (IOException ex) {
                Logger.getLogger(Connection.class.getName()).log(Level.SEVERE, null, ex);
            }
            test = new String(byteArray2);
            //test2=test3;
            //test2="test";
            System.out.println(test);
        }


    }
 
G

Gast2

Gast
Moin,

mit den angesprochenen Librarys habe ich zwar noch nix gemacht ... aber ein Versuch wäre

Java:
boolean ende = false;
// ...
while(!ende)
{
    inputStream.read(byteArray2);
    // ... go on
}

eigentlich sollte er beim Lesen aus dem InputStream am read stehen bleiben, bis was neues anliegt und dann gleich auslesen ... das ganze packst Du in einen Threads - sonst geht nichts mehr in Deinem Programm

hand, mogel
 

IngoF

Mitglied
Hallo,
ich versuche mich jetzt auch wieder an meinem Java-Datenlogger. Hatte mir schon was zusammengebastelt was einen Thread erstellt und die Daten dann in einem Textfeld ausgibt. Vielleicht hilft es Dir ja ein wenig. Ich blicke da allerdings auch noch nicht 100% durch und habe ein ähnliches Problem ;-)

http://www.java-forum.org/allgemeine-java-themen/88858-rxtxcomm-problem-listener.html#post561372

Wenn ich Deinen Quelltext richtig verstehe hast Du am Ende eine Endlosschleife die nie beendet wird. Irgendeine Abbruchbedingung muss noch eingebaut werden. Z.B. Wenn länger als eine halbe Sekunde keine Daten mehr angekommen wird die Schleife verlassen.

Oder habe ich Dein Problem jetzt falsch verstanden?

Gruß
Ingo
 

IngoF

Mitglied
ups.. das hatte mogel wohl auch gemeint. In dem
Code:
// ... go on
muss dann irgendwo
Code:
Ende = True;
stehen.

Gruß
Ingo
 

jackydany

Mitglied
hi

das es ne endlosschleife ist weiß ich :D

möchte da jedoch GARKEINE schleife haben. das ganze geht wohl auch mit nem listener/thread
sodaß immer dann gelesen wird, wenn daten anliegen. dazu gibts extra die funktion
inputStream.available()
aber ich weiß nicht wie ich da nen thread zu erstellen kann etc
 

IngoF

Mitglied
Hallo JackDany,

wollte Dir meinen bisherigen Quelltext zukommen lassen. Bei mir wird ein Thread erzeugt in dem durch einen Listener die Events abgearbeitet werden. Habe nur selber noch ein kleines Problem. Bei mir muss erst der COM-Port geschlossen werden damit ich an meine Daten herankomme.

Gruß
Ingo
 

jackydany

Mitglied
hi

war über ne woche krank und lag flach (kein h1n1!)
deswegen lag es etwas auf eis...

bei mir komme ich ohne probleme an die daten, auch ohne schließen des ports, habe aber wie gesagt probleme mit threads (kenne mich da einfach nicht aus, java ist neuland)

werde mich die nächsten tage mal wieder dran setzten denke ich
 

bluescreen

Mitglied
Hallo,

hast du es denn mal mit dem SerialPortEventListener versucht umzusetzen (so wie in dem Link den du gepostet hast)? Das funktioniert bei mir nämlich hervorragend. :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Rxtx Rs232: I Can t send to the port Java Basics - Anfänger-Themen 5
R rxtx und RS232 Java Basics - Anfänger-Themen 2
K Classpath RXTX beim Raspberry Java Basics - Anfänger-Themen 5
T RXTX fehler Java Basics - Anfänger-Themen 7
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
B RS232 - UnsatisfiedLinkError: no rxtxSerial Java Basics - Anfänger-Themen 17
T RS232/USB-Signale in Java weiterverarbeiten Java Basics - Anfänger-Themen 2
C Ansteuerung RS232 Schnittstelle Java Basics - Anfänger-Themen 15
N Rs232 an Laptop anschliessen und ansteuern Java Basics - Anfänger-Themen 11
J Rs232 (ComPORT) unter Java Java Basics - Anfänger-Themen 15
A RS232 und Microcontroller - einige Fragen Java Basics - Anfänger-Themen 7
G RS232 Java Basics - Anfänger-Themen 2
W RS232: Daten empfangen,bearbeiten,ausgeben Java Basics - Anfänger-Themen 2
M Bitmuster eines Strings über RS232 senden Java Basics - Anfänger-Themen 5
G String zur RS232 senden und mit cr abschließen! Java Basics - Anfänger-Themen 4
B Kommunikation mit Seriellen Schnittstellen + Integration einer lib Java Basics - Anfänger-Themen 1
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 9
D Klassen Klassen Kommunikation Java Basics - Anfänger-Themen 12
I Kommunikation "normaler PC" mit lokaler Software an "Cloud Service" und umgekehrt Java Basics - Anfänger-Themen 15
izoards Socket Kommunikation Java Basics - Anfänger-Themen 16
C Kommunikation zwischen 2 Klassen Java Basics - Anfänger-Themen 3
M konzeptuelle Frage: In welcher Klasse definiert man am Besten Methoden, die die Kommunikation mit dem User regeln? Java Basics - Anfänger-Themen 8
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
S JavaFX-Arduino Kommunikation mit LCD-Anzeige Java Basics - Anfänger-Themen 0
A Kommunikation zwischen nebenläufigen Threads Java Basics - Anfänger-Themen 4
F Klassen Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 4
M Input/Output Kommunikation mit externen Geräten Java Basics - Anfänger-Themen 0
M OOP Kommunikation MVC und DTO Java Basics - Anfänger-Themen 13
K Kommunikation von Java RMI und Webservices Java Basics - Anfänger-Themen 9
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
E MVC: Kommunikation der Modellteile Java Basics - Anfänger-Themen 12
G Klassen Kommunikation zw. Klassen Java Basics - Anfänger-Themen 28
B Socket Kommunikation in beide Richtungen Java Basics - Anfänger-Themen 12
F Socket Kommunikation Java Basics - Anfänger-Themen 4
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
G Kommunikation zwischen zwei Klassen Java Basics - Anfänger-Themen 5
J Panel-übergreifende Kommunikation Java Basics - Anfänger-Themen 3
P Kommunikation zwischen zwei *.class Java Basics - Anfänger-Themen 3
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
G Datenstruktur und die Kommunikation mit der GUI Java Basics - Anfänger-Themen 10
W Inter-Thread-Kommunikation Java Basics - Anfänger-Themen 3
M Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2
S Frage zur Kommunikation zwischen Objekten Java Basics - Anfänger-Themen 5
J Kommunikation zwischen zwei JAVA-Dateien Java Basics - Anfänger-Themen 8
T Kommunikation zw. 2 Javaprogrammen Aufr --> Verab. -> Java Basics - Anfänger-Themen 6
P Kommunikation mit Prozess Java Basics - Anfänger-Themen 3
H Kommunikation C++ <> Java Java Basics - Anfänger-Themen 4
A Kommunikation Java-Anwendung <-> Java-Applet Java Basics - Anfänger-Themen 24
V Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 2
S Kommunikation zwischen Komponenten in einem JFrame Java Basics - Anfänger-Themen 10
D Thread und Process Kommunikation bei eigener Console Java Basics - Anfänger-Themen 2
P asynchrone Kommunikation Applet Servlet mit RMI möglich Java Basics - Anfänger-Themen 4
B Kommunikation zwischen Klasse und Listener Java Basics - Anfänger-Themen 2
F Kommunikation von 2 Klasse Java Basics - Anfänger-Themen 5
L Kommunikation zwischen mehreren Klassen Java Basics - Anfänger-Themen 2
B jtapi <-> tapi Kommunikation Java Basics - Anfänger-Themen 2
D Kommunikation zwischen zwei Java Anwendungen möglich? Java Basics - Anfänger-Themen 6
S Kommunikation zwsichen Klassen. Java Basics - Anfänger-Themen 9
D J/Direct oder JNI? .bzw. Kommunikation mit Windows-API. Java Basics - Anfänger-Themen 2
G Nochmal Problem mit Kommunikation zwischen Klassen Java Basics - Anfänger-Themen 3
G Kommunikation zwischen Klassen, aber bitte MVC Java Basics - Anfänger-Themen 12
G Kommunikation zwischen Applet und Java-Anwendung über TCP/IP Java Basics - Anfänger-Themen 3
M Kommunikation zwischen GUI und Event -Klasse Java Basics - Anfänger-Themen 3
M probleme in der kommunikation von klassen Java Basics - Anfänger-Themen 5
Q Kommunikation zwischen Frames Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben