Forum: Mikrocontroller und Digitale Elektronik XPort Direct vs. XPort


von Manuel W. (manuel_wagesreither)


Lesenswert?

Guten Abend!

Ich will in nächster Zeit ein kleines Projekt erledigen, und schwanke 
derzeit, ob ich den XPort XPort Direct (den "kleinen" XPort) oder den 
"normalen" XPort dafür einsetzen soll.

Folgende Aufgabenstellung:
Meine Platine läuft die ganze Zeit über im StandBy, solang bis 
irgendwann über eine RS232 ein Schwall Daten reinkommt. Datenmenge: 
Maximal 1kiB.
Diese Daten werden dann über HTTP-GET oder HTTP-POST (eher letzteres, 
bin mir momentan nicht sicher ob über GET diese Datenmenge übertragbar 
ist) an einen Host im Internet übertragen.

Meine derzeitige Planung:
Die Daten werden von einem µC entgegengenommen und erstmal gespeichert. 
Dieser besorgt sich erstmal die IP-Adresse von meinem Webserver (DNS 
implementiere ich in Software), verpackt die Daten in eine HTTP-Anfrage 
und schickt es anschließend an meinen Server im Internet.

Dabei stellt sich mir folgende Frage:
Hätte der XPort bei meiner hier beschriebenen Aufgabenstellung gegenüber 
dem XPort Direct irgendwelche Vorteile? Bietet er irgendwelche 
Funktionen, die mir Arbeit abnehmen könnte?

DNS bietet er (soweit ich es gesehen habe) nicht.
Der HTTP-Server hilft mir denke ich auch nicht viel, da ich ja vielmehr 
einen HTTP-Client bräuchte.

Wenn ich mir die Doku vom XPort so ansehe, sieht es für mich ja eher so 
aus, als wäre er eher für die Steuerung meines Embedded-Systems AUS 
dem (lokalen; weil kein DNS) Ethernet zugeschnitten. Bei mir wärs ja 
quasi genau das Gegenteil.


Liebe Grüße und herzlichen Dank für eure Hilfe ;)
- Manuel W.

von Manuel W. (manuel_wagesreither)


Lesenswert?

Guten Morgen!

Ist es sehr unhöflich wenn ich den Thread wieder hoch hole?

Mich wundert es, dass keiner Antwortet. Der XPort ist ja nun nicht 
gerade unbekannt.

von Michael S. (michael-s)


Lesenswert?

Hallo,

an sich ist ja zwischen XPORT und XPORT direct kein allzu großer 
Unterschied. Der Direct hat allerdings kein Web-Interface, wenn ich mich 
richtig erinnere.

Allerdings: Wie möchtest Du denn die HTTP-Anfrage an das Internet 
senden? Kann der XPORT nicht nur Verbindungen entgegennehmen, und keine 
(als Client) herstellen?!

von Rahul, der Trollige (Gast)


Lesenswert?

>Der XPort ist ja nun nicht gerade unbekannt
Das vielleicht nicht, aber der Unterschied zwischen den beiden wohl. Ich 
kenne nur den XPORT, dass es davon noch andere gibt (ausser der 
RS485-Variante), hätte ich nicht gedacht.

>Kann der XPORT nicht nur Verbindungen entgegennehmen, und keine
>(als Client) herstellen?!
Es sollte möglich sein, über die IP an einen bestimmten Port eine 
Verbindung zu anderen Webdevices herzustellen. So funktioniert es 
zumindest mit der Telnet-Verbindung zwischen zwei XPORT.
(Oder ging das gar nicht?)
Da er auch UDPs verschickt, sollte es möglich sein...
Allerdings müsste man dann die Kommunikation (HTTP-Request falls 
nötig...) selber organisieren.
Hier im Forum gab es mal ein Projekt, bei dem der XPORT als Webserver 
benutzt wurde, aber nicht den integrierten benutzt hat, sondern die 
Website durch einen AVR erzeugt wurde.
Eigentlich müsste es gehen...

von Michael S. (michael-s)


Lesenswert?

> Es sollte möglich sein, über die IP an einen bestimmten Port eine
> Verbindung zu anderen Webdevices herzustellen. So funktioniert es
> zumindest mit der Telnet-Verbindung zwischen zwei XPORT.
> (Oder ging das gar nicht?)

Doch, das geht schon, eine reine Datenstromverbindung (also quasi ein 
Tunnel) zwischen 2 XPORTs... Aber das ist auch schon alles! Funktioniert 
afaik allerdings auf UDP-Basis.
Ansonsten kann man direkt vom XPORT aus (soweit mir bekannt) keine (!) 
Verbindungen als Client aufbauen. Wie denn auch, die Daten vom RS232 
werden ja einfach nur 1:1 durchgereicht, wo sollte man denn überhaupt 
ein Kommando (à la "TCP-Connect nach IP a.b.c.d Port x") los werden?!


> Hier im Forum gab es mal ein Projekt, bei dem der XPORT als Webserver
> benutzt wurde, aber nicht den integrierten benutzt hat, sondern die
> Website durch einen AVR erzeugt wurde.

Das wiederum ist ja gar kein Problem. Dabei wird ja ein Connect zu (!) 
dem XPORT hergestellt, der dann als Server antwortet. Da der XPORT die 
Daten vom seriellen Port einfach 1:1 durchreicht, kann man natürlich 
ohne Weiteres einen HTTP-Server auf dem uC implementieren...

michael

von Rahul, der Trollige (Gast)


Lesenswert?

>Funktioniert afaik allerdings auf UDP-Basis.
Das würde ich nicht unterschreiben...
UDP ist ja "Fire and forget", ohne Rückmeldung wie bei TCP/IP.

Mal aus dem Wikipedia kopiert:
"Verbindungsaufbau und -abbau
Ein Webserver, der seinen Dienst anbietet, generiert einen Endpunkt mit 
der Portnummer und seiner IP-Adresse. Dies wird als passive open oder 
auch als listen bezeichnet.

Will ein Client eine Verbindung aufbauen, generiert er einen eigenen 
Endpunkt aus seiner Rechneradresse und einer eigenen, noch freien 
Portnummer. Mit Hilfe eines ihm bekannten Ports und der Adresse des 
Servers kann dann eine Verbindung aufgebaut werden. Eine TCP-Verbindung 
definiert sich immer aus:

Quell-IP-Adresse
Quell-Port
Ziel-IP-Adresse
Ziel-Port
Während der Datenübertragungsphase (active open) sind die Rollen von 
Client und Server (aus TCP-Sicht) vollkommen symmetrisch. Insbesondere 
kann jeder der beiden beteiligten Rechner einen Verbindungsabbau 
einleiten.

Während des Abbaus kann die Gegenseite noch Daten übertragen, die 
Verbindung kann also halb-offen sein."

Aus dem XPORT-User Guide:
Seite 10:
"Capabilities:
...
connects devices through a TCP data channel or through a Telnet 
connection to computers or another device server..."

Man muß ihm also "nur" einen TCP-Stack an der serielle bereitstellen, 
der die Kommunkation mit einem Server aufbaut...
Ich forsche mal weiter.

von Michael S. (michael-s)


Lesenswert?

Naja gut, aber wie soll ich dann dem XPORT sagen, wohin er connecten 
soll?
Wenn er einmal läuft, kann ich ja über RS232 keine Kommandos abgeben.
Im Handbuch / Integration Guide, ... steht auch nichts zu dem Thema.
Mit dem XPORT AR geht das, klar, da ist ja auch ein RTOS drauf. Das SDK 
kostet allerdings mehrere 1kEUR...

von Rahul, der Trollige (Gast)


Lesenswert?

>Wenn er einmal läuft, kann ich ja über RS232 keine Kommandos abgeben.
Zauberwort ist IMHO "Connect Mode" (Seite 43 im UG).

von Michael S. (michael-s)


Lesenswert?

Stimmt... hab ich irgendwie bisher immer übersehen... Das UG sagt 
folgendes:



Manual Connection Attempts to connect when directed by a command string
received from the serial port. The first character of the command
string must be a C (ASCII 0x43), and the last character must be
either a carriage return (ASCII 0x0D) or a line feed (0x0A). No
blanks or space characters may be in the command string.
Between the first and last command string characters must be a
full or partial destination IP address and may be a destination
port number.
The IP address must be in standard decimal-dot notation and
may be a partial address, representing the least significant 1, 2,
or 3 bytes of the remote IP address. The period is required
between each pair of IP address numbers.
If present, the port number must follow the IP address, must be
presented as a decimal number in the range 1-65535, and must
be preceded by a forward slash (ASCII 0x2F). The slash
separates the IP address and the port number. If you omit the
port number from a command string, the internally stored remote
port number starts a connection.
If a partial IP address is presented in a command string, it is
interpreted to be the least significant bytes of the IP address and
uses the internally stored remote IP address to provide the most
significant bytes of the IP address. If the IP address entered is
0.0.0.0/0, the device server enters Monitor Mode.
For example, if the remote IP address already configured in the
unit is 129.1.2.3, then an example command string would be
C3/7. (This would connect to 129.1.2.3 and port 7.) You may
also use a different ending for the connection string. For
example, C50.1/23 would connect you to 129.1.50.1 and port 23.

von Rahul, der Trollige (Gast)


Lesenswert?

>Stimmt...
Danach muß man doch "nur noch" das HTTP-Request orgnisieren, oder?

(Seit einem Jahr oder noch länger habe ich einen XPORT und bin immer 
noch nicht zum "Spielen" gekommen! Grrr...)

von Michael S. (michael-s)


Lesenswert?

Ja, das stimmt... und für ein ganz einfaches HTTP-REQ reicht ja dann 
eigentlich ein Connect zum Server, auf Port 80 (z.B.), und das senden 
von "GET /".... Dann liefert der Server die Standardseite (meist 
index.htm) zurück...

michael

von Hartmut (Gast)


Lesenswert?

Hallo Michael und rahul,

falls es noch aktuell ist:
Das mit dem HTTP-Request geht einigermassen problemlos, man kann zu 
jedem beliebigen Serber eine TCP-Verbindung auf Port 80 aufbauen, und 
ein GET.... absetzen und die Antwort empfangen. Man muss nur im 
Command-Mode sein und das ganze über die AT-Komandos machen. Und man 
muss immer IP-Adressen verwenden, d.d. xxx.xxx.xxx.xxx . Soweit kein 
Problem.

Schwieriger wird es, wenn man an www.myserver.de senden will.
Dann muss man erst mal einen DNS-Request absetzen. Das DNS-Protokoll 
scheint nicht allzu kompliziert zu sein, aber man muss man an den 
DNS-Server ein UDP-Telegramm schicken, das obendrein noch binäre Daten 
enthält. Und hier sehe ich nicht mehr klar.

Problem 1: wie finde ich meinen DNS-Server heraus?
Ich habe meinen XPort auf DHCP eingestellt, er bezieht also seine 
IP-Adresse und das Standardgateway von meinem Router. Ich vermute, dass 
der Router auch als DNS-Server (oder zumindest als Proxy) fungiert, und 
würde also dorthin erst mal die DNS-Anfragen schicken. Ganz sicher bin 
ich mir aber nicht. Die Gateway-Adresse kann (seriell) man aus dem Xport 
auslesen, wenn man ihn vorübergehend in dem "Monitor-Mode" bringt.

Problem 2:
Funkrioniert der Verbindungsaufbau auch für UDP-pakete? Und auch für 
UDP-Pakete, die evtl. binäre Daten enthalten? Bisher erscheint mir das 
ganze nur für TCP-Verbindungen sinnvoll zu sein (connect -> verbindung 
wird aufgebaut, Datenübertragung hin und her, pause/+++/ath --> 
verbindung wird abgebaut)
Habt ihr schon Erfahrungen gemacht?

Hartmut



von McDorf (Gast)


Lesenswert?

Also wenn ich das richtig verstanden habe, muss man nur im 
Device-Installer unter "Active Connection" dann "Manual Connection" 
auswählen.

Im µC schickt man einmalig das Kommando "C192.168.1.1\n" (irgendeine IP) 
über den UART an den XPort und damit sollte dann schon eine 
TCP-Verbindung mit dem Server aufgebaut sein. Will man jetzt eine Seite 
abfragen braucht man noch ein HTTP-Request der Form "GET 
/de_DE/de_index.php HTTP/1.1\nHost: 192.168.1.1\n" und sofort sollte die 
entsprechende Seite am UART ankommen.

Leider klappt das bei mir so nicht. Ich bekomme nur eine verstümmeltes 
Echo meiner Anfrage. Hat jemand eine Ahnung was noch fehlen könnte?

von R.Pablo (Gast)


Lesenswert?

Hallo Leute,
ich habe eine frage über der XPort: kann man der XPort als Client 
benutzen?
wenn ja wie kann ich konfiguriert so das er der role des Client 
übernimmt.
Danke
Pablo

von Trexis5 (Gast)


Lesenswert?

Hallo,

genau das brauche ich auch um einen Wechselrichter abzufragen:
-----------
Im µC schickt man einmalig das Kommando "C192.168.1.1\n" (irgendeine IP)
über den UART an den XPort und damit sollte dann schon eine
TCP-Verbindung mit dem Server aufgebaut sein.
-----------

Muss ich dann schicken vom µC aus:
Print "C192.168.1.123/10001"
Print "meinen Zeichensatz"

Ist dann die Verbindung immer noch offen?
Muss ich dann wieder
Print "D192.168.1.123/10001"
schicken um die Verbindung zu schließen um was empfangen zu können?

Danke.

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.