Forum: Mikrocontroller und Digitale Elektronik Kommunikation Labview zu PIC32 via Ethernet


von Florian H. (skyloop)


Lesenswert?

Hallo,

ich habe es geschafft den TCP/IP Stack von Microchip in Betrieb zu 
nehmen.
Um eine Verbindung zwischen LAbview und dem PIC32 aufbauen brauche ich 
eine feste IP und einen festen PORT.

Die feste IP habe ich aber der PORT ist mir nicht bekannt.

Hat jemand schonmal in irgendeiner Weise eine Verbindung aufgebaut von 
Labview zum PIC32?

Ich will einfach nur einen String an eine feste IP+Port verschicken. 
Diese will ich mit dem PIC aus dem Buffer lesen.

Jemand Erfahrungen??
Ich brauche eine kleine Starthilfe....

von Florian H. (skyloop)


Lesenswert?

Hat keiner einen Tipp...stehe gerade auf dem Schlauch

von Frank K. (fchk)


Lesenswert?

Suche Dir einen beliebigen Port aus, der auf Deinem PIC32 noch frei ist. 
Die Portnummer ist eine 16 Bit Zahl, die lokal auf dem Host einzigartig 
sein muss, dh keine zwei Sockets können einen gemeinsamen Port 
benutzten. Weitere Bedingungen gibts nicht.

fchk

von Rüdiger (Gast)


Lesenswert?

Ich komme nicht weiter mit meinem Problem. Ich habe es nicht geschafft 
eine einfache Kommunikation Zwischen Labview und dem PIC32 herzustellen.

Ich bin in der Lage auf eine Bestimmte IP und Portnummer Strings zu 
schicken.

Ich weiß aber nicht wo ich im PIC sehen kann ob die Daten angekommen 
sind.
Ich weiß nicht in welchen Buffer es geschrieben wird.

Ich benutzte MPLAB 8.63
den neusten C32-Compiler und
den Microchip Solutions v2010-10-19 TCP Stack

der Code ist für mich als Anfänger zu kompliziert und ich habe da noch 
nicht den richtigen Faden an dem ich mich orientieren kann.

Habe die Webseminare von Microchip mitgemacht bezüglich Ethernet.
Diese erklären nur, wie man eine Website aufbauen kann und diese 
verändert.

Das bekomme ich hin, aber ich soll/muss ohne Webserver arbeiten..


Freue mich über jede HILFE

von Rüdiger (Gast)


Lesenswert?

Ich möchte einfach einen Beliebigen String verschicken.

Diesen möchte ich mit dem PIC32 abfragen über TCP...

von Frank K. (fchk)


Lesenswert?

Rüdiger schrieb:

Schau Dir in der Demp App GenericTCPServer.c an - oder wenn Du damit 
nicht klar kommst, BerkeleyTCPServer.c. Das ist das passende Gerüst für 
Deine Anwendung. Natürlich musst Du den in der TCPConfig.h per #define 
aktivieren.

fchk

von Jakob (Gast)


Lesenswert?

Falls Du vom uP zum Computer einen String übertragen willst, musst Du am 
uC einen Server starten.

Schau einmal in LabVIEW zwei Dateien an:

C:\Program Files\National Instruments\LabVIEW 2009\examples\comm\TCP

und da

Simple Data Server.vi
Simple Data Client.vi

Damit kannst Du am eigenen Rechner der Server starten und mit dem Client 
empfangen. Besonderheit: Die ersten 4 Bytes stellen die Stringlänge dar.
Das musst Du am Mikrochip auch so machen.

von Rüdiger (Gast)


Lesenswert?

Ich finde das ist echt super nett von euch:-)
Danke für die Antworten

Jakob schrieb:
> Schau einmal in LabVIEW zwei Dateien an:
>
> C:\Program Files\National Instruments\LabVIEW 2009\examples\comm\TCP
>
> und da
>
> Simple Data Server.vi
> Simple Data Client.vi

Ich will von Labview aus Strings übertragen. Dazu muss ich dann auf 
Labview
das Simple Data Server.vi starten. Und den PIC32 muss ich als Clienten 
einstellen.

Labview seitig ist alles klar soweit..

Jetzt muss ich den PIC32 noch einrichten.

Frank K. schrieb:
> Schau Dir in der Demp App GenericTCPServer.c an - oder wenn Du damit
> nicht klar kommst, BerkeleyTCPServer.c. Das ist das passende Gerüst für
> Deine Anwendung. Natürlich musst Du den in der TCPConfig.h per #define
> aktivieren.

Ich schaue mir gerade den GenericTCPServer.c an und den 
BerkeleyTCPServer.c

von Rüdiger (Gast)


Lesenswert?

Frank K. schrieb:
> Natürlich musst Du den in der TCPConfig.h per #define
> aktivieren.

ich habe am Anfang von TCPConfig.h
folgende Änderung vorgenommen:

#define BerkeleyTCPServer.c

ist das so richtig`?

von Frank K. (fchk)


Lesenswert?

Rüdiger schrieb:
> Frank K. schrieb:
>> Natürlich musst Du den in der TCPConfig.h per #define
>> aktivieren.
>
> ich habe am Anfang von TCPConfig.h
> folgende Änderung vorgenommen:
>
> #define BerkeleyTCPServer.c
>
> ist das so richtig`?

Wo hast Du das gelesen?

Hast Du Dir das GenericTCPServer.c KOMPLETT angeschaut?

Hast Du verstanden, wofür diese Zeile ziemlich am Anfang des Codes da 
ist?

#if defined(STACK_USE_GENERIC_TCP_SERVER_EXAMPLE)

Kleiner Tipp: Schau mal, wo dieses Symbol noch verwendet wird...

fchk

von Rüdiger (Gast)


Lesenswert?

im MainDemo.c ist folgende Definition:

                #if defined(STACK_USE_GENERIC_TCP_SERVER_EXAMPLE)
    GenericTCPServer();
    #endif

und in der Datei TCPip.h ist die Definition nochmal
          #if defined(STACK_USE_GENERIC_TCP_SERVER_EXAMPLE) ||

auch hier habe ich die Definition nochmal gefunden.
                 TCPIPConfig PIC32 Internal Ethernet.h


Dann habe ich noch in der Bemerkung vom Stack Version gefunden:
28.Added GenericTCPServer.c example file to complement 
GenericTCPClient.c.  The server is enabled by defining TCPIPConfig PIC32 
Internal Ethernet.h in
TCPIPConfig.h.


Ich muss also in der TCPIPConfig.h TCPIPConfig PIC32 Internal Ethernet.h 
aktivieren..

von Rüdiger (Gast)


Lesenswert?

OK also in der Demp App sind verschiedene Beispiele, wie 
BerkeleyTCPClientDemo, BerkeleyTCPServerDemo, GenericTCPServer, etc.

Ich muss dem Pic32 sagen, welches von diesen Examples ich verwenden 
will. In meinem Fall muss ich GenericTCPServer aktivieren..

von Frank K. (fchk)


Lesenswert?

Rüdiger schrieb:
> OK also in der Demp App sind verschiedene Beispiele, wie
> BerkeleyTCPClientDemo, BerkeleyTCPServerDemo, GenericTCPServer, etc.
>
> Ich muss dem Pic32 sagen, welches von diesen Examples ich verwenden
> will. In meinem Fall muss ich GenericTCPServer aktivieren..

genau

von Rüdiger (Gast)


Lesenswert?

Ich glaube ich habe es gefunden..

in der Datei TCPIPConfig PIC32 Internal Ethernet.h mache ich die 
Definitionen.

Alles, was ich für mein Projekt nicht brauche, schmeiße ich einfach aus 
der TCPIPConfig PIC32 Internal Ethernet.h raus (Kommentarzeile aus dem 
#define machen). Kann mich bitte jemand korrigieren, falls ich etwas 
vergesse!!??


Ich denke ich brauche nur:
#define STACK_USE_ICMP_SERVER    // Ping query and response capability
#define STACK_USE_ICMP_CLIENT   // Ping transmission capability
#define STACK_USE_GENERIC_TCP_SERVER_EXAMPLE
#define STACK_USE_DNS
#define STACK_USE_NBNS


OK. Es hat bisschen lange gedauert:-((

Frank kannst du mir bitte, sagen wie ich jetzt weiter vorgehe??

von Rüdiger (Gast)


Lesenswert?

Der "Michrochip Ethernet Device Discoverer" findet den PIC32 nicht?!
Muss ich meinem PC eine bestimmte IP vorgeben?
Bisher hat sich der PIC die IP Adresse vom DHCP geholt. Muss ich den 
auch aktivieren?

Habe
#define STACK_USE_AUTO_IP    // Dynamic link-layer IP address automatic
                                configuration protocol
aktiviert, aber das hat nicht geholfen..

von Frank K. (fchk)


Lesenswert?

Rüdiger schrieb:
> Der "Michrochip Ethernet Device Discoverer" findet den PIC32 nicht?!
> Muss ich meinem PC eine bestimmte IP vorgeben?

> Bisher hat sich der PIC die IP Adresse vom DHCP geholt. Muss ich den
> auch aktivieren?
Wenn Du weiterhin DHCP nutzen willst, musst Du wohl oder übel auch das 
entsprechende Protokoll hineinnehmen.

>
> Habe
> #define STACK_USE_AUTO_IP    // Dynamic link-layer IP address automatic
>                                 configuration protocol
> aktiviert, aber das hat nicht geholfen..

Klar. Das wars nicht.

#define STACK_USE_ANNOUNCE        // Microchip Embedded Ethernet Device 
Discoverer server/client

ist das, was Du suchst.

fchk

von Rüdiger (Gast)


Lesenswert?

Hallo nochmal,

ich habe das übersehen mit

#define STACK_USE_ANNOUNCE      // Microchip Embedded Ethernet Device
Discoverer server/client

Hatte mich gewundert, warum ich eine Verbindung aufbauen kann ohne, dass 
es im Discoverer gezeigt wird.


Ich habe nun den GenericTCPServer eingebaut. Bin gerade am suchen wie 
ich einen einfachen String mit dem PIC verschicke..

von Florian H. (skyloop)


Lesenswert?

Ich habe alles genauso gemacht wie in der Beschreibung "how to run the 
Demo" vom GenericTCPServer.

Im Dos-Fenster gebe ich ein Telnet 169.254.1.1 9760 und es öffnet sich 
ein Telnet Fenster.
Hier gebe ich Strings ein und empfange die Echos..


Die Übertragung funktioniert immer noch nicht:(

Wie verschicke ich denn einen String?
Ich nehme an im GenericTCOServer.c


PORT ist bekannt: Default 9760
IP ist bekannt:

Aber wie verschicke ich etwas???

Bitte um Hilfe

von Frank K. (fchk)


Lesenswert?

Florian Hinck schrieb:
> Ich habe alles genauso gemacht wie in der Beschreibung "how to run the
> Demo" vom GenericTCPServer.
>
> Im Dos-Fenster gebe ich ein Telnet 169.254.1.1 9760 und es öffnet sich
> ein Telnet Fenster.
> Hier gebe ich Strings ein und empfange die Echos..

genau. Funktioniert also.

> Die Übertragung funktioniert immer noch nicht:(
>
> Wie verschicke ich denn einen String?
> Ich nehme an im GenericTCOServer.c

Genau.

> Aber wie verschicke ich etwas???

Die API-Beschreibung befindet sich in der Datei TCP Stack Help.chm

Selber lesen macht schlau.

Versuche, die Vorgänge im Demo TCP Server zu verstehen und sie an Deine 
Bedürfnisse anzupassen.

fchk

von Florian H. (skyloop)


Lesenswert?

Ich danke dir Vielmals Frank!!

Frank K. schrieb:
> Die API-Beschreibung befindet sich in der Datei TCP Stack Help.chm

Ich nutze das TCP Stack Help File.

Unter Demo Information
      Available Demos
      Generic TCP Server
steht genau das selbe wie auch in der Beschreibung von 
GenericTCPServer.c.

Gibt es im Stack help noch mehr infos, die ich übersehen habe???

von Frank K. (fchk)


Lesenswert?

Florian Hinck schrieb:

> Gibt es im Stack help noch mehr infos, die ich übersehen habe???

ja. z.B. die TCP-Funktionen (TCPPutArray(), TCPPutString() und 
Konsorten).

Wie gesagt: versuche, anhand des Quellcodes und der API-Funktionen die 
Funktionsweise des Generic TCP Servers zu verstehen, notfalls auch mit 
Breakpoints und Debugausgaben auf die serielle Schnittstelle. Da musst 
Du jetzt in Eigenregie durch, sonst lernst Du nix.

fchk

von Florian H. (skyloop)


Lesenswert?

Das ist zwar gemein:-(
Aber du hast recht. Ich lese mich gerade durch das Stack Help File.
Hoffe ich bekomme es hin

von Florian H. (skyloop)


Lesenswert?

Ich habe es geschafft per Labview einen String zu verschicken und mit 
dem PIC auszulesen:-)) Das ist schon erfreulich...Danke dir vielmals 
Frank

Jedoch habe ich es bislang nicht hingebekommen einen String "Test" zu 
verschicken. Da muss ich heute Abend nochmal gucken.

Ich habe mir mit den Breakpoints die einzelnen Variablen angesehen und 
weiß nun einigermaßen, wie das Programm aufgebaut ist.
Jedoch ist mir noch nicht bekannt, woher MPLAB die Werte für die 
einzelnen Variablen hernimmt.

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.