Hex über RS232 ausgeben

Status
Nicht offen für weitere Antworten.

bonatus

Aktives Mitglied
Hallo,

ich erhalte über eine RS232 Schnittstelle (COM1) Zeichen vom Typ Hex. Es ist einmal die "05" und "06".
Ich habe es schon über Interger.toHex versucht, aber da gibt er mir ein Sonderzeichen aus (viereck).

Wie kann ich Hex Zeichen über den COM richtig ausgeben?

gruß bonatus
 
T

tuxedo

Gast
Seit wann gehen "Hexzeichen" über RS232?

Java handhabt da alles als "byte". Willst du vielleicht eine Hex-Repräsentation (String) der empfangenen Bytes haben?

- Alex
 

bonatus

Aktives Mitglied
Alles schön und gut.
Das habe ich doch auch schon probiert: Interger.toHexString

Wie schon erwähnt gibt der mir Sonderzeichen aus.

Ich erhalte im Hex Format das Zeichen "06" über die RS232.

trotzdem danke
bonatus
 
T

tuxedo

Gast
bonatus hat gesagt.:
Ich erhalte im Hex Format das Zeichen "06" über die RS232.

Vielleicht sollten wir erstmal die Notation klären:

Wenn du "06" über RS232 erhälst: Ist das dann 1 oder 2 byte lang? Zeig mal ein Stückchen Code wie du von der RS232 ließt ...

- Alex
 

bonatus

Aktives Mitglied
Ich würde sagen 1 Byte. Bin mir aber nicht sicher.
Ich schicke dieses Zeichen über ein Programm von einem anderen Computer.
 
T

tuxedo

Gast
Wenn du dir nicht sicher bist können wir dir auch nicht helfen. Die RS232 Schnittstelle ist keine Blackbox auf der steht "hier geschieht ein Wunder".

Hellsehen können wir ohne Beispielcode von dir nicht. Also lass ein wenig Code vom Sender und Empfänger sehen.

- Alex
 

bonatus

Aktives Mitglied
Also ich verwende zum testen den Code von TwoWaySerialComm:
Die eingentliche Klasse ist dabei der SerialReader

Code:
import gnu.io.CommPort;
import gnu.io.CommPortIdentifier;
import gnu.io.SerialPort;

import java.io.FileDescriptor;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class TwoWaySerialComm
{
    public TwoWaySerialComm()
    {
        super();
    }
    
    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(this.getClass().getName(),4000);
            
            if ( commPort instanceof SerialPort )
            {
                SerialPort serialPort = (SerialPort) commPort;
                serialPort.setSerialPortParams(19200,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
                
                InputStream in = serialPort.getInputStream();
                OutputStream out = serialPort.getOutputStream();
                
                (new Thread(new SerialReader(in))).start();
                (new Thread(new SerialWriter(out))).start();

            }
            else
            {
                System.out.println("Error: Only serial ports are handled by this example.");
            }
        }     
    }
    
    /** */
    public static class SerialReader implements Runnable 
    {
        InputStream in;
        
        public SerialReader ( InputStream in )
        {
            this.in = in;
        }
        
        public void run ()
        {
            byte[] buffer = new byte[1];
            int len = -1;
            int value = 0;
            String raus="";
            try
            {
                while ( ( len = this.in.read(buffer)) > -1 )
                {               	
                    System.out.print(new String(buffer,0,len));
                }
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }            
        }
    }

    /** */
    public static class SerialWriter implements Runnable 
    {
        OutputStream out;
        
        public SerialWriter ( OutputStream out )
        {
            this.out = out;
        }
        
        public void run ()
        {
            try
            {                
                int c = 0;
                while ( ( c = System.in.read()) > -1 )
                {
                    this.out.write(c);
                }                
            }
            catch ( IOException e )
            {
                e.printStackTrace();
            }            
        }
    }
    
    public static void main ( String[] args )
    {
        try
        {
            (new TwoWaySerialComm()).connect("COM1");
        }
        catch ( Exception e )
        {
            e.printStackTrace();
        }
    }
}
 
T

tuxedo

Gast
[ironie]Und lass mich raten: Die CNC Maschine hat keinen Hersteller der auch kein Handbuch geschrieben hat und der auch keine Ahnung hat wie die Maschine, die er auch gerne als "Hier geschieht5 ein Wunder beim Senden" Mashcine bezeichnet, ihre Daten sendet?[/ironie]

Wie willst du mit jemandem kommunizieren/ihn verstehen, wenn du seine Sprache nicht kennst?

- Alex
 

Murray

Top Contributor
Der Code vom Empfänger reicht.

Hier wird immer ein byte gelesen (der Puffer ist ja nicht länger). Das Problem ist jetzt die Ausgabe, bei der du den Byte-Wert einem String-Konstruktor vorwirfst, der die Daten anders interpretiert als du dir das vorstellst.

Probier mal
Code:
while ( ( len = this.in.read(buffer)) > -1 ) {                  
     System.out.print( Integer.toHexString( (int)(buffer[0])));
}
 
T

tuxedo

Gast
Wie willst du wissen ob das reicht? Wenn der Empfänger falsch geschrieben ist, dann haut das dennoch nicht hin...

- Alex
 

bonatus

Aktives Mitglied
Die CNC-Maschine ist doch nicht wichtig. Sie sendet die Zeichen die 1 Byte lang sind und ich will sie mit einem Java Programm ausgeben. Mehr eigentlich nicht.
 

Murray

Top Contributor
alex0801 hat gesagt.:
Wie willst du wissen ob das reicht? Wenn der Empfänger falsch geschrieben ist, dann haut das dennoch nicht hin...
Es ging ihm doch darum, die von der CNC-Maschine gesendeten Bytes in Hex-Form auszugeben. Und dazu muss man nicht unbedingt wissen, was die CNC-Maschine eigentlich schicken sollte.
 

bonatus

Aktives Mitglied
@ Murray: Danke erstmal.
Ich bekomme jetzt eine 6 statt der "06", aber darüber kann ich hinwegsehen.
danke
 
T

tuxedo

Gast
*Kopfschüttel* Von Anfang an herrschte unklarheit darüber ob die "Hex" Sache "06" jetzt als 1 oder 2 byte von der CNC übertragen wird. Und als ich nachgefragt habe, kam nur ein "weiß ich nicht genau".

Von diesem Standpunkt aus kann man ja nicht mit sicherheit sagen ob jetzt wirklich nur byte für byte behandelt werden muss oder ob man die Information "hex 06" aus 2 bytes konstruieren muss.

Klar, wäre logisch dass es um 1 byte geht. Aber wer schon öfters mit solcher Hardware gearbeitet hat weiß, dass Hersteller nicht immer logisch handeln. Da ist öfters mal "quick'n'dirty" Technik dahinter.

- Alex
 

bonatus

Aktives Mitglied
Im ersten Augenblick wusste ich es nicht wie lang die Zeichen sind. Nun weiß ich aber sie sind 1 Byte lang.

Ich bedanke mich trotzdem für eure Hilfe.

bonatus
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C .hex Datei über RS232 versenden Allgemeine Java-Themen 3
kodela Datenübergabe über Buttons Allgemeine Java-Themen 8
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
A ByteArray über Socket Allgemeine Java-Themen 3
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
I 2D-Grafik Vektor-Grafik über die Zwischenablage nach Adobe Illustrator transferieren Allgemeine Java-Themen 8
TheSkyRider Methode über DataInputStream "auslösen" Allgemeine Java-Themen 6
I OpenPDF erzeugt riesige PDFs, wenn Grafiken über PdfGraphics2D#drawImage gezeichnet werden Allgemeine Java-Themen 1
T Etikettendrucker über TCP-IP Allgemeine Java-Themen 1
Encera Gleichzeitiges Ausführen und verbinden von 2 Java-Klassen über die Eingabeaufforderung und Eclipse Allgemeine Java-Themen 21
B HTTP Allgemeine Fragen über Suchmaschine nutzen mit Java Allgemeine Java-Themen 20
torresbig Klasse mit extends Calendar über Methoden ändern (Hirnblockade) Allgemeine Java-Themen 7
B Liste ändern während Iteration über Diese? Allgemeine Java-Themen 16
Master3000 Java Konsole über Buffered Reader Zeilenweise auslesen ? Allgemeine Java-Themen 26
J Daten über serielle Schnittstelle empfangen Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
M Registry Autostart Eintrag mit Java erstellen (über Windows cmd) Allgemeine Java-Themen 7
OSchriever Programm über Linux-Kommandozeile ausführen Allgemeine Java-Themen 20
J Namen von Methoden über Reguläre Ausdrücke bearbeiten Allgemeine Java-Themen 6
M Schnelleres Speichern von XML-Daten über URLConnection Allgemeine Java-Themen 4
M Keine weitere Eingabe in der Main möglich. Eventueller Ansatz über while. Allgemeine Java-Themen 8
Drachenbauer Wie kann eine vorgegebene Farbe über einen String erkannt werden? Allgemeine Java-Themen 11
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
N Über einen Button in JavaFX ein Event über eine Pipeline schicken(Netty) Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
david19 Software AE über Domain laufen lassen Allgemeine Java-Themen 0
Q Selbständig ActionEvent auslösen zum Daten senden über serielle Schnittstelle Allgemeine Java-Themen 7
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
C VisualVM oder Jconsole über Jolokia-Proxy Allgemeine Java-Themen 0
G USB-Pins über Java ansteuern Allgemeine Java-Themen 8
Ernesto95 Best Practice Localization über ResourceBundle Allgemeine Java-Themen 6
C Classpath Neue Klasse über einen Button ausführen Allgemeine Java-Themen 3
C Auslesen auslösen über Button-Click Allgemeine Java-Themen 8
M Fragen beantworten über Textfeldeingabe Allgemeine Java-Themen 5
AssELAss Best Practice Checksumme über jede Spalte zweier Tabellen und vergleichen Allgemeine Java-Themen 3
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
kodela Eigenartige Datumsberechnung über GregorianCalendar Allgemeine Java-Themen 15
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
T .jar über cmd ausführen (später dann batch) Allgemeine Java-Themen 6
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
C Input/Output Zip Files über Socket senden und empfangen Allgemeine Java-Themen 6
M WebService - Zugriff auf Webservice Methode über Browser Allgemeine Java-Themen 1
C .jar File lässt sich nur über Konsole öffnen Allgemeine Java-Themen 1
L Videodateien über Java öffnen unabhängig vom Format Allgemeine Java-Themen 4
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
T Daten über port abfangen mit proxy server Allgemeine Java-Themen 12
M Eingabe von Arrays geht über gewünschte Anzahl hinaus Allgemeine Java-Themen 2
L Prüfen, ob Programm über 32bit oder 64bit Java ausgeführt wird Allgemeine Java-Themen 4
F Content-Disposition ermitteln über URL Allgemeine Java-Themen 2
ARadauer Checksumme über BigDecimal Werte Allgemeine Java-Themen 11
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
G Darstellung von Ergebnissen einer Dokumentensuche über eine JTable Allgemeine Java-Themen 19
S VLC + Lied über Java starten Allgemeine Java-Themen 17
M HTML-Code von Webseite über Browser oder Console auslesen?? Allgemeine Java-Themen 5
A Sinuston ausgeben und über Mikro Amplitude messen – machbar? Allgemeine Java-Themen 6
R Java-Progamm über Icon starten unter Windows Allgemeine Java-Themen 9
C Daten über URL an PHP verschicken Allgemeine Java-Themen 4
O Fragen über Fragen - Bei Änderung XML-Datei -> Anpassung GUI Allgemeine Java-Themen 7
aze Jar ausführen über Runtime.execute funktioniert nicht Allgemeine Java-Themen 4
S NoSuchMethodError beim Ausführen einer C Methode über JNI Allgemeine Java-Themen 5
H OOP Daten über TCP Allgemeine Java-Themen 5
Pastafari Iterator über nested HashMaps Allgemeine Java-Themen 7
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
G Interface Laden der Konfiguration über Interfaces sinnvoll? Allgemeine Java-Themen 28
D Player Objekt - Frame über Server anzeigen lassen. Allgemeine Java-Themen 3
B VoIP-Gespräche über Computer führen Allgemeine Java-Themen 3
S Jar-File startet nicht über doppelklick Allgemeine Java-Themen 2
C Java Programm über SSH starten Allgemeine Java-Themen 16
K Internetverbindung über PuTTy herstellen?! Allgemeine Java-Themen 9
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
G Auf Kommandozeile über Processobjekt mit Outputstream Allgemeine Java-Themen 3
S Input/Output Binärdatei über Bytestreams Allgemeine Java-Themen 4
S Kommunikation von Core und GUI über Schnittstellen Allgemeine Java-Themen 2
J Explorer über Code starten Allgemeine Java-Themen 15
kodela Problem mit Kopieren über FileChannel Allgemeine Java-Themen 4
L Java und Javascript um Distanz über Google Maps zu berchnen Allgemeine Java-Themen 10
B UNIX Shell befehl über JavaCode ausführen Allgemeine Java-Themen 19
D Java Excel API - Schreiben in Excel lässt sich nicht über Makro starten Allgemeine Java-Themen 18
M Ampelsteuerung über Timer in Java realisieren Allgemeine Java-Themen 3
L CMD über Java öffnen Allgemeine Java-Themen 8
U Mailclient über getDesktop.mail vorbereiten, Problem beim Anhang: Allgemeine Java-Themen 3
R Klasse über Button Event in anderer Klasse informieren Allgemeine Java-Themen 11
R Frequenzausgabe (2 Kanal) über Lautsprecherausgang Allgemeine Java-Themen 22
J Java-Klasse über Konsole starten Allgemeine Java-Themen 6
E FF Einstellungen über Programm ändern? Allgemeine Java-Themen 7
D JVM kann nicht über die jvm.dll gestartet werden? Allgemeine Java-Themen 1
S File im windowexploer öffnen über java Allgemeine Java-Themen 6
J Receive eines Hex-Bytes über COM-Port Allgemeine Java-Themen 4
Nicer Prozess über Prozessnamen beenden Allgemeine Java-Themen 15
reibi File über FileChannel locken Allgemeine Java-Themen 5
B Serialisierung mit Unterobjekten über Netzwerk Allgemeine Java-Themen 3
K Objekt-Austausch zwischen zwei Programmen über System-Clipboard Allgemeine Java-Themen 5
B parallele / Multithreaded Iteration über Map Allgemeine Java-Themen 12
D Unix/Linux Benutzer-Authentifikation über Java Allgemeine Java-Themen 3
M Tastatur eingabe über Buttons Allgemeine Java-Themen 15
S GPS-Maus über USB ansprechen Allgemeine Java-Themen 8
reibi Files über Classpath laden Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben