# TCP/IP über serielle Schnittstelle



## zaimon (11. Jan 2005)

Ich habe die folgende Vorgabe an einem Windows XP Rechner hängt an der seriellen Schnittstelle (COM) ein Server, zu dem ich eine TCP/IP Verbindung aufbauen soll. Das Problem ist, dass Windows XP nach meinem Wissen nur zu anderen Rechnern über die COM-Schnittstelle eine Verbindung aufbauen kann (der Server ist sozusagen nicht kompatibel).

Trotzdem müsste es doch eine Möglichkeit geben in Java die socket output streams sozusagen an die serielle Schnittstelle zu schicken.

Ich hoffe ich habe das Problem genügend erläutert, falls nicht, bitte nachfragen.


----------



## Grizzly (11. Jan 2005)

zaimon hat gesagt.:
			
		

> Ich habe die folgende Vorgabe an einem Windows XP Rechner hängt an der seriellen Schnittstelle (COM) ein Server, zu dem ich eine TCP/IP Verbindung aufbauen soll. Das Problem ist, dass Windows XP nach meinem Wissen nur zu anderen Rechnern über die COM-Schnittstelle eine Verbindung aufbauen kann (der Server ist sozusagen nicht kompatibel).[...]



Du sagst, Du hast einen Server an der seriellen Schnittstelle hängen und möchtest dort TCP/IP drüber legen. Und weiter sagst Du, dass WinXP das _leider_ unterstützt. Verstehe ich jetzt nicht. :bahnhof:

Oder meinst Du, dass auf dem Server kein Windows ist?



			
				zaimon hat gesagt.:
			
		

> [...]Trotzdem müsste es doch eine Möglichkeit geben in Java die socket output streams sozusagen an die serielle Schnittstelle zu schicken.
> 
> Ich hoffe ich habe das Problem genügend erläutert, falls nicht, bitte nachfragen.



Du kannst mit der Sun-Bibliothek Java Communications API auf die serielle und parallele Schnittstelle zugreifen. Geht aber nur unter Windows und Sun Solaris. Ich habe aber auch schon einen Hack für Linux gesehen. Dabei wird auch über Streams (InputStream, OutputStream) kommuniziert.


----------



## zaimon (11. Jan 2005)

Grizzly hat gesagt.:
			
		

> Du sagst, Du hast einen Server an der seriellen Schnittstelle hängen und möchtest dort TCP/IP drüber legen. Und weiter sagst Du, dass WinXP das _leider_ unterstützt. Verstehe ich jetzt nicht. :bahnhof:
> 
> Oder meinst Du, dass auf dem Server kein Windows ist?



Der Server ist ein Mikrocontroller, der über eine serielle Schnittstelle (TCP/IP) kommunizieren kann.




			
				Grizzly hat gesagt.:
			
		

> Du kannst mit der Sun-Bibliothek Java Communications API auf die serielle und parallele Schnittstelle zugreifen. Geht aber nur unter Windows und Sun Solaris. Ich habe aber auch schon einen Hack für Linux gesehen. Dabei wird auch über Streams (InputStream, OutputStream) kommuniziert.



Ich weiss, dass ich auf die seriellen Schnittstellen zugreifen kann (und auch wie). Das Problem ist, dass ich keine TCP/IP verbindung aufbauen kann, weil ich über java nicht sagen kann, dass ich die Verbindung über die serielle schnittstelle aufbauen will.

Outputstreams kann ich natürlich senden, aber dadurch bekomme ich keine echte TCP/IP verbindung (bzw. weiss ich nicht wie)


----------



## Icewind (11. Jan 2005)

tcp/ip ist nichts anderes als ein protokoll....
es ist das standartprotokoll für netzwerke und wenn du etwas in java über einen socket schickst wird das eigentlich mit dem tcp/ip protokoll erledigt...

allerdings ka wie das protokoll einer COM Schnittstelle aussieht (falls es eines giebt)

mir ist nicht ganz klar warumm du tcp/ip für eine kommunikation mit einem microcontroller verwenden willst...


----------



## zaimon (11. Jan 2005)

Icewind hat gesagt.:
			
		

> tcp/ip ist nichts anderes als ein protokoll....
> es ist das standartprotokoll für netzwerke und wenn du etwas in java über einen socket schickst wird das eigentlich mit dem tcp/ip protokoll erledigt...



ja, und die sockets greifen ja sozusagen auf die Systemkomponenten zu, d.h. nur Windows XP weiss wie das verschickt wird und verschickt es nicht über die serielle Schnittstelle, sondern über das "normale" Netzwerk.



			
				Icewind hat gesagt.:
			
		

> mir ist nicht ganz klar warumm du tcp/ip für eine kommunikation mit einem microcontroller verwenden willst...



...ganz einfach, weil der mikrocontroller nichts anderes versteht.


----------



## Grizzly (11. Jan 2005)

Beim Modem wird nach der Einwahl auch TCP/IP per PPP über die serielle Schnittstelle gelegt. Müsste also irgendwie gehen - bloss halt ohne Modem. Vielleicht kannst Du ja die serielle Schnittstelle mit irgendeinem Treiber in Windows als Netzwerkkarte einrichten. ???:L


----------



## zaimon (11. Jan 2005)

Grizzly hat gesagt.:
			
		

> Beim Modem wird nach der Einwahl auch TCP/IP per PPP über die serielle Schnittstelle gelegt. Müsste also irgendwie gehen - bloss halt ohne Modem. Vielleicht kannst Du ja die serielle Schnittstelle mit irgendeinem Treiber in Windows als Netzwerkkarte einrichten. ???:L



So ähnlich waren meine Gedanken auch. Modem geht nicht, weil mein Mikrocontroller nicht wie ein Modem antworten kann. Letzteres werde ich mal abchecken.


----------



## bellmann29 (11. Jan 2005)

Wie wäre es denn, wenn Du einen simplen TCP/IP Server schreibst, der ständig lauscht auf bestimmten Port um entsprechende Kommandos über Netzwerk zu empfangen und dann einfach die die vielen Bytes aus dem Stream einfach weiterschreibt an den Stream für die Serielle Schnittstelle. Auf eine Antwort wartet und diese dann einfach wieder in den Socket schreibt. Letztendlich nichts anderes als ein kleines Wandler Programm. Sollte nicht so schwierig sein.
Die Kommandos bei Microcontrollern sind doch eh nicht tausende Bytes groß. Sollte also auch relativ fix gehen mit dem lesen und schreiben. Die Kommandos sind doch sicher eh nur Char-Arrays.


----------



## Icewind (11. Jan 2005)

hm interesannter microcontroller....
tja mir würde auch noch einfallen das protokoll selbst zu implementieren.... aber das dürfte schwieriger werden...


----------



## Grizzly (12. Jan 2005)

bellmann29 hat gesagt.:
			
		

> Wie wäre es denn, wenn Du einen simplen TCP/IP Server schreibst, der ständig lauscht auf bestimmten Port um entsprechende Kommandos über Netzwerk zu empfangen und dann einfach die die vielen Bytes aus dem Stream einfach weiterschreibt an den Stream für die Serielle Schnittstelle. Auf eine Antwort wartet und diese dann einfach wieder in den Socket schreibt. Letztendlich nichts anderes als ein kleines Wandler Programm. Sollte nicht so schwierig sein.
> Die Kommandos bei Microcontrollern sind doch eh nicht tausende Bytes groß. Sollte also auch relativ fix gehen mit dem lesen und schreiben. Die Kommandos sind doch sicher eh nur Char-Arrays.



Wenn der Microcontroller TCP/IP über einen seriellen Anschluss verlangt, wird so etwas auch nicht helfen. Das Programm müsste nämlich das Packet auf der untersten Ebene empfangen - also noch als komplettes TCP/IP Packet - und an den Controller weiterschicken. Wahrscheinlich müsste man auch noch ein paar Parameter des Packetes anpassen.



			
				Icewind hat gesagt.:
			
		

> hm interesannter microcontroller....
> tja mir würde auch noch einfallen das protokoll selbst zu implementieren.... aber das dürfte schwieriger werden...



Da würde ich mich eher noch im Internet umschauen, ob es nicht eine andere Möglichkeit gibt.



BTW: Ich habe gerade festgestellt, dass man zumindest unter Windows XP Home Edition so eine PPP Verbindung sprich TCP/IP Verbindung über die serielle Schnittstelle einrichten kann. Ich weiss allerdings nicht, ob das auch wirklich funktioniert - vor allem zusammen mit dem Mikrocontroller.


----------



## bellmann29 (12. Jan 2005)

Also, ich bezweifele, daß der Microcontroller TCP/IP empfangen soll und kann, wenn er nur an einem seriellen Port hängt und keine eingebaute Möglichkeit für den Netzwerkempfang bietet.
Serielle Ports sind aber bei Einrichtungen für MSR (Messen, Steuern, Regeln) sehr häufig.
Ich habe vor kurzen erst damit bei einem Kunden zu tun gehabt.
Normalerweise sind Konfigurationsprogramme auf der Maschine installiert, an der der Microcontroller hängt. Diese sprechen dann direkt mit dem Seriellen Port. Hier will man aber scheinbar auch Remote auf den Microcontroller zugreifen bzw. Konfigurieren.
Meistens geht es darum, die Daten die Microcontroller von den Messinstrumenten bekommt weiterzuleiten über das Netzwerk. Denn am Microcontroller hängt ein Bus-System auf dem viele Meßinstrumente hängen.

Wir können also nur den Poster des Threads noch mal bitten, genauer zu beschreiben, was er machen soll.


----------



## bellmann29 (12. Jan 2005)

@zaimon

Poste doch bitte mal, wie die genaue Bezeichnung des Microcontrollers ist. 

Microcontroller kommen selten mit einem TCP/IP - Stack. Ich bezweifele, daß er nur TCP/IP versteht. Das ist untypisch.


----------



## zaimon (12. Jan 2005)

Ich habe selber nur begrenzte Informationen über den Mikrocontroller. Ich weiss nur, dass er mit einem TCP/IP Stack ausgerüstet ist (und damit auch kommunizieren kann)

Unter Linux funktioniert das ganze nämlich einwandfrei, da kann man mit einem Shell Script die Serielle Schnittstelle "ethernetfähig" machen und dann eine "ganz normale" Verbindung zum Mikrocontroller aufbauen.

Mir wurde aber vorgegeben, dass das ganze auf Windows XP laufen soll. Und bevor ich Streams auf der untersten Ebene "durch die Gegend leite" - sprich Wandler - würde ich lieber wissen, ob man das mit irgendwelchen Einstellungen unter Windows XP nicht programmextern einstellen kann?


----------



## bellmann29 (12. Jan 2005)

Dann sieh in das Shell-Skript, und sage uns mal was es macht. Welche Prozesse werden denn dort gestartet/gestoppt.

Poste doch einfach mal den Inhalt! Ist doch nur ein Skript.

Würde mich auch mal interessieren, wie man mit einem Shell-Skript die serielle Schnittstelle "ethernetfähig" macht.

Ist es OpenSource? Wo kann mehr informationen über dieses ShellSkript bekommen?

Danke.


----------



## zaimon (13. Jan 2005)

Hier die entscheidenden Zeilen aus dem Shell Script, dürfte auch so verständlich sein (ohne einleitende Variablen). Auf jeden Fall wird das somit unter linux nur mit systemeinstellungen ermöglicht. das MUSS doch mit windows XP auch möglich sein!

NETMASK="255.255.255.0"
LOCKFILE="/var/lock/lpi2link$LPIIP"

case "$1" in
  start)
	if [ ! -f $LOCKFILE ]; then
	    echo "Connect Serial Port..."
	    $SLATTACH -p slip $TTY -s 115200 -q -L -l &
	    sleep 1
	    SLIPDEV=`$SLIPINFO /dev/$TTY`
	    if test -z $SLIPDEV; then
	      echo "No SLIP device found!"
	      exit 2
	    fi
	    $IFCONFIG $SLIPDEV $PCIP pointopoint $LPIIP mtu 1500 netmask $NETMASK up
	    sleep 1
	    $ROUTE add $LPIIP mss 1460 window 1460 dev $SLIPDEV
	    $TOUCH $LOCKFILE
	    echo "Ok!"
	else
	    echo "Already connected!"
	fi
	;;


----------



## bellmann29 (13. Jan 2005)

Wo kann ich noch mehr über darüber erfahren? 

Hast Du vielleicht schon Resourcen aus dem Internet?

Bitte posten.

Danke.


----------



## Grizzly (17. Jan 2005)

So wie ich das sehe legt das Skript einfach eine SLIP Verbindung über die serielle Schnittstelle. SLIP ist der Vorgänger von PPP.

@zaimon: Hast Du mal probiert PPP in Windows für die serielle Schnittstelle einzurichten?


----------



## Knoxx (17. Jan 2005)

sorry, hab nicht viel Zeit. Aber die folgenden Links könnten dir weiterhelfen:

http://www.oreilly.com/catalog/netpc/excerpt/ch06-05.htm
http://learning.lib.vt.edu/wintcpip/win95.html

hat mich übrigens nicht mal 20 sek mit google gekostet...

gruß,
Knoxx


----------



## zaimon (17. Jan 2005)

Danke, aber ich habe auch (lange) gegoogelt.

@ angegebene Links, der Mikrocontroller ist kein Modem, und ich möchte keine Dial-Up connection herstellen und auch keine Verbindung zwischen zwei Rechnern, sondern eine Netzwerkverbindung!


----------



## Grizzly (17. Jan 2005)

zaimon hat gesagt.:
			
		

> Danke, aber ich habe auch (lange) gegoogelt.
> 
> @ angegebene Links, der Mikrocontroller ist kein Modem, und ich möchte keine Dial-Up connection herstellen und auch keine Verbindung zwischen zwei Rechnern, sondern eine Netzwerkverbindung!



Hast Du jetzt das mit Windows mal ausprobiert oder nicht?


----------



## Knoxx (17. Jan 2005)

sorry, aber wer lesen kann ist klar im Vorteil:

Zitat z.B. aus dem zweiten Link:


> Serial Line Internet Protocol, usually referred to as SLIP, was once the most common means of running TCP/IP over a serial connection



Wenn sich Leute schon die Arbeit machen dir zu helfen, dann schau dir die Sachen wenigstens mal an.

Gruß,
Knoxx


----------

