Forum: PC-Programmierung [Java] RXTX Problem


von Martin W. (stormscud)


Lesenswert?

Hallo liebe Community!

Ich schreibe zur Zeit an einem Programm, dass die Messdaten eines 
Messverstärkers aufbereitet. Mit dem PC verbunden wird das ganze per 
RS232 und USB-RS232-Konverter.

Als Schnittstellenbibliothek nutze ich RXTX (2.1.7), Betriebssystem ist 
Windows XP. Entwicklungsumgebung NetBeans 7.

Nun u meinem Problem. Der Messverstärker wird mit ASCII Codes 
angesprochen. Zum Testen nehme ich immer "ID", damit erhalte ich die 
Gerätekennung des Messverstärkers. Allerdings bekomme ich immer nur nach 
ca. 5 bis 10 Anfragen eine Antwort vom Messverstärker. Auch zu sehen am 
USB-RS232-Konverter (eine Leuchte für Input, eine für Output).

Testweise hab ich auch mal das Programm "Advanced Serial Port Monitor" 
probiert. Dort klappt die Sache in ca. 95% der Anfragen, 
zufriedenstellend erstmal. Nur eben bei meinen Programmen nicht. Ich 
versteh nicht wo das Problem liegen könnte. Die 
Schnittstelleneinstellungen passen so wie sie standardmäßig auch im 
Messverstärker eingestellt sind (ebenso im Gerätemanager).

Hierfür habe ich 2 verschiedene Quelltexte verwendet:
1.: http://rxtx.qbang.org/wiki/index.php...he_serial_port
(nur zum Testen)
Anmerkung zur Quelltextänderung:

public void run ()
{
 try
 {
   int c = 1000;
   String s = "ID";
   byte[] byteArray new byte[128];
   byteArray = s.getBytes();
   while ( ( c > -1 )
   {
      this.out.write(byteArray);
      this.out.flush(); auch keine Verbesserung
      c--;
      //try { Datenanfrage alle 20ms, keine Änderung des Ergebnis
      // Thread.sleep(20);
      //} catch (InterruptedException ex) {
      // Logger.getLogger(Rs232.class.getName()).log(Level.SEVERE, null, 
ex);
      //}
   }
 }
catch ( IOException e )
{
e.printStackTrace();
}
}


2.: http://www.mikrocontroller.net/artic...lle_unter_Java
Dieser Quelltext (Swing Version) wird abgewandelt in einer GUI 
verwendet.

Also egal, ob ich eventbasiert (nur 1 Hauptthread, auch wenn man das 
nicht macht ) oder threadbasiert arbeite, beide Quelltexte liefern das 
gleiche Ergebnis.

Der Messverstärker ist übrigens nur mit den Kabeln für die Daten (Rx, 
Tx) und der Masse verbunden.

Wo liegt das Problem? Es scheint ja eine reine Softwaresache zu sein?

Vielen Dank schon mal im Voraus


Edit1:
Dass die Pause zu kurz ist kann leider ausgeschlossen werden, da ich 
bereits ständiges senden, sowie Pausenabstände von 10, 20, 30, 40, 50, 
60,70, 80, 90, 100, 200, 300, 400, 500 und 1000ms getestet habe bei 
jeweils 100 Anfragen. Hab dann nachgezählt wieviele Antworten ich 
erhalten habe und welche davon verwertbar waren. Im Mittel schwankt hier 
Erfolgsrate eben zwischen 5 und 15 Antworten auf 100 Anfragen.

Edit2:
Ich hab auch schon direkt dezimal nach ASCII Tabelle den Code gesendet. 
sprich byte[] b = {73, 68};
Da hat sich leider auch nix geändert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Prinzipiell würde ich vermuten da du am Ende noch ein \r\n mitsenden 
mußt. Ansosnten schau mal die Puffereinstellungen der RS232 an.

von docean (Gast)


Lesenswert?

Martin Wötzel schrieb:
> 5 bis 10 Anfragen eine Antwort vom Messverstärker

könnte sein das Win/die Lib die Sachen puffert, und dann der 
Messverstärker auf einen Rutsch 5-10 Anfragen bekommt und dann nur auf 
eine antwortet...

such mal nach flush() oder so...

von Martin W. (stormscud)


Lesenswert?

Also es scheint tatsächlich das "\r\n" zu sein, das gefehlt hat... in 
der Doku vom Messverstärker wird auch nach jedem Befehl ein Entersymbol 
mit angegeben. Das hab ich wohl bisher ignoriert.

Vielen Dank für den Tipp :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.