URL: https://www.overclockers.at/coding-stuff/rs232_mit_java_ansprechen_219398/page_2 - zur Vollversion wechseln!
Jetzt bin ich mal komplett verwirrt lol
Ok also das Gerät erwartet soviel ich weiß einen Hex String, dieser Hex String kann variabel groß sein.
Das Gerät nimmt das Telegramm und guckt was im 2. Byte steht dort steht dann zB 01 = Zieladresse 1 oder 0A = Zieladress 10
somit vermute ich dass das Gerät einen Hex String erwartet und nicht eine Folge von verschieden großen Bytes
Äh, ein Byte ist immer gleich groß
Ein "variabel großer Hex String" ist nichts anderes als eine Folge von Bytes
@ DKCH, nein, tut es nicht, wenn du einen String "02" hast, dann liefert dir getBytes() 0x30, 0x32; was er braucht ist aber 0x0, 0x2
Anders formuliert: Er braucht nicht den ASCII Code vom Zeichen "0" sondern das Zeichen mit ASCII Code 0!
ok mit dem byte immer gleich groß hast recht ;-)
allerdings wenn ich mich jetzt nicht irre hat eine 2er Hex Gruppe nur 1 Byte und nicht 2 Byte?
also 255 = FF = 1111 1111 = 1 Byte?
edit://
Ist in in .net einfacher zu realisieren? ich hab kein Problem wenn ich eine andere Sprache einsetze es soll nur den sinn und zweck erfüllen
Ja das stimmt natürlich.
Aber dein Gerät (Ich nehm an das ist was älteres?) wird für Adressen, etc. ja sicherlich ganze Bytes nehmen und nicht half bytes, oder?
um nochmal sicher zu gehen:
Du schreibst, dass du "0201010203040506" übertragen willst
heißt das, dass du
0x02
0x01
0x01
0x02
etc.
übertragen willst oder brauchst du
0x00
0x02
0x00
0x01
0x00
0x01
0x00
0x02
etc.
?
@ .net und einfacher: du brauchst einfach keine 3rd party Addons/Packages/whatever für die serielle Schnittstelle, weil die .net die Klassen dafür einfach "out of the box" zur Verfügung stellt, aber die Problematik verschiedener Zeichencodierungen hast du dort genauso....
Hast du eigentlich genau vorgegebene Codes die zu übertragen sind, oder eher Nachrichten der Form
{STX}{Zieladresse}{Senderadresse}{Befehlnummer}{variabler Inhalt}{cheksum}{ETX}
?
Weil dann würd ich mir eine Methode basteln, der du nur den Inhalt und die Adressen übergibst (oder was du halt alles variabel brauchst) und die dir die Nachricht als ASCII String zusammenbaut und sendet.
Zitat von Mr. ZetÄh, ein Byte ist immer gleich groß
Ein "variabel großer Hex String" ist nichts anderes als eine Folge von Bytes
@ DKCH, nein, tut es nicht, wenn du einen String "02" hast, dann liefert dir getBytes() 0x30, 0x32; was er braucht ist aber 0x0, 0x2
Anders formuliert: Er braucht nicht den ASCII Code vom Zeichen "0" sondern das Zeichen mit ASCII Code 0!
drüberCode:for (int i=0; i<string.length();i++) { stream.write(Integer.valueOf(""+string.charAt(i))); }
Zitat von Mr. ZetJa das stimmt natürlich.
Aber dein Gerät (Ich nehm an das ist was älteres?) wird für Adressen, etc. ja sicherlich ganze Bytes nehmen und nicht half bytes, oder?
Uh, da gehts ab... Ich hab meinen obigen Post editiert während ihr da wieder gepostet habt!
Zitat von DKCHnaja, normalerweise liefert chr ja den ascii-code zu einem character, und wenn du mit input[i] (also zB '0') reingehst, kommst ja auch wieder 0x30 raus, oder?
Zitat von Mr. ZetHast du eigentlich genau vorgegebene Codes die zu übertragen sind, oder eher Nachrichten der Form
{STX}{Zieladresse}{Senderadresse}{Befehlnummer}{variabler Inhalt}{cheksum}{ETX}
?
Wo jetzt in dem FallZitat von Mr. ZetDu schreibst, dass du "0201010203040506" übertragen willst
heißt das, dass du
0x02
0x01
0x01
0x02
etc.
Zitat von Mr. ZetÄh nein, aber darum hab ich ja auch geschrieben ich verwechsel sicher Java und vb.net sachen
In VB liefert "Chr(x)" den Character mit ASCII Code x
Wenn du den ASCII Code von "0" willst, brauchst du Asc("0")
So bin gestern nicht mehr dazugekommen das zu testen
hab das heute testen wollen irgendwie nimmt er mir das fromString nicht an...
es wird andauernd unterwellt und ich bekomm diesen fehler
cannot find symbol
symbol: method fromString(java.lang.String,int)
location: class java.lang.Byte
leider finde ich in google nichts brauchbares
Byte.valueOf is die richtige.
sorry, valueOf heissts natürlich (http://download.oracle.com/javase/1...te.html#valueOf(java.lang.String) - wie komm ich auf fromString?! sakra, das alter...
Byte hat auch einen Konstruktor für String.
Byte b = new Byte("F");
wenn er dir die "cannot find symbol" meldung bringt, will er dir damit sagen dass das objekt eine solche methode nicht hat. kA welche IDE du verwendest (wahrscheinlich eclipse?!), aber es wäre ratsam dich mit der code completion vertraut zu machen.
Danke das funktioniert
jetzt habe ich nur noch ein Problem, da ich noch recht neu in der Materie bin
ich hab mir jetzt das Byte so ausgeben lassen:
Byte testausgabe = Byte.valueOf(teststring, 16);
sendeSerialPort(testausgabe);
das klappt auch wunderbar nur wie kann ich das Byte jetzt erweitern bei einem String würd ich ja einfach Byte testausgabe = "02"+Byte.valueOf(teststring, 16)+"dummydata";
machen aber wie geht das bei einem Byte?
edit:// Ich verwende Netbeans und bin gerade erst dabei Java zu lernen, haben vorher in der Schule C++ gemacht aber allerdings nur sowas wie schleifen und if/else, switch/case bzw. Anwendungen die niemand braucht wie gib x beliebig Sterne aus...
schleife das solang den string in byte umwandelt u. schickt bis der string aus is
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025