URL: https://www.overclockers.at/coding-stuff/rs232_mit_java_ansprechen_219398/page_3 - zur Vollversion wechseln!
ja das hab ich mir so gedacht das ich eine schleife mache der den mir alles in byte umwandelt und in ein byte array, allerdings kann ich bei outputstream.write kein array rausschicken.
sicher kann er, http://download.oracle.com/javase/1...ream.html#write(byte[])
Danke, hatte einen Fehler beim Array deswegen bekam ich andauernd einen Fehler
nochmals ein big fett DANKE an alle die mir geholfen haben!
Hallo Leute,
nachdem ich mehrere Stunden im Internet nach eine Lösung für mein Problem gesuchte habe bin ich auf diesen Thread gestoßen.
Mein Problem:
ich muss einen AV-Reciever über RS232 steuern.
Die Befehle müssen in HEX übertragen werden.
Als Beispiel:
Der Befehl zum Einschalten lautet: 50 43 53 45 4E 44 02 04 80 70 C0 3F 40 4F
Habe mir einen GUI-Programm geschrieben, mit dem ich auf die Comports zugreifen kann. Der Zugriff funktioniert auch.
Habe einen Textfeld, wo ich die Befehle in HEX reinschreibe. Zum senden klicke ich auf den "Senden-Knopf" und der Inhalt des Textfeldes, z.B. 504353454E4402048070C03F404F, soll an das Gerät geschickt werden.
Der Code zum senden:
Code: JAVAvoid sendeSerialPort(String nachricht) { System.out.println("Sende: " + nachricht); if (serialPortGeoeffnet != true) return; try { outputStream.write(nachricht.getBytes()); } catch (IOException e) { System.out.println("Fehler beim Senden"); } }
parsed du den string im textfeld? "50" != 0x50Zitat aus einem Post von magic_maHabe einen Textfeld, wo ich die Befehle in HEX reinschreibe. Zum senden klicke ich auf den "Senden-Knopf" und der Inhalt des Textfeldes, z.B. 504353454E4402048070C03F404F, soll an das Gerät geschickt werden.
Der Code zum senden:Code: JAVAvoid sendeSerialPort(String nachricht) { System.out.println("Sende: " + nachricht); if (serialPortGeoeffnet != true) return; try { outputStream.write(nachricht.getBytes()); } catch (IOException e) { System.out.println("Fehler beim Senden"); } }
Dein Problem wird sein, dass Java den String als ASCII-Bytes als Hex schickt und nicht als das was du eigentlich senden willst.
Du musst deinen String von Java wortwörtlich als Hex interpretieren lassen. Wie man das am besten anstellt, weiß ich nicht aber wahrscheinlich ist Integer.parseInt(input, 16) ein guter Start (16 = String ist in Base 16 aka Hex).
Schon ausprobiert.
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "504353454E4402048070C03F404F
"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
Das ist die Antwort
du versuchst eine 14 byte lange zahl zu parsen, ich glaube nicht dass parseInt() das kann.Zitat von magic_maSchon ausprobiert.
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "504353454E4402048070C03F404F
"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:495)
Das ist die Antwort
Dadurch werden die Zahlen umgewandelt! Das soll es aber nicht.
Sende: 504353454E4402048070C03F404F
Ausgabe:
80
67
83
69
78
68
2
4
-128
112
-64
63
64
79
deine ausgabe ist im dezimalformat. das parsen funktioniert korrekt:Zitat von magic_maDadurch werden die Zahlen umgewandelt! Das soll es aber nicht.
Sende: 504353454E4402048070C03F404F
Ausgabe:
80
67
83
69
78
68
2
4
-128
112
-64
63
64
79
Ja aber gesendet werden doch die Dezimalwerte und nicht die HEX-Werte. Oder nicht?
Code: JAVAvoid sendeSerialPort(String nachricht) { System.out.println("Sende: " + nachricht); if (serialPortGeoeffnet != true) return; try { outputStream.write(hexStringToByteArray(nachricht)); } catch (IOException e) { System.out.println("Fehler beim Senden"); } }
Gedendet werde bytes. Ob du jetzt dezimal 80 oder hexadezimal 50 sendest ist egal, weil das byte identisch ist. Du kannst es z.b. mit dem windows rechner sehr einfach überprüfen, auf "programmierer"- ansicht wechseln und dort die binärwerte von 80(dec) und 50(hex) vergleichen.
Ja natürlich. Ich dödel.
Da sich beim beim AVR nichts tut gehe ich davon aus dass der tatsächlich nur Hex-Befehle annimmt. Was ja komisch sein dürfte. Der Reciever wandelt den Befehl am Ende ja auch in Bytes um denke ich.
Ergo, der Fehler muss dann wo anders sein. Ich such mal. Wenn ich nicht weiter komme melde ich mich.
Danke schon mal
Wie die bytes zustande gekommen sind weis der receiver nicht - es ist auch irrelevant, nur der inhalt muss stimmen. Ich gehe davon aus dass der fehler woanders liegt.
ich nehme an du hast nicht die nötige hardware um das signal abzugreifen und zu schauen was wirklich drüber geht?
ansonsten kannst du dir ein fake rs232 einrichten mit z.b. http://com0com.sourceforge.net/ und dann in putty oder ähnlichem mal aufmachen und schauen was da an kommt
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026