URL: https://www.overclockers.at/coding-stuff/rs232_mit_java_ansprechen_219398/page_1 - zur Vollversion wechseln!
Hallo,
Mein Problem:
Ich habe mir in Java eine kleine Endlosschleife gebastelt die eigentlich nichts anderes macht als eine String generiert.
Diesen String müsste ich jetzt allerdings über die RS232 Schnittstelle ausgeben (Windows)
eine einfach ausgabe einer Variabel, dies müsste doch irgendwie leicht möglich sein oder?
Bin durch google auf rxtx.org gestoßen allerdings komm ich nicht so richtig damit zurecht, hab es installiert aber die Anleitungen was ich dazu gefunden habe versteh ich nicht so ganz...
Vlt. hat jemand von euch ein kurzes und verständliches Codebeispiel und weiß einer von euch eine andere möglichkeit.
tia djonny
http://en.wikibooks.org/wiki/Serial...erial_Java#RxTx
Da hast genau was du brauchst (Port suchen, Init, send/recv )
Mach mal die Sachen und dann schau erst "event driven ..." an. Das ist imho ein simples Beispiel.
Danke,
Mein Problem ist halt das die simplen Bsps 1:1 schon nicht funktionieren...
Was geht nicht? Bitte etwas genauer. 
So hab nun endlich wieder Zeit gefunden da weiter zu machen und siehe da ich habs geschafft das ich was bei der RS232 rausbekomme...
aber wäre ja zu schön um war zu sein, denn leider wandelt mir java den string in ascii um.
also ich schicke "0201010203040506" über java raus und bekomme
"3032 3031 3031 3032 3033 3034 3035 3036"
wie schaffe ich es das genau der string gesendet wird den ich eingebe?
Danke
Code: PHPif (oeffneSerialPort(portName) != true) return; i = startadresse; do { stationinhex = Integer.toHexString(i); if(stationinhex.length() == 1) { stationinhex = "0" + stationinhex; } ausgabe = "02" + stationinhex + "010203040506"; try { Thread.sleep(zeitabfrage); } catch(InterruptedException e) { } sendeSerialPort(ausgabe); i++; if(i == endadresse) { i = startadresse; } } while(i<1000); schliesseSerialPort();
String in ByteArray konvertieren und drüberjagen 
edit:
Und auf der anderen Seite wieder zurück natürlich 
Leider funktioniert da so nicht,
Da das Unterprogramm sendeSerialPort nur Strings annimmt und diese dann automatisch in Byte umwandelt.
Code: PHPvoid 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"); } }
naja du kannst ja nur einzelne bits übertragen, also machts durchaus sinn das der string erster in bytes umgewandelt wird und dann jedes bit einzeln geschickt wird, auf der gegenseite musst dir das dann halt wieder richtig zusammenbauen und convertieren.
Das Problem ist ich muss der gegenseite genau diesen String "0201010203040506" übetragen sonst kann das Gerät an der Gegenstelle nichts damit anfangen.
und mein Problem ist wie kann ich genau diesen String übertragen?
edit: Der String beinhaltet später auch Hex Zeichen
naja, kommt eh korrekt an (0x30 = 0, 0x32 = 2, usw) - auf der gegenseite musst du halt den string korrekt aus dem erhaltenen byte[] aufbauen (am einfachsten new String(byte[]), wenn man mit dem default encoding leben kann, was du bei zahlen wohl können wirst). wie schaut denn die gegenseite aus?
edit: aso, du schickst nicht von java an java, sondern an irgendein kastl? wieso machst du dann ein getBytes, du kannst ja eh den string direkt rausschreiben
Ja genau ich schicke von Java an eine Hardware an der ich leider nichts ändern kann.
Irgendwie kann ich leider nicht einfach einen String rausschicken
wenn ich statt outputStream.write(nachricht.getBytes());
outputStream.write(nachricht); mache dann bekomme ich immer einen Fehler
also im genauen das write wird unterwellt und wenn ich dann raufklicke kommt dieser Fehler
"cannot find symbol
symbol: method write(java.lang.String)
location: class java.io.OutputStream"
und dieser Fehler wenn ich es trotzdem ausführe:
Exception in thread "Thread-0" java.lang.RuntimeException: Uncompilable source code - exception java.io.IOException is never thrown in body of corresponding try statement
at rs232_test.EinfachSenden.sendeSerialPort(EinfachSenden.java:168)
at rs232_test.EinfachSenden.run(EinfachSenden.java:84)
at java.lang.Thread.run(Thread.java:619)
so, mal geschaut - stimmt, mit getBytes umwandeln it is
hab das immer mit einem PrintStream gemacht, aber tut ja eh auch nix anderes, alles schon zu lange her...
aber, nevertheless, der string der rausgeht is ja eh genau der, den du schicken willst. was genau will denn deine hardware haben?
ich weiß schon das der string der ist den ich hab will allerdings leider nicht in der Form wie ich sie gerne hätte :-)
Ich brauch das ganze zum Testen einer Hardware, die Hardware bekommt den String und sieht dann auf dem 2. Byte nach was dort steht und je nach dem welcher Wert dort steht (in Hex) schickt die Hardware was zu einem anderen Gerät
Ich habe die letzten Jahre mit ähnlichem zu tun gehabt: Industriedrucker per RS232 Steuern. Aber glücklicherweise in .net (Da gibts SerialPort native
) und nicht in Java.
Es passiert schon genau das, was passieren soll, du hast nur imho einen Fehler im Denkansatz: Das gerät auf der anderen Seite erwartet vermutlich keinen "String" sondern eine Menge an Bytes, sprich Bytes 0, 2, etc. statt die Ziffern 0, 2 etc.
Was du brauchst, ist eine Methode, die dir den human-readable String in eine Folge von entsprechnden ASCI Codes konvertiert.
Ohne jetzt in sprachspezifische Details einzutauchen (ich vermische da jetzt sicher vb.net und java...) in etwa so:
Code: PHPString convertToByteCode(String input) { String output = "" for i=1 to input.length - 1 { output &= Chr(input[i]) } return output }
naja, das ist eigentlich genau das, was getBytes macht - irgendwie scheint er das aber nicht zu wollen, auch wenn mir jetzt nimmer klar ist, warum 
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026