Nur TCP/IP bei Libnodave und Ubuntu Linux

Alexandr

Level-1
Beiträge
28
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin.

Hardware: S7-300 313(C), CP 343-1 Lean.

Betriebsystem: Ubuntu 9.10

Und zwar ich möchte mit Libnodave arbeiten, aber nur über TCP/IP, also keine MPIAdapter. Das heisst ich brauche die Dateien testISO_TCP.c, testISP_TCPload.c, nodavesimple.h, openSocket.h

1) Kann ich dadurch den kompleten Zugriff auf der SPS haben, natürlich wenn ich die Programme bearbeite.
2) Heisst das dass ich die restlichen Dateien wegwerfen kann? Wenn ja, können nicht manche Funktionen da nützlich sein?

Erstmal nur die zwei Fragen. Danke im voraus.
 
Einfacher Test

Mir ist nicht so ganz klar, wo Dein Problem ist aber ich versuche mal eine Antwort:

Ich gehe davon aus, dass Du in C arbeiten möchtest und einen Compiler und Linker dafür hast (GNU Linux?).

Dann mach eine kleine Applikation dazu, binde die gewünschten Files ein und Übersetze und Linke das Ganze.

Wenn der Compiler sich beschwert, fehlen Dir wahrscheinlich weiter *.h File in Deinen Include Anweisungen.

Wenn der Linker sich nach erfolgreichem Compiler Lauf meldet, dass ihm zum Auflösen der Verweise was fehlt, dann musst Du die Files mit den fehlenden Verweisen ebenfalls compiliert anbieten.

Und jetzt Werbung: Ich habe unter "Werbung und Produktneuheiten" hier im Forum vor ein paar Tagen einen Kurs zur Programmierung der Ankopplung angeboten, allerdings C# und .NET.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Am einfachsten ist folgende Vorgehensweise:
Wenn du libnodave heruntergeladen und entpackt hast, in das Verzeichnis wechseln und
Code:
make all
make install
Mit "make all" wird die libnodave.so (Shared Object) erzeugt.
Mit "make install" wird diese Datei zusammen mit der nodave.h in dein include (/usr/include) und Bibliotheks-Verzeichnis (/usr/lib) kopiert.

Jetzt schreibst du dein C-Programm, includierst "nodave.h". Damit machst du dem Compiler die Funktionen in der libnodave Shared library bekannt.

Mal angenommen du hast eine einzelne C-Datei "my_libnodave_test.c" kannst du diese mit:

Code:
gcc -Wall -DLINUX -DDAVE_LITTLE_ENDIAN my_libnodave_test.c -lnodave -o my_libnodave_test
Übersetzen.
Mit dem Schalter "-lnodave" sagst du dem Linker dass er die Funktionen in der Bibliothek libnodave.so findet.
Wenn mehr als eine Datei übersetzt und gelinkt werden mache ich das immer mit einem kleinen makefile.

Wenn du das so machst, kannst du so gesehen die restlichen Dateien von libnodave löschen.
 
Zuletzt bearbeitet:
Moin.

Hardware: S7-300 313(C), CP 343-1 Lean.

Betriebsystem: Ubuntu 9.10

Und zwar ich möchte mit Libnodave arbeiten, aber nur über TCP/IP, also keine MPIAdapter. Das heisst ich brauche die Dateien testISO_TCP.c, testISP_TCPload.c, nodavesimple.h, openSocket.h

1) Kann ich dadurch den kompleten Zugriff auf der SPS haben, natürlich wenn ich die Programme bearbeite.
2) Heisst das dass ich die restlichen Dateien wegwerfen kann? Wenn ja, können nicht manche Funktionen da nützlich sein?

Erstmal nur die zwei Fragen. Danke im voraus.

Hallo
zu 1): Ja, soweit eben die Funktionen vorhanden sind. Bspw. lässt sich mit testISP_TCPload.c' natürlich kein Programm wie in Step7 erstellen :rolleyes:

zu 2): Im Prinzip ja, das Meiste davon. Etwas fummelig ist jedoch immer das zugehörige 'makefile' mit entsprechend einzukürzen damit es noch durchläuft. Nach einigen Versuchen benötigt man aber wirklich nur noch 3 oder 4 Dateien 'of all'

>>> Wenn ja, können nicht manche Funktionen da nützlich sein?
Das ist eher 'philosphisch' - nämlich auf welche Header man sich stützt. 'NoDaveSimple.h' ist nicht so unbedingt das 'Ding' für S7-300 :-( und wenn ich mich richtig erinnere war für den Lean-Cp eh nodave.h & nodave.c von Nöten. Ist aber schon ewig her wo ich mit den Leans werkelte.

Alle anderen Dateien (eg. setport.c) besitzen erst wieder Relevanz beim einbinden von Schnittstellen - da gibts so einige denkbare Konstrukte wo die ganz nützlich sind mit (in vielleicht auch leicht geänderter Form) mit zu benutzen und einzubinden.

Für mich war immer die dickste Hürde in Minimalkonfiguration das Makefile zusammenzubekommen - wenn man das raushat sieht man ja auch was alles über ist:rolleyes:

Gruss
tobias
 
Danke erstmal für eure Antworten.
Noch eine Frage.
Ich arbeite in Linux mit C. Ich soll auch später mit PHP und SQLite arbeiten. Ich muss die Prozessdaten von der SPS auslesen, in Datenbank abspeichern im Netz ausgeben.
Wir bleiben erst mal bei C. Das mit dem make und make install habe ich schon lange gemacht. Die Makefile funktioniert bei mir auch. Ich kann sogar mit dem testISO_TCP.c und IP Adresse meine SPS in Stop und Run setze. Ich mochte die datei isotest4.c testen. In der accepter.c sind die ganze funktionen definiert wie z.B. bind() und listen(). Dort habe ich meine IP Adresse eingegeben. In der Konsole gebe ich die Datei und 80 für port 80. Dann kommt den folgenden Text raus:

CP-Simulation for ISO over TCP
Assuming rack 0, slot 2 for simulated device. There's currently no way to change that.

Main serv: port: 80
Main serv: Accepter pipe fd: 4
Main serv: about to select on 3
accepter.cAccepter : My pipe is:4
accepter.cAccepter : port 80
accepter.cAccepter : setsockopt Success
accepter.cAccepter : bind Cannot assign requested address
accepter.cAccepter : listen: Cannot assign requested address
accepter.cAccepter : before accept

Warum bei bind kommt die Meldung "Cannot assign requested address" raus. Die Adresse ist korrekt und gültig.

Bitte um Hilfe.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
isotest4.c ist KEIN Programm, um mit einer S7 zu kommunizieren, sondern um eine S7 teilweise zu simulieren.
Damit es läuft, muß das Program das Recht haben, den Port [port]zum Hören zu öffnen. Für Ports <1000 braucht es root-Rechte.
Wenn du mit einer SPS sprechen willst, brauchst du testISO_TCP.
Lerne erst mal die fertige Version zu benutzen.
Lerne sie zu kompilieren.
Ändere sie, wenn du willst.
Schreiben dein eigenes Programm.
 
Wenn hier grad das Thema 'Linux-Derivate' auftaucht ...

Hallo
vielleicht passt es hier hin, vielleicht auch nicht. Ubuntu hat da nur insofern zu mit zu tun, weil es für den Prozessor auf den ich hinausmöchte für einen Ubuntu-PC ein fertiges Image für die Entwicklungsumgebung gibt (arv32-linux-gcc ....)
Ich versuche schon seit gut 1 Jahr (wie üblich erstmal erfolglos ...) für den AP7200(0) im Evalution Board des NGW1000 des AVR32 eine lauffähige 'testISO_TCP' im Verbund des NGW1000 mit einer CPU224XP zu basteln.
Der erste dicke Hänger war (prinzipbedingt der AVR Entwicklungsumgebung) das riesen Problem überhaupt eine auf dem PC lauffähige GCC-AVR32-Version zu erstellen. Die gelieferte in Ubuntu tat/tut es nicht - aber einem Selbstbaukonstrukt mit SuSe10.3 gelang es dann lauffähige Programme auf dem NGW1000 zu 'fabrizieren'.
In vielen hunderten Vergleichen mit den Programmen (und Kompilaten) der typischerweise bei uns benutzten ARM-DilNetPC's gelang es nach und nach auch aus libnodave zur CPU224XP via RS485-PPI kommunizierende Progrämmchen zusammenzupfriemeln. Bei dto. über TCP/Ethernet ( via CP243-1xx) bleibt das NGW1000 jedoch üblicherweise stecken und brät dann im eigenen Saft ...
... allerdings: Manchmal gehts auch. Jedoch jedesmal, wenn, irreversibel anders
a) Gibt es noch jemanden der sich zufällig so ganz nebenbei mit dem NGW bzw. Grashopper und 'l_dave' beschäftigt ?
b) Da NGW und Grasshopper recht günstige und sehr leistungsstarke Linux-Embeddeds und wohl auch full_open_Source sind, wäre das vielleicht auch ein schönes Thema es einmal im (seit gut einem Jahr kostenlos erscheinenden) 'Embedded-Journal' vorzustellen. Ich denke aber dazu sollte es wirklich funktionierende Beispiele geben und letztendlich sollte 'Zottel' das entscheiden. Weil ich mich gerade freue mal wieder druckfrische Beiträge von dir entdeckt zu haben, hänge ich das mal so an diesen Thread an :)
Grüsse
tobias
 
Zurück
Oben