# Waage mit RS232 auslesen



## nelli (22. Jul 2010)

Hallo Leute,

ich bin ziemlich neu bei Java und RS232 und habe nun ein Problem, das für die meisten bestimmt trivial erscheint aber ich komm nicht weiter.

Anbei eine kurze Beschreibung:

Ich habe eine Waage mit RS232-Schnittstelle, die ich via JAVA auslesen möchte (Laptop => USB-Adapter => Waage(RS232)

Nach einigem Suchen im Netz habe ich mich für ( GiovynetSerialPort ) entschieden, setzt auf rxtx auf. (Für alle die ein rxtx-Tutorial suchen (hier ein interessanter Link für Installation etc in eclipse: RS232 in Java for Windows | Sebastian Kuligowski's Home Page

Aber zurück zu meinem Problem: Anbei der Code:


```
package org.javaserial_giovynet_II;
import app.Com;
import app.Parameters;

public class Main {

    public static void main(String[] args) throws Exception{
	    	
    	//*** Open port COM1
        Parameters param = new Parameters();
        param.setPort("COM2");
        param.setBaudRate("4800");
        param.setStopBits("1");
        param.setParity("N");
        
        Com com1 = new Com(param);
	        
        //*** Request String
        com1.sendSingleData("53h");  // S
        com1.sendSingleData("49h");  // I
        com1.sendSingleData("0Ah");  // CR
        com1.sendSingleData("03H");  // LF
	        
        //*** Return
        String dataReturn = com1.receiveSingleString();
	        
        System.out.println("Gewicht: "+dataReturn+"\n");
	        
        com1.close();
 }
```

Ich kann Problemlos die verfügbaren Ports auslesen, auch den Status der Verbindung. Daraus Schließe ich, dass bis zur Waage alles funktioniert und vermute mein Problem beim Request String.

*Lt. Bedienungsanleitung habe ich die knappe Info:*
Setting: 8Bit, 1Stop, no parity, 4800bps
PC->Waage: Initialisierungssignal Code S I CR LF (53h 49h 0Dh 0Ah)
Waage->PC: folgende Format wird verfolgt (16 Byte)

Tipps zur Lösung sind extremst willkommen. thanx.


----------



## XHelp (22. Jul 2010)

Ich habe damit nicht gearbeitet, aber ich kann mir vorstellen, dass du damit keine hexzahlen schickst:
[JAVA=19]
        com1.sendSingleData("53h");  // S
        com1.sendSingleData("49h");  // I
        com1.sendSingleData("0Ah");  // CR
        com1.sendSingleData("03H");  // LF
[/code]
Versuch es mit
[JAVA=19]
        com1.sendSingleData(0x53);  // S
        com1.sendSingleData(0x49);  // I
        com1.sendSingleData(0x0A);  // CR
        com1.sendSingleData(0x03);  // LF
[/code]


----------



## nelli (22. Jul 2010)

Danke für den Tipp - klappt aber leider noch nicht.


----------



## Gast2 (22. Jul 2010)

Was bekommst du als Rückgabe? Garnichts?
Vielleicht den query String mal mit nem einfachen terminal programm testen, ob der generell funktioniert?


----------



## XHelp (22. Jul 2010)

Aso, jetzt habe ich auch den Rest gesehen: vllt. ist es ähnliche Geschichte mit dem Rückgabe wert, versuch es mal mit 
	
	
	
	





```
receiveSingleDataInt
```


----------



## nelli (22. Jul 2010)

Hab den String nun in Variationen mit einem Terminal Programm versucht zu Testen, ohne Erfolg.

Habe ich diese Angaben richtig umgesetzt wenn ich sie als HEX-Werte sende:

Setting: 8Bit, 1Stop, no parity, 4800bps
PC->Waage: Initialisierungssignal Code S I CR LF (53h 49h 0Dh 0Ah)
Waage->PC: folgende Format wird verfolgt (16 Byte)

Also in dieser Form:
"0x53 0x49 0x0D 0x0A"

Oder muss ich da sonst noch was hinzufügen (Stop bit oder ähnliches)?


----------



## XHelp (22. Jul 2010)

naja, wenn du es vom Terminal machst, sprich wenn du die Werte per Tastatur eingibst, dann musst du nicht 
	
	
	
	





```
0x53 0x49 0x0D 0x0A
```
, sondern 
	
	
	
	





```
SI[ENTER]
```
 eingeben.


----------



## maki (22. Jul 2010)

```
param.setStopBits("1");
```
Das gibt es laut JavaDoc nicht, entweder 0 für 1 Stoppbit, oder 2 für 2 Stoppbits.


----------



## nelli (22. Jul 2010)

thx @ maki: hab es gelöscht da per default ohnehin 0 => also 1 Stop Bit.

Irgendwie liegt das Problem noch wo anders, da ich auch mit einem Terminalprogramm keine Antwort erhalte.


----------



## XHelp (22. Jul 2010)

Mir fällt gerade auf, dass du in deinem Quelltext die falschen Hex-Zahlen stehen hast.
Und bist du dir sicher, dass du com2 brauchst?


----------



## VfL_Freak (22. Jul 2010)

Moin,



XHelp hat gesagt.:


> Mir fällt gerade auf, dass du in deinem Quelltext die falschen Hex-Zahlen stehen hast.
> Und bist du dir sicher, dass du com2 brauchst?



das ist mir auch aufgefallen !!
Statt 

```
com1.sendSingleData(0x53);  // S
com1.sendSingleData(0x49);  // I
com1.sendSingleData(0x0A);  // CR
com1.sendSingleData(0x03);  // LF
```

CR = (dez) 13 oder 0x0d
LF = (dez) 10 oder 0x0a



> PC->Waage: Initialisierungssignal Code S I CR LF (53h 49h 0Dh 0Ah)


Wenn Du also  "S I CR LF" senden willst, dann zumindest

```
com1.sendSingleData(0x53);  // S
com1.sendSingleData(0x49);  // I
com1.sendSingleData(0x0d);  // CR !!
com1.sendSingleData(0x0a);  // LF !!
```

Gibt es nur die Möglichkeit "sendSingleData" oder kannst Du Zeichenketten senden ?

Gruß
Klaus


----------



## nelli (23. Jul 2010)

Vielen Dank für die zahlreichen Rückmeldungen.

Ich bin nun einen Schritt weiter, wenngleich ich noch keine funktionierende Lösung habe.

Ich kann mittlerweile mit TerminalProgramm Anfragen senden und erhalte auch die gewünschte Antwort. Die Lösung lag dabei am RS232 Kabel, das noch 2 Kabelbrücken brauchte zum Hardware Handshake.

Also ich kann jetzt tatsächlich die Anfrage auch via Java an die Waage senden - doch die lib von giovynet erzeugt diesen Eintrag beim connect (Daten aus dem Serial Port Monitor ausgelesen):

Handflow: ControlHandShake=(DTR_CONTROL), FlowReplace=(TRANSMIT_TOGGLE, RTS_CONTROL), XonLimit=0, XoffLimit=0

Mein Terminal Programm produziert folgendes - und da klappt es:
Handflow: ControlHandShake=(), FlowReplace=(AUTO_TRANSMIT, AUTO_RECEIVE), XonLimit=34496, XoffLimit=8624

Das ist der einzige unterschied. Nachdem auf der Seite von Giovynet (GiovynetSerialPort) als Featur: Software Flow Control angegeben wird, wird mir dies scheinbar zum verhängis.

Es scheint so alsob die im DLL File definiert wird, da ich in der lib nichts verdächtiges gefunden habe.

Falls hat ja jemand eine Idee, wie ich das trotzdem steuern könnte, sonst muss ich wohl nach einer anderen Lösung - zwar kurz for dem Ziel aber ... naja.


----------



## _bjoern_ (27. Jul 2010)

das klingt wie als ob du mit ner mettler waage arbeitest - die haben eigentl ganz gute doku
und du musst die waage natuerlich auch in den richtigen modus setzen (host)
und um zu testen dass die verbindg funktioniert, dann kann man von der waage einfach das gewicht schicken lassen (da gibts nen knopf dafuer) und dann muss auf deinem terminal was ankommen (ohne dass du "SI" schickst)


----------

