Forum: Mikrocontroller und Digitale Elektronik RS-232 <-> Ethernet


von Christian M. (Gast)


Lesenswert?

Hallo Foraner,

ich suche (immer noch) eine Moeglichkeit, RS-232 ueber Ethernet (oder 
sogar Internet) umzuleiten. Wobei ich mir die Moeglichkeiten 
Rechner-Rechner, Rechner-Mikrocontroller und 
Mikrocontroller-Mikrocontroller offen halten moechte.

Fuer die Rechner-Rechner Methode habe ich schon mal 
http://sourceforge.net/projects/com0com/ und 
http://www.hw-group.com/products/hercules/index_de.html angeschaut.

Fuer den Mikrocontroller habe ich mir schon mal ENC28J60-Module geholt, 
und eine paar Arduino-Nano liegen auch noch herum.

Hat schon jemand Erfahrungen, ob solche Software mit Arduino-Libraries 
kompatibel sind? Ich habe leider wenig Erfahrung Ethernet (noch mit C) 
und moechte mich nicht verrennen in etwas, das eh nicht funktioniert.

Vielen Dank fuer Eure Tipps!

Gruss Chregu

von Alex B. (Firma: Ucore Fotografie www.ucore.de) (alex22) Benutzerseite


Lesenswert?

Es gibt auch noch die Lantronix-Lösungen.

von Christian M. (Gast)


Lesenswert?

Aha, XPort, ja, habe ich auch schon gesehen.
Wie sieht denn die PC-Seite aus (Windows[XP])? Ich moechte da einen 
virtuellen COM-Port.

Gruss Chregu

von ich (Gast)


Lesenswert?

Es gibt von Lantronix eine Software, die einen Virtuellen COM Port zur 
Verfügung stellt.

von STK500-Besitzer (Gast)


Lesenswert?

Sowas?
http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html

Dazu müsste man "nur noch" dem Arduino das Protokoll beibringen.

von Christian M. (Gast)


Lesenswert?

Ja ja, genau! Ist das realistisch, auf der Arduino-Seite das Protokoll 
zu integrieren?

Gruss Chregu

von Bastler (Gast)


Lesenswert?

Ich habe vor Jahren mal mit den Modulen von Tibbo rumgespielt.
Es waren wohl diese Orangen Tm100 Teile.
Damit habe ich zwei Aufbauversionen getestet.
Eine Seite ein Pc mit virtuellen Comport und auf der anderen Seite ein 
Tm100 mit Rs232 Ausgang und daran ein Messgerät das ich ferngesteuert 
habe.
Beim zweiten Aufbau habe ich auf der PC Seite einen normalen Comport 
verwendet der auf ein zweites Tm100 ging das mit dem anderen Modue 
"gepaart" war.
Beide Aufbauten liefen sowohl im lokalen Lan sowie über ein Lantolan Vpn 
mit zwei Dsl Anschlüssen problemlos.
Bei der Vpn Lösung war natürlich die Übertragungsrate und die 
Antwortzeit schon recht beschränkt, was aber am Vpn lag

von grobe_Leberwurst (Gast)


Lesenswert?

Telnet?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Telnet kann man mit den Lantronix- oder Tibbo-Dingern natürlich auch 
verwenden, das spart das Verwenden des virtuellen Treibers -- aber nicht 
jedes Programm, das dafür gebaut ist, serielle Schnittstellen 
anzusprechen, kann alternativ telnet resp. simplen Socket-I/O.

von Joachim B. (jar)


Lesenswert?

USB Lanport

sharkoon 4-port
http://www.sharkoon.com/?q=de/node/1797

hab ich und funktioniert an winXP prima mit USB Com Adapter

sharkoon 1-port
http://www.amazon.de/SHARKOON-USB-LANPort-100-Ethernet/dp/B002TXFVNC

Christian Müller schrieb:
> oder
> sogar Internet

leider nicht sondern nur lokal!

Fernzugriff über Internet nur vom über Compi per VNC oder Remotedesktop 
im lokalen Netzwerk

: Bearbeitet durch User
von Christian M. (Gast)


Lesenswert?

So nach heutigem Studium (soweit es geht neben den Kindern) werd ich ma 
folgende Loesung probieren:

Server: ENC28J60 Module auf Arduino und Software: 
http://www.tweaking4all.com/hardware/arduino/arduino-enc28j60-ethernet/

verbunden ueber TCP/IP mit:

Client: http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html

Kann das wohl gehen?

Gruss Chregu

von Matthias F. (frank91)


Lesenswert?

wäre das für dich vielleicht eine Lösung?
http://www.wiznet.co.kr/product-item/wiz550s2e-2/

Ich habe damit schon mal gearbeitet. Das ganze ist eigentlich ziemlich 
einfach. Auf der Controller Seite hat man nur eine Serielle 
Schnittstelle bei der die Daten direkt übertragen werden können.

Über eine Software für den PC stellt man ip Adresse und andere Dinge 
ein.
Auf der PC Seite hat man eine echte Ethernet Schnittstelle.
Diese kann man zum Beispiel mit
http://www.hw-group.com/products/hercules/index_en.html
ansteuern.

Auf der Internet Seite steht etwas von
Support WIZ VSP (Virtual Serial Port) program
also müsste es auch über einen Seriellen Port irgendwie gehen.
Das hab ich aber selbst noch nicht versucht.

Das hier könnte aber auch Funktionieren:
http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html

von Christian M. (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend!

Ich habe nun mehr oder weniger erfolgreich folgendes System zum Laufen 
gebracht:

Christian M. schrieb:

> Server: ENC28J60 Module auf Arduino und Software:
> http://www.tweaking4all.com/hardware/arduino/arduino-enc28j60-ethernet/
>
> verbunden ueber TCP/IP mit:
>
> Client: http://www.hw-group.com/products/hw_vsp/hw_vsp2_de.html

Der Code im Arduino Nano:
1
#include <SPI.h>
2
#include <UIPEthernet.h>
3
4
// network configuration.  gateway and subnet are optional.
5
// the media access control (ethernet hardware) address for the shield:
6
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
7
//the IP address for the shield:
8
byte ip[] = { 192, 168, 1, 99 };    
9
// the router's gateway address:
10
byte gateway[] = { 10, 0, 0, 1 };
11
// the subnet:
12
byte subnet[] = { 255, 255, 0, 0 };
13
14
// telnet defaults to port 23
15
EthernetServer server = EthernetServer(23);
16
17
void setup()
18
{
19
  Serial.begin(9600);
20
  Serial.println("Serielle Schnittstelle mit 9600baud");
21
  
22
  // initialize the ethernet device
23
  Ethernet.begin(mac,ip);
24
25
  // start listening for clients
26
  server.begin();
27
}
28
29
void loop()
30
{
31
  // if an incoming client connects, there will be bytes available to read:
32
  EthernetClient client = server.available();
33
  if (client == true) {
34
    // lies Daten aus der seriellen Schnittstelle falls vorhanden
35
    // und schicke sie an den Client
36
    if (Serial.available() > 0) {
37
      server.write(Serial.read());
38
    }
39
    // schicke vom Client empfangene Daten auf die serielle Schnittstelle
40
    Serial.write(client.read());
41
  }    
42
}

Vom Client gesendete Zeichen kommen sofort zur seriellen Schnittstelle 
des Arduino raus. Zurueckgesendete Zeichen kommen erst beim naechsten 
Transfer zurueck. Laut WireShark kommt jedesmal eine Antwort, bei keinem 
Zeichen /n.

Kann man das umgehen? So wie ich Telnet verstehe, bleibt die Verbindung 
ja bestehen, nicht wie bei http. Oder wird sie fuer jedes Zeichen neu 
aufgebaut? Kann jemand das WireShark-Protokoll (im Anhang) anschauen. Es 
enthaelt 4 Pakete, die bei einem Zeichen uebertragen werden (Client -> 
Server "f", bekomme zurueck "g").

Interessant ist, dass das Virtual Serial Port Programm keinerlei 
Overhead-Daten uebertraegt, ausser beim oeffnen der (virtuellen) 
Schnittstelle auf der Client-Seite, ich habe das auch mal mitgeschnitten 
und analysiert:
1
FF FA 2C 01 00 00 25 80 FF F0
2
FF FA 2C 01 00 00 25 80 FF F0
3
                  ^^ ^^ Baudrate
4
FF FA 2C 03 01 FF F0
5
            ^^ Parität
6
FF FA 2C 04 01 FF F0
7
            ^^ Stoppbits
8
FF FA 2C 02 08 FF F0
9
            ^^ Datenbits

Aber es kommt nicht immer genau dieses Paket, manchmal fehlt die erste 
(oder zweite) Zeile, dann wiederholt es sich sofort mit dem Kompletten:
1
FF FA 2C 01 00 00 25 80 FF F0
2
FF FA 2C 01 00 00 25 80 FF F0
3
FF FA 2C 03 01 FF F0
4
FF FA 2C 04 01 FF F0
5
FF FA 2C 02 08 FF F0
6
7
FF FA 2C 01 00 00 25 80 FF F0
8
FF FA 2C 03 01 FF F0
9
FF FA 2C 04 01 FF F0
10
FF FA 2C 02 08 FF F0
11
FF FA 2C 01 00 00 25 80 FF F0
12
FF FA 2C 01 00 00 25 80 FF F0
13
FF FA 2C 03 01 FF F0
14
FF FA 2C 04 01 FF F0
15
FF FA 2C 02 08 FF F0

Soweit der Stand hier. Ich muss noch pruefen, ob es fuer meine Anwendung 
ein Problem darstellt, wenn die Antwort nicht sofort kommt. Kann es auch 
am Sketch liegen?

Gruss Chregu

von Christian M. (Gast)


Lesenswert?

Grad noch was Interessantes gesehen. WireShark kennt diese Kommandos 
fuer die serielle Schnittstelle:
1
No.     Time           Source                Destination           Protocol Length Info
2
     63 2497.409865000 192.168.1.41          192.168.1.99          TELNET   85     Telnet Data ...
3
4
Frame 63: 85 bytes on wire (680 bits), 85 bytes captured (680 bits) on interface 0
5
    Interface id: 0 (\Device\NPF_{77C2B386-320B-4171-A2DB-9090714A1385})
6
    Encapsulation type: Ethernet (1)
7
    Arrival Time: Jun 28, 2015 19:37:09.572435000 Osteuropäische Sommerzeit
8
    [Time shift for this packet: 0.000000000 seconds]
9
    Epoch Time: 1435509429.572435000 seconds
10
    [Time delta from previous captured frame: 0.000075000 seconds]
11
    [Time delta from previous displayed frame: 0.000075000 seconds]
12
    [Time since reference or first frame: 2497.409865000 seconds]
13
    Frame Number: 63
14
    Frame Length: 85 bytes (680 bits)
15
    Capture Length: 85 bytes (680 bits)
16
    [Frame is marked: False]
17
    [Frame is ignored: False]
18
    [Protocols in frame: eth:ethertype:ip:tcp:telnet]
19
    [Coloring Rule Name: TCP]
20
    [Coloring Rule String: tcp]
21
Ethernet II, Src: AsustekC_0d:cc:2e (00:0e:a6:0d:cc:2e), Dst: de:ad:be:ef:fe:ed (de:ad:be:ef:fe:ed)
22
    Destination: de:ad:be:ef:fe:ed (de:ad:be:ef:fe:ed)
23
        Address: de:ad:be:ef:fe:ed (de:ad:be:ef:fe:ed)
24
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
25
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
26
    Source: AsustekC_0d:cc:2e (00:0e:a6:0d:cc:2e)
27
        Address: AsustekC_0d:cc:2e (00:0e:a6:0d:cc:2e)
28
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
29
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
30
    Type: IP (0x0800)
31
Internet Protocol Version 4, Src: 192.168.1.41 (192.168.1.41), Dst: 192.168.1.99 (192.168.1.99)
32
    Version: 4
33
    Header Length: 20 bytes
34
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00: Not-ECT (Not ECN-Capable Transport))
35
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
36
        .... ..00 = Explicit Congestion Notification: Not-ECT (Not ECN-Capable Transport) (0x00)
37
    Total Length: 71
38
    Identification: 0x777c (30588)
39
    Flags: 0x02 (Don't Fragment)
40
        0... .... = Reserved bit: Not set
41
        .1.. .... = Don't fragment: Set
42
        ..0. .... = More fragments: Not set
43
    Fragment offset: 0
44
    Time to live: 128
45
    Protocol: TCP (6)
46
    Header checksum: 0xff57 [validation disabled]
47
        [Good: False]
48
        [Bad: False]
49
    Source: 192.168.1.41 (192.168.1.41)
50
    Destination: 192.168.1.99 (192.168.1.99)
51
    [Source GeoIP: Unknown]
52
    [Destination GeoIP: Unknown]
53
Transmission Control Protocol, Src Port: 2639 (2639), Dst Port: 23 (23), Seq: 11, Ack: 1, Len: 31
54
    Source Port: 2639 (2639)
55
    Destination Port: 23 (23)
56
    [Stream index: 2]
57
    [TCP Segment Len: 31]
58
    Sequence number: 11    (relative sequence number)
59
    [Next sequence number: 42    (relative sequence number)]
60
    Acknowledgment number: 1    (relative ack number)
61
    Header Length: 20 bytes
62
    .... 0000 0001 1000 = Flags: 0x018 (PSH, ACK)
63
        000. .... .... = Reserved: Not set
64
        ...0 .... .... = Nonce: Not set
65
        .... 0... .... = Congestion Window Reduced (CWR): Not set
66
        .... .0.. .... = ECN-Echo: Not set
67
        .... ..0. .... = Urgent: Not set
68
        .... ...1 .... = Acknowledgment: Set
69
        .... .... 1... = Push: Set
70
        .... .... .0.. = Reset: Not set
71
        .... .... ..0. = Syn: Not set
72
        .... .... ...0 = Fin: Not set
73
    Window size value: 65535
74
    [Calculated window size: 65535]
75
    [Window size scaling factor: -2 (no window scaling used)]
76
    Checksum: 0x6a94 [validation disabled]
77
        [Good Checksum: False]
78
        [Bad Checksum: False]
79
    Urgent pointer: 0
80
    [SEQ/ACK analysis]
81
        [iRTT: 0.001171000 seconds]
82
        [Bytes in flight: 31]
83
Telnet
84
    Suboption COM Port Control
85
        Command: Suboption (250)
86
        Subcommand: COM Port Control
87
            Baud Rate: Client Baud Rate: 9600
88
    Suboption End
89
        Command: Suboption End (240)
90
    Suboption COM Port Control
91
        Command: Suboption (250)
92
        Subcommand: COM Port Control
93
            Parity: Client Parity: None
94
    Suboption End
95
        Command: Suboption End (240)
96
    Suboption COM Port Control
97
        Command: Suboption (250)
98
        Subcommand: COM Port Control
99
            Stop Bits: Client Stop: 1
100
    Suboption End
101
        Command: Suboption End (240)
102
    Suboption COM Port Control
103
        Command: Suboption (250)
104
        Subcommand: COM Port Control
105
            Data Size: Client Data Size: 8
106
    Suboption End
107
        Command: Suboption End (240)

von Christian M. (Gast)


Angehängte Dateien:

Lesenswert?

Guten Abend,

nun funktioniert mein TCP <-> RS-232 Server fast perfekt. Code ist unten 
dran, ein Bild vom Print angefuegt.

Ein kleiner Schoenheitsfehler gibt's noch. Die Daten kommen erst zum 
Client zurueck, wenn der etwas sendet. Kann man das aendern?

Der Overhead am Anfang kann man abschalten, heisst NVT. Das erste 
Zeichen wird verschluckt.

Gruss Chregu
1
/*
2
 * UIPEthernet is a TCP/IP stack that can be used with a enc28j60 based
3
 * TCP server at 192.168.1.99 on port 23 (Telnet).
4
 */
5
6
7
#include <SPI.h>
8
#include <UIPEthernet.h>
9
10
// network configuration.  gateway and subnet are optional.
11
// the media access control (ethernet hardware) address for the shield:
12
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
13
//the IP address for the shield:
14
byte ip[] = { 192, 168, 1, 99 };    
15
// the router's gateway address:
16
byte gateway[] = { 10, 0, 0, 1 };
17
// the subnet:
18
byte subnet[] = { 255, 255, 0, 0 };
19
20
// telnet defaults to port 23
21
EthernetServer server = EthernetServer(23);
22
23
void setup()
24
{
25
  Serial.begin(9600);
26
  Serial.println("Serielle Schnittstelle mit 9600baud");
27
  Serial.setTimeout(100);
28
  
29
  // initialize the ethernet device
30
  Ethernet.begin(mac,ip);
31
32
  // start listening for clients
33
  server.begin();
34
}
35
36
void loop()
37
{
38
  // if an incoming client connects, there will be bytes available to read:
39
  EthernetClient client = server.available();
40
  if (client == true) {
41
    // liest Daten aus der seriellen Schnittstelle falls vorhanden
42
    // und schicke sie an den Client
43
    if (Serial.available() > 0) {
44
      //server.write(Serial.read());
45
      client.print(Serial.readString());
46
    }
47
    // schicke vom Client empfangene Daten auf die serielle Schnittstelle
48
    // das funktioniert super
49
    Serial.write(client.read());
50
  }    
51
}

von Tjareson T. (tjareson)


Lesenswert?

Mit atmel microcontrollern lässt sich das auch ganz gut mit dem 
ethersex-firmware framework machen. Hat den Vorteil, das man auch dhcp 
hat und für Änderung der IP nicht den controller wieder flashen muss.

Näheres hier: http://old.ethersex.de/index.php/YPort

Ich habe damit mal eine Ansteuerung für einen Belegdrucker 
zusammengebaut:
http://seemstowork.blogspot.com/2015/03/will-it-print-part-1-for-friend-of-mine.html

Basis war atmega1284 und enc28j60. Bequemlichkeitshalber auf dem 
avr-netio board von Pollin.

von Frank (Gast)


Lesenswert?

Zur Virtuellen Com gibts bei AK-Nord auch eine Version.
Habe schon öfter eine benötigt und bin bisher immer gut damit
klar gekommen.

http://www.ak-nord.de
unter Downloads.

Und sehr schön zusammengebastelt der Arduino, Daumen hoch!

von Joachim B. (jar)


Lesenswert?

Christian M. schrieb:
> Guten Abend,
>
> nun funktioniert mein TCP <-> RS-232 Server fast perfekt.

wow gratuliere,

nur wäre ein Pollin NETIO
http://www.pollin.de/shop/dt/NjI5OTgxOTk-/Bausaetze_Module/Entwicklerboards/AVR_NET_IO_Fertigmodul.html?gclid=CjwKEAjwt_isBRDuisOm1dTQqGISJAAfRrEAK55P0jS2m8wPcV5sdSwr9s2U99WzkwCoeg0vmIfCXRoCSn_w_wcB

selbst mit atmega1284p 16k RAM! bestückt wie meiner nicht schneller und 
billiger gewesen?
(OK meine Wandler Recom 785-1.0A und Recom R7833-0.5A statt der linearen 
sind schon teuer aber dafür ohne Kühlkörper und stromsparend und laufen 
an 12V)
oder wenn schon nano, dann doch mit so einem Modul
http://www.ebay.de/itm/MAX3232-RS232-to-TTL-Converter-Module-Serial-Module-/201006697094?pt=LH_DefaultDomain_77&hash=item2ecceeca86

von Christian M. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ja habe jetzt alles zum Laufen gekriegt, an der Seriellen haengt die 
IntelliBox. Auf dem Natel, aehm Haendi, laeuft das "WiFi TCP/UDP 
Controller" Aepp. Mein Versuchsaufbau ist im Bild. Und ja, das ist ein 
konstruktives Chaos...

Die Packete kommen fast verzoegerungsfrei an, man merkt nichts. Manchmal 
"haengt" es. Sekundenlang, dann kommt alles miteinander. Wo bleiben die 
Packete haengen?

@Joachim: Das Breakoutboard hat ja gar keine Montageloecher :-))

@Frank: Danke!

Gruss Chregu

von Joachim B. (jar)


Lesenswert?

Christian M. schrieb:
> @Joachim: Das Breakoutboard hat ja gar keine Montage

1. Ich hasse Montage (die kürzeste Horrorgeschichte-> Montag)

2. Ich habe Schmelzkleber und Bohrmaschine

von Gilbert T. (Firma: free) (gilberstone)


Lesenswert?

Ich wollte die Bridge TCP / IP bekommen, aber VSP2 hat nicht geholfen, 
weil es keine Version für Windows 10 gab, es hat mich traurig gemacht. 
Ich musste Geld für die https://www.serial-over-ethernet.com/de/ 
ausgeben, wodurch ich Daten von einem realen oder virtuellen COM-Port 
über Ethernet an das Netzwerk senden konnte.
Ich bin kein Experte in all dem. Kann mir jemand eine kostenlose Option 
mit minimalen Programmierkenntnissen nennen?

von Kostnix (Gast)


Lesenswert?

Kostnix und funktioniert super!

         SER2NET

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.