Stormscud
2011-06-14, 14:52:56
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/Two_way_communcation_with_the_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/articles/Serielle_Schnittstelle_unter_Java
Dieser Quelltext 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.
Ist es mögliche, dass die Byte-Konvertierung des Strings ("ID") hier dazwischenfunkt? Oder gibt es andere Lösungsvorschläge.
Vielen Dank schon mal im Voraus :)
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/Two_way_communcation_with_the_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/articles/Serielle_Schnittstelle_unter_Java
Dieser Quelltext 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.
Ist es mögliche, dass die Byte-Konvertierung des Strings ("ID") hier dazwischenfunkt? Oder gibt es andere Lösungsvorschläge.
Vielen Dank schon mal im Voraus :)