# Serial Port abhören auf RX und TX



## Andi_k (13. Aug 2012)

Hallo zusammen,

ich möchte ein kleines Java Programm schreiben um eine serielle Verbindung zwischen zwei Geräte "abzuhören". Dazu habe ich mir die Signale RX, TX und Ground abgeklemmt und auf einen seriellen Stecker gelegt der dann ans Notebook kommt.

Nun möchte ich gerne, dass ich die einzelenen Bytes, die jeweils auf RX und TX ankommen, mit einem Java Tool auswerten und loggen.

Ist das mit der Java Erweiterung-RXTX möglich?

Wäre über eine Hilfe hierbei sehr dankbar!

Gruß Andi


----------



## HoaX (13. Aug 2012)

Probiere es doch, dann siehst du ob es funktioniert. Prinzipiell soll es möglch sein mit RXTX.


----------



## Andi_k (13. Aug 2012)

Hey,

das Thema beide Leitungen gleichzeitig abzuhören muss ich mir dann noch genauer anschauen.
Ich habs gerade mal einzeln Versucht. Das hat soweit auch funktioniert. Nur leider habe ich nicht, die einzelnen Bytes in Hex oder bin bekommen, sondern dass was mein Java Programm draus interpretiert.
Das Ergebnis sieht in etwa so aus:
oq   �  Ő�   e   sy   r    �Bb`�   e
oq   �  Ő�   e   sy   r    �Bb`�   e
oq   �  Ő�   e   sy   r    �Bb`�   e
oq   �  Ő�   e   sy   r    �Bb`�   e
oq   �  Ő�   e   sy   r    �Bb`�   e

Ich vermute mal, dass das meine Frames sind, die ich wie oben erwähnt eignendlich als hex oder bin möchte.
Weiß jemand vieleicht wie ich mir das ganze richtig formatiert ausgeben kann?

So sieht mein Code bis jetzt aus:

```
{
                System.out.println("start");
                while ( ( len = this.in.read(buffer)) > -1 )
                {
                    System.out.print(new String(buffer,0,len));
                }
            }
```

Wär cool wenn mir hier jemand helfen könnte.
Ich will mich hier nur nicht zu lange aufhängen, weil ich eigendlich nur die Bytes brauche, die ich dann anschließend weiter verarbeiten muss.

Also vielen Dank und besste Grüße
Andi


----------



## Andi_K (13. Aug 2012)

Hier der ganze Code der Methode


```
byte[] buffer = new byte[1024];
            int len = -1;
            try
            {
                System.out.println("start");
                while ( ( len = this.in.read(buffer)) > -1 )
                {
                    System.out.print(new String(buffer,0,len));
                    buffer[0].byteValue();
                }
            }
```

Gruß Andi


----------



## HoaX (13. Aug 2012)

Dein Array enthält ja schon die Bytes, damit kannst du machen was du willst. Was für Daten erwartest du denn? Text? Evtl. ist auch eine Konfiguration vom Port falsch... aber das musst du wissen.

Edith: Ich hab das jetzt gerade erst gelesen dass du die Kommunikation belauschen willst: Das wird so nicht funktionieren. Am einfachsten ist es wenn du dich komplett dazwischenschaltest und die Daten von einem Port auf den anderen schiebst und umgekehrt. Einfach aufklemmen funktioniert nicht.
Edith2: Gerade nochmal nachgelesen: Bei Mikrocontroller.net wird einfach aufklemmen von manchen empfohlen. Bei mir hatte das damals aber nicht funktioniert, da der weitere Port die Kommunikation gestört/Signale verfälscht hat.


----------



## Andi_K (13. Aug 2012)

Hallo HoaX,

ich habs jetzt grad noch mal getestet.
Ich hänge mit meinem Rx(vom Laptop) entweder auf Channel 2 oder 3 und mit meinem Ground(vom Laptop) auf Channel 5.

Soweit funktioniert alles sauber. Ich bekomme meine Frames/Bytes schön im Hex Format und kann diese nun Auswerten.

Das einzige was die serielle Verbindung noch nicht mag, ist wenn ich noch mein Tx(vom Laptop) auf den anderen Channel 2 oder 3 aufhäng. Es scheint dann so als ob ich die Verbindung unterbreche. Bei mir kommt nichts mehr an und meine Geräte sagen Verbindung unterbrochen.

Vielleicht ist es ja Möglich mit einem 2. seriellen Port den anderen Channel auszulesen.

Ich werd mich mal nochmal melden und dann darüber berichten.

Gruß Andi


----------



## HoaX (13. Aug 2012)

Dürfte jedenfalls kein Java-Problem sein.

Stell doch mal einen Schaltplan rein wie es funktioniert und wie nicht, dann kann man/ich ehr weiterhelfen. Verbal wird zu viel wichtiges unterschlagen, bzw. bleibt unklar.


----------



## Gast2 (13. Aug 2012)

Da funktioniert so nicht! 

1) Java mäßig klappt das schon mit RXTX
2) Elektrotechnisch darf man das so nicht denn: 

2.1) RS232 ist keine Busfähige Kommunikation! 
2.2) Wenn man es richtig macht, kann man sowohl Rx als uahc Tx mithören (Stichwort SPION)
2.3) MIt 2 Sendern gehts auf keinen Fall, da man durch die beiden Tx Pegel immer übertragungsfehler bekommt! 

Mittels Spion kann man eben beide Leitungen (also die komplette Kommunikation von 2 Teilnehmern) abhören, jedoch nicht zeitgleich falls die Kommunikation Vollduplex läuft.  

An RS232 "spy" cable

Wenn Vollduplex kommuniziert wird muss man Rx und Tx separat schaltbar machen da sich die Signale sonst überlagern.


----------

