Serialport auslesen bei neuer Nachricht

Ruderer1993

Aktives Mitglied
Hey, ich möchte Nachrichten von einem SerialPort abfangen.... Soweit klappt das auch mit der Bibliothek jssc. Jetzt wollte ich aber deren EventListener nutzen, um immer dann zu handeln wenn eine neue Nachricht angekommen ist. Jedoch verstehe ich das ganze nicht so wirklich mit den Masks ... meine Nachricht kann entweder "g" oder "s" sein... mehr nicht... Hier ist deren Beispiel für das Lesen vom Port mit EventListener: jSSC_examples - java-simple-serial-connector - jSSC - java serial port communication library - Google Project Hosting (letztes Beispiel).
Jemand eine Idee wie ich das am besten auslesen kann ?
 

Kevin94

Top Contributor
Mit der Mask kann man festlegen, wann Events generiert werden sollen. Je nach dem wie die Maske zusammengesetzt ist erhällt man dann die Events. Laut dem Beispiel gibt es drei Arten von Events:
  • SerialPort.MASK_RXCHAR: Die Nachrichten die du vermutlich haben willst, wenn neue Daten da sind
  • SerialPort.MASK_CTS: Wird generiert wenn die CTS-Leitung ihren Zustand ändert
  • SerialPort.MASK_DSR: Selbes für DSR
(auch wenn ich vergessen hab wofür die Abkürzungen CTS und DSR stehen)

Mal das Beispiel für deinen Fall angepasst:

Java:
import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;

public class Main {

    static SerialPort serialPort;

    public static void main(String[] args) {
        serialPort = new SerialPort("COM1"); 
        try {
            serialPort.openPort();//Open port
            serialPort.setParams(9600, 8, 1, 0);//Set params
            int mask = SerialPort.MASK_RXCHAR;//Prepare mask
            serialPort.setEventsMask(mask);//Set mask
            serialPort.addEventListener(new SerialPortReader());//Add SerialPortEventListener
        }
        catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }
    
    static class SerialPortReader implements SerialPortEventListener {

        public void serialEvent(SerialPortEvent event) {
                if(event.getEventValue() > 0){//Check bytes count in the input buffer
                    try {
                         switch(serialPort.read()){
                            case 's': // tu was du tun willst
                            break;
                            case 'g': // tu was du tun willst
                            break;
                         }
                    }
                    catch (SerialPortException ex) {
                        System.out.println(ex);
                    }
                }
    }
}
 

Ruderer1993

Aktives Mitglied
Vielen Dank schonmal für die Antwort. Jedoch gibt es die Methode read in dieser Bibliothek nicht. Soll ich da dann readBytes oder readString nehmen ?! Weil ich ja dann wieder übergeben muss wieviele bytes er lesen soll ....
 

Kevin94

Top Contributor
Dann wirst do wohl
Code:
readBytes(1)[0]
stattdessen verwenden müssen. Kenne die Bebliothek nicht, aber readString versucht vermutlich einen vollständigen UFT String zu lesen (mit zwei Bytes Länge am Anfang und 0 als Terminierungszeichen).
 

Ruderer1993

Aktives Mitglied
Ok habe es nun zu dieser Zeile geändert.
Erklärst du mir vielleicht auch die Schreibweise ?
Habe das in der Form so noch nicht gesehen in Java Programmen.
Code:
	                         switch(serialPort.readBytes(1)[0]){
 

Kevin94

Top Contributor
Das kann man eigentlich leicht in der Aufrufreihenfolge aufdröseln:
  • Code:
    serialPort.readBytes(1)
    : Liest ein Array der Länge 1 aus dem Port-Puffer, Returntype ist byte[]
  • Code:
    [0]
    lieftert das erste (bzw einzige) byte, aus dem Array das von der Methode geliefert wurde
  • Code:
    switch
    führt eine Fallunterscheidung durch (swich) mit diesem byte.

Dass man, wenn eine Methode ein Array zurückgibt, dann direkt auf eine einzelnes Element zugreift, ohne das Array in einer Variable zwischen zu speichern ist bestimmt nicht alltäglich, ist aber in solchen Fällen, wo von vornherein bekannt ist, dass das Array die Länge 1 hat, logisch und das Zwischenspeichern vollkommen überflüssig.
 

Ruderer1993

Aktives Mitglied
Hey, muss den Thread hier leider nochmal öffnen. Habe jetzt nicht mehr nur Nachrichten wie "g" oder "s" sondern auch Nachrichten wie "r1" oder "b5" oder "g0" (als r0-9, b0-9 nd g0-9)
Wie muss ich denn jetzt meinen Code anpassen ? Das switch Statement funktioniert da ja nicht mehr, da ich ja nur mit ' ' switchen kann und nicht mit " ".Außerdem lese ich ja im Moment immer nur ein byte ein.
Jemand eine Idee ?
 

Kevin94

Top Contributor
Seit Java7 geht switch theoretisch auch mit Strings, aber ich würde es so erweitern:
Java:
if(event.getEventValue() > 0){//Check bytes count in the input buffer
                    try {
                         switch(serialPort.readBytes(1)[0]){
                            case 's': // tu was du tun willst
                            break;
                            case 'b':
                            switch(serialPort.readBytes(1)[0]){
                                case '0': //Code
                                break;
                                case '1': //Code
                                break;
                                //...
                            }
                            break;
                            //und das selbe für die anderen
                         }
                    }
                    catch (SerialPortException ex) {
                        System.out.println(ex);
                    }
                }
 

imillitay

Mitglied
Hast du es jetzt schon mal mit der readString-Methode versucht? Mit JDK7 kannst du ja auch auf einem String switchen.
Erzeugst du die Nachrichten, die ankommen, denn selber? Wenn ja, könntest du dir natürlich auch ein kleines Protokoll ausdenken, z.B. dass jede Nachricht von einem speziellen Zeichen beendet werden muss. Dann liest du solange bis das Zeichen kommt und kannst auf dem zusammengesetzten String switchen.
 

Kevin94

Top Contributor
Falls es dir nicht aufgefallen ist: Er hat sein eigenes Protokoll.

Aber stimmt, dass könnte man wesentlich einfacher gestallten (für das lesende Programm). Es sind ja nicht gerade viele Daten, die da übertragen werden, da kommt es auf das eine byte mehr auch nicht an.
 

Ruderer1993

Aktives Mitglied
Seit Java7 geht switch theoretisch auch mit Strings, aber ich würde es so erweitern:
Java:
if(event.getEventValue() > 0){//Check bytes count in the input buffer
                    try {
                         switch(serialPort.readBytes(1)[0]){
                            case 's': // tu was du tun willst
                            break;
                            case 'b':
                            switch(serialPort.readBytes(1)[0]){
                                case '0': //Code
                                break;
                                case '1': //Code
                                break;
                                //...
                            }
                            break;
                            //und das selbe für die anderen
                         }
                    }
                    catch (SerialPortException ex) {
                        System.out.println(ex);
                    }
                }

Naja wie hilft mir das weiter ? bei beidem lese ich ja ein byte aus. Und die case Anweisung ändert ja nur von Buchstaben zu Zahlen ich habe aber Buchstabe+Zahl.
 
P

pappawinni

Gast
Nachdem der Buchstabe b gelesen wurde, wird das nächste Zeichen gelesen und das ist dann hoffentlich 1, 2, ..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Bytearray senden via SerialPort Java Basics - Anfänger-Themen 7
S Daten aus Import Datei auslesen und sortieren Java Basics - Anfänger-Themen 2
T array auslesen Java Basics - Anfänger-Themen 2
I Klassen von einem package laden, Statisches Feld auslesen und Objekt erstellen Java Basics - Anfänger-Themen 8
N Einzelne Werte aus einem TreeSet auslesen Java Basics - Anfänger-Themen 2
D Eclipse will nicht auslesen Java Basics - Anfänger-Themen 6
E TIF Datei auslesen Java Basics - Anfänger-Themen 2
krgewb Breite und Höhe eines Bildes in base64 auslesen Java Basics - Anfänger-Themen 3
sserio TXT-Datei Auslesen und den Wert jedes Namen ausrechnen etc. Java Basics - Anfänger-Themen 37
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
U Sekunden von LocalTime auslesen, wie möglich? Java Basics - Anfänger-Themen 1
E Outlook ordner auslesen Java Basics - Anfänger-Themen 4
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
J Datei aus Netzwerk auslesen Java Basics - Anfänger-Themen 9
J Jsonfile auslesen Java Basics - Anfänger-Themen 8
A Eine Textdatei auslesen Java Basics - Anfänger-Themen 16
N Aus einem String die Anzahl der Vokale auslesen Java Basics - Anfänger-Themen 40
H Array rückwärts auslesen funktioniert nicht Java Basics - Anfänger-Themen 3
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
AleXusher Mehrdimensionales Array aus txt.file auslesen Java Basics - Anfänger-Themen 4
L Zeichen an bestimmter Stelle auslesen Java Basics - Anfänger-Themen 4
3 Textdatei Zeilenweise auslesen Java Basics - Anfänger-Themen 3
J Json Datei auslesen Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
S Tastatureingabe auslesen und in Konsole ausgeben Java Basics - Anfänger-Themen 6
S CSV Datei auslesen und anders darstellen Java Basics - Anfänger-Themen 2
G Scanner nutzen und Index auslesen Java Basics - Anfänger-Themen 8
N JTable auslesen Java Basics - Anfänger-Themen 6
N Java CSV Datei auslesen Java Basics - Anfänger-Themen 6
F Webseiten Quelltext auslesen Java Basics - Anfänger-Themen 5
J Datei auslesen (nur bestimmte Stellen) Java Basics - Anfänger-Themen 2
I csv auslesen, mittels List Java Basics - Anfänger-Themen 18
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G If / While Programm (Datei auslesen) Java Basics - Anfänger-Themen 6
S Aus einer .bz2 Datei auslesen Java Basics - Anfänger-Themen 2
K Textdatei auslesen und über Mqtt schicken Java Basics - Anfänger-Themen 4
B Name von Verzeichnis bekommen - Files von einem Ordner auslesen Java Basics - Anfänger-Themen 4
A Daten auslesen/vergleichen Java Basics - Anfänger-Themen 3
D XML von Seite auslesen Jsoup Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
B WSDL auslesen? Java Basics - Anfänger-Themen 8
D Methoden Textdokument erstellen und auslesen. Java Basics - Anfänger-Themen 46
B HTML Code / Seite auslesen und JAVA Objekte erstellen Java Basics - Anfänger-Themen 12
S Datein auslesen und verarbeiten Java Basics - Anfänger-Themen 1
J Geld speichern und wieder auslesen Java Basics - Anfänger-Themen 10
S CSV auslesen UTF-8 Problem Java Basics - Anfänger-Themen 7
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
K String buchstaben auslesen Java Basics - Anfänger-Themen 9
S Amazon Produktbeschreibung auslesen und nach Keywords suchen Java Basics - Anfänger-Themen 2
x-tshainge Interface Wie kann ich aus Textfeldern auslesen Java Basics - Anfänger-Themen 6
Z Ersten Buchstaben eines Elements eines String-Arrays auslesen Java Basics - Anfänger-Themen 5
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
CptK x wert eines Bildes auslesen Java Basics - Anfänger-Themen 1
T Website auslesen Java Basics - Anfänger-Themen 2
T String auslesen bzw. überprüfen Java Basics - Anfänger-Themen 1
L CSV Auslesen Java Basics - Anfänger-Themen 5
B Auslesen von PDF / Bilder Java Basics - Anfänger-Themen 5
das_leon Alle Zeilen einer CSV-Datei auslesen Java Basics - Anfänger-Themen 1
D Mit Java HTML bzw Javascript auslesen Java Basics - Anfänger-Themen 1
F Arrays Sätze speichern und einzelne Worte mit Index Angabe auslesen Java Basics - Anfänger-Themen 4
F Zwischenwerte aus Browser auslesen Java Basics - Anfänger-Themen 19
S Jede Ziffer einer Zahl auslesen, damit rechnen und beim Ergebnis wiederholen ? Java Basics - Anfänger-Themen 20
G Servlet - externe HTML (URL) auslesen Java Basics - Anfänger-Themen 1
T class Datei auslesen Java Java Basics - Anfänger-Themen 5
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
J Hashmap auslesen Java Basics - Anfänger-Themen 7
J Auslesen/speichern und wieder einlesen Java Basics - Anfänger-Themen 7
D String untereinander auslesen lassen Java Basics - Anfänger-Themen 2
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
DaCrazyJavaExpert Variablen Zahlen aus Strings auslesen Java Basics - Anfänger-Themen 4
J Informationen aus Webseiten auslesen Java Basics - Anfänger-Themen 1
S Text aus einer HTML Datei auslesen Java Basics - Anfänger-Themen 1
M Einzelne Pixel in einem Bild auslesen und bearbeiten Java Basics - Anfänger-Themen 1
dragonfight86 Erste Schritte OpenDocument auslesen Java Basics - Anfänger-Themen 13
I Texte mit Absätzen in Dateien speichern und auslesen Java Basics - Anfänger-Themen 1
W DNS Name auslesen + weitere Anfängerfrage Java Basics - Anfänger-Themen 4
C Werte aus JTable auslesen Java Basics - Anfänger-Themen 4
Chrizzey45 Calc-Dokument in Java auslesen? Java Basics - Anfänger-Themen 2
B Datei auslesen und 2D-Array anlegen Java Basics - Anfänger-Themen 1
B Key auslesen/ausgeben innerhalb von foreach() Java Basics - Anfänger-Themen 5
M Eigenschaften einer Datei auslesen Java Basics - Anfänger-Themen 5
M Textarea auslesen und beschreiben Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
Y Bildschirmauflösung auslesen Java Basics - Anfänger-Themen 4
S for schleife auslesen Java Basics - Anfänger-Themen 4
Voreck String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 9
Voreck Array aus txt datei auslesen Java Basics - Anfänger-Themen 2
N JFreeChart --> TimeSeries auslesen Java Basics - Anfänger-Themen 9
OlafHD Datei Auslesen Java Basics - Anfänger-Themen 6
M Metadaten OpenOffice mit Java auslesen Java Basics - Anfänger-Themen 9
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
J OpenOffice Dokumentenvariable mit Java auslesen Java Basics - Anfänger-Themen 1
P Daten von Internetseite auslesen Java Basics - Anfänger-Themen 10
L Text eingeben und im Textfeld auslesen lassen Java Basics - Anfänger-Themen 2
T Combobox Wert auslesen und damit weiterrechnen Java Basics - Anfänger-Themen 6
J Datei auslesen klappt nicht Java Basics - Anfänger-Themen 4
D String Zeichen für Zeichen auslesen Java Basics - Anfänger-Themen 5
Viktim Website auslesen Java Basics - Anfänger-Themen 8

Ähnliche Java Themen


Oben