Hexadezimal über RS232 senden

Status
Nicht offen für weitere Antworten.
W

wildbret

Gast
Hallo,

ich war mitr nicht sicher, ob ich meine Frage ins Anfängerforum,Netzwerk oder sonstiges schreiben soll, aber mit Vernetzung hat es schon was zu tun.

Ich habe ein Problem mit der Art und Wiese, wie Java Daten über die serielle Schnittstelle überträgt und hoffe dass mir jemand helfen kann.

Zur Info: ich verwende JDK1.6 und verwende zur Herstellung der seriellen Verbindung das Package javax.comm.

Ich habe ein kleines Java-Programm geschrieben, dass eine serielle Verbindung aufbaut und in der Lage ist Daten zu senden und zu empfangen. Am anderen Ende des Kabels befindet sich ein Microcontroller, auf dem eine C++-Task läuft, die auf die gesendeten Daten reagieren soll.

Nun zum Problem: Ich möchte ein hexadezimales Kommando der Form 020122a303 senden (02=Start, dann Länge, Command,Data,03=Stop), da der Microcontroler nur Hexadezimal versteht.
Nun habe ich herausgefunden, dass Java jedes einzelne Zeichen in Unicode überträgt.
Sende ich 02 kommt am Controller hex30 für die 0 und hex32 für die 2 an und es wird logischerweise nicht als Startbit erkannt.

Ich möchte, dass Java meine Befehle direkt hexadezimal überträgt und nicht jedes einzelne Zeichen als seinen hexadezimal ASCII-Wert.
Ich habe viel versucht mit Umwandlungen aller Art, aber letztendlich läuft alles darauf hinaus, dass Java egal welchen Datentyp ich benutze die Zeichen in Unicode (ASCII)-Kodierung überträgt und der Mikrocontroller damit nichts anfangen kann.

Das einzige, was mir noch einfällt ist eine schmutzige Lösung, Beispiel:
Will ich z.B. hexadezimal "4E" senden, lasse ich Java ein großes "N" schicken. Denn das "N" ist laut ASCII-Tabelle hex 4E. Das habe ich auch schon getestet, indem ich dem Controller gesagt habe, er soll beim Empfang von hex 4E eine LED auf dem Board anschalten.
Davon abgesehn, dass es umständlich ist, sehe ich Probleme mit den Sondezeichen. Will ich z.B. Hex "02" übertragen wüsste ich nicht wie man das zugehörige ASCII Sonderzeichen eingibt.

Ich hoffe sehr, dass mir jemand helfen kann und fragt bitte nach wenn ich mich unklar ausgedrückt habe.

Danke im Vorraus

MfG

ein verzweifelter Java-Anfänger
 
T

tuxedo

Gast
Ähm, wie sendest du denn auf der seriellen Schnittstelle?

Ich hab bis jetzt zwar nur gelesen, aber da hat das ganze byteweise funktioniert. Wenn mein "sender" 0x34 gesendet hat, hab ich mit Java in den empfangen Bytes auch wieder 0x34 vorgefunden...

- Alex
 
G

Guest

Gast
Ich benutze das javax.comm paket und dessen Methoden.
import javax.comm.*;

Ich versuche mal so gut wie es geht auf die Frage zu anworten, am besten mit Hifle des Quellcodes.


public class sendeListener implements ActionListener{
public void actionPerformed(ActionEvent e){
PrintWriter aus = new PrintWriter(out);
aus.println(tfe.getText());
aus.flush();
aus.close();
}
}




tfe ist ein Textfeld in das ich die Werte reinschreibe, ich habe aber auch schon versucht eine int,byte,short,string variable zu erzeugen und diese auszugeben-

z.B.

int test = 23;
aus.println(test);

oder

short test2 = 0x02;
aus.println(test2);

immer das gleiche :(

bei Bedarf zeig ich euch den ganzen Quellcode, ist nicht besonders lang, das meiste is Gui
 
W

wildbret

Gast
ups sorry, ich wollte nicht als Gast posten und wollte editieren um die code-tags reinzumachen geht aber nicht mehr.
 
M

maki

Gast
Könntest du mal erklären, was du unter Hexadezimal verstehst bzw. was dein Microcontroller erwartet ?
 
W

wildbret

Gast
0Der Mikrocontroller erwartet eine Zahlenfolge der folgenden Art.

020122a303 senden (02=Start, dann Länge, Command,Data,03=Stop)

Wenn ich diese mit Java sende kommt aber nicht hex 020122a303 an, sondern hex 30 für 0, 32 für 2, 30 für 30, 31 für 1 ...
Letztendlich kommt zwar eine hexadezimale Zahlenfolge an, aber die falsche weil Java meine Zeichen in Unicode sendet.

Der Microcontroller packt was er empfängt in ein Schieberegister, nimmt sich die ersten 8 Bit und interpretiert diese als die erste hexadezimale Zahl.

Unter einer hexadezimal Zahl verstehe ich z.B.
dezimal 37 = 25 hex = binär 0010 0101
 
T

tuxedo

Gast
Kein Wunder... Du willst Rohdaten (also bytes) senden, benutzt aber den Printwriter der auf dem OutputStream aufsetzt. Printwriter ist eigtl für Strings gedacht. Und "02" ist eben nix 0x02 sondern ein String der aus 2 Zeichen, sprich 2 bytes besteht. Also hat der auch immer 2 bytes gesendet (nix mit Unicode).

Wenn du deine "hexwerte" gleich in den OutputStream reinschreibst:

out.write(0x4e)

dann klappts auch... ;-)
 
W

wildbret

Gast
Danke sehr, das hört sich echt gut und einleuchtend an.
Werd ich gleich morgen bei erster Gelegenheit versuchen und hier Feedback geben ob es geklappt hat.

Prima *freu* :)
 
W

wildbret

Gast
Also dein Vorschlag funktioniert wunderbar, Danke.

Ich habe noch ein paar Sachen dazuprogrammiert, wie z.B. das die Verbindung erst durch Knopfdruck und nicht gleich beim Programmaufruf hergestellt wird und das man über JRadioButtons den Com-Port auswählen kann etc...

Da ich nun recht gut Senden kann werde ich mich als nächstes mal mit dem Empfänger auseinandersetzen, weil dieser schreibt mir nur krytische Zeichen in mein Textfeld.
Eigentlich sollte er das ankommende Antwort-Frame 1:1 ausgeben, aber wandelt die ankommenden Hex-Werte in die zugehörigen Unicode-Zeichen.

Ist bestimmt eine vergleichbare Lösung aber ich bin noch nicht drauf gekommen.

Code:
public class commListener implements SerialPortEventListener{
    public void serialEvent(SerialPortEvent event) {
      if(event.getEventType()==SerialPortEvent.DATA_AVAILABLE){
        byte[] readBuffer = new byte[20];
        try {
          while (in.available() > 0) {in.read(readBuffer);}
          String nachricht = new String(readBuffer);
          ausgabe.append(nachricht);            
        }
        catch (IOException e) {System.out.println("Fehler: "+e);}
      }
    }
  }
 
T

tuxedo

Gast
Vergiss doch mal ganz schnell die Bezeichnung "hex-werte". Du verwirrst die Leuite nur damit. Das sind stinknormale Bytes...

Wenn du ein "a" Byte sendest, kommt auf der anderen Seite auch ein "a" Byte an. Du solltest einfach auf das Charset achten, spricht Sender und Empfänger sollten die Bytes identisch interpretieren.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Tabelle im Web über Listener aufrufen Netzwerkprogrammierung 1
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
S Socket Bilder über Socket Senden Netzwerkprogrammierung 0
B Zip Dateien über FTP laden Netzwerkprogrammierung 2
x46 byte[] über BufferedReader auslesen Netzwerkprogrammierung 18
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
L Webbasierte Anwendung - Authentifizierung über LDAP/ActiveDirectory Netzwerkprogrammierung 5
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
S Daten über TCP/IP senden Netzwerkprogrammierung 3
T Broadcast-message über spez. Netzwerk-Schnittstelle Netzwerkprogrammierung 1
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
M Erstelltes Programm über Internet Browser ausführen Netzwerkprogrammierung 26
T VPN-Verbindung über Java Netzwerkprogrammierung 4
V Einfachen Javaserver über das Internet erreichbar machen Netzwerkprogrammierung 2
J FTP Upload über Proxy funktioniert nicht Netzwerkprogrammierung 1
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
Thallius Java Application über ZScaler benutzer? Netzwerkprogrammierung 0
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
antonbracke Multiuser Software über XMPP Server Netzwerkprogrammierung 1
Z Verbindung zwischen 2 Rechnern über ServerSockets nicht möglich Netzwerkprogrammierung 3
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
I ASCII über serielle Schnittstelle Netzwerkprogrammierung 1
N RMI "RMI über Lan funktioniert nicht" & "RMI-Server im Lan scannen" Netzwerkprogrammierung 13
L Mit Java über PHP in MySQL anmelden (Login script) Netzwerkprogrammierung 3
M Socket String Arrays über Socket an Server schicken Netzwerkprogrammierung 2
T Socket Methoden über Internet aufrufen Netzwerkprogrammierung 1
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
X Problem mit vielen Bytes über Socket Netzwerkprogrammierung 23
K ByteArray über Netzwerk senden klappt nicht Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
P RMI Threads die über RMI auf Datenbank zugreifen Netzwerkprogrammierung 2
S Datei schreiben über Applet Netzwerkprogrammierung 8
G Klassen über Netzwerk kommunizieren lassen Netzwerkprogrammierung 6
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
Kjubert Synchronisieren von Objekten über Client/Server - bester Weg? Netzwerkprogrammierung 7
S ImageIcon über Socket schicken (Serialisierung) Netzwerkprogrammierung 6
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
S Seltsames Verhalten beim Empfangen von Daten über DataInputStream Netzwerkprogrammierung 12
A TCP über UDP Verbindung? Netzwerkprogrammierung 10
C Datei über Socket schreiben und Ereignis lesen Netzwerkprogrammierung 9
D Socket Class über Netzwerk verschicken Netzwerkprogrammierung 2
D JNLP über Webstart funktioniert nicht... Netzwerkprogrammierung 2
J Socket Dateien über Socket auf Server speichern Netzwerkprogrammierung 3
D Socket Datei nur stückweise über Socket verschicken Netzwerkprogrammierung 6
G Bild über Socket schicken - Client/Server Netzwerkprogrammierung 10
A Computer über Internet verbinden Netzwerkprogrammierung 12
N über Java in eine Text-Datei auf einem Server schreiben Netzwerkprogrammierung 2
c_sidi90 ideale Lösung, Screen Capture über Netzwerk Netzwerkprogrammierung 3
S Socket Verschiedene Exceptions beim Übertragen von Bildern über Socket Netzwerkprogrammierung 20
T ArrayList über Netzwerk senden! Netzwerkprogrammierung 5
N Problem über http eine Datei zu senden Netzwerkprogrammierung 4
T Verbindungsversuche über TCP Sockets von mehreren Threads führt zu Serverabsturz Netzwerkprogrammierung 2
V Authentifikation über mehrere Server? Netzwerkprogrammierung 3
C Verbindung zu einem Hostrechner über das Internet herstellen Netzwerkprogrammierung 15
M Map über Webservice übertragen Netzwerkprogrammierung 3
D Mehrere Clients über Java-Sockets Netzwerkprogrammierung 13
P Socket Verbindung über das Internet Netzwerkprogrammierung 2
Z Socket Connection reset by peer nur per IP nicht über localhost Netzwerkprogrammierung 13
ruffio1978 Telnet über ein socket ansprechen Netzwerkprogrammierung 8
F Socket Verbindungen über mehrere Server Netzwerkprogrammierung 4
U Datei über das Netzwerk einlesen und speichern Netzwerkprogrammierung 8
G Klassen über JMX per URLClassloader laden? Netzwerkprogrammierung 2
E Zwei PCs über das Internet miteinander verbinden? Netzwerkprogrammierung 3
E Socketverbindung über das Internet - Timeout? Netzwerkprogrammierung 28
M Socket Bilder über das Netzwerk übertragen Netzwerkprogrammierung 4
E Java über Socket ins Internet? Netzwerkprogrammierung 4
F Socket Daten über verschiedene IP's schicken Netzwerkprogrammierung 5
M Socket JavaProg über einen Clienten steuern Netzwerkprogrammierung 5
M Mail über Exchange versenden Netzwerkprogrammierung 13
F C/S über HTTPS Netzwerkprogrammierung 2
D ...class.getResourceAsStream("/meine.properties") funktioniert nicht über RMI? Netzwerkprogrammierung 3
M ganymed-ssh2.har: ftp-Verbindung über ftp-Proxy Netzwerkprogrammierung 2
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
Z File über Socket lesen Netzwerkprogrammierung 3
A HTTP Binärdaten über PHP-Skript in Datenbank schreiben bzw auslesen Netzwerkprogrammierung 2
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
P FTP isFile() über FTP Netzwerkprogrammierung 3
I Socket HTTP Nachrichten über Sockets verschicken Netzwerkprogrammierung 2
N String als byte Array über Socket versenden Netzwerkprogrammierung 8
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
N Socket File über Socket vom Server an Client versenden Netzwerkprogrammierung 15
P Socket Problem mit Netzwerkverbindung über TCP Netzwerkprogrammierung 12
A UCP Connection über Proxy möglich? Netzwerkprogrammierung 7
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
F Char über Netzwerk senden Netzwerkprogrammierung 6
S HTTP Login mit CAS Authentisierung über SSL Netzwerkprogrammierung 2
C Befehle über ein GUI an Server senden Netzwerkprogrammierung 15
M Socket Datei über Socket versenden Netzwerkprogrammierung 5
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Google Translate über Java ansprechen? Netzwerkprogrammierung 13
F Socket ImageIcon über Socket --> Fehler Netzwerkprogrammierung 14
N Datenaustausch zwischen Java-GUI und PHP-Programm über SOAP Netzwerkprogrammierung 19
L RMI Informationen über die Clients herausfinden Netzwerkprogrammierung 5
R HTTP Problem bei Authentifizierung über (Http)UrlConnection Netzwerkprogrammierung 2
1 Kommunikation mit externem Programm über TCP Netzwerkprogrammierung 2
U Informationen über Netzwerkclients herausfinden Netzwerkprogrammierung 2
J Socket Erreichbarkeit eines Java Servers (Socket-Lösung) über das Internet Netzwerkprogrammierung 3

Ähnliche Java Themen


Oben